หลายวันที่ผ่านมา มีโอกาสเข้าไปดูและแก้ไขปัญหา
ของ API ในระบบหนึ่ง ซึ่งมีปัญหาต่าง ๆ มากมาย
หนึ่งในนั้นคือ ผลการทำงานที่แย่ หรือ performance ไม่ดี
ทั้งช้า ใช้งาน CPU และ Memory เยอะ

การแก้ไขปัญหาเฉพาะหน้าคืออะไร ?

  • Restart
  • ขยายเครื่อง หรือ เพิ่มเครื่อง ให้ใหญ่หรือมากขึ้น

แต่ถ้าสำหรับ long term solution มาดูปัญหาที่เป็นอยู่กันหน่อย

เพื่อจะได้แก้ไขที่ต้นเหตุกัน ประกอบไปด้วย

  • การดึงข้อมูลจาก Database ช้ามาก ๆ มาจาก data ที่เยอะ ควมสัมพันธ์ของ data ที่สูง แถม index ก็ไม่ทำ หนักกว่าคือ index ที่ทำไม่มีประสิทธิภาพ
  • Business logic มีความซับซ้อนสูงมาก ๆ ทำงานแบบ sequential และ transaction นาน ๆ หนักสุด ๆ คือ เกิด locked database/table ขึ้นมาอีก
  • Code ไม่ดี หรือ logic/algorithm ไม่ดี ทำงานเยอะไป ใช้งาน CPU/Memory เยอะไป หรือมี code ที่ไม่จำเป็นเยอะ
  • พวก Resource ต่าง ๆ ไปเพียงพอ ถ้าแก้ไขปัญหาข้างต้นหมดแล้ว ยังไม่พอ แสดงว่าต้องเพิ่ม หรือ ขยายแล้วนะ

การแก้ไขปัญหาต่าง ๆ แบบง่าย ๆ หรือเปล่านะ แต่น่าจะเป็นแนวทางที่ดีขึ้น

ยกตัวอย่างเช่น

ปัญหา business logic ที่ทำงานแบบ sequential และ ซับซ้อน

พบเจอเยอะมาก ๆ สำหรับปัญหานี้
เพราะว่า การทำงานแบบ sequential มันทำได้ง่าย เข้าใจง่าย
แต่บ่อยครั้งพบว่า ขั้นตอนการทำงานต่าง ๆ อาจจะทำงานพร้อม ๆ กันได้
ไม่จำเป็นต้องรอกัน
ดังนั้นเรื่องของ parallel process จึงเข้ามามีบทบาท
หรือบางงานอาจจะแยกไปทำงานใน process อื่น ๆ ได้
หรืออาจจะทำงานแบบ asynchronous ได้
หรือแยกไปอีกระบบตามแนวคิด event-based architecture ก็ได้

ปัญหาต่อมาคือ ความซับซ้อน อาจจะทำให้ transaction นานเกินไป

ทำให้ database/table เกิด lock ได้
หรือ database ทำงานหนักมาก ๆ
ดังนั้น ควรแยกการทำงานย่อย ๆ หรือเป็นกลุ่มออกมา
เพื่อลดปัญหาการ lock หรือ long transaction ลงไป
แต่ความถูกต้องยังต้องถูกต้องเช่นเดิม ทั้ง success และ fail
หัวใจคือ ในแต่ละ transaction ต้องจบงานเร็วที่สุด
หรือพยายามใช้ caching data เพื่อลดการ access database ลงไป ก็ช่วยได้

ปัญหา API ทำการ return ข้อมูลเยอะเกินไป

ปัญหานี้เกิดจากการ reuse
หรือเหลือดีกว่าขาด
ดังนั้น return ไปเยอะ ๆ เลย
จะใช้อะไรก็เลือกใช้เอง
แบบนี้ดีไหมนะ

ลองตรวจสอบและแก้ไขปัญหากันดูครับ