GH GambleHub

محدودیت نرخ و کنترل بار

TL ؛ دکتر متخصص

یک مدار قابل اعتماد ترکیبی از محدودیت ها و سهمیه ها در سطوح مختلف (لبه → BFF → servis)، تخصیص منابع منصفانه (در هر مستاجر/کلید/مسیر)، SLO-adaptable throttling و backprescher به جای خاموش کردن خاموش است. استفاده از نشانه/سطل نشتی برای «سرعت»، پنجره کشویی برای سهمیه حسابداری، محدودیت های رقابتی برای عملیات سنگین، کاهش پویا در تخریب و قطع کننده مدار به بالادست شکننده. همه چیز تحت نظر و با بازی است.

1) چرا محدودیت در iGaming/fintech

SLO و پایداری: محافظت در برابر بهمن های برگشتی، قله های مسابقات/رویداد، سنبله های پرداخت.
عدالت: یک مستاجر یا شریک کل بودجه را نمی خورد.
ضد سوء استفاده/رباتها: ورود/ثبت نام, هرزنامه, خراش دادن دایرکتوری.
هزینه: محدود کردن تماس های گران قیمت (KYC، گزارش ها، جمع آوری ها).
انطباق/استفاده منصفانه: سهمیههای رسمی «استفاده منصفانه» در قراردادها.

2) طبقه بندی محدود

دسته بندیاز سوی دیگرنمونه هایی از کلیدها
نرخ (سرعت)RPS پایدار، حفاظت پشت سر هم«api _ key»، «tenant»، «route»، «country»، «BIN»
سهمیه (حسابداری)روز/ماه برای منابع گران«tenant-day»، «partner-month»، «report-type»
همزمانمحدود کردن عملیات سنگین همزمان«پرداخت: ایجاد»، «صادرات: csv»، «محاسبه»
مبتنی بر هزینهنمایش داده شد پیچیده/گران قیمت (GraphQL/جستجو)«پیچیدگی»، اندازه پاسخ
تطبیقیواکنش به SLO/تاخیر/خطاهاجهانی/در هر مسیر
ورود/خروجدریافت وب سایت/تماس های خروجی'webhook-receiver', 'PSP-outbound'

3) الگوریتم ها و جایی که باید اعمال شود

3. 1 سطل توکن (پیش فرض)

پارامترها: «نرخ» (نشانه ها/ثانیه)، «پشت سر هم» (حداکثر حاشیه).
عالی برای خواندن API، پرداخت/وضعیت، BFF.
با یک سطل خالی → 429 + 'Retry-After'.

3. 2 سطل نشتی (به طور متوسط)

تضمین «تخریب» RPS، مفید برای webhooks به طوری که به کارگران نمره نیست.

3. 3 پنجره ثابت در مقابل پنجره کشویی

ثابت - ساده، اما «مرزها» ؛ کشویی - حسابداری منصفانه در پنجره (حداقل/ساعت/روز).
اعمال کشویی برای سهمیه های قراردادی.

3. 4 محدودیت های همزمان

محدود کردن فعالیت های همزمان ایده آل برای صادرات/گزارش، بسته های KYC، پردازش مجدد.
در صورت کمبود - 429/503 + صف/نظرسنجی.

3. 5 هزینه/پیچیدگی محدود کننده

GraphQL/search: «هزینه» را با عمق/کاردینالیتی/پسوندها در نظر بگیرید.
بریده شدن/تخریب درخواست های «گران»، پاسخ با یک اشاره.

4) کلید های اندازه گیری

هر مستاجر (چند اجاره نامه، حقوق صاحبان سهام)،

per-api_key/client_id (همکاران)

در هر مسیر (جهش بحرانی شدید تر)،

در هر کاربر/دستگاه/IP/ASN/جغرافیایی

per-BIN/کشور (روش های پرداخت، حفاظت از صادرکنندگان و ارائه دهندگان)،

در هر روش (دریافت نرم تر، POST/PUT سخت تر).

ترکیب: کلید اصلی + «ضریب ریسک» (حساب جدید، TOR/پروکسی، ریسک بازپرداخت بالا).

5) کنترل کننده سازگار با SLO

فعال کردن کنترل دینامیکی زمانی که SLO در خطر است:
  • Triggers: «p95 latency↑»، «5xx↑»، «len↑ صف»، «اشباع CPU/IO».
  • اقدامات: نرخ پایین تر/پشت سر هم, فعال کردن outlier-ejection, کاهش «گران» مسیرهای, تنزل موقت (بدون زمینه های سنگین/تجمع).
  • بازگشت: گام به گام (25 → 50 → 100٪) هنگام عادی سازی سیگنال های N فواصل متوالی.

6) ادغام معماری

API دروازه (لبه): نرخ اولیه/سهمیه, جغرافیایی/ASN, HMAC/JWT اعتبار, 429/' تلاش مجدد پس از '.
BFF/سرویس مش: محدودیت های نازک در هر مسیر/در هر مستاجر، محدودیت های همزمان، قطع کننده مدار به بالادست.
در داخل سرویس: semaphores برای عملیات سنگین، backprescher در صف، «استخر کار» با اندازه محدود.
Webhooks: یک نقطه پایانی ورودی جداگانه با سطل نشتی و بافر retray.

7) تنظیمات (قطعات)

کنگ/NGINX سبک (نرخ + پشت سر هم):
yaml plugins:
- name: rate-limiting config:
policy: local minute: 600    # 10 rps limit_by: consumer fault_tolerant: true
- name: response-ratelimiting config:
limits:
heavy: { minute: 60 }
نماینده (مدار + خارج + نرخ):
yaml circuit_breakers:
thresholds: { max_connections: 1000, max_requests: 800 }
outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s http_filters:
- name: envoy. filters. http. local_ratelimit typed_config:
token_bucket: { max_tokens: 100, tokens_per_fill: 100, fill_interval: 1s }
filter_enabled: { default_value: 100% }
filter_enforced: { default_value: 100% }
محدودیت های همزمان (شبه):
pseudo sema = Semaphore(MAX_ACTIVE_EXPORTS_PER_TENANT)
if! sema. tryAcquire(timeout=100ms) then return 429 with retry_after=rand(1..5)s process()
sema. release()
محافظ هزینه GraphQL (ایده):
pseudo cost = sum(weight(field) cardinality(arg))
if cost > tenant. budget then reject(429,"query too expensive")

8) سیاست برای کانال های مختلف

استراحت کردن

GET - نرم تر، POST/PATCH/DELETE - سخت تر ؛ وضعیت/چک «idempointent» می تواند رد شود.
برای پرداخت: محدودیت در «auth/capture/refund» برای هر کاربر/مستاجر/BIN/کشور.

GraphQL

عمق/پیچیدگی کلاه، نمایش داده شد ادامه/لیست سفید، محدودیت در نام مستعار.

WebSocket/SSE

محدودیت فرکانس 'subscribe/unsubscribe'، محدودیت تعداد موضوعات، کنترل اندازه رویدادها و ارسال صف → زمانی که سرریز «policy _ disconnect».

صفحات وب

سطل نشتی در پذیرش، سهمیه هر فرستنده، صف نامه مرده، قطعی 2xx/429.

9) بازخورد مشتری

همیشه یک 429 واضح را با عنوان ها بازگردانید:
  • 'تلاش مجدد-پس از: <ثانیه>'
  • 'X-RateLimit-Limit/Remaining/Reset'
  • برای سهمیه - 403 با کد «quota _ exceeded» و پیوند به ارتقاء برنامه.
  • مستندات: محدودیت در صفحات OpenAPI/SDL + «استفاده منصفانه».

10) نظارت و داشبورد

معیارها:
  • Hits limits: میزان. محدود کردن ضربه توسط کلید/مسیر/مستاجران.
  • 429/503 доля, تاخیر p50/p95/p99, نرخ خطا, طول صف, مدارهای باز.
  • عادلانه سهم: مستاجران بالا در مصرف، «آشکارساز قلدر».
  • Webhooks: پذیرش/retrai، قطره نرخ، تاخیر متوسط.
معیارهای SLO:
  • 429 بیش از 1-3٪ از کل RPS (بدون ربات).
  • افزودنی محدود کننده p95 ≤ 5-10 میلی ثانیه در هر لبه.
  • زمان بازیابی تخریب ≤ 10 دقیقه.
مثال SQL (برش کلید):
sql
SELECT ts::date d, tenant, route,
SUM(hits) AS limit_hits,
SUM(total) AS total_calls,
SUM(hits)::decimal/NULLIF(SUM(total),0) AS hit_rate
FROM ratelimit_stats
GROUP BY 1,2,3
ORDER BY d DESC, hit_rate DESC;

11) کتاب های حادثه

Retray storm (upstream fall): خاموش کردن جهانی، افزایش بازده، قطع کننده مدار باز، بازگشت «اشتباهات سریع» به جای وقفه.
حمله ربات/خراش دادن: کلاه سخت توسط IP/ASN/geo، چالش WAF/JS را فعال کنید، دایرکتوری ها/جستجو را محدود کنید.
اوج مسابقات/رویداد: به طور پیشگیرانه محدودیت خواندن را افزایش می دهد، «زمینه های گران قیمت» را پایین می آورد، حافظه پنهان/غیرفعال سازی را فعال می کند.
اضافه شده webhooks از PSP: سطل موقت نشت، اولویت بندی انواع بحرانی، گسترش مرده نامه و retray.

12) تست و UAT

بار: نردبان RPS، مهره × 10 نرمال.
عدالت: تقلید از 1 مستاجر «حریص» - بیش از X٪ از بودجه جهانی.
تخریب: انطباق SLO محدودیت ها را کاهش می دهد و p95 را در راهرو نگه می دارد.
موارد مرزی: تغییر پنجره (min → chas)، لرزش ساعت (انحراف ساعت)، پوسته پوسته شدن Redis/کلید sharding.
قرارداد: 429 و هدر Retry-After وجود دارد، SDK به درستی خاموش است.

13) ذخیره سازی برای محدودیت

در حافظه برای محدودیت های محلی (خوشه های کوچک).
Redis/Memcached for distributed (اسکریپت های Lua برای اتمی بودن).
کلید های Sharding توسط هش ؛ TTL زیر پنجره ها ؛ متریک پشتیبان گیری برای از دست دادن کش.
Idempotency: محدود کننده نباید تماس های مکرر idempotent را قطع کند (حسابداری با کلید درخواست).

14) حکومت

کاتالوگ محدودیت: چه کسی مالک است، چه کلید/آستانه/جیره بندی شده است.
پرچم های ویژگی برای سوئیچ های سریع (حالت بحران).
سیاست های نسخه بندی و فرآیند RFC برای تغییر در سهمیه های قراردادی.
آزمایش A/B در انتخاب آستانه بهینه.

15) ضد الگوهای

جهانی یک حد «برای همه API ها».
فقط پنجرههای ثابت → پرشهای «لبه».
محدودیت بدون بازخورد (بدون «Retry-After »/هدر).
زمان خاموش به جای سریع 429/503.
فقدان سهم عادلانه هر مستاجر - یک مشتری بقیه را خفه می کند.
بدون حفاظت جستجوی GraphQL/پیچیدگی.
صفر در همزمان گارد → DB/PSP «جارو برقی».

16) ورق تقلب کوتاه از انتخاب

پیش فرض سطل توکن (نرخ + پشت سر هم) برای هر مستاجر + مسیر است.
سهمیه بندی بر اساس پول/گزارش: پنجره کشویی روز/ماه.
عملیات سنگین: محدودیت های همزمان + صف.

GraphQL/поиск: بودجه پیچیدگی + پرس و جوهای مداوم

WS/webhooks: سطل نشتی + فشار پشتی.
Кризис: dynamic throttling + circuit-breaker + degrade.

خلاصه

کنترل بار یک رشته چند سطحی است: الگوریتم های صحیح (سطل/پنجره/رقابت)، کلیدهای حد منصفانه، سازگاری SLO و بازخورد شفاف. با دوختن محدودیت ها به دروازه/مش/خدمات، مسلح کردن GraphQL/WS/webhooks با سیاست های نمایه و اتصال قابلیت مشاهده با playbooks، شما رویدادهای پیک و شکست های دیگران را به موقعیت های کنترل شده تبدیل می کنید - بدون سقوط، پرداخت های مختل شده و کاهش تبدیل.

Contact

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

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

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

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

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

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