การแก้ปัญหา API Latency ที่พุ่งสูงขึ้นตอน Deploy - กรณีศึกษา Django + Gunicorn
- ระบบ Backend ถูกสร้างด้วย Django + Gunicorn
- พบปัญหาว่า API Latency เพิ่มสูงขึ้นอย่างรวดเร็วทุกครั้งที่มีการ deploy
- เมื่อตรวจสอบหลักการทำงานของ Gunicorn พบว่ามีบางส่วนที่เกิด Cold Start
- เมื่อตรวจสอบโค้ดภายในของ Django พบว่าในตอนที่ fork จาก master worker process แม้จะเปิดใช้ตัวเลือก preload แล้ว ก็ยังมีองค์ประกอบบางส่วนที่ไม่ได้ถูก preload ล่วงหน้า จึงสามารถแก้ปัญหาได้
สิ่งที่ได้เรียนรู้
- เว็บเฟรมเวิร์กที่มีผู้ใช้จำนวนมากอย่าง Django มักทำงานต่าง ๆ ได้อย่างน่าเชื่อถือสูง จึงมีแนวโน้มที่จะคาดว่าผู้ใช้จริงก็น่าจะคิดเช่นนั้น
- แต่เมื่อดูโค้ดจริง กลับพบว่ามีโค้ดที่ก่อให้เกิดปัญหาอยู่ ทำให้ได้เรียนรู้ว่าไม่ควรเชื่อมั่นในเฟรมเวิร์กที่ใช้อย่างไม่มีข้อสงสัย
- กระบวนการแก้ปัญหา API Latency นั้นยากต่อการทำความเข้าใจอย่างรวดเร็ว เพราะขาดเอกสารที่เหมาะสม + ขาดความเข้าใจเชิงลึกต่อโครงสร้างภายในและการทำงาน + ความลังเลที่จะลงลึกไปใน codebase ของโครงการโอเพนซอร์ส
- ในกระบวนการนี้ยังมีปัญหาที่ซับซ้อนหลายอย่างพันกันอยู่ ทำให้ยิ่งระบุสาเหตุได้ไม่ง่าย
- สุดท้ายจึงสามารถแก้ปัญหาได้ด้วยการตรวจสอบโค้ดภายในของ Django
- ในกระบวนการนี้ไม่เพียงช่วยเพิ่มความเข้าใจต่อเครื่องมือ Django ที่ใช้อยู่เท่านั้น แต่ยังได้เรียนรู้ว่าการดูโค้ดภายในสามารถช่วยค้นหาวิธีแก้ปัญหาที่ยากบางอย่างได้
- การระบุสาเหตุรากของปัญหาเป็นสิ่งสำคัญ
- แม้วิธีปรับเงื่อนไขความสำเร็จของ Health Check ให้ตรวจหลายครั้งขึ้นหรือใช้เวลานานขึ้น จะช่วยลดความถี่ของการเกิด API Latency ได้ แต่ก็ไม่ใช่การแก้ปัญหาที่ต้นเหตุ
- การใช้พลังของปัญญาร่วมหมู่ช่วยให้ระบุจุดที่ควรโฟกัสและได้รับความรู้ที่หลากหลายได้เร็วขึ้น
- มีการแชร์ปัญหาที่เกี่ยวกับ API Latency ให้กับทีมอย่างรวดเร็ว และวิศวกรหลายคนก็เสนอความเห็นเกี่ยวกับจุดที่คาดว่าเป็นต้นตอของปัญหา
- ความเห็นเหล่านี้ช่วยให้รวบรวมข้อมูลได้อย่างรวดเร็ว และเรียนรู้ได้เร็วว่าควรโฟกัสดูตรงไหน
- การตั้งค่าสภาพแวดล้อมสำหรับจำลองอาการของปัญหาเพื่อใช้ในการแก้ไขเป็นสิ่งสำคัญ
- สามารถจำลองปัญหาเดียวกันบนเครื่องโลคัลได้สำเร็จ และทำให้ตรวจสอบได้ว่าปัญหาได้รับการแก้ไขอย่างเหมาะสมหรือไม่
- ทำให้ตระหนักได้ถึงความสำคัญของการจำลองอาการปัญหาเพื่อใช้ในการแก้ไข
1 ความคิดเห็น
กดลิงก์เข้าไปดูแล้ว เนื้อหาโพสต์ดีมากเลยครับ