ในระบบแบบกระจาย ทุกอย่างล้มเหลวไปในที่สุด รูปแบบยืดหยุ่นหยุดการล้มเหลวครั้งเดียวจากการไหลลงไปเป็นการหยุดทำงานทั้งหมด
ในระบบแบบกระจาย ทุกอย่างล้มเหลวไปในที่สุด รูปแบบยืดหยุ่นหยุดการล้มเหลวครั้งเดียวจากการไหลลงไปเป็นการหยุดทำงานทั้งหมด
const breaker = new CircuitBreaker(callPaymentService, {
timeout: 3000, // fail the call after 3s
errorThresholdPercentage: 50, // open if >50% of calls fail
resetTimeout: 10000 // after 10s, try one request (half-open)
});
breaker.fallback(() => ({ status: 'queued' })); // graceful degradation
CLOSED ──(failures exceed threshold)──▶ OPEN
▲ │ (after resetTimeout)
│ (trial succeeds) ▼
└────────────── HALF-OPEN ◀──────────────┘
(one trial request)
[ pool A: 10 threads ] → payment calls
[ pool B: 10 threads ] → search calls
If search hangs, it drains pool B only — payments keep working.
การลองใหม่โดยไม่มี backoff จะเพิ่มโหลดในบริการที่ประสบปัญหา (พายุการลองใหม่) เสมอเพิ่ม backoff jitter และขีดจำกัดการลองใหม่
รูปแบบเหล่านี้คือสิ่งที่เปลี่ยนความล้มเหลวของบริการเดียวที่หลีกเลี่ยงไม่ได้เป็นคุณสมบัติที่ลดลงแทนการหยุดทำงานทั้งเว็บไซต์
พวกเขาทำงานร่วมกัน timeout ผูกไว้ รอ circuit breaker หยุดการสอดแนมบริการตายแล้ว bulkhead บรรจุรัศมีระเบิด และ retry กู้คืนจากกระแสสั้น — ละเว้นสิ่งใดสิ่งหนึ่ง และล้มเหลวยังคงไหลลง