قطع کننده مدار و تخریب
Circuit Breaker (CB) یک الگوی امنیتی است که تماس ها را به یک وابستگی کاهش می دهد تا محلی سازی شکست و محافظت از خدمات بالادست و کاربر را متوقف کند. تخریب (تخریب برازنده) - ساده سازی عمدی عملکرد در صورت کمبود منابع یا خرابی (به عنوان مثال، بازگشت داده های ذخیره شده/ناقص، غیرفعال کردن ویژگی های «گران قیمت») بدون خرابی کامل.
هدف اصلی: حفظ SLO و تجربه کاربر از طریق خرابی های کنترل شده، به جای قطره های آبشار.
1) هنگامی که برای درخواست
وابستگی ناپایدار است: رشد p95/p99، وقفه، پاسخهای اشتباه.
API های خارجی با محدودیت های سخت/مجازات.
«سنگین» (جستجو، توصیه ها، گزارش ها)، جایی که بازپرداخت طوفان را تشدید می کند.
مناطق بسیار بارگذاری شده با خطر تخلیه استخر (اتصالات، موضوعات).
2) حالت های CB و انتقال
سه گانه کلاسیک:1. Closed - ترافیک می رود، معیارهای خطا/تأخیر شمارش می شوند.
2. باز کردن - تماس ها فورا رد می شوند (شکست سریع) و/یا به بازپرداخت منتقل می شوند.
3. Half-Open - تعداد محدودی از درخواست های «آزمایشی» تعیین می کند که آیا سوئیچ را ببندید یا خیر.
باز کردن محرک ها
آستانه خطا/اتمام وقت در هر پنجره (به عنوان مثال، ≥ 50٪ از آخرین N).
آستانه تأخیر (به عنوان مثال P95> هدف)
سیاست های ترکیبی (خطا ∧ اتمام وقت بیش از حد).
زمان نگه دارید (سرد کردن)
ثابت (به عنوان مثال، 10-60 ثانیه) یا تطبیقی (افزایش نمایی با اعمال مکرر).
3) زمان، عقب نشینی و لرزش
وقفه ها همیشه کوتاه تر از SLO های بالادست هستند و انتشار مهلت هستند.
Retrai فقط برای عملیات idempotent ؛ 1-2 تلاش در اکثر موارد کافی است.
Backoff + jitter (لرزش کامل) مانع از امواج همزمان تکرار می شود.
هجینگ (درخواستهای اضافی) - اقتصادی و فقط برای خواندن بسیار مهم است.
4) جداسازی دیواره و «فیوز»
اتصال جداگانه/کارگر/صف استخر توسط دامنه و نوع ترافیک (VIP, وظایف پس زمینه, رابط های برنامه کاربردی عمومی).
کلاه در همزمانی برای عملیات «گران».
کنترل پذیرش: شکست آسان قبل از اجرای زمانی که صف پر است.
5) سناریوهای سقوط و تخریب
گزینه ها
پاسخهای حافظه پنهان/سبک: «stale-while-revalidate»، دادههای برگشتی از حافظه پنهان L2/L3.
فقط خواندنی: بلوک نوشتن/دستورات، اجازه خواندن امن.
پاسخ های جایگزین: داده های ناقص (به عنوان مثال، بدون توصیه/آواتار).
غیرفعال کردن عملکرد: به طور موقت پنهان کردن ویجت ها/ویژگی های غیر بحرانی.
پرچم ویژگی: تغییر سریع رفتار بدون انتشار.
قوانین
Fallback باید قطعی، سریع و ایمن از داده ها باشد.
به صراحت مسیر تخریب شده را در سیاهههای مربوط/آهنگ/معیارها علامت گذاری کنید.
6) اولویت بندی و شکل دادن به ترافیک
برنامه های VIP/پرداخت - اولویت/سهمیه بالاتر در صورت کمبود.
محدودیت های نرخ و کاهش بار وابستگی های ضعیف را کاهش می دهد.
بار ریختن: کاهش نرم در کیفیت (به عنوان مثال نتایج کمتر، تصاویر کوتاه) تا زمانی که تثبیت شود.
7) قابلیت مشاهده و سیگنالینگ
معیارهای CB
وضعیت (بسته/باز/نیمه باز) و مدت زمان در حالت.
سهم از شکست های علل: CB-باز، اتمام وقت، 5xx، تلاش مجدد خسته شده است.
p95/p99 تاخیر «قبل» و «بعد» سوئیچ.
تعداد/درصد درخواست ها از طریق برگشت.
ردیابی
حاشیه نویسی دهانه: «مدار = باز»، «fallback = کش»، «پذیرش = رد».
ارتباط با محدودیت ها (429/RateLimit-)، صف ها و گلوله های اتصال.
سیاهههای مربوط/حسابرسی
دلیل باز/بسته شدن، آستانه، شناسه وابستگی.
8) قراردادها و پروتکل
وب سایت ها
Fail-fast: «503 Service Unavailable» با «Retry-After» (یا «429» در محدودیت).
محتوای جزئی/پایدار: '200 '/' 206' با ابرداده تخریب (به عنوان مثال، 'X-Degraded: درست').
سیاستهای حافظه پنهان: «Cache-Control: stale-if-error, stale-while-revalidate».
gRPC
'UNAVAILABLE', 'DEADLINE _ EXCEEDED', retray semantics by client/proxy policies.
مهلت/زمان در زمینه درخواست ؛ مهلت را در زنجیره گسترش دهید.
عدم توانایی
'Idempotency-Key' برای عملیات POST، deduplication در مرز.
9) پیاده سازی نمونه (کد شبه)
pseudo onRequest(req):
if circuit. isOpen(dep):
return fallbackOrFail(req)
with timeout(T):
try:
resp = call(dep, req)
circuit. recordSuccess(dep, latency=resp. latency)
return resp except TimeoutError or 5xx as e:
circuit. recordFailure(dep)
if circuit. shouldOpen(dep):
circuit. open(dep, coolDown=adaptive())
return fallbackOrFail(req)
نمونه نیمه باز
pseudo onTimer():
if circuit. state(dep) == OPEN and coolDownExpired():
circuit. toHalfOpen(dep)
onRequestHalfOpen(req):
if circuit. allowTrial (dep): # e.g. 1 try: call -> success => close catch: reopen with longer coolDown else:
return fallbackOrFail(req)
10) تنظیم آستانه
پنجره مشاهده: کشویی N ثانیه/نمایش داده شد.
آستانه خطا: 20-50٪ در پنجره (بسته به مشخصات).
آستانه تاخیر: p95 ≤ SLO هدف (به عنوان مثال، 300-500 میلی ثانیه) ؛ بیش از حد به عنوان یک «خطا» برای CB محسوب می شود.
تطبیقی سرد کردن: 10s → 30s → 60s با اعمال مکرر.
11) آزمایش و شیوه های هرج و مرج
هرج و مرج: تزریق خطای تاخیر/وابستگی، تجزیه DNS، قطره بسته.
روزهای بازی: شروع «باز کردن» سوئیچ در یک محیط مبارزه مانند، بررسی برگشت.
Canary: سیاست های POC/degradation را برای 1-5٪ از ترافیک فعال کنید.
SLO بودجه: اجازه می دهد آزمایش تا خطا بودجه خسته شده است.
12) ادغام با چند اجاره
حالت CB را می توان در هر وابستگی به ازای هر مستاجر (برای مستاجران پر سر و صدا) و یا در سطح جهانی - بسته به مشخصات بار.
تقسیم داده ها و حافظه های پنهان با «tenant _ id».
اولویت ها/سهمیه ها - با توجه به برنامه ها (VIP ها نباید از رفتار شروع کننده رنج ببرند).
13) چک لیست پیش فروش
- مدت زمان و مهلت پایان به پایان و سازگار است.
- Retrays محدود هستند، فقط برای عملیات idempotent، با عقب نشینی + jitter.
- آستانه CB با داده های آزمون بار توجیه می شود.
- مسیرهای سقوط وجود دارد، سریع و امن ؛ سیاست کش تعریف شده است.
- انزوا bulkhead: استخر جداگانه/صف/محدودیت.
- متریک/مسیرهای پیاده روی/سیاهههای مربوط تخریب پرچم و کشورهای CB.
- مستندات قرارداد پاسخ (HTTP/gRPC) با هدر نمونه/کد.
- سناریوهای هرج و مرج و روزهای بازی به طور منظم ؛ يه کتاب راهنما هست.
14) خطاهای معمول
هیچ timeouts → retreats «تمام راه» و آبشار سقوط وجود دارد.
تنها جهانی CB به جای انتخابی (نقطه پایانی/روش) - شکست های غیر ضروری.
سوئیچ باز بدون fallback → صفحه نمایش «خالی» به جای UX تخریب شده.
Retray without jitter → طوفانهای همزمان درخواستها.
خنک کردن طولانی مدت با شکست های کوتاه مدت یا خیلی کوتاه با حالت های پایدار - «فلیپ فلاپ».
عدم وجود دیواره - تخلیه استخرهای مشترک و «مسدود کردن سر خط».
15) انتخاب استراتژی سریع
خواندن از اهمیت بالایی برخوردار است: CB + cache از پاسخ های قدیمی + hedging (اقتصادی).
سوابق/پرداخت: زمان بندی دقیق، حداقل بازپرداخت، کلید های idemotency، بدون بازپرداخت کثیف.
API های خارجی: CB با آستانه تهاجمی، تطبیقی سرد کردن، throttling سخت.
میکروسرویس های بارگذاری پالس: لبه ها، کلاه ها در هر همزمانی، اولویت بندی VIP.
نتیجه گیری
قطع کننده مدار و تخریب مدیریت شده «بیمه» معماری هستند: آنها شکست های هرج و مرج را به رفتار قابل پیش بینی تبدیل می کنند. پاک کردن زمان، عقب نشینی های محدود، استخرهای جدا شده، مسیرهای عقب متفکرانه و تله متری، سیستم را در برابر خرابی وابستگی مقاوم می کند و SLO ها را حتی در دوره های اوج و سقوط نگه می دارد.