บันทึกการอ่านบทความเรื่อง How Django can handle 100 millions of requests per day
มีหลาย ๆ แนวคิดที่น่าสนใจ เพื่อให้ระบบมีประสิทธิภาพสูงขึ้น
จึงทำการบันทึกสิ่งที่น่าสนใจไว้
มาเริ่มกันเลย
เรื่องที่ 1 Infrastructure ที่ดี
บ้านจะดีไม่ได้เลย
ถ้าอยู่ในพื้นที่ไม่ดี
ถ้าไม่มีรากฐานที่ดี
ระบบงานก็เช่นกัน Instratructure ก็ต้องดี
ต้องเอื้อต่อการ scale เมื่อถึงจุดที่ระบบที่รับไม่ได้
รวมไปถึง application ก็เช่นกัน
สิ่งที่น่าสนใจคือ
- แบ่งเป็น service ย่อย ๆ แต่ให้พิจารณาเรื่องของการติดต่อสื่อสารระหว่าง service และการ sync ข้อมูล ซึ่งจะใช้ resource และค่าใช้จ่ายมากขึ้น
- จัดการ container ด้วย Docker
- ถ้าจำนวน container เยอะ ๆ แนะนำให้จัดการผ่าน Kubernetes
- ออกแบบ infrastructure ให้ง่ายต่อการ maintain เช่นไม่มี downtime เมื่อทำการ upgrade ระบบเป็นต้น
- เรื่องของ metric และ monitoring สำคัญมาก ๆ เก็บข้อมูลที่จำเป็นต่อการหาและตรวจสอบหาปัญหา
เรื่องที่ 2 Database เลือกให้เหมาะกับงาน
ระบบงานส่วนใหญ่นั้น จะช้าหรือเร็วก็ขึ้นอยู่กับ database นี่เอง
ดังนั้นเลือกที่มีความเร็วสูง (IOPS)
การจัดการ index และดู slow query ก็สำคัญมาก ๆ
แต่การมี index มากจนเกินไปมันก็แย่
ดังนั้นถ้ามี index ที่มันซ้ำซ้อนและไม่ได้ใช้งานก็ลบทิ้งไป
อีกเรื่องที่สำคัญคือ จำนวน database connection ที่สามารถเปิดได้พร้อม ๆ กัน
รวมทั้งอายุของแต่ละ connnection ด้วย
ในส่วนนี้ต้องทำการ tuning ให้เหมาะสมกับ usecase ด้วย
เรื่องที่ 3 ลบสิ่งที่ไม่ได้ใช้ออกไป
เนื่องจากระบบงานในบทความใช้งาน Django
จะมีส่วนการทำงานเตรียมไว้ให้เพียบเลย
แต่สิ่งที่ควรทำคือ อะไรก็ตามที่เราไม่ได้ใช้งานควรลบหรือ disable ไปซะ
เป็นสิ่งที่คนนำมาใช้งาน ควรทำความเข้าใจ framework ที่นำมาใช้เสมอ
จะช่วยลดเวลาการทำงานลงไปได้เยอะมาก ๆ
เรื่องที่ 4 แนะนำให้ใช้งาน Bulk query
คือการส่งหลาย ๆ query ไปยัง database พร้อม ๆ กันในครั้งเดียว
ซึ่งช่วยลดการเชื่อมต่อไปยัง database อีกด้วย
เรื่องที่ 5 ลดขนาดของข้อมูลที่ส่งไปมาในระบบงาน
เช่นการดึงข้อมูลของ application layer ไปยัง data layer
หรือระหว่างผู้ใช้งานกับ API ก็เช่นกัน
ให้ดึงข้อมูลเท่าที่จำเป็นต่อการใช้งานเท่านั้น ไม่ต้องเผื่อ !!
จะช่วยเรื่องของ response time ที่เร็วขึ้น
สิ่งที่สำคัญมาก ๆ คือ การ monitoring และ metric ต่าง ๆเพื่อใช้ในการแก้ไขและปรับปรุงอย่างต่อเนื่อง