Exponential Backoff: ลองใหม่อย่างสุภาพ ไม่ซ้ำเติมระบบที่ล้า

29 มิถุนายน 2569อ่าน 6 นาที
Exponential Backoff: ลองใหม่อย่างสุภาพ ไม่ซ้ำเติมระบบที่ล้า

เมื่อคำขอล้มเหลว การลองใหม่ทันทีซ้ำ ๆ อาจซ้ำเติมระบบที่กำลังล้าจนล่มหนักกว่าเดิม Exponential Backoff คือการเว้นระยะลองใหม่ให้ห่างขึ้นเรื่อย ๆ ช่วยให้ระบบได้ฟื้นแทนที่จะพังยับ

เมื่อคำขอไปยังบริการหนึ่งล้มเหลว การลองใหม่เป็นเรื่องดี แต่ถ้าลองใหม่ทันทีและถี่ ๆ ในขณะที่บริการนั้นกำลังล้าอยู่ ก็เท่ากับซ้ำเติมให้มันแย่ลง ยิ่งหลายระบบลองใหม่พร้อมกันถี่ ๆ ก็ยิ่งถล่มบริการที่กำลังจะฟื้นให้ล่มหนักกว่าเดิม Exponential Backoff แก้ปัญหานี้ด้วยการเพิ่มระยะห่างของการลองใหม่ขึ้นเรื่อย ๆ เช่น รอ 1 วินาที แล้ว 2 แล้ว 4 เพื่อให้บริการปลายทางมีช่องหายใจได้ฟื้น

เพิ่มการสุ่มเพื่อไม่ให้ทุกคนลองพร้อมกัน

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

  • เพิ่มระยะห่างของการลองใหม่ขึ้นเรื่อย ๆ ให้ระบบได้ฟื้น
  • เติมความสุ่ม เพื่อไม่ให้ทุกคนลองใหม่พร้อมกันเป็นระลอก
  • มีเพดานครั้งและเวลารอ พร้อมทางสำรองเมื่อยอมแพ้

Exponential Backoff เป็นรายละเอียดเล็ก ๆ ที่แยกระบบที่ทนทานออกจากระบบที่ล่มเป็นลูกโซ่ เพราะมันทำให้ความล้มเหลวชั่วคราวได้โอกาสฟื้น แทนที่จะถูกซ้ำเติมจนพังทั้งระบบ สำหรับธุรกิจที่ระบบเชื่อมต่อกับบริการอื่นหรือมีหลายส่วนคุยกัน การลองใหม่อย่างมีมารยาทแบบนี้ คือหนึ่งในสิ่งที่ทำให้ระบบยังยืนได้ในวันที่มีอะไรบางอย่างเริ่มมีปัญหา

Exponential BackoffReliabilityRetryResilience

บริการที่เกี่ยวข้อง

รับพัฒนาเว็บแอปพลิเคชัน

สร้างเว็บแอปที่รองรับการเติบโตและเชื่อมกับระบบอื่นได้

WhaleScope

ดูโครงสร้างตลาดของทุกหมวดธุรกิจไทย บน WhaleScope

รายชื่อบริษัท ผู้เล่นรายใหญ่ และอัตราคงอยู่ของแต่ละหมวด — จากข้อมูลจดทะเบียน 2 ล้านนิติบุคคล

อ่านต่อ

Chaos Engineering: จงใจทำให้ระบบพัง เพื่อพิสูจน์ความทนทาน

แทนที่จะหวังว่าระบบจะทนได้เมื่อเกิดเหตุ Chaos Engineering คือการจงใจสร้างความล้มเหลวในสภาพที่ควบคุมได้ เพื่อดูว่าระบบรับมือไหวจริงไหม ก่อนที่เหตุจริงจะมาโดยไม่ทันตั้งตัว

Circuit Breaker: หยุดความล้มเหลวไม่ให้ลามทั้งระบบ

เมื่อบริการหนึ่งช้าหรือล่ม ระบบที่เรียกมันอาจค้างรอจนทรัพยากรหมด แล้วลามพังต่อกันเป็นโดมิโน Circuit Breaker คือกลไกตัดวงจรชั่วคราว เพื่อให้ส่วนที่ดียังทำงานได้ และให้ส่วนที่พังได้ฟื้น

Graceful Degradation: ให้ระบบล้มแบบสวย แทนที่จะล่มทั้งหมด

เมื่อส่วนหนึ่งของระบบมีปัญหา ควรทำให้ทั้งระบบล่ม หรือให้ส่วนที่เหลือทำงานต่อได้ Graceful Degradation คือการออกแบบให้ระบบลดความสามารถลงอย่างมีระเบียบ แทนที่จะดับทั้งหมด

Message Queue: ทำไมระบบใหญ่ถึงใช้คิวแทนการเรียกตรง

เมื่อระบบ A เรียกระบบ B ตรง ๆ ถ้า B ล่มหรือช้า A ก็พังตาม Message Queue คั่นกลางด้วยคิวงาน ทำให้ระบบทนทานขึ้น รับโหลดพุ่งได้ และแยกส่วนกันทำงานโดยไม่ล้มพร้อมกัน