ವೈಫಲ್ಯದ ಮೂಲಕ ಸರ್ಕ್ಯೂಟ್ ಬ್ರೇಕರ್ (Circuit Breaker) ವಿವರಣೆ
ಕೆಲವು ದಿನಗಳ ಹಿಂದೆ ನಾನು ಅನಿರೀಕ್ಷಿತ ಸಮಸ್ಯೆಯನ್ನು ಎದುರಿಸಿದೆ.
ನಿರಾಸೆಯು ನನ್ನನ್ನು ತಲುಪಿತು. ಅದನ್ನು ಸರಿಪಡಿಸಲು ನಾನು ಬಯಸಿದೆ. ಕುತೂಹಲವು ನನ್ನನ್ನು ಮುಂದುವರಿಯುವಂತೆ ಮಾಡಿತು.
ನಾನು ಮತ್ತೆ ಆ ಸಮಸ್ಯೆಯೊಂದಿಗೆ ಕುಳಿತೆ. ನನಗೆ ಪರಿಹಾರ ಸಿಕ್ಕಿತು. ಅದನ್ನು ಸರ್ಕ್ಯೂಟ್ ಬ್ರೇಕರ್ (circuit breaker) ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ.
ಸಾಫ್ಟ್ವೇರ್ನಲ್ಲಿ, ಸರ್ಕ್ಯೂಟ್ ಬ್ರೇಕರ್ ಒಂದೇ ವೈಫಲ್ಯವು ನಿಮ್ಮ ಇಡೀ ವ್ಯವಸ್ಥೆಯನ್ನು ಕುಸಿಯದಂತೆ ತಡೆಯುತ್ತದೆ. ಇದು ನಿಮ್ಮ ಮನೆಯಲ್ಲಿರುವ ಬ್ರೇಕರ್ನಂತೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ.
ಸರ್ಕ್ಯೂಟ್ ಬ್ರೇಕರ್ ಮೂರು ಸ್ಥಿತಿಗಳನ್ನು ಹೊಂದಿದೆ:
- CLOSED: ಎಲ್ಲವೂ ಕೆಲಸ ಮಾಡುತ್ತದೆ. ಎಲ್ಲಾ ವಿನಂತಿಗಳು (requests) ಪೂರ್ಣಗೊಳ್ಳುತ್ತವೆ. ವ್ಯವಸ್ಥೆಯು ವೈಫಲ್ಯಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುತ್ತದೆ. ವೈಫಲ್ಯಗಳು ಒಂದು ಮಿತಿಯನ್ನು ತಲುಪಿದರೆ, ಸರ್ಕ್ಯೂಟ್ ತೆರೆಯಲ್ಪಡುತ್ತದೆ (opens).
- OPEN: ವ್ಯವಸ್ಥೆಯು ತಕ್ಷಣವೇ ಎಲ್ಲಾ ವಿನಂತಿಗಳನ್ನು ನಿಲ್ಲಿಸುತ್ತದೆ. ಇದು ವೈಫಲ್ಯ ಅನುಭವಿಸುತ್ತಿರುವ ಸೇವೆಯು (service) ಚೇತರಿಸಿಕೊಳ್ಳಲು ಸಮಯ ನೀಡುತ್ತದೆ.
- HALF_OPEN: ವ್ಯವಸ್ಥೆಯು ಕೆಲವು ಪರೀಕ್ಷಾ ವಿನಂತಿಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ಅವು ಯಶಸ್ವಿಯಾದರೆ, ಸರ್ಕ್ಯೂಟ್ ಮುಚ್ಚಲ್ಪಡುತ್ತದೆ (closes). ಅವು ವಿಫಲವಾದರೆ, ಸರ್ಕ್ಯೂಟ್ ಮತ್ತೆ ತೆರೆಯಲ್ಪಡುತ್ತದೆ.
ಇಲ್ಲಿದೆ ಒಂದು ಸರಳ ಕೋಡ್ ಅನುಷ್ಠಾನ (implementation):
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
}
}
}
ಈ ಕಾರ್ಯವಿಧಾನವು ನನ್ನ ಇತ್ತೀಚಿನ ಸಮಸ್ಯೆಯನ್ನು ಸರಿಪಡಿಸಿತು. ಇದು ತಪ್ಪುಗಳ ಪ್ರವಾಹವು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಹಾಳುಮಾಡದಂತೆ ತಡೆಯುತ್ತದೆ.
ದಯವಿಟ್ಟು ನಿಮ್ಮ ಅನಿಸಿಕೆಗಳನ್ನು ಕಾಮೆಂಟ್ಗಳಲ್ಲಿ ಹಂಚಿಕೊಳ್ಳಿ. ನಾನು ಇನ್ನೂ ಕಲಿಯುತ್ತಿದ್ದೇನೆ.
ಮೂಲ: https://dev.to/neel-vekariya/circuit-breaker-explained-through-real-failure-experience-3aeg