𝗖𝗶𝗿𝗰𝘂𝗶𝘁 𝗕𝗿𝗲𝗮𝗸𝗲𝗿 Ielezewa Kupitia Hitilafu
Nilikumbana na tatizo lisilotarajiwa siku chache zilizopita.
Nilikatishwa tamaa sana. Nilitaka kulitatua. Udadisi ulinilazimisha kuendelea.
Nilikaa na tatizo hilo tena. Nikapata suluhisho. Inaitwa circuit breaker.
Katika programu (software), circuit breaker huzuia hitilafu moja isisababishe mfumo wako mzima kuanguka. Inafanya kazi kama swichi ya umeme (breaker) nyumbani kwako.
Circuit breaker ina hali tatu:
- CLOSED: Kila kitu kinafanya kazi. Maombi (requests) yote yanapita. Mfumo unafuatilia hitilafu. Ikiwa hitilafu zitafikia kikomo, circuit inafunguka.
- OPEN: Mfumo unasimamisha maombi yote mara moja. Hii huipa huduma inayofeli muda wa kurejea katika hali ya kawaida.
- HALF_OPEN: Mfumo unaruhusu maombi machache ya majaribio. Ikiwa yatafanikiwa, circuit inafungwa. Ikiwa yatafeli, circuit inafunguka tena.
Hapa kuna mfano rahisi wa utekelezaji katika kodi:
constructor(failureThreshold, cooldownMs) {
this.failureThreshold = failureThreshold
this.cooldownMs = cooldownMs
this.state = "CLOSED"
this.failureCount = 0
this.lastFailureTime = null
}
openCircuit() {
this.state = "OPEN"
this.lastFailureTime = Date.now()
}
closeCircuit() {
this.state = "CLOSED"
this.failureCount = 0
this.lastFailureTime = null
}
halfOpenCircuit() {
this.state = "HALF_OPEN"
}
async execute(fn) {
if (this.state === "OPEN") {
const cooldownExpired = Date.now() - this.lastFailureTime >= this.cooldownMs
if (!cooldownExpired) {
throw new Error("Circuit is open.")
}
this.halfOpenCircuit();
}
try {
const result = await fn()
if (this.state === "HALF_OPEN") {
this.closeCircuit()
}
return result;
} catch (error) {
if (this.state === "HALF_OPEN") {
this.openCircuit()
throw error;
}
this.failureCount++
if (this.failureCount >= this.failureThreshold) {
this.openCircuit()
}
throw error
}
}
}
Utaratibu huu ulitatua tatizo langu la hivi karibuni. Unazuia mfululizo wa makosa usiharibu programu yako.
Tafadhali shiriki mawazo yako kwenye maoni. Bado najifunza.
Chanzo: https://dev.to/neel-vekariya/circuit-breaker-explained-through-real-failure-experience-3aeg