เลิกส่งอีเมลใน API Request ได้แล้ว ถ้าไม่อยากให้ระบบล่มตอนใช้งานจริง
ทำไมการรอส่งอีเมลถึงเป็นกับดักของระบบ
เวลาคุณเขียนโค้ดสมัครสมาชิกใหม่ ทุกอย่างดูราบรื่นดีบนเครื่องตัวเอง คุณบันทึกข้อมูลลงฐานข้อมูล สั่งส่งอีเมลต้อนรับ แล้วก็ตอบกลับไปว่าเรียบร้อย แต่พอเอาขึ้นระบบจริง (Production) ที่มีคนใช้งานพร้อมกันเยอะๆ อีเมลที่เคยส่งไวอาจจะใช้เวลานานขึ้น หรือบางทีเซิร์ฟเวอร์อีเมลปลายทางก็ล่ม ทำให้ API ของคุณค้างหรือพังตามไปด้วย
API ควรทำหน้าที่แค่รับคำสั่ง ไม่ใช่ลงมือทำเอง
หัวใจสำคัญคือขั้นตอนที่เรียกว่า Request Path (เส้นทางที่คำสั่งวิ่งจากผู้ใช้เข้ามาจนถึงการตอบกลับ) ควรทำแค่ตรวจสอบข้อมูล ยืนยันตัวตน และบันทึกลงฐานข้อมูลให้เสร็จโดยเร็วที่สุด ส่วนงานที่ใช้เวลานานหรือมีความเสี่ยง เช่น การส่งอีเมล หรือการสร้างไฟล์ PDF ควรถูกโยนไปให้ระบบเบื้องหลังทำแทน
ปัญหาที่จะเจอถ้าฝืนส่งอีเมลใน Request
- ความช้าที่ควบคุมไม่ได้: API ของคุณจะช้าเท่ากับความเร็วของคนให้บริการอีเมล ถ้าเขาช้า คุณก็ช้าตาม
- พังเป็นโดมิโน: ถ้าการส่งอีเมลมีปัญหา API ของคุณอาจจะตอบกลับข้อผิดพลาดไปถึงผู้ใช้ ทั้งที่จริงๆ ข้อมูลในฐานข้อมูลบันทึกสำเร็จแล้ว
- รับมือกับคนใช้งานเยอะไม่ได้: ระบบส่งอีเมลมีข้อจำกัดเรื่องจำนวนการส่งต่อวินาที ถ้าคุณส่งตรงๆ พอคนสมัครเยอะเกินกำหนด คุณก็จะเจอ error เต็มไปหมด
วิธีแก้ด้วยการใช้ Queue (แถวคอยงาน)
แทนที่จะส่งอีเมลทันที ให้คุณเปลี่ยนไปใช้ Queue (ระบบคิวสำหรับพักงานที่รอทำ) แทน โดยมีขั้นตอนดังนี้:
- API บันทึกข้อมูลผู้ใช้ลงฐานข้อมูล
- API ส่งคำสั่ง "ฝากงาน" ไปที่ Queue ว่าให้ส่งอีเมลต้อนรับนะ
- API ตอบกลับผู้ใช้ทันทีว่าสำเร็จแล้ว
- มี Worker (โปรแกรมตัวเล็กๆ ที่คอยดึงงานจากคิวมาทำ) คอยหยิบงานจากคิวไปจัดการส่งอีเมลให้เอง
วิธีนี้จะช่วยให้ API ของคุณตอบสนองได้ไวเสมอ ไม่ว่าระบบส่งอีเมลจะช้าหรือล่มแค่ไหน เพราะงานถูกพักไว้ในคิวแล้ว
สรุปสั้น ๆ
การแยกงานส่งอีเมลไปทำในเบื้องหลังช่วยให้ API ของคุณทำงานได้เร็วและเสถียรขึ้นมาก เพราะคุณไม่ต้องรอการตอบกลับจากคนอื่น และยังมีโอกาสลองส่งใหม่ (Retry) ได้ง่ายหากเกิดข้อผิดพลาด นี่คือกฎเหล็กสำหรับนักพัฒนาที่ต้องการสร้างระบบให้รองรับผู้ใช้งานจำนวนมากได้อย่างมืออาชีพ
เรียบเรียงจากข่าวของ freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More อ่านข่าวต้นฉบับ ↗