GH GambleHub

Rate Limits және жүктемені бақылау

TL; DR

Сенімді контур - бұл бірнеше деңгейдегі лимиттер мен квоталардың комбинациясы (edge → BFF → сервис), ресурстарды әділ бөлу (per-tenant/кілт/роут), үнсіз тайм-ауттардың орнына SLO-бейімделген троттлинг және бэкпрешер. «Жылдамдық» үшін token/leaky bucket, бухгалтерлік квоталар үшін жылжымалы терезені, ауыр операциялар үшін бәсекелестік лимиттерді, деградация кезінде dynamic throttling және нәзік апстримдерге circuit-breaker пайдаланыңыз. Барлығы бақылауда және плейбукпен.

1) Неге iGaming/fintech лимиттері

SLO және тұрақтылық: ретрайлардың көшкіндерінен, турнирлердің/эвенттердің шыңдарынан, төлемдердің жарылуынан қорғау.
Әділеттілік: бір тенант немесе серіктес бүкіл бюджетті «сорып алмайды».
Антиабьюз/боттар: логин/тіркеу, спам, скрейпинг каталогтарының дорилимитингі.
Құны: қымбат шақыруларды тежеу (KYC, есептер, агрегациялар).
Комплаенс/адал пайдалану: шарттардағы ресми «fair use» квоталары.

2) Лимиттердің таксономиясы

СанатНе үшінКілт мысалдары
Rate (жылдамдық)Тұрақты RPS, бурсттан қорғау`api_key`, `tenant`, `route`, `country`, `BIN`
Quota (бухгалтерия)Қымбат ресурстар бойынша тәулік/ай`tenant-day`, `partner-month`, `report-type`
ConcurrentҚатарлас ауыр әрекеттерді шектеу`payout:create`, `export:csv`, `recalc`
Cost-basedКүрделі/қымбат сұраулар (GraphQL/іздеу)«кешенділігі», жауап мөлшері
AdaptiveSLO реакциясы/жасырындылық/қателержаһандық/пер-роут
Ingress/egressВебхуктарды қабылдау/шығыс қоңыраулары`webhook-receiver`, `psp-outbound`

3) Алгоритмдер және қайда қолдану керек

3. 1 Token Bucket (әдепкі)

Параметрлері: 'rate' (токендер/сек), 'burst' (макс қор).
API оқу, төлем/мәртебелер, BFF үшін тамаша.
Бос бакет кезінде → 429 + 'Retry-After'.

3. 2 Leaky Bucket (орташаланған)

RPS кепілдендірілген «бұзу» вебхуктар үшін воркерлерді толтырмау үшін пайдалы.

3. 3 Fixed Window vs Sliding Window

Fixed - қарапайым, бірақ «шектер»; Sliding - шынайы терезе есебі (мин/сағ/тәулік).
Келісімшарттық квоталар үшін Sliding қолданыңыз.

3. 4 Concurrent Limits

Бір мезгілде белсенді тапсырмалар лимиті. Экспорт/репортаж, KYC-пакеттер, қайта өңдеу үшін тамаша.
Жетіспеген жағдайда - 429/503 + кезек/поллинг.

3. 5 Cost/Complexity Limiter

GraphQL/іздеу: тереңдігі/түбегейлілігі/кеңеюі бойынша «құнын» санаймыз.
«Қымбат» сұрауларды ажырату/деградациялау, көмекпен жауап беру.

4) Лимиттеу кілттері (dimensioning)

per-tenant (мультиаренда, әділдік),

per-api_key/client_id (әріптестер),

per-route (қатты сыни мутациялар),

per-user/device/IP/ASN/geo (антидот/антискрейп),

per-BIN/country (төлем әдістері, эмитенттер мен провайдерлерді қорғау),

per-method (GET жұмсақ, POST/PUT қатал).

Композиция: негізгі кілт + «тәуекел мультипликаторы» (жаңа аккаунт, TOR/прокси, жоғары chargeback-тәуекел).

5) SLO-бейімделетін троттлинг

SLO қауіп төнгенде dynamic throttling бағдарламасын қосыңыз:
  • Триггерлер: 'p95 latency ↑', '5xx ↑', 'queue len ↑', 'CPU/IO saturation'.
  • Әрекеттер: rate/burst төмендету, outlier-ejection қосу, «қымбат» роуттарды қысқарту, уақытша degrade (ауыр өрістерсіз/агрегациясыз).
  • Қайтару: қатарынан N интервал сигналдарын қалыпқа келтіру кезінде сатылы (25 → 50 → 100%).

6) Сәулетке кірігу

API Gateway (edge): бастапқы rate/quotas, гео/ASN, HMAC/JWT-валидация, 429/' Retry-After '.
BFF/Service Mesh: жіңішке per-route/per-tenant лимиттері, concurrent-limits, circuit-breakers апстримдерге.
Сервис ішінде: ауыр оталарға арналған семафорлар, кезектегі бэкпрешер, bound өлшемді «жұмыс пулдары».
Вебхактар: leaky bucket және ретра буфері бар жеке ingress-эндпоинт.

7) Конфигурациялар (фрагменттер)

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 (жалған):
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 (идея):
pseudo cost = sum(weight(field) cardinality(arg))
if cost > tenant. budget then reject(429,"query too expensive")

8) Әртүрлі арналарға арналған саясат

REST

GET - жұмсақ, POST/PATCH/DELETE - қатал; «іспеттес» мәртебелерді/тексерулерді ретрациялауға болады.
Төлемдер үшін: 'auth/capture/refund' per-user/tenant/BIN/еліне лимиттер.

GraphQL

Depth/complexity caps, persisted/whitelisted queries, «алиастарға» арналған лимиттер.

WebSocket/SSE

'subscribe/unsubscribe' жиілік шегі, 'policy _ disconnect' толған кезде топиктер санына, оқиғалар өлшемін бақылау және send-queue → қапшығы.

Вебхактар

Leaky bucket қабылдау, per-sender квоталар, dead-letter кезек, детерминирленген 2xx/429.

9) Клиенттерге кері байланыс

Әрқашан 429 нақты айдарын қайтарыңыз:
  • `Retry-After: `
  • `X-RateLimit-Limit/Remaining/Reset`
  • Квоталар үшін - 403 'quota _ exceeded' кодымен және жоспарды жаңарту сілтемесімен.
  • Құжаттама: OpenAPI/SDL + «Fair Use» беттеріндегі лимиттер.

10) Мониторинг және дашбордтар

Өлшемдері:
  • 'rate. limit. hit 'кілттер/роуттар/тенанттар бойынша.
  • 429/503 доля, latency p50/p95/p99, error rate, queue length, open circuits.
  • Fair-share: тұтыну бойынша топ-тенанттар, «bully detector».
  • Вебхактар: қабылдау/ретраи, drop-rate, орташа лаг.
SLO бағдарлары:
  • 429 жалпы RPS-тен 1-3% артық емес (ботсыз).
  • p95 лимитерді қосу ≤ edge-ге 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) Инциденттердің плейбуктері

Дауыл ретрайлары (апстримнің құлдырауы): global throttling қосыңыз, backoff көтеріңіз, circuit-breaker ашыңыз, тайм-ауттың орнына «жылдам қателерді» қайтарыңыз.
Бот-шабуыл/скрейпинг: IP/ASN/гео бойынша қатты кап, WAF/JS-челлендж қосу, каталогтарды/іздеуді шектеу.
Турнир/эвенттің шыңы: алдын ала оқу лимиттерін көтеру, «қымбат алаңдарды» төмендету, кэш/денормализацияны қосу.
PSP веб-хоктарын тарату: уақытша leaky bucket, сыни түрлерді басымдыққа алу, dead-letter және ретрацияны кеңейту.

12) Тестілеу және UAT

Жүктеме: RPS баспалдақ, қалыпты × 10 бурсты.
Әділеттілік: 1 «ач» тенанттың эмуляциясы - жаһандық бюджеттің X% -нан аспайды.
Деградация: SLO-бейімделу лимиттерді қысқартады және p95 дәлізде ұстайды.
Шекті кейстер: терезені ауыстыру (мин → сағ), сағаттың дірілдеуі (clock skew), Redis масштабтау/кілттердің шардингі.
Келісімшарт: 429 және Retry-After тақырыптары бар, SDK дұрыс бэк-оффит.

13) Лимиттерге арналған қойма

Жергілікті лимиттер үшін In-memory (шағын кластерлер).
Таратылғандарға арналған Redis/Memcached (атомарлық үшін Lua скрипттері).
Кілттерді хэш бойынша шардалау; TTL терезенің астында; кэшті жоғалтуға арналған бэкап-метрика.
Idempotency: лимитер қайталама қоңырауларды бұзбауы керек (сұрау кілті бойынша есеп).

14) Саясатты басқару (Governance)

Лимиттер каталогы: кім иеленеді, қандай кілттер/табалдырық/рационал.
Жылдам ауыстырып қосқыштар үшін Feature-flags (crisis mode).
Келісімшарттық квоталарды өзгерту саясаты мен RFC-процесін нұсқалау.
A/B оңтайлы шектерді таңдауға арналған эксперименттер.

15) Қарсы үлгілер

Жаһандық бір лимит «барлық API».
Тек бекітілген терезелер → «шеткі» секірістер.
Кері байланыссыз лимит (жоқ 'Retry-After '/headers).
Жылдам 429/503 орнына үнсіз тайм-ауттар.
per-tenant fair-share болмауы - бір клиент қалғандарын тұншықтырады.
GraphQL/іздеу қорғанысы жоқ.
Нөлдер concurrent-guard → «шаңсорғыш» ДБ/PSP.

16) Шағын шпаргалка таңдау

Әдепкі: token bucket (rate + burst) per-tenant + route.
Ақша/есептер бойынша квоталар: sliding window тәулік/ай.
Ауыр операциялар: concurrent-limits + кезек.
GraphQL/поиск: complexity-budgets + persisted queries.
WS/вебхактар: leaky bucket + backpressure.
Кризис: dynamic throttling + circuit-breaker + degrade.

Түйіндеме

Жүктемені бақылау - бұл көп деңгейлі тәртіп: дұрыс алгоритмдер (bucket/терезе/бәсекелестік), әділ лимиттеу кілттері, SLO-бейімделу және ашық кері байланыс. gateway/mesh/сервистерге шектеулер тігіп, GraphQL/WS/вебхоктарды профильді полистермен жарақтандырып, плейбуктермен бақылау мүмкіндігін қосу арқылы сіз ең жоғары оқиғаларды және басқалардың істен шығуларын басқарылатын жағдайға айналдырасыз - бояусыз, бұзылған төлемдерсіз және конверсияланбайды.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.