เมื่อระบบงานมีจำนวนการใช้งานที่สูงขึ้น (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