เลิกส่งอีเมลใน API Request ได้แล้ว ถ้าไม่อยากให้ระบบล่มตอนใช้งานจริง

อ่าน 3 นาที 2 ผู้อ่าน

เลิกส่งอีเมลใน API Request ได้แล้ว ถ้าไม่อยากให้ระบบล่มตอนใช้งานจริง

ทำไมการรอส่งอีเมลถึงเป็นกับดักของระบบ

เวลาคุณเขียนโค้ดสมัครสมาชิกใหม่ ทุกอย่างดูราบรื่นดีบนเครื่องตัวเอง คุณบันทึกข้อมูลลงฐานข้อมูล สั่งส่งอีเมลต้อนรับ แล้วก็ตอบกลับไปว่าเรียบร้อย แต่พอเอาขึ้นระบบจริง (Production) ที่มีคนใช้งานพร้อมกันเยอะๆ อีเมลที่เคยส่งไวอาจจะใช้เวลานานขึ้น หรือบางทีเซิร์ฟเวอร์อีเมลปลายทางก็ล่ม ทำให้ API ของคุณค้างหรือพังตามไปด้วย

API ควรทำหน้าที่แค่รับคำสั่ง ไม่ใช่ลงมือทำเอง

หัวใจสำคัญคือขั้นตอนที่เรียกว่า Request Path (เส้นทางที่คำสั่งวิ่งจากผู้ใช้เข้ามาจนถึงการตอบกลับ) ควรทำแค่ตรวจสอบข้อมูล ยืนยันตัวตน และบันทึกลงฐานข้อมูลให้เสร็จโดยเร็วที่สุด ส่วนงานที่ใช้เวลานานหรือมีความเสี่ยง เช่น การส่งอีเมล หรือการสร้างไฟล์ PDF ควรถูกโยนไปให้ระบบเบื้องหลังทำแทน

ปัญหาที่จะเจอถ้าฝืนส่งอีเมลใน Request

  • ความช้าที่ควบคุมไม่ได้: API ของคุณจะช้าเท่ากับความเร็วของคนให้บริการอีเมล ถ้าเขาช้า คุณก็ช้าตาม
  • พังเป็นโดมิโน: ถ้าการส่งอีเมลมีปัญหา API ของคุณอาจจะตอบกลับข้อผิดพลาดไปถึงผู้ใช้ ทั้งที่จริงๆ ข้อมูลในฐานข้อมูลบันทึกสำเร็จแล้ว
  • รับมือกับคนใช้งานเยอะไม่ได้: ระบบส่งอีเมลมีข้อจำกัดเรื่องจำนวนการส่งต่อวินาที ถ้าคุณส่งตรงๆ พอคนสมัครเยอะเกินกำหนด คุณก็จะเจอ error เต็มไปหมด

วิธีแก้ด้วยการใช้ Queue (แถวคอยงาน)

แทนที่จะส่งอีเมลทันที ให้คุณเปลี่ยนไปใช้ Queue (ระบบคิวสำหรับพักงานที่รอทำ) แทน โดยมีขั้นตอนดังนี้:

  1. API บันทึกข้อมูลผู้ใช้ลงฐานข้อมูล
  2. API ส่งคำสั่ง "ฝากงาน" ไปที่ Queue ว่าให้ส่งอีเมลต้อนรับนะ
  3. API ตอบกลับผู้ใช้ทันทีว่าสำเร็จแล้ว
  4. มี Worker (โปรแกรมตัวเล็กๆ ที่คอยดึงงานจากคิวมาทำ) คอยหยิบงานจากคิวไปจัดการส่งอีเมลให้เอง

วิธีนี้จะช่วยให้ API ของคุณตอบสนองได้ไวเสมอ ไม่ว่าระบบส่งอีเมลจะช้าหรือล่มแค่ไหน เพราะงานถูกพักไว้ในคิวแล้ว

สรุปสั้น ๆ

การแยกงานส่งอีเมลไปทำในเบื้องหลังช่วยให้ API ของคุณทำงานได้เร็วและเสถียรขึ้นมาก เพราะคุณไม่ต้องรอการตอบกลับจากคนอื่น และยังมีโอกาสลองส่งใหม่ (Retry) ได้ง่ายหากเกิดข้อผิดพลาด นี่คือกฎเหล็กสำหรับนักพัฒนาที่ต้องการสร้างระบบให้รองรับผู้ใช้งานจำนวนมากได้อย่างมืออาชีพ

แชร์ข่าวนี้

เรียบเรียงจากข่าวของ freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More อ่านข่าวต้นฉบับ ↗

← กลับไปหน้าข่าวสาร