ناکامی کے ذریعے سرکٹ بریکر کی وضاحت
کچھ دن پہلے مجھے ایک غیر متوقع مسئلے کا سامنا کرنا پڑا۔
میں شدید مایوسی کا شکار ہوا۔ میں اسے ٹھیک کرنا چاہتا تھا۔ تجسس نے مجھے آگے بڑھنے پر مجبور کیا۔
میں نے دوبارہ اس مسئلے پر غور کیا۔ مجھے اس کا حل مل گیا۔ اسے سرکٹ بریکر (circuit breaker) کہا جاتا ہے۔
سافٹ ویئر میں، سرکٹ بریکر کسی ایک ناکامی کو آپ کے پورے سسٹم کو کریش کرنے سے روکتا ہے۔ یہ آپ کے گھر کے بریکر کی طرح کام کرتا ہے۔
سرکٹ بریکر کی تین حالتیں ہوتی ہیں:
- CLOSED: سب کچھ ٹھیک کام کرتا ہے۔ تمام درخواستیں گزر جاتی ہیں۔ سسٹم ناکامیوں کا حساب رکھتا ہے۔ اگر ناکامیاں ایک حد تک پہنچ جائیں، تو سرکٹ کھل جاتا ہے۔
- OPEN: سسٹم فوری طور پر تمام درخواستیں روک دیتا ہے۔ اس سے ناکام ہو جانے والی سروس کو سنبھلنے کا وقت مل جاتا ہے۔
- HALF_OPEN: سسٹم چند آزمائشی درخواستوں کی اجازت دیتا ہے۔ اگر وہ کامیاب ہو جائیں، تو سرکٹ بند ہو جاتا ہے۔ اگر وہ ناکام ہو جائیں، تو سرکٹ دوبارہ کھل جاتا ہے۔
یہ رہا کوڈ میں ایک سادہ سا ایمپلمنٹیشن:
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