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

เมื่อบริการหนึ่งช้าหรือล่ม ระบบที่เรียกมันอาจค้างรอจนทรัพยากรหมด แล้วลามพังต่อกันเป็นโดมิโน Circuit Breaker คือกลไกตัดวงจรชั่วคราว เพื่อให้ส่วนที่ดียังทำงานได้ และให้ส่วนที่พังได้ฟื้น
ในระบบที่หลายส่วนเรียกหากัน ความล้มเหลวมักไม่หยุดอยู่ที่เดียว ถ้าบริการชำระเงินช้าลง ระบบที่เรียกมันก็ค้างรอ พอมีคำขอเข้ามาเรื่อย ๆ ทรัพยากรก็หมด แล้วระบบนั้นก็ล่มตาม ลามต่อไปเรื่อย ๆ เหมือนโดมิโน Circuit Breaker ยืมแนวคิดมาจากเบรกเกอร์ไฟฟ้า คือตัดวงจรเมื่อพบความผิดปกติ เพื่อไม่ให้ความเสียหายลาม
สามสถานะของ Circuit Breaker
ปกติวงจรเปิดให้เรียกได้ตามปกติ เรียกว่าสถานะ Closed เมื่อพบว่าบริการปลายทางล้มเหลวบ่อยเกินเกณฑ์ เบรกเกอร์จะเปลี่ยนเป็น Open คือหยุดเรียกชั่วคราวและคืนคำตอบสำรองทันที ไม่ปล่อยให้ค้างรอ หลังเวลาผ่านไป จะลองเปิดให้เรียกบางส่วนเพื่อทดสอบ เรียกว่า Half-Open ถ้ากลับมาปกติก็ปิดวงจรตามเดิม
- กำหนดคำตอบสำรองที่เหมาะสมเมื่อเบรกเกอร์เปิด เช่น ข้อความแจ้งผู้ใช้
- ตั้งเกณฑ์ความล้มเหลวและเวลาฟื้นให้พอดีกับลักษณะของบริการ
- ใช้คู่กับ timeout เสมอ เพื่อไม่ให้คำขอค้างรอนานเกินไป
Circuit Breaker เป็นหนึ่งในหลักการที่ทำให้ระบบสมัยใหม่ทนทาน เพราะยอมรับว่าบางส่วนจะพังเป็นเรื่องธรรมดา แล้วออกแบบให้ความพังนั้นถูกควบคุม ระบบที่มีเบรกเกอร์ มักล้มแค่บางฟีเจอร์ชั่วคราว แทนที่จะล่มทั้งหมดพร้อมกัน
บริการที่เกี่ยวข้อง
รับพัฒนาเว็บแอปพลิเคชัน
สร้างเว็บแอปที่รองรับการเติบโตและเชื่อมกับระบบอื่นได้
WhaleScope
ดูโครงสร้างตลาดของทุกหมวดธุรกิจไทย บน WhaleScope
รายชื่อบริษัท ผู้เล่นรายใหญ่ และอัตราคงอยู่ของแต่ละหมวด — จากข้อมูลจดทะเบียน 2 ล้านนิติบุคคล
อ่านต่อ

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

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

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

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