GH GambleHub

Rate Limits və yük nəzarəti

TL; DR

Etibarlı kontur bir neçə səviyyədə limit və kvotaların birləşməsidir (edge → BFF → xidmət), resursların ədalətli bölüşdürülməsi (per-tenant/açar/rout), SLO-adaptiv trottling və səssiz zaman-aut əvəzinə backpresher. «Sürət» üçün token/leaky bucket istifadə edin, mühasibat kvotaları üçün sürüşmə pəncərəsi, ağır əməliyyatlar üçün rəqabət limitləri, deqradasiya zamanı dynamic throttling və kövrək axınlara circuit-breaker. Hər şey - müşahidə altında və playbook ilə.

1) Niyə iGaming/fintech limitləri

SLO və stabillik: retraj uçqunlarından, turnirlərin/eventlərin zirvələrindən, ödəniş sıçrayışlarından qorunma.
Ədalət: bir tenant və ya tərəfdaş bütün büdcəni «sormur».
Anti-sui-istifadə/botlar: login/qeydiyyat, spam, scraping kataloq dorilimiting.
Qiymət: bahalı çağırışların qarşısını almaq (KYC, hesabatlar, aqreqasiyalar).
Komplayens/vicdanla istifadə: müqavilələrdə rəsmi «fair use» kvotaları.

2) Limit taksonomiyası

KateqoriyaNə üçünAçar nümunələri
Rate (sürət)Stabil RPS, burst qorunması`api_key`, `tenant`, `route`, `country`, `BIN`
Quota (mühasibat)Bahalı resurslar üzrə gün/ay`tenant-day`, `partner-month`, `report-type`
ConcurrentParalel ağır əməliyyatları məhdudlaşdırın`payout:create`, `export:csv`, `recalc`
Cost-basedMürəkkəb/bahalı sorğular (GraphQL/axtarış)«kompleks», cavab ölçüsü
AdaptiveSLO-ya reaksiya/gizli/səhvlərqlobal/per-rout
Ingress/eqressWebhook qəbulu/çıxış zəngləri`webhook-receiver`, `psp-outbound`

3) Alqoritmlər və harada tətbiq

3. 1 Token Bucket (default)

Parametrlər: 'rate' (token/san), 'burst' (max ehtiyat).
API oxu, ödəniş/status, BFF üçün əla.
Boş baket ilə → 429 + 'Retry-After'.

3. 2 Leaky Bucket (orta)

Garantili «sökülmə» RPS, WebChooks üçün faydalıdır.

3. 3 Fixed Window vs Sliding Window

Fixed - sadə, lakin «sərhədləri»; Sliding - pəncərədə dürüst uçot (min/saat/gün).
Müqavilə kvotaları üçün Sliding tətbiq edin.

3. 4 Concurrent Limits

Aktiv tapşırıqların limiti. İxrac/reportaj, KYC paketləri, təkrar emal üçün idealdır.
Çatışmazlıq - 429/503 + növbə/polling.

3. 5 Cost/Complexity Limiter

GraphQL/axtarış: dərinlik/kardinallıq/uzantıları ilə «dəyəri» hesab.
«Bahalı» sorğuların kəsilməsi/deqradasiyası, ipucu ilə cavab.

4) Limit açarları (dimensioning)

per-tenant (multi-icarə, ədalət),

per-api_key/client_id (tərəfdaşlar),

per-route (kritik mutasiyalar daha sərt),

per-user/device/IP/ASN/geo (antibot/antiskreyp),

per-BIN/country (ödəniş metodları, emitentlərin və provayderlərin qorunması),

per-method (GET daha yumşaq, POST/PUT daha sərt).

Kompozisiya: əsas açar + «risk multiplikatoru» (yeni hesab, TOR/proxy, yüksək chargeback-risk).

5) SLO adaptiv trottling

SLO təhlükədə olduqda dynamic throttling-i yandırın:
  • Triggerlər: 'p95 latency ↑', '5xx ↑', 'queue len ↑', 'CPU/IO saturation'.
  • Fəaliyyət: rate/burst aşağı, outlier-ejection daxil, «bahalı» routes kəsmək, müvəqqəti degrade (ağır sahələr/aqreqasiya olmadan).
  • Geri dönüş: ardıcıl N intervallarının siqnallarının normallaşdırılması zamanı mərhələli (25 → 50 → 100%).

6) Arxitekturaya inteqrasiya

API Gateway (edge): ilkin rate/quotas, geo/ASN, HMAC/JWT-validasiya, 429/' Retry-After '.
BFF/Service Mesh: incə per-route/per-tenant limitləri, concurrent-limits, circuit-breakers axınlara.
Xidmət daxilində: ağır əməliyyatlar üçün semaforlar, növbələrdə backpresher, bound ölçülü «iş hovuzları».
Vebhuki: leaky bucket və retrai bufer ilə ayrıca ingress-end point.

7) Konfiqurasiya (fraqmentlər)

Kong / NGINX-style (rate + burst):
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 }
Envoy (circuit + outlier + rate):
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% }
Concurrent-limits (psevdo):
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 cost guard (ideya):
pseudo cost = sum(weight(field) cardinality(arg))
if cost > tenant. budget then reject(429,"query too expensive")

8) Müxtəlif kanallar üçün siyasət

REST

GET - daha yumşaq, POST/PATCH/DELETE - daha sərt; «idempotent» status/yoxlamalar retraj edilə bilər.
Ödənişlər üçün: limitlər 'auth/capture/refund' per-user/tenant/BIN/ölkə.

GraphQL

Depth/complexity caps, persisted/whitelisted queries, «alias» limitləri.

WebSocket/SSE

'subscribe/unsubscribe' tezlik limiti, topik sayı, hadisə ölçüsü nəzarət və send-queue → 'policy _ disconnect' aşdıqda.

Webhucks

Leaky bucket qəbulu, per-sender kvotaları, dead-letter növbə, determinated 2xx/429.

9) Müştəri rəyləri

Həmişə başlıqları ilə aydın 429 qaytarın:
  • `Retry-After: `
  • `X-RateLimit-Limit/Remaining/Reset`
  • Kvotalar üçün - 403 'quota _ exceeded' kodu və plan yeniləməsinə keçid ilə.
  • Sənədləşmə: OpenAPI/SDL + «Fair Use» səhifələrində limitlər.

10) Monitorinq və Daşbordlar

Metriklər:
  • Limitlərin hitləri: 'rate. limit. açarları/marşrutları/tenantları ilə hit '.
  • 429/503 доля, latency p50/p95/p99, error rate, queue length, open circuits.
  • Fair-share: istehlak üzrə top-tenantlar, «bully detector».
  • Vebhuki: qəbul/retrai, drop-rate, orta gecikmə.
SLO göstərişlər:
  • 429 ümumi RPS-nin 1-3% -dən çox deyil (botlar olmadan).
  • p95 limiter əlavə edge ≤ 5-10 ms.
  • Deqradasiyadan sonra bərpa müddəti ≤ 10 dəqiqə.
SQL nümunə (açar kəsilməsi):
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) Hadisə pleybukları

Fırtına retrains (axın düşməsi): qlobal throttling yandırmaq, backoff qaldırmaq, circuit-breaker açmaq, vaxt-out əvəzinə «sürətli səhvlər» qaytarmaq.
Bot-hücum/scraping: IP/ASN/geo sərt cap, WAF/JS-challenge daxil, kataloqlar/axtarış məhdudlaşdırmaq.
Tournament/event zirvəsi: oxu limitlərini artırmaq, «bahalı sahələri» azaltmaq, cache/denormalizasiya daxil etmək.
PSP-dən vebhukları boşaltın: müvəqqəti leaky bucket, kritik tiplərin prioritetləşdirilməsi, dead-letter və retrayları genişləndirin.

12) Test və UAT

Yük: RPS pilləkən, burst × normal 10.
Ədalət: 1 «acgöz» tenantın emulyasiyası - qlobal büdcənin X% -dən çox deyil.
Deqradasiya: SLO adaptasiyası limitləri azaldır və p95-i dəhlizdə saxlayır.
Sərhəd halları: pəncərənin dəyişdirilməsi (min → saat), saat titrəməsi (clock skew), Redis/açarların ölçülməsi.
Müqavilə: başlıqlar 429 və Retry-After mövcuddur, SDK düzgün geri offit.

13) Limitlər üçün saxlama

Yerli limitlər üçün In-memory (kiçik klasterlər).
dağıdılmış üçün Redis/Memcached (atom üçün Lua skriptləri).
Hash açarları; TTL pəncərələrin altında; cache itirmək üçün backup metrika.
Idempotency: Limiter idempotent təkrar zəngləri pozmamalıdır (sorğu açarı ilə uçot).

14) Siyasətin idarə edilməsi (Governance)

Limitlər kataloqu: kim sahibidir, hansı açarlar/eşik/rasional.
Sürətli açarlar üçün feature-flags (crisis mode).
Müqaviləli kvotaların dəyişdirilməsi üçün siyasət və RFC prosesi versiyası.
A/B optimal eşik seçimi üçün təcrübələr.

15) Anti-nümunələr

Qlobal bir limit «bütün API».
Yalnız sabit pəncərələr → «kənar» at yarışları.
Geribildirim olmadan limit (no 'Retry-After '/headers).
Sürətli 429/503 əvəzinə səssiz vaxt.
per-tenant fair-share olmaması - bir müştəri digərlərini boğur.
GraphQL qorunması/mürəkkəbliyə görə axtarış yoxdur.
Nuls concurrent-guard → «tozsoran» DD/PSP.

16) Mini seçim stick

Default: token bucket (rate + burst) per-tenant + route.
Pul/hesabat kvotaları: sliding window gün/ay.
Ağır əməliyyatlar: concurrent-limits + növbə.
GraphQL/поиск: complexity-budgets + persisted queries.
WS/vebhuk: leaky bucket + backpressure.
Кризис: dynamic throttling + circuit-breaker + degrade.

Xülasə

Yük nəzarəti çox səviyyəli bir intizamdır: düzgün alqoritmlər (bucket/pəncərə/rəqabət), ədalətli limit açarları, SLO adaptasiyası və şəffaf rəy. gateway/mesh/servislərə limitlər əlavə edərək, GraphQL/WS/vebhukları profil polisləri ilə təchiz edərək və playbuklarla müşahidə imkanlarını birləşdirərək, pik hadisələri və başqalarının uğursuzluqlarını idarə olunan vəziyyətlərə çevirirsiniz - boyalar, pozulmuş ödənişlər və dönüşümlər olmadan.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.