GH GambleHub

اتمام وقت и کنترل مدار

1) چرا شما به آن نیاز دارید

سیستم ها از یک شکست «کشنده» سقوط نمی کنند، بلکه از تجمع تاخیر و «موج» رد می شوند. زمانبندی زمان انتظار را محدود می کند و منابع را آزاد می کند و کنترل مدار (قطع کننده + ریختن + رقابت تطبیقی) مانع از تخریب در امتداد زنجیره وابستگی می شود. هدف این است که p95/p99 در مرزهای هدف حفظ شود و در دسترس بودن برای شکست های جزئی حفظ شود.


2) تعاریف اساسی

2. 1 انواع وقفه (L7/L4)

Connect timeout: برقراری ارتباط TCP/TLS

TLS/Handshake timeout - دست دادن TLS/HTTP2 مقدمه.
Write timeout - ارسال یک درخواست (از جمله یک بدن).
خواندن timeout - منتظر اولین بایت پاسخ و/یا کل بدن است.
Idle/Keep-Alive timeout - اتصال غیر فعال.
مهلت کلی - مهلت «سخت» برای کل درخواست (پایان به پایان).

2. 2 بودجه مهلت

هدف را انتخاب کنید «deadline _ total» و تقسیم بر مراحل:
  • 'ورود (دروازه) + authZ + برنامه + DB/کش + PSP خروجی'.
مثال برای پرداخت «POST» (هدف 400 میلی ثانیه):
  • دروازه: 30 میلی ثانیه،
  • کاربرد: 120 میلی ثانیه،
  • DB: 120 میلی ثانیه،
  • PSP: 100 میلی ثانیه،
  • حاشیه: 30 میلی ثانیه.

2. ۳ انتشار و لغو

'deadline '/' timeout' باید به زنجیره منتقل شود (context, headers, gRPC deadline). در انقضا - لغو عملیات پس زمینه (لغو/ctx لغو), قفل/semaphores روشن.


3) استراتژی های تنظیم زمان

1. بالا به پایین: بر اساس SLO و p95 - تعیین مهلت پایان به پایان، و سپس به زیر تقسیم می شود.
2. شناسایی مسیرهای «گران» (دانلود فایل، گزارش، PSPs خارجی) - فرد دیگر، اما محدود است.

3. Idempotent در مقابل نوشتن:
  • idempotent (GET/تکرار وضعیت) - کوتاه تر، تهاجمی تر ؛
  • نوشتن/پولی - کمی طولانی تر، اما با یک تکرار واحد و idemotency.
  • 4. فارغ التحصیلی توسط برنامه ها/مستاجران (شرکت می تواند زمان طولانی تر، اما موازی کمتر).


4) قطع کننده مدار: مدل ها و پارامترها

4. 1 سیاست های راه اندازی

نرخ شکست - میزان خطا ≥ X٪ در پنجره پرس و جو/زمان N.
شکستهای متعاقب: M شکستهای متوالی.
نرخ تماس آهسته - نسبت تماس های طولانی تر از آستانه T.
کلاس های خطا: timeouts/5xx/connection-reset → «fatal», 4xx - را به حساب نمی.

4. 2 شرایط

بسته - پرش همه چیز، جمع آوری آمار.
باز - شکست فوری (موجب صرفه جویی در منابع، وابستگی را سرکوب نمی کند).
نیمه باز - «نمونه» کوچک (N درخواست) برای «آزمایش آب».

4. 3 اضافات مفید

Bulkhead: مجموعه ای از موضوعات/اتصالات در هر وابستگی به طوری که فرد همه چیز را «از بین نمی برد».
همزمانی تطبیقی: محدودیت همروندی خودکار (الگوریتمهای مشابه AIMD/Vegas) توسط تأخیر مشاهده شده.
کاهش بار: خرابی/تخریب زودهنگام در صورت کمبود منابع محلی (صف، CPU، مکث GC).


5) تعامل: وقفه، عقب نشینی، محدودیت

اولین مهلت، پس از آن retray: هر تکرار باید به یک مهلت مشترک متناسب باشد.
عقب نشینی + jitter برای تکرار ؛ احترام به «Retry-After» و بودجه مجدد تلاش کنید.
محدود کردن نرخ: با باز کردن شکن - محدودیت های پایین تر به طوری که طوفان را تشدید نمی کند.
Idempotency: اجباری در عملیات نوشتن (برای جلوگیری از طول می کشد با «گنگ» وقفه).
که در آن به عقب نشینی: ترجیحا در لبه (مشتری/دروازه) به جای عمیق در داخل.


6) ارزش هدف عملی (معیار)

Public read API: end-to-end '200-500 ms', خواندن timeout '100-300 ms'.
نوشتن انتقادی (پرداخت): 300-800 ms 'e2e ؛ PSP خارجی ≤ «250-400 میلی ثانیه».
اتصال/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 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 _ bucket'

'timeouts _ total {stage = connectخوانده شدهنوشتنآخرین مهلت} '
'circuit _ state {dependency}': 0/1/2 (بسته/نیمه/باز)
'slow _ call _ rate', 'failure _ rate'
'active _ concurrency {مسیر، وابستگی}'
'shed _ requests _ total {reason}' (ریختن بار)
'retry _ total {reason}', 'retry _ budget _ used'

8. 2 مسیرهای پیاده روی

دهانه: ورود → رسیدگی → DB/Redis → خارجی.
ویژگی ها: «timeout _ ms _ target»، «circuit _ state»، «queue _ time _ ms».
نمونه ها: قله های p99 را به شناسه ردیابی خاص گره بزنید.

8. 3 هشدار

'p99 _ latency {critical}'> هدف X دقیقه در یک ردیف است.
'timeout _ rate {dependency}' پرش> Y%.
انتقال مکرر به «باز »/« فلاپ» شکن.
رشد 'shed _ requests _ total' با CPU/GC بالا.


9) همزمانی تطبیقی و کاهش بار

9. ایده های 1

اتوماسیون موازی را کاهش می دهد به عنوان دم تاخیر رشد:
  • AIMD: به آرامی افزایش می یابد، به شدت کاهش می یابد.
  • وگاس مانند: نگه داشتن زمان صف.
  • توکن محور: هر درخواست توکن را «میسوزاند» ؛ توکن ها بر اساس سرعت اندازه گیری شده صادر می شوند.

9. 2 پیاده سازی

سمافورهای محلی در هر مسیر ؛ هدف این است که «queue _ time» را زیر آستانه نگه دارید.
«فیوز» جهانی (RPS حاشیه ای/رقابتی) در دروازه.
اگر کمبود CPU/اتصالات وجود دارد، شکست زود هنگام قبل از اجرای منطق (429/503 با 'Retry-After').


10) سناریوهای تست و هرج و مرج

تزریق تاخیر: به طور مصنوعی 50-300 میلی ثانیه در هر وابستگی اضافه کنید.
از دست دادن بسته/dup/drop (tc/tbf، Toxiproxy).
چرخش دستگیره: کاهش استخرهای اتصال، افزایش بار به اشباع.
کشتن/تخریب یک منطقه/شارد (عدم دسترسی جزئی).

چک: «شکست» طوفان retray نیست; شکن باز می شود قابل پیش بینی ؛ آیا صف در حال رشد است ؟


11) ضد گلوله

یک جهانی «خواندن زمان» بدون جزئیات اتصال/TLS/در هر مرحله.
فقدان یک مهلت مشترک → بازپرداخت فراتر از SLO است.
Retray بدون لرزش و بدون تلاش مجدد بودجه.
اتصالات «ابدی» بدون وقفه بیکار → توصیفگرهای نشت.
Breaker 4xx را به عنوان اشتباهات مرگبار شمارش می کند.
بدون لغو/لغو → کار پس زمینه پس از اتمام وقت مشتری ادامه می یابد.
وقفه ها برای شبکه های موبایل/ناپایدار بسیار طولانی هستند.


12) مشخصات iGaming/امور مالی

نوشتن بحرانی (سپرده ها/خروجی ها): یک تکرار کوتاه با Idempotency-Key، سپس '202 Accepted' + نظرسنجی به جای انتظارات بی نهایت.
PSP/بانکداری: سیاست های جداگانه توسط ارائه دهنده/منطقه (برخی از کندتر).
پرداخت های مسئول و محدودیت ها: برای قفل/بررسی - سریع '423/409'، معاملات «حلق آویز» کشش نیست.
گزارش/تجمع - اجرا به صورت ناهمگام (دسته ای + منابع وضعیت).


13) تولید لیست آمادگی

  • پایان دادن به پایان مهلت مسیر بحرانی (GET/POST) تعریف شده است.
  • بودجه توسط مرحله ؛ انتشار مهلت فعال شده است.
  • اتصال/TLS/خواندن/نوشتن/idle پیکربندی در دروازه و مشتریان.
  • قطع کننده مدار با آستانه نرخ شکست و تماس آهسته ؛ منطق نیمه باز
  • Bulkheads در وابستگی ؛ محدودیتهای همروندی در هر مسیر
  • ریختن بار قبل از منطق کسب و کار در طول اضافه بار اجرا می شود.
  • ادغام با عقب نشینی: عقب نشینی + jitter، تلاش مجدد بودجه، احترام 'تلاش-پس از'.
  • Idempotency نوشتن، 'Idempotency-کلید' و صندوق خروجی برای رویدادها.
  • معیارها: timeout/slow-call/breaker/queue time/رقابتی.
  • آزمون هرج و مرج: تزریق تاخیر/زیان/شکست، تخریب مناطق.
  • مستندات مشتری: زمان بندی نمونه، کدهای پاسخ، راهنمایی های پخش.

14) TL ؛ دکتر متخصص

به هر درخواست یک مهلت سخت بدهید، آن را در مراحل مختلف ترتیب دهید و آن را در زنجیره گسترش دهید. مدیریت گسل از طریق قطع کننده مدار + bulkheads + همزمانی تطبیقی + ریختن بار. تکرار - تنها در مهلت، با jitter و بودجه ؛ نوشتن - فقط idempointent. اندازه گیری زمان وقفه/تماس آهسته، حالت شکن و «queue _ time»، به طور منظم آزمون های هرج و مرج را اجرا کنید.

Contact

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

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

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

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

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

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