إعادة المحاولة والتراجع عن السياسات
تساعد التكرارات (الإعادات) على النجاة من الإخفاقات المؤقتة، ولكن إذا تم تكوينها بشكل غير صحيح، فإنها تسبب انهيارات ثلجية في حركة المرور وتكرار العمليات والسقوط المتتالي. تبدأ سياسة إعادة التدوير الموثوقة دائمًا بالمواعيد النهائية/المهلات الزمنية، وتأخذ في الاعتبار الخصوصية وتستخدم التراجع + الرعب.
1) المبادئ الأساسية
1. المهلة/الموعد النهائي أولاً، ثم التراجع. التكرار بدون حد زمني يطيل الفشل فقط.
2. إعادة - فقط للعمليات الآمنة/الخفية. بالنسبة للأشخاص غير الآمنين - من خلال مفاتيح الخصوصية وضمانات المعاملات.
3. التراجع إلزامي. أسي أو يشبه GCRA مع النبض لإلغاء تزامن الموجات.
4. الحد من عدد المحاولات ومجموع وقت الميزانية. لا تترك SLO للمستخدم.
5. احترم إشارات البنية التحتية. «429/503» + «Retry-After»، حالة قاطع الدائرة، حدود قائمة الانتظار.
2) المهلة والمواعيد النهائية (نشر الموعد النهائي)
طلب مهلة <خدمة SLO، الموعد النهائي ينتشر أسفل السلسلة (HTTP headers/gRPC السياق).
تركيبة المهلة: المجموع (المحاولة الأولى + التراجع + الموعد النهائي للمستخدم ≤.
مهل زمنية مختلفة للقراءة/السجلات: السجلات أقصر وأكثر صرامة ؛ تسمح بالتحوط.
3) الاستخفاف والتكرار الآمن
يقرأ (GET/idempotent RPC): يتكرر بأمان مع «5xx»، «UNAILABLE»، مهلة الشبكة.
السجلات:- استخدام «مفتاح الخصوصية» (HTTP) أو معرف الطلب على الحدود ؛ الخادم يجب أن يسقط.
- اكتب معالجات خفية: «مزعجة»، «مرة واحدة على الأقل» + تعويض (ملحمة).
- المدفوعات/التسويات الخارجية - فقط مع المفاتيح الخفية وسجل المعاملات.
4) خوارزميات التراجع
الأسي: «القاعدة 2 ^ محاولة»، يحدها «max _ backoff».
جيتر مزخرف (كامل/متساوٍ) - عشوائية في النطاق لإلغاء تزامن العملاء.
التأخيرات الشبيهة بـ GCRA/Token-Bucket: بما يتفق مع حدود الأسعار.
الحدود: «الأولي _ التراجع» (يقرأ 50-200 مللي ثانية ؛ 200-500 ms records)، «max _ backoff» (1-5 s)، «max _ elapsed» (على سبيل المثال، 3-10 s).
النمط الموصى به هو التراجع الأسي + النبض الكامل.
5) كرر/لا تكرر سياسات القرار
نكرر:- أخطاء/مهلات الشبكة، «429» (باحترام «Retry-After»)، «soft' 5xx» («502/503/504»)، gRPC «غير متوفر/الموعد النهائي _ تجاوز».
- «4xx» (باستثناء «409/429/408» في بعض السيناريوهات)، أخطاء العمل، «401/403»، أخطاء التحقق، علم «DoNotRetry» الصريح.
- «صراع 409» - يتكرر أحيانًا مع تأخير بعد الإجماع/الأقفال.
- «404» لقراءات متسقة بشكل دائم - مرة أو مرتين تتراجع مع تراجع صغير.
6) قبعات متزامنة و «عاصفة العودة»
الحد من عمليات إعادة الدفع المتزامنة لكل عميل/لكل مستأجر/لكل نقطة نهاية.
الحد الإجمالي للمحاولات لكل طلب (على سبيل المثال 2-3).
أبطئ نقاط النهاية الساخنة من خلال التحكم في القبول حتى لا تضخم قوائم الانتظار.
7) التفاعل مع قاطع الدائرة والحدود
إذا كان CB مفتوحًا، فلا تقوم بإعادة التصوير مباشرة - اذهب إلى الاحتياط أو انتظر عينات «نصف مفتوحة».
في '429' - الاحترام 'Retry-After' ؛ إذا لم يكن الأمر كذلك، استخدم التراجع «الناعم».
يمكن أن تزيد عمليات إعادة التصوير من الإجهاد ؛ تطبيق عتبات تكيفية (أقل «الحد الأقصى للمحاولات» للحادث).
8) البروتوكولات والعقود
HTTP
الرموز: «408/429/5xx».
الرؤوس: «Retry-After»، «Family RateLimit-»، «Idempotency-Key»، «Request-Id».
يجب على العميل إرسال "X-Request-Timeout'/" الموعد النهائي" (إذا كان الأمر كذلك).
gRPC
استخدام السياق مع تحديد موعد نهائي ؛ احترام «غير متاح»، «الموعد النهائي _ تجاوز»، إعادة صياغة السياسات لكل طريقة.
'1' فيما يتعلق بالمراكز الإقليمية لوقاية النباتات الخفية، تشمل عمليات إعادة الطباعة ؛ للطفرات - فقط بدعم الخصوصية.
9) قوائم الانتظار والمهام الأساسية وعمليات الدمج
متعاملون مرة واحدة على الأقل → أفعال غبية، تفريغ رئيسي.
تأخير قائمة الانتظار للتراجع بين المحاولات (على سبيل المثال، 5s/30s/2m).
قائمة انتظار بالحروف الميتة (DLQ) مع حد من المحاولات والمعالجة اليدوية.
Outbox/CDC - بحيث لا تعرض الإعادة نزاهة المعاملات للخطر.
10) التحوط مقابل ريتريس
التحوط مفيد للقراءات النقدية للغاية في زمن انتقال الذيل.
الحد: لا يزيد عن X٪ من الطلبات، وتأخير بدء السماح (على سبيل المثال، زمن الوصول p95)، وإلغاء الخاسرين.
لا تطبق التحوط لكتابة العمليات دون حماقة قوية.
11) القياس عن بعد وقابلية الرصد
Теги: «المستأجر _ المعرف»، «نقطة النهاية»، «المحاولة»، «القرار» (إعادة النظر/التخطي)، «السبب»، «التراجع _ ms'،» الموعد النهائي _ ms'، «الخصوصية _ المفتاح».
المقاييس: حصة التراجعات، النجاح بعد التراجعات، p95/p99 «من طرف إلى طرف»، عدد المواعيد النهائية التي تم تجاوزها، تشغيل CB.
سجلات التدقيق: مفاتيح/نقاط النهاية «الصاخبة» العلوية N، الارتباط بـ 429/503.
12) الاختبار والفوضى
الملفات الشخصية: «المنشار» (انفجار الهدوء)، «العاصفة» (المهلات الجماعية)، الأخطاء «اللزجة» (كل Nth)، ذيول الكمون.
فشل Torus limiter/cache/قائمة الانتظار، انحراف الساعة.
يتحقق من أن المدة الإجمالية (المحاولات + التراجع) تتناسب مع SLO.
13) Policy pseudocode
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) قائمة مرجعية قبل البيع
- نشر المواعيد النهائية من خلال المكالمات ؛ المدة الإجمالية ≤ المنظمة.
- خوارزمية التراجع مع نفث ؛ تم التحقق من صحة البارامترات عن طريق اختبار التحميل.
- IDempotence: المفاتيح/السجلات/التعويضات عن السجلات.
- تختلف سياسات إعادة الدرج بالنسبة للقراءات والسجلات ؛ الاحترام «إعادة المحاولة بعد».
- القدرة التنافسية المعاودة والعدد الإجمالي للمحاولات محدودان.
- يتم تكوين التكامل مع قاطع الدائرة وحدود السعر.
- القياس عن بعد: العلامات والمقاييس وسجلات الأسباب ؛ لوحات القيادة p95/p99، حصة النجاح بعد إعادة التصوير.
- اختبارات «العواصف» وذيل الكمون، DLQ للمهام.
- وثائق العملاء: الرموز/العناوين، أمثلة التراجع والإلغاء.
16) أخطاء نموذجية
الإعادة بدون مهلات/مواعيد نهائية هي «توقعات أبدية».
توقف ثابت بدون نفث - موجات متزامنة وتخريب ذاتي DDoS.
إعادة تدوين السجلات غير الآمنة دون الخصوصية - التكرار وعدم التزامن.
تجاهل إشارات «Retry-After» و CB - تصاعد الحادث.
اختناقات في قوائم الانتظار بسبب نقص القبعات والتحكم في القبول.
عدم وجود قياس عن بعد لأسباب/حلول إعادة التصوير - «الطيران الأعمى».
17) وصفات سريعة
تقرأ واجهة برمجة التطبيقات العامة: 3 محاولات، «أولية = 100 مللي ثانية»، «كحد أقصى = 1 ثانية»، نفث كامل، تحوط حتى 5٪ من حركة المرور.
السجلات الحرجة (الدفع): 1-2 محاولات كحد أقصى، مهلة صارمة، «مفتاح الخصوصية» الإلزامي، بدون تحوط.
التكاملات الخارجية: احترام «429/Retry-After»، «max _ traits = 3»، «max _ backoff = 2-5s»، حدود التدفق الصادرة.
مهام الخلفية: تأخير التراجع (5s → 30s → 2m)، DLQ، معالجات خفية.
استنتاج
سياسة التكرار الجيدة هي التوازن بين الانتعاش السريع والفشل الخاضع للرقابة. المواعيد النهائية، والغباء، والتراجع الأسي مع النشوة، والحد من المنافسة واحترام إشارات البنية التحتية، تحول عمليات العودة من «العاصفة» إلى أداة لتحسين موثوقية SLO والاحتفاظ بها.