GH GambleHub

المهلة и التحكم بالدائرة

1) لماذا تحتاجه

لا تسقط الأنظمة من فشل «مميت» واحد، ولكن من تراكم التأخيرات وتراجع «الموجة». تحد المهلة من وقت الانتظار وتحرر الموارد، ويمنع التحكم في الدائرة (كسر + التخلص + المنافسة التكيفية) التدهور من الانتشار على طول سلسلة التبعيات. الهدف هو إبقاء p95/p99 ضمن الحدود المستهدفة والحفاظ على توافر الإخفاقات الجزئية.


2) التعاريف الأساسية

2. 1 أنواع المهلات (L7/L4)

توصيل المهلة - إنشاء اتصال TCP/TLS.
TLS/مهلة المصافحة - المصافحة TLS/HTTP2 التمهيد.
اكتب مهلة - أرسل طلبًا (بما في ذلك الجثة).
اقرأ المهلة - انتظر أول بايت من الاستجابة و/أو الجسم بأكمله.
مهلة Idle/Keep-Alive - اتصال غير نشط.
الموعد النهائي العام - الموعد النهائي «الصعب» لكامل الطلب (من البداية إلى النهاية).

2. 2 - ميزانية الموعد النهائي

اختر الهدف «الموعد النهائي _ المجموع» وقسمه على مراحل:
  • «ingress (بوابة) + authZ + تطبيق + DB/cache + outbound PSP».
مثال على المدفوعات "POST' (هدف 400 ms):
  • بوابة: 30 مللي ثانية
  • التطبيق: 120 مللي ثانية،
  • DB: 120 ms،
  • PSP: 100 مللي ثانية،
  • هامش: 30 مللي ثانية.

2. 3 الانتشار والإلغاء

يجب تمرير "deadline "/" timeout' أسفل السلسلة (السياق، الرؤوس، gRPC الموعد النهائي). عند انتهاء الصلاحية - قم بإلغاء عمليات الخلفية (إلغاء/إلغاء ctx)، قفل/سيمافورات شفافة.


3) استراتيجيات تحديد المهلة

1. من الأعلى إلى الأسفل: بناءً على SLO و p95 - تحديد الموعد النهائي من النهاية إلى النهاية، ثم تقسيمه إلى مهلات فرعية.
2. حدد المسارات «باهظة الثمن» (تنزيلات الملفات، التقارير، PSPs الخارجية) - فردية أطول، لكنها محدودة.

3. الأحمق مقابل الكتابة:
  • الخصوصية (تكرار GET/status) - أقصر وأكثر عدوانية ؛
  • الكتابة/النقدية - أطول قليلاً، ولكن مع تكرار وحيد واستخفاف.
  • 4. التخرج من قبل الخطط/المستأجرين (يمكن أن يكون للمؤسسة مهلة أطول، ولكن أقل توازيًا).


4) قاطع الدائرة: النماذج والمعايير

4. 1 إطلاق السياسات

معدل الفشل - معدل الخطأ ≥ X٪ على نافذة الاستعلام/الوقت N.
الإخفاقات التبعية: إخفاقات M متتالية.
معدل المكالمات البطيئة - نسبة المكالمات أطول من العتبة T.
فئات الخطأ: المهلة/5xx/connection-reset → «قاتل»، 4xx - لا تأخذ في الاعتبار.

4. 2 الشروط

مغلق - يتخطى كل شيء، ويجمع الإحصائيات.
فشل فوري (يوفر الموارد ولا يسحق التبعية).
نصف مفتوح - «عينات» صغيرة (طلبات N) لـ «اختبار الماء».

4. 3 إضافات مفيدة

Bulkhead: مجموعة من الخيوط/الوصلات لكل تبعية حتى لا «يمتص» المرء كل شيء.
التزامن التكيفي: تقييد التزامن التلقائي (خوارزميات AIMD/Vegas الشبيهة) عن طريق زمن الوصول الملحوظ.
Load Shedding: الفشل/التدهور المبكر في حالة نقص الموارد المحلية (قوائم الانتظار، وحدة المعالجة المركزية، توقف GC).


5) التفاعل: المهلة، التراجعات، الحدود

الموعد النهائي الأول، ثم العودة: يجب أن يتناسب كل تكرار مع الموعد النهائي المشترك.
Backoff + jitter للإعادة ؛ احترام «إعادة المحاولة بعد» وإعادة التجربة.
تحديد المعدل: مع فتح الكاسر - حدود أقل حتى لا تشتد العاصفة.
الخصوصية: إلزامية في عمليات الكتابة (لتجنب أخذ مهلة «غبية»).
مكان التراجع: يفضل أن يكون على الحافة (العميل/البوابة) بدلاً من العمق الداخلي.


6) القيم العملية المستهدفة (النقاط المرجعية)

قراءة واجهة برمجة التطبيقات للجمهور: من طرف إلى طرف «200-500 مللي ثانية»، اقرأ المهلة «100-300 مللي ثانية».
الكتابة النقدية (المدفوعات): "300-800 ms' e2e ؛ ≤ PSP الخارجي "250-400 ms'.
الاتصال/TLS: "50-150 ms' (المزيد - مشكلة الشبكة/اللحام).
الخمول: «30-90 ثانية» (عملاء الهاتف المحمول - أقصر لحفظ البطارية).
تعديل القيم ل p95/p99 والمناطق.


7) التكوينات والأمثلة

7. مبعوث 1 (المجموعة + الطريق، زائف)

yaml clusters:
- name: payments_psp connect_timeout: 100ms type: STRICT_DNS lb_policy: ROUND_ROBIN circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 2000 max_requests: 2000 max_retries: 50 outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50

routes:
- match: { prefix: "/api/v1/payments" }
route:
cluster: payments_psp timeout: 350ms        # per-request deadline idle_timeout: 30s retry_policy:
retry_on: "reset,connect-failure,refused-stream,5xx,gateways"
num_retries: 1 per_try_timeout: 200ms

7. 2 NGINX (محيط)

nginx proxy_connect_timeout 100ms;
proxy_send_timeout  200ms;  # write proxy_read_timeout  300ms;  # read (первый байт/все тело)
keepalive_timeout   30s;
send_timeout     15s;

Быстрый отказ при перегрузке limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 50;

7. 3 gRPC (عميل، Go-pseudo)

go ctx, cancel:= context.WithTimeout(context.Background(), 350time.Millisecond)
defer cancel()
resp, err:= client.Pay(ctx, req) // Deadline передается вниз

7. 4 عميل HTTP (Go)

go client:= &http.Client{
Timeout: 350 time.Millisecond, // общий дедлайн на запрос
Transport: &http.Transport{
TLSHandshakeTimeout: 100 time.Millisecond,
ResponseHeaderTimeout: 250 time.Millisecond,
IdleConnTimeout: 30 time.Second,
MaxIdleConnsPerHost: 100,
},
}

7. 5 Resilience4j (جاوة، زائفة)

yaml resilience4j.circuitbreaker.instances.psp:
slidingWindowType: TIME_BASED slidingWindowSize: 60 failureRateThreshold: 50 slowCallDurationThreshold: 200ms slowCallRateThreshold: 30 permittedNumberOfCallsInHalfOpenState: 5 waitDurationInOpenState: 30s

resilience4j.timelimiter.instances.psp:
timeoutDuration: 350ms

8) إمكانية الملاحظة والتنبيه

8. 1 مقاييس

'http _ client _ requests {endpoint, status}', 'client _ latency _ bukett'

'timeouts _ total {stage = connectقراءةكتابةالموعد النهائي} "
«circuit _ state {التبعية}»: 0/1/2 (مغلق/نصف/مفتوح)
«sow _ call _ rate»، «failure _ rate»
'active _ concurrency {الطريق، التبعية}'
'shed _ requests _ total {reason}' (load sheding)
'retry _ total {reason}', 'retry _ budget _ used'

8. 2 مسارات

الامتدادات: معالج → الدخول → DB/Redis → خارجي.
السمات: «timeout _ ms _ target'،» circuit _ state «،» queue _ time _ ms'.
الممتحنون: تعادل p99 قمم إلى تتبع معين.

8. 3 تنبيهات

«p99 _ latency {حرج}»> يستهدف X دقائق على التوالي.
«timeout _ rate {التبعية}» قفز> Y٪.
التحولات المتكررة إلى قاطع «مفتوح »/« خفق».
نمو 'shed _ الطلبات _ المجموع' مع ارتفاع وحدة المعالجة المركزية/GC.


9) مواكبة التكيف وسفك الأحمال

9. 1 فكرة

تقلل الأتمتة من التوازي مع نمو ذيول الكمون:
  • AIMD: زيادة ببطء، وانخفاض حاد.
  • مثل فيغاس: احتفظ بوقت الانتظار.
  • الرمز: كل طلب «يحرق» الرمز ؛ يتم إصدار الرموز بناءً على السرعة المقاسة.

9. 2 التنفيذ

السيمافورات المحلية لكل مسار ؛ الهدف هو إبقاء «طابور الوقت» تحت العتبة.
«صمام» عالمي (RPS هامشي/تنافسي) على البوابة.
إذا كان هناك نقص في وحدة المعالجة المركزية/الاتصالات، فإن الفشل المبكر قبل تنفيذ المنطق (429/503 مع «Retry-After»).


10) سيناريوهات الاختبار والفوضى

حقن الكمون: يضاف بشكل مصطنع 50-300 مللي ثانية لكل اعتماد.
فقدان العبوة/الإسقاط (tc/tbf، Toxiproxy).
قلب المقبض: قلل من برك الاتصال، ورفع الحمل إلى التشبع.
قتل/تحلل منطقة واحدة/شظية (عدم توافر جزئي).
الشيكات: لا «تفشل» عاصفة العودة ؛ الكسر يفتح بشكل متوقع ؛ ما إذا كانت قائمة الانتظار تتزايد.


11) أنتيباترن

«مهلة قراءة» عالمية واحدة بدون تفاصيل اتصال/TLS/لكل مرحلة.
إن عدم وجود موعد نهائي مشترك لإعادة → يتجاوز SLO.
Retrai بدون رعب وبدون ميزانية إعادة المحاولة.
اتصالات «أبدية» بدون مهلات خاملة → واصفات التسريب.
يعتبر Breaker 4xx أخطاء فادحة.
لا يوجد التراجع/الإجهاض → يستمر عمل الخلفية بعد مهلة العميل.
المهلات طويلة جدًا بالنسبة لشبكات الهاتف المحمول/غير المستقرة.


12) تفاصيل iGaming/Finance

الكتابة النقدية (الودائع/المخرجات): تكرار قصير واحد مع Idempotency-Key، ثم «202 مقبولة» + الاقتراع بدلاً من التوقعات اللانهائية.
PSP/Banking: سياسات منفصلة حسب المزود/المنطقة (بعضها أبطأ).
المدفوعات والحدود المسؤولة: بالنسبة للأقفال/المراجعات - سريعة «423/409»، لا تمدد المعاملات «المعلقة».
الإبلاغ/التجميع - يتم تشغيله بشكل غير متزامن (دفعة + مورد الحالة).


13) قائمة التحقق من الاستعداد

  • الموعد النهائي للمسار الحرج من البداية إلى النهاية (GET/POST).
  • مدرجة في الميزانية حسب المرحلة ؛ تمكين نشر الموعد النهائي.
  • اتصل/TLS/اقرأ/اكتب/اعطل التكوينات على البوابة والعملاء.
  • قاطع الدائرة مع عتبات معدل الفشل وبطيء الاستدعاء ؛ منطق نصف مفتوح صحيح.
  • الحواجز على التبعيات ؛ لكل مسار حدود التزامن.
  • التخلص من الأحمال قبل تنفيذ منطق العمل أثناء الحمل الزائد.
  • التكامل مع التراجعات: التراجع + الترفيه، إعادة التجربة - الميزانية، احترام «إعادة المحاولة بعد».
  • يكتب الخصوصية، «Idempotency-Key» وصندوق الخروج للأحداث.
  • المقاييس: المهلة/الاتصال البطيء/الكسر/وقت الانتظار/التنافس.
  • اختبارات الفوضى: حقن التأخيرات/الخسائر/الإخفاقات، تدهور المناطق.
  • وثائق العملاء: توقيت العينة، رموز الاستجابة، نصائح إعادة التشغيل.

14) TL ؛ د

امنح كل طلب موعدًا نهائيًا صارمًا، وقم بترتيبه على مراحل ووزعه على طول السلسلة. إدارة الأعطال عبر قاطع الدائرة + الحواجز + العملة المتزامنة التكيفية + التخلص من الأحمال. الإعادة - فقط في الموعد النهائي، مع نفحة وميزانية ؛ اكتب - أخرق فقط. قم بقياس المهلة/المكالمة البطيئة، وحالة الكسر و «قائمة الانتظار _ الوقت»، قم بإجراء اختبارات الفوضى بانتظام.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.