เมื่อระบบงานมีจำนวนการใช้งานที่สูงขึ้น (Work load) แล้ว
ปัญหาที่มักจะตามมาเช่น
- ระบบไม่สามารถรองรับได้ หรือ scale ได้ทันความต้องการ
- ระบบทำงานช้า
- ระบบล่ม
มาดูกันว่า ต้นเหตุของปัญหามีอะไรบ้าง ?
0. เรื่องโครงสร้างและขั้นตอนขององค์กร !!
1. Code ที่แย่
คงปฏิเสธไม่ได้ว่า code ที่แย่ ๆ เป็นต้นเหตุสำคัญ
ซึ่งอาจจะทำงานได้ดีในระดับหนึ่ง
แต่เมื่อมีผู้ใช้งานถึงระดับหนึ่งแล้ว ปัญหาก็ต้องเห็นได้ชัดเจนยิ่งขึ้น
ทั้ง code/service ที่ผูกมัดกันสูง หรือ แยกกันมากเกินไป
ทั้งการใช้ algorithm ที่มี Big-O สูงเกินไป
2. การเลือกใช้เทคโนโลยีที่ไม่เหมาะสม ทั้งภาษาโปรแกรม และ Database
ยกตัวอย่างเช่นDatabase
บางอย่างเหมาะกับการอ่านข้อมูลDatabase
บางอย่างเหมาะกับการเขียนข้อมูลหรือต้องการ transaction
หรือ ความถูกต้องของข้อมูลสูงรวมทั้งการ scale ตามความต้องการ
3. ทำการเขียน business logic ไว้ใน Database
บางระบบทำการเขียน business logic ไว้ใน database
อาจจะด้วยเหตุผลใด ๆ ก็ตาม
ผลที่ตามมาคือ Database นั้นอาจจะ scale ไม่ทัน
ทำให้ยากต่อการรับมือเพราะว่า business logic ผูกติดกับ Database มากเกินไป
4. จัดการ caching ไม่ดี
ยกตัวอย่างเช่น การอ่านข้อมูลจาก Database ตรง ๆ ทุกครั้ง
เป็นเรื่องยากมาก ๆ สำหรับการ scale
ดังนั้นจึงต้องทำการ reuse connection database ด้วย Connection pool
หรือจำเป็นต้องทำการ caching data ที่ใช้งานบ่อย ๆ
เพื่อลดการเข้าถึง database ลงไป
หรือไปถึงพวก static data ต่าง ๆ
เพื่อทำ response time เร็วขึ้นหรือลด hop ของ request ลงไปให้มากที่สุด
5. การ configuration load balance ไม่ดี
บ่อยครั้งระบบงานตายเพราะว่า Load balance ไม่สามารถ scale หรือรองรับได้ทัน
6. รูปแบบการติดต่อสื่อสารระหว่าง service หรือ client-server
ไม่ว่าจะเป็น REST API หรือนำ GraphQL มาใช้
จนถึงการใช้งาน binary protocol เช่น Protocol buffer อย่าง GRPC
เพื่อเพิ่มประสิทธิภาพของการติดต่อสื่อสาร
หรือลดการใช้งาน bandwidth ของ network ลงไป
รวมทั้งการเลือกใช้รูปแบบการติดต่อสื่อสารให้เหมาะสมทั้ง Sync และ Async
แต่เหนือสิ่งอื่นใด ควรจะมีระบบหรือเครื่องมือช่วยตรวจสอบปัญหา
เพื่อให้เราสามารถรู้หรือเข้าไปยังปัญหาได้อย่างรวดเร็วเพื่อแก้ไขได้ทันที
รวมทั้งควรมีระบบการทำ performance test ที่ดีอีกด้วย
อีกทั้งความรู้ของคน ทีม และ องค์กร ก็เช่นกัน
Reference Websites
https://blog.devgenius.io/7-bottlenecks-that-hurt-the-scalability-of-your-system-4aa8b75627bf