หนึ่งในคำถามใน 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) มาช่วยอีกด้วย