การทำ Load testing นั้นมันไม่ใช่เรื่องง่ายๆ เลย
บ่อยครั้งที่มักเข้าใจกันว่า ก็เพียงแค่

  • มีเครื่องมือ
  • สร้างและบันทึกขั้นตอนการทดสอบงาน
  • ทำการทดสอบ

ถ้าคุณยังมีแนวคิดเพียงเท่านี้อยู่
ขอบอกได้เลยว่า คุณกำลังเสียเวลาไปกับสิ่งที่ไร้ค่า
ดังนั้นคุณควรเปลี่ยนแนวคิดใหม่ดังนี้

Load testing  คืออะไร

จาก Wikipedia อธิบายว่า
เป็น process สำหรับการวัด response time ในการทำงานของระบบ
ที่อยู่ภาพใต้การใช้งานรูปแบบต่างๆ ทั้ง แบบปกติ และ สูงตามที่คาดหวังไว้
ซึ่งจะทำให้เรารู้ว่าความสามารถสูงสุดในการทำงานของแต่ละส่วนเป็นเท่าไร
ส่วนไหนบ้างที่จะเกิดปัญหาขอขวดของระบบ (Bottleneck)
ส่วนไหนที่ส่งผลให้ระบบงานทำงานได้ช้าลง

ก่อนที่คุณจะทำ Load testing  จำเป็นจะต้องคิดก่อนว่าต้องการที่จะทดสอบอะไร

Screen Shot 2557-09-28 at 11.19.45 AM

ส่วนที่สนุกก็คือ คุณต้องการหาปัญหาคอขวดอะไร ตรงไหน ?
ซึ่งประกอบไปด้วยส่วนต่างๆ ดังนี้

1. ปัญหาคอขวดที่ client
ใช้สำหรับการตรวจสอบว่า แต่ละ client สามารถส่งได้สูงสุดกี่ request
ใช้สำหรับดูว่าเครื่องมือที่ใช้งาน สามารถสร้าง request ได้มากดท่าไรต่อเครื่อง

2. ปัญหาคอขวดที่ network
เช่น ถ้ามีการส่ง connection มาจำนวนมากๆ มันจะไปถึง server หรือไม่

3. ปัญหาคอขวดที่เครื่อง server
เช่น จำนวนการเปิดไฟล์ เป็นต้น ทำให้เราสามารถconfiguration เพิ่มเติมได้

4. ปัญหาคอขวดที่ระดับ application server
เช่นตรวจสอบการจัดการ thread pool ซึ่งถ้ามันช้า ส่งผลทำให้ request ต่างๆ
ที่ส่งมารอทำงาน ซึ่งเป็นสิ่งที่ไม่ดีแน่นอน หรือพวก connection pool ของสิ่งที่ต่างๆ ที่ใช้งาน

5. ปัญหาคอขวดที่ระดับ database
เช่น ตรวจสอบการใช้งาน CPU และ response time ของ database server
รวมทั้งดูด้วยว่ามี slow query เยอะบ้างหรือไม่
การ configuration ที่ผิดพลาดอาจจะก่อให้เกิดปัญหา หรือ server มีขนาดเล็กไป ก็เป็นไปได้

6. ปัญหาคอขวดที่ระดับ application
ในระดับ application เป็นสิ่งที่ลำบากพอดู เพราะว่า เราต้องจัดการเอง
แต่สิ่งที่ขอแนะนำก็คือ

  • ระบบงานควรมีระบบ logging การทำงานที่ดี
  • ระบบงานควรมีระบบ application monitoring ไม่ใช้ monitoring ของ server นะ แต่เป็นส่วนที่ monitoring การทำงานของ application จริงๆ

เพื่อทำให้รู้ว่าขั้นตอนการทำงานส่วนไหนที่ใช้เวลาการประมวลผลนาน
หรืออาจจะมาจาก framework ที่นำมาใช้งานก็เป็นไปได้
หรืออาจจะมาจาก code ที่มีความซับซ้อน หรือมีค่า Big O notation ที่สูงมากๆ

ในการทดสอบนั้น ควรต้องทำการ monitoring ส่วนต่างๆ ของระบบด้วยเสมอด้วย เช่น

  • การใช้งาน CPU
  • การใช้งาน Memory
  • การใช้งาน Disk I/O

เพื่อทำให้เราเข้าใจว่าจะเกิดอะไรขึ้น เมื่อ server เกิดปัญหาขึ้นมา
ซึ่งเป็นปัญหาคอขวดในระดับ hardware

เมื่อพูดถึงจำนวน request ที่ใช้สำหรับทำ Load testing

ควรจะมีจำนวนที่เพียงพอ แน่นอนว่า request ต่างๆ คงไม่ถูกสร้างมากจากเพียง server เดียว
เนื่องจากการใช้งานจริงๆ ต้องมาจากเครื่องผู้ใช้งานจำนวนมาก
ดังนั้น การเข้าใจพฤติกรรมการใช้งานของผู้ใช้งานต่อระบบ
เป็นสิ่งที่สำคัญมากๆ เพื่อนำมาใช้สร้าง request เพื่อทดสอบระบบงาน

ดังนั้นเครื่องสร้าง request เพียงเครื่องเดียวไม่เพียงพออย่างแน่นอน
ควรมีการเตรียมเครื่องไว้จำนวนหนึ่ง เพื่อให้สามารถสร้าง request ได้จำนวนมากเท่าที่ต้องการ
ซึ่งเครื่องมืออย่างเดียวมันไม่เพียงพอนะครับ

ส่วนการวิเคราะห์ผลการทดสอบ

ส่วนใหญ่มักจะอ่านค่าต่างๆ จากเครื่องมือที่ใช้ทดสอบอย่างเดียว
ซึ่งเป็นวิธีการที่ผิดอย่างมากมาย
เพราะว่า ควรที่จะใช้เครื่องมือหรือจากระบบ monitoring อื่นๆ ประกอบการวิเคราะห์

ดังนั้นก่อนที่คุณจะทดสอบ

ควรระบุเป้าหมายก่อนเสมอว่ากำลังจะทดสอบอะไร เพื่อพิสูจน์อะไร ตรงไหน
ไม่ใช่เพียงแค่ใช้เครื่องมือเพื่อยิงระบบแล้วรอดูผลเท่านั้นนะครับ

Reference Website
Load testing
Load testing guideline