หนึ่งในคำถามใน course Microservice Design ที่ Skooldio ที่น่าสนใจคือ
แนวทางในการปรับปรุงประสิทธิภาพการทำงานของ APIs ให้ดีขึ้น
ว่าเราควรทำอย่างไรบ้าง ?
เท่าที่จำได้ก็จะตอบไปบางส่วน
จึงได้ทำการหาและสรุปข้อมูลเพิ่มเติม ได้ดังนี้
คิดว่าน่าจะพอมีประโยชน์

ไปเจอแหล่งข้อมูลที่น่าสนใจ ประกอบไปด้วย

มาดูรายละเอียดกันนิดหน่อย

เรื่องที่ 1 คือ การออกแบบ API ให้มีมาตรฐานเดียวกัน (Consistency)

อาจจะไม่เกี่ยวกับ performance มากเท่าไร
แต่เป็นสิ่งที่สำคัญมาก ๆ เพื่อให้ทั้งคนออกแบบ และ ใช้งาน และ พัฒนา ทำงานง่ายขึ้น
เพื่อเพิ่ม productivity ให้กับงานอีกด้วย
รวมทั้งเรื่องของการ monitoring/observability อีกด้วย
แล้วอย่างลืมเรื่องของ API compatablity ด้วย

เรื่องที่ 2 การจัดการกับข้อมูลจำนวนมาก

ยกตัวอย่างเช่น
การดึงข้อมูลจำนวนมาก ๆ ควรใช้งาน pagination เข้ามาด้วย
คงไม่มีใครดึงข้อมูล หรือ return ข้อมูลจำนวนมาก ๆ กลับมาจาก request เดียวกันหรอกนะครับ
แต่ถ้ามีหลาย ๆ หน้าแล้ว ปัญหาที่ตามมาคือ ยิ่งมีจำนวนหน้ามาก ๆ การดึงข้อมูลยิ่งช้า
ซึ่งต้องระมัดระวังให้มาก ๆ

ถ้าข้อมูลมากจริง ๆ ควรทำการแยกข้อมูลเป็นส่วน ๆ ไปตามการใช้งาน
ยกตัวอย่างเช่น

  • แยกข้อมูลตามช่วงเวลา เช่น แยกเป็นรายปี รายเดือน เป็นต้น
  • แยกข้อมูลตามจังหวัด หรือ ประเทศ หรือ กลุ่มการใช้งาน
  • การทำ pre-join หรือ pre-aggregate เพื่อลดการประมวลผล
  • ลดการ order by ลงไปให้มาก ๆ เพราะว่า ใช้ resource เยอะมาก ๆ

ในการแยกข้อมูลของ database นั้นมีทั้ง partition และ sharding ที่ควรต้องทำ
เราคงไม่อยากไปดึงข้อมูลบางส่วน จากข้อมูลทั้งหมดที่มีจำนวนเยอะ ๆ หรอกนะ

เรื่องที่ 3 คือ Caching data ลองอ่านเพิ่มเติมได้

เรื่องที่ 4 ข้อมูลที่ส่งไปมาของ API ควรมีขนาดที่เล็ก

การออกแบบข้อมูลให้มีเท่าที่ใช้งานจริง ๆ จึงสำคัญมาก ๆ
รวมทั้งการบีดอัดข้อมูลก่อนส่งทั้ง request และ response
หรือการใช้งานรูปแบบข้อมูลที่เหมาะสม
เช่น

  • Plain-text
  • Binary

ตัวอย่างหนึ่งที่แนะนำคือ REST VS gRPC เป็นต้น

เรื่องที่ 5 การเลือกใช้ Database model ให้เหมาะสมกับงาน

เนื่องจาก Database model นั้นมีหลายรูปแบบ เช่น

  • Relation
  • Key-value
  • Document
  • Column
  • Graph
  • Search
  • Time-series

จึงต้องเข้าใจก่อนว่า งานของเราเป็นอย่างไร เหมาะสมกับ Database model ประเภทใด
เพื่อลดงาน แต่เพิ่มประสิทธิภาพ
แต่ถ้านำมาใช้แล้วเพิ่มงาน แสดงว่า น่าจะเลือกใช้งานผิดประเภทแล้วนะ

เรื่องที่ 6 ปรับปรุงการเข้าถึงข้อมูล หรือ API หรือ Legacy system จำนวนมาก

ปัญหาที่มักจะพบเจอคือ

  • การเข้าถึง database
  • การทำ caching
  • การ composition ข้อมูล
  • การลด latency time ต่าง ๆ
  • การลดขนาดของข้อมูล
  • การจัดการเรื่อง security

สามารถนำ API gateway, GraphQL และ Load balance มาใช้งานเพิ่มเติมได้
รวมทั้งเรื่องของ CDN (Content Delivery Network) มาช่วยอีกด้วย