Kittipoom Rattanakavil
3 min readJan 10, 2019

Performance Test คืออะไร ทำไปทำไมกันนะ

สวัสดีครับ นี่เป็นบทความแรกที่ผมอยากลองเขียน เป็นบทความที่อยากลอง share ประสบการณ์จากงานที่เคยทำมานะครับ ^^

มาทำความเข้าใจกันซักเล็กน้อยกันดีกว่า (ผมจะอธิบายแบบไม่ลง Technical มากนะครับ ) การทำ Performance Test คือการทดสอบประสิทธิภาพของระบบ (แน่ละก็ชื่อ Performance นี่นา) ว่าแต่เราทดสอบมันไปเพื่ออะไรกันหนอ แล้วมันมีประโยชน์อย่างไงกันนะ มาเริ่มกันเลยดีกว่า …

ที่เราต้องทดสอบ Performance เพราะว่า เราจะได้รู้ว่า ณ วันที่เราเอา Application ของเราขึ้น Production ไปเราก็คงไม่อยากไปเสี่ยงตายเอาดาบหน้าใช่ไหมครับ ว่า เอ๊ะ ระบบเราจะล่มไหมนะ มันจะรองรับ Users ได้เพียงพอไหมนะ จะรองรับรายการที่เข้ามามากมายแบบคาดไม่ถึงไหมนะ แล้ว App เราจะรอดไหม หรือ ถ้าเราอยากลด hardware ของ server spec บน environment cloud เพื่อลด cost ค่าใช้จ่ายของระบบ สิ่งที่เราต้องทำก็คือการทำ Performance Test นี่ละครับ และอื่น ๆ ยังมีเหตุการณ์ต่าง ๆ อีกมากมายที่สามารถใช้การทำ Performance test มาช่วยตอบโจทย์ในแต่ละปัญหาได้

สิ่งที่ต้องคำนึงถึงเมื่อทำ Performance test

โดยการทำ Performance test นั้นผมขอยกตัวอย่างจากหัวข้อหลัก ๆ ก่อนนะครับ (อาจจะไม่ครบทุกหัวข้อของการทำ Performance test นะครับ ไม่งั้นจะยาวเกินไปหน่อย ^^)

ภาพจำลองการทำ Performance test เบื้องต้น

Smoke testing : คือการ test run load แบบน้อย ๆ เผื่อ prove Application ก่อนว่ามีความพร้อมก่อนที่จะสามารถรองรับ load เบื้องต้นได้ก่อนไหม ก่อนที่จะทำ load test จริง (สำหรับผมเหมือนการ verify test script , test scenario และ check ความพร้อมของ App ไปในตัวด้วย)

Load Test : คือการ test ตาม scenario ที่คิดว่าจะเกิดขึ้นจริงใน Production

Capacity Test : คือการ test หาจุดที่ Application สามารถรองรับได้ที่ Volume เท่าไหร่ แล้ว Application ของเรานั้นยังคงมีความ stable อยู่

Stress Test : คือการ test หาจุด Break point ของ Application เพื่อให้รู้ว่าเมื่อ Volume ที่เข้ามาถึง ณ จุดหนึ่งระบบเราเริ่มจะรองรับไม่ไหวแล้ว ( response time เริ่มช้า transaction ที่ response กลับไปหา client เริ่ม error เยอะขึ้น )

Availability Test : คือการ test ดูความ stable ของระบบอย่างต่อเนื่อง เช่น เราอาจจะจำลองการ test ของระบบของเราทำงานไปเรื่อย ๆ ประมาณ 4–8 ชั่วโมง แล้วดูว่า Application ของเราจะยังคง response ดีตามปกติอยู่หรือป่าว มีการคืน resource จาก server ที่ ok ไหม

ในบทความนี้ผมขอสมมุติเหตุการณ์ที่เกิดขึ้นจากการทำงานจริงนะครับ
มีความสงสัยมาจากฝากฟ้ามาว่า เอ… เราอยากลด Cost ค่าใช้จ่ายของระบบ เราสามารถลด hardware spec บน Cloud ได้ไหมนะ (งานเกิดทันทีเลยครับท่าน)

วิธีแก้โจทย์นี้คือการทำ Performance test นี่ละโดยเราจะทำอย่างไรได้บ้างมาลองดูกันครับ เริ่มต้นก่อนเลย
- ดู Monitor server resource ที่ Production ก่อนว่ามีการใช้งานอยู่เยอะมากไหม response time ช้าหรือป่าว ถ้า server resource ใช้งานอยู่เยอะมากมาย response ช้ามาก ก็จบงานได้เลยครับ คำตอบคือลดไม่ได้แล้ว อาจจะต้องเพิ่มด้วยซ้ำ แต่ถ้าดูแล้ว server resource ใช้งานไม่เยอะมาก response time ก็ ok ไม่ช้า ก็ลุยต่อเลยครับ

ถ้า server resource ใช้งานเหลือเท่านี้ก็บอกไปได้เลยครับว่าลด spec ไปมากกว่านี้ไม่ได้แล้ว อาจจะต้องเพิ่มด้วยนะเนี่ย

- Simulate scenario production สำหรับทำ Load Test (ให้ Simulate scenario จาก Peak hour transaction นะครับ)

ภาพตัวอย่าง Test scenario

- Create Environment สำหรับ Load Test อาจจะเริ่มจากทำ server size ให้เท่า Production หรือ ครึ่งนึงของ Production Spec ( ตัวอย่างนี้ขอเริ่มจาก sizing ครึ่งนึงของ Production ก่อนนะครับ

ภาพตัวอย่างการจำลอง environment hardware spec production

- เอา Scenario production มาทำการ Load Test ใน Environment ที่เตรียมไว้ และคอย Monitor ดู Response time , Server resource , TPS (Transaction per sec) ว่า Result ที่ได้ออกมารับได้ไหม

- ในกรณีที่ Result ออกมาไม่ Ok เราก็ปรับขยาย Size ของ server ให้เพิ่มขึ้นแล้วทำการ Load Test อีกครั้งไปจนเจอจุดที่รับได้ (Response time , server resource, TPS ได้ result ใกล้เคียงกับที่ Production เป็นอยู่)

- ในกรณีที่ Result ออกมา Ok แล้ว (Response time , Server resource , TPS เราอาจจะ Retest อีกครั้งนึงเพื่อ make sure result ของเราอีกที

Conclusion

จากตัวอย่าง ถ้าเราใช้ Cloud environment ที่ spec ใหญ่ ทุกเครื่อง แล้วถ้าเราสามารถลด spec production ได้ อาจจะเป็น 1/2 หรือ 3/4 ของ spec ที่ใช้อยู่ได้ก็สามารถ cost ในการเช่า Cloud ได้ในระดับนึงแล้วนะครับ เช่น
ยกตัวอย่างสมมุตินะครับปกติเราใช้ Production server on cloud spec เป็น [ CPU 32 core , Mem 32 GB ] cost per month 200,000 baht
จากผลการ test เราสรุปได้ว่าเราใช้แค่ CPU 16 core Memory 16 GB cost per month อาจจะอยู่ที่ 120,000 baht จะทำให้เห็นว่าสามารถลดค่าใช้จ่ายในการเช่า cloud ลงไปได้

ข้อเสนอแนะเพิ่มเติม เมื่อเราปรับลด spec ที่ production จริงแล้ว ในช่วงแรกควรมีการ monitor อย่างใกล้ชิด และ มี solution สำรองในการแก้ปัญหาเผื่อไว้ด้วยนะครับ
(ตัวอย่างที่ยกขึ้นมา เพื่อให้เห็นภาพนะครับ ซึ่งในการทำงานจริงจะมีรายละเอียดยิบย่อยอีกอีกมากมายเลยทีเดียว T^T )

เป็นยังไงบ้างครับพอจะเห็นภาพมากขึ้นไหมครับ ไว้โอกาสหน้าเจอกันใหม่นะครับ
(บทความนี้เป็นบทความแรก ถ้าผิดพลาดประการใดขออภัยมา ณ ที่นี้ด้วยนะครับ )

Reference