Logo GH

سیاست های مجدد و عقب نشینی

تکرارها به زنده ماندن موقت کمک می کنند، اما اگر نادرست پیکربندی شوند، باعث ایجاد بهمن ترافیک، تکرار عملیات و سقوط آبشار می شوند. یک سیاست قابل اعتماد retray همیشه با مهلت/زمان بندی شروع می شود، به حساب idempotency طول می کشد و با استفاده از عقب نشینی + jitter.

1) اصول اساسی

1. اولین وقفه/مهلت، پس از آن عقب نشینی. تکرار بدون محدودیت زمانی فقط شکست را طولانیتر میکند.
2. Retray - فقط برای عملیات ایمن/idempotent. برای موارد ناامن - از طریق کلید های idemotency و تضمین های معامله.
3. عقب نشینی اجباری است. نمایی یا GCRA مانند با لرزش به desynchronize امواج.
4. تعداد تلاش ها و زمان کل بودجه را محدود کنید. SLO کاربران را ترک نکنید.
5. به سیگنال های زیرساختی احترام بگذارید. '429/503' + 'Retry-After'، وضعیت قطع کننده مدار، محدودیت صف.

2) مدت زمان و مهلت (انتشار مهلت)

Request timeout <SLO service, deadline در پایین زنجیره منتشر می شود (HTTP headers/gRPC context).
ترکیب اتمام وقت: مجموع (اولین تلاش + برگشت + بعدی) ≤ مهلت کاربر.
وقفه های مختلف برای خواندن/ضبط: پرونده ها کوتاه تر و سخت تر هستند ؛ خواندن اجازه می دهد هجینگ.

3) Idempotency و تکرار ایمن

خواندن (GET/idempotent RPC): با خیال راحت با «5xx»، «UNAVAILABLE»، زمان بندی شبکه تکرار می شود.

سوابق:
  • استفاده از «Idempotency-Key» (HTTP) یا درخواست-ID در مرز ؛ سرور باید deduplicate کند.
  • نوشتن کنترل idempotent: «upsert», «حداقل یک بار» + جبران (حماسه).
  • پرداخت های خارجی/تسویه حساب - فقط با کلید های idemotent و ورود به سیستم معامله.

4) الگوریتم های پشتیبان گیری

نمایی: 'پایه 2 ^ تلاش'، محدود شده توسط 'max _ backoff'.
تزئین Jitter (کامل/لرزش برابر) - تصادفی در محدوده به desynchronize مشتریان.
GCRA/Token-Bucket مانند تاخیر: مطابق با محدودیت نرخ.
Borders: 'initial _ backoff' (50-200 ms خوانده می شود ؛ سوابق 200-500 میلی ثانیه)، 'max _ backoff' (1-5 ثانیه)، 'max _ elapsed' (به عنوان مثال، 3-10 ثانیه).

الگوی توصیه شده بازگشتی نمایی + jitter کامل است.

5) تکرار/عدم تکرار سیاست های تصمیم گیری

تکرار می کنیم در:
  • خطاهای شبکه/زمان بندی، «429» (با احترام «Retry-After»)، «نرم» «5xx» («502/503/504»)، gRPC «UNAVAILABLE/DEADLINE _ EXCESSED».
تکرار نکنید وقتی:
  • '4xx' (به جز '409/429/408' در برخی از حالات), خطاهای کسب و کار, '401/403', خطاهای اعتبار سنجی, صریح 'DoNotRetry' flag.
استثناهای هوشمند:
  • '409 Conflict' - گاهی اوقات با تاخیر پس از اجماع/قفل تکرار می شود.
  • '404' برای خواندن دائمی سازگار - یک یا دو بار retray با عقب نشینی کوچک.

6) کلاه همزمانی و «طوفان retray»

محدود کردن بازپرداخت همزمان در هر مشتری/در هر مستاجر/در هر نقطه پایانی.
محدودیت کل تلاش در هر درخواست (به عنوان مثال،. 2-3).
از طریق کنترل پذیرش، نقاط پایانی داغ را کاهش دهید تا صف ها را افزایش ندهید.

7) تعامل با قطع کننده مدار و محدودیت ها

اگر CB باز باشد، به طور مستقیم انجام نمی شود - به عقب برگردید یا منتظر نمونه های نیمه باز باشید.
در '429' - احترام 'Retry-After' ؛ اگر نه، از «نرم» استفاده کنید.
Retrays می تواند فشار را افزایش دهد ؛ آستانه های تطبیقی را اعمال کنید («max _ attempts» پایین تر برای یک حادثه).

8) پروتکل ها و قراردادها

وب سایت ها

کد ها: «408/429/5xx».
عنوان ها: «Retry-After»، خانواده «RateLimit-»، «Idempotency-Key»، «Request-Id».
مشتری باید «X-Request-Timeout »/« Deadline-At» را ارسال کند (اگر چنین است).

gRPC

استفاده از زمینه با یک مهلت ؛ احترام 'UNAVAILABLE', 'DEADLINE _ EXCEEDED', retray policies per method.
برای RPC های idempotent، شامل retrays ؛ برای جهش - تنها با حمایت idemotency.

9) صف، وظایف پس زمینه و ادغام

گردانندههای حداقل یک بار → کنشهای idempotent، تقسیم کلید.
صف تأخیر برای برگشت بین تلاش ها (به عنوان مثال، 5s/30s/2m).
صف نامه مرده (DLQ) با محدودیت تلاش و پردازش دستی.
Outbox/CDC - به طوری که تکرار یکپارچگی معامله را به خطر نمی اندازد.

10) مصون سازی در مقابل تلاش

هجینگ برای خواندن بسیار مهم در تأخیر دم مفید است.
محدودیت: بیش از X٪ از درخواست ها، تاخیر شروع گریس (به عنوان مثال، تاخیر p95)، لغو بازنده.
از hedging برای نوشتن عملیات بدون idempotency قوی استفاده نکنید.

11) تله متری و مشاهده پذیری

Теги: 'tenant _ id', 'endpoint', 'attempt', 'decision' (retry/skip), 'reason', 'backoff _ ms', 'deadline _ ms', 'idempotency _ key'.
معیارها: سهم عقب نشینی، موفقیت پس از عقب نشینی، p95/p99 «پایان به پایان»، تعداد مهلت های بیش از حد، تحریک CB.
سیاهههای مربوط به حسابرسی: بالا N «پر سر و صدا» کلید/endpoints، همبستگی با 429/503.

12) آزمایش و هرج و مرج

پروفایل ها: «اره» (پشت سر هم)، «طوفان» (زمان های جرم)، خطاهای «چسبنده» (هر Nth)، دم های تأخیر.
Torus limiter/cache/queue failures, clock-skew.
بررسی می کند که کل مدت زمان (تلاش + تلاش) متناسب با SLO است.

13) شبه کد سیاست

pseudo handle(req, deadline):
attempt = 0 backoff = initial()
while attempt < MAX_ATTEMPTS and now() < deadline:
attempt += 1 with timeout(per_attempt_timeout(deadline, attempt)):
try:
resp = call(req)
if isRetryableStatus(resp): raise Retryable(resp. status)
return resp except Retryable as e:
if circuit. isOpen(dep) or! isIdempotent(req): break sleep(jitter(backoff))
backoff = min(exp(backoff), MAX_BACKOFF)
except NonRetryable:
break return fail_or_fallback(req)

14) قالب پیکربندی (مثال)

yaml retries:
default:
max_attempts: 3 initial_backoff_ms: 150 max_backoff_ms: 2000 strategy: exponential_full_jitter respect_retry_after: true per_attempt_timeout_fraction: 0. 4 # 40% of remaining deadline hedging:
enabled: false read_heavy:
max_attempts: 4 initial_backoff_ms: 80 max_backoff_ms: 1200 hedging:
enabled: true start_after_p95_ms: 300 max_extra_requests_ratio: 0. 05 write_strict:
max_attempts: 2 initial_backoff_ms: 250 max_backoff_ms: 1000 idempotency_required: true

limits:
concurrent_retries_per_tenant: 100 concurrent_retries_per_endpoint: 20

15) چک لیست پیش فروش

  • مهلت انتشار از طریق تماس ؛ مدت زمان ≤ SLO
  • الگوریتم برگشت با لرزش ؛ پارامترهای تایید شده توسط آزمون بار.
  • IDempotence: کلید/سیاهههای مربوط/جبران خسارت برای سوابق.
  • سیاست های بازپرداخت برای خواندن و سوابق متفاوت است ؛ احترام به «تلاش دوباره پس از».
  • رقابت مجدد و تعداد کل تلاش ها محدود است.
  • ادغام با قطع کننده مدار و محدودیت سرعت پیکربندی شده است.
  • تله متری: برچسب ها، معیارها، سیاهههای مربوط به دلیل ؛ داشبورد p95/p99، سهم موفقیت پس از بازپرداخت.
  • تست «طوفان» و دم تاخیر، DLQ برای وظایف.
  • مستندات مشتری: کدها/عناوین، نمونه های بازپرداخت و لغو.

16) خطاهای معمول

تکرار بدون وقفه/مهلت «انتظارات ابدی» است.
مکث ثابت بدون لرزش - امواج همزمان و خود خرابکاری DDoS.
Retrays سوابق ناامن بدون idempotency - تکراری و desynchronization.
نادیده گرفتن سیگنال های «Retry-After» و CB - افزایش حادثه.
تنگناها در صف به دلیل عدم وجود کلاه و کنترل پذیرش.
عدم تله متری از دلایل/راه حل های retrays - «پرواز کور».

17) دستور العمل های سریع

API عمومی می خواند: 3 تلاش، «اولیه = 100ms»، «حداکثر = 1S»، لرزش کامل، مصون سازی تا 5٪ از ترافیک.
سوابق بحرانی (پرداخت): 1-2 حداکثر تلاش, اتمام وقت دقیق, اجباری 'Idempotency-کلید', بدون مصون سازی.
یکپارچگی خارجی: احترام '429/Retry-After'، 'max _ attempts = 3'، 'max _ backoff = 2-5s'، محدودیت جریان خروجی.
وظایف پس زمینه: عقب ماندگی تاخیر (5s → 30s → 2m)، DLQ، کنترل کننده های بی نظیر.

نتیجه گیری

یک سیاست تکرار خوب، تعادل بین بهبود سریع و شکست کنترل شده است. مهلت ها، idempotence، عقب نشینی نمایشی با jitter، محدود کردن رقابت و احترام به سیگنال های زیرساخت، retrays را از «طوفان» به ابزاری برای بهبود قابلیت اطمینان و نگهداری SLO تبدیل می کند.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.