GH GambleHub

Rate limits және квоталар

Rate limits және квоталар - бұл жалпы ресурстарға сұранысты басқарудың іргелі механикасы: CPU, желі, БД, кезектер, сыртқы API. Мақсаты - әділеттілік (fairness), SLO болжамдылығы және жарылыстан, қиянаттан және «noisy neighbor» -дан қорғау.


1) Базалық ұғымдар

Rate limit - сұрау салулардың/операциялардың қарқындылығын шектеу (req/s, msg/min, байт/сек).
Burst - орташа rate үстінен рұқсат етілген қысқа мерзімді секіріс.
Quota - уақыт терезесі үшін көлем лимиті (құжаттар/тәулік, ГБ/ай).
Concurrency cap - бір мезгілде жасалатын операцияларды (бір мезгілде сұрау салуларды/джобтарды) шектеу.
Scope - қолдану саласы: per-tenant, per-user, per-token, per-endpoint, per-IP, per-region, per-feature.


2) Лимиттеу алгоритмдері

2. 1 Token Bucket (белгісі бар шелек)

Параметрлері: 'rate' (токендер/сек), 'burst' (шелектің өлшемі).
«Несие» ретінде жұмыс істейді: жинақталған токендер қысқа шыңдарға мүмкіндік береді.
Сыртқы API және пайдаланушы сұраулары үшін қолайлы.

2. 2 Leaky Bucket (аққан шелек)

Ағынды тұрақты жылдамдықпен тегіс «тегістейді».
Трафикті сезімтал backend 'лерге тегістеу үшін жақсы.

2. 3 Fixed/Sliding Window

Fixed window: қарапайым, бірақ «терезені ауыстыруға» осал.
Sliding window: нақтырақ, бірақ есептеу арқылы қымбат.

2. 4 GCRA (Generic Cell Rate Algorithm)

Виртуалды келу уақытындағы Token Bucket баламасы.
Бөлінген лимитерлер үшін дәл және тұрақты (аз жанжалды state).

2. 5 Concurrency Limits

Бір мезгілде орындалатын операцияларды шектеу.
Ағындар/қосылыстар пулының және «head-of-line blocking» тозуынан қорғайды.


3) Лимиттерді қайда қолдану керек

Шекарада (L7/API-шлюз): негізгі тосқауыл, жылдам істен шығу (429/503), арзан тексерулер.
Сервистер ішінде: ауыр операцияларға қосымша caps (экспорт, есептер, трансформациялар).
Сыртқы жүйелерге шығуда: үшінші жаққа арналған жеке лимиттер (anti-penalty).
Кезектерде/воркерлерде: fairness жалпы пулға.


4) Сатып алулар мен басымдықтар (multi-tenant)

Иерархия: Global → Region → Tenant/Plan → User/Token → Endpoint/Feature → IP/Device.
Priority-aware: VIP/Enterprise үлкен 'burst' және салмақ алады, бірақ ортақ SLO бұзбайды.
Лимиттер композициясы: қорытынды рұқсат = 'min (жаһандық, өңірлік, тенанттық, пайдаланушылық, эндпойнттық)'.


5) Көлемі бойынша квоталар

Тәуліктік/айлық квоталар: құжаттар/тәулік, ГБ/ай, хабарламалар/мин.
Жұмсақ/қатты табалдырықтар: ескерту (80/90%) және «қатты тоқта».
Roll-up: нысандар бойынша есеп (кестелер, файлдар, оқиғалар) және биллингке «алу».


6) Бөлінген лимитерлер

Талаптар: төмен кідіріс, келісімділік, істен шығуға төзімділік, көлденең масштабтау.

Local + probabilistic sync: жергілікті шард шелектер + мерзімді синхрондау.
Central store: Redis/KeyDB/Memcached с LUA/atomic ops (INCR/PEXPIRE).
Sharding: 'limit: {scope}: {id}: {window}' түрінің кілттері біркелкі.
Clock skew: «ақиқатты» клиенттерде емес, лимитердің серверінде сақтау.
Ұқсастық: «операциялардың» (Idempotency-Key) кілттері жалған есептен шығаруды азайтады.


7) Анти-абьюз және қорғау

Per-IP + device fingerprint көпшілік эндпойнттарға арналған.
Аномалиялар кезінде Proof-of-Work/CAPTCHA.
UX маңызды болғанда (іздеу кеңестері) толық істен шығудың орнына Slowdown (throttling).
Adaptive limits: инциденттер/қымбат тозулар кезінде шектердің динамикалық төмендеуі.


8) Клиенттің мінез-құлқы және хаттама

Кодтары: '429 Too Many Requests' (rate), '403' (квота/жоспар асып кетті), '503' (қорғаныштық тозу).

Жауаптар тақырыптары (best practice):
  • 'Retry-After: ' - қашан қайталап көріңіз.
RateLimit- '(IETF) жиыны:
  • `RateLimit-Limit: ;w=`
  • `RateLimit-Remaining: `
  • `RateLimit-Reset: `
  • Backoff: экспоненциалды + джиттер (full jitter, equal jitter).
  • Сәйкестік: 'Idempotency-Key' тақырыбы және қауіпсіз операциялардың қайталануы.
  • Тайм-ауттар және алып тастау: лимиттерді «тартып алмау» үшін ілініп қалған сұрауларды дұрыс үзу.

9) Бақылау және тестілеу

Теги: `tenant_id`, `plan`, `user_id`, `endpoint`, `region`, `decision` (allow/deny), `reason` (quota/rate/concurrency).
Өлшемдер: өткізу қабілеті, 429/403/503 істен шығу үлесі, лимитердің кідіруі p95/p99, кілттер кэшінің hit ratio, жоспарлар бойынша бөлу.
Аудит логтары: блоктардың, топ «шулы» кілттердің себептері.
Тестілер: «ара/бурст/плато» жүктеме профильдері, хаос - Redis/shard істен шығуы, сағаттардың синхронизациясы.


10) Биллингпен интеграция

Usage-есептегіштер шекарада жиналады, батчалармен (әрбір N мин) біркелкілікпен біріктіріледі.
Жоспар бойынша мәлімет: артық шығын → оверчардж немесе жоспарды уақытша арттыру.
Айырмашылықтар: салыстыру usage vs invoice; дельтаға алерта.


11) Fairness ішінде (кезектер, воркерлер)

Weighted Fair Queuing/DRR: жоспардың салмағы бойынша жалға алушылар арасында слоттарды бөлу.
Per-tenant worker pools: қатаң оқшаулау VIP/шу.
Admission control: егер квоталар таусылса, орындалудан бас тарту; кезек көтерілмейді.
Caps concurrency: бір уақытта ауыр джобтарды шектеу.


12) Жоспарлардың үлгілік профильдері (мысал)

yaml plans:
starter:
rate: 50  # req/s burst: 100 concurrency: 20 quotas:
daily_requests: 100_000 monthly_gb_egress: 50 business:
rate: 200 burst: 400 concurrency: 100 quotas:
daily_requests: 1_000_000 monthly_gb_egress: 500 enterprise:
rate: 1000 burst: 2000 concurrency: 500 quotas:
daily_requests: 10_000_000 monthly_gb_egress: 5000

13) Сәулет эталоны (сөздік схема)

1. Edge/API-шлюз: TLS → контекстін алу (tenant/plan) → лимиттерді/квоталарды тексеру → RateLimit- → лог/трейс тақырыптарын орналастыру.
2. Policy Engine: басымдық ережелері (VIP), бейімделу шектері.
3. Limiter Store: Redis/KeyDB (atomic ops, LUA), кілттерді шардалау, репликалау.
4. Services: қайталама лимит және ауыр операцияларға арналған caps; іспеттілік; WFQ/DRR кезектері.
5. Usage/Billing: жинау, агрегаттау, инвойс, шектер бойынша алерталар.
6. Observability: метриктер/логи/тегі бар трейстер, дашбордтар per-tenant.


14) Азық-түлік алдындағы чек-парағы

  • Лимит скоптары (tenant/user/token/endpoint/IP) және олардың иерархиясы анықталған.
  • Алгоритм (Token Bucket/GCRA) және 'rate/burst' параметрлері таңдалды.
  • concurrency caps және admission control ауыр операциялар үшін іске асырылды.
  • 'RateLimit-' және 'Retry-After' тақырыптары қосылған; клиенттер backoff + jitter қызметін қолдайды.
  • Лимитер бөлінген және істен шығуға төзімді (шардар, репликация, тозу).
  • Usage-алым іспеттес; биллингпен байлам, артық шығынға арналған алерта.
  • Бақылау қабілеті: метрлер/трестер/тегтері бар логи, топ «шулы» кілттер, alerter 'ы.
  • Тесттер: бурсттар, «аралар», стораның істен шығуы, clock skew, салқын бастау.
  • Клиенттерге арналған құжаттама: жоспарлар бойынша лимиттер, 429/Retry-After мысалдары, ретрациялардың best practices.
  • Ерекшеліктер саясаты: лимиттерді уақытша қалай және қашан арттыру керек.

15) Типтік қателер

per-tenant/per-endpoint - «noisy neighbor» жоқ жаһандық лимит барлық SLO бұзады.
Жоқ 'burst': UX қысқа жарылыс кезінде зардап шегеді.
Тек бекітілген терезені пайдалану → «терезе шегінде екі рет соғу».
Демпотенттік пен ретраялар жоқ → қайталау дауылы.
Лимиттер тек шекарада, сервистерде/кезектерде caps жоқ → ішкі «тығындар».
Жауаптардағы лимиттерді көрсетпеу (жоқ 'Retry-After', 'RateLimit-') → клиенттер бейімделмейді.
OLTP → ДБ-да лимитердің жай-күйін сақтау жоғары жасырындылық және «ыстық» бұғаттау.


16) Стратегияны жылдам таңдау

Шыңдары бар ашық API: Token Bucket + үлкен 'burst', RateLimit- тақырыптар, CDN/edge кэш.
Ішкі ауыр джобтар: concurrency caps + WFQ/DRR, admission control.
Үшінші тараптармен ықпалдасу: шығуға, буферлеуге/ретраға арналған жеке лимиттер.
SaaS мульти-тенанты: лимиттер иерархиясы (global → tenant → user → endpoint), VIP басымдылығы, айлар бойынша квоталар.


Қорытынды

Жақсы rate limits және квоталар - бұл платформа мен клиент арасындағы жүйелі келісім-шарт: ресурстардың адал үлесі, жарылысқа төзімділік, болжамды SLO және мөлдір биллинг. Алгоритмдерді (Token/GCRA + concurrency caps) біріктіріңіз, скоптар иерархиясын енгізіңіз, түсінікті тақырыптар мен метрикаларды беріңіз және нақты трафик профильдерінің астындағы схемаларды ұдайы тексеріңіз - осылайша платформа жүктеменің агрессивті өсуі кезінде де тұрақты болып қалады.

Contact

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

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

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

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

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

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