Rate limits we kwotalar
Rate limits we kwotalar umumy çeşmelere bolan islegi dolandyrmagyň esasy mehanikasydyr: CPU, tor, DB, nobatlar, daşarky API. Maksat adalatlylyk (fairness), SLO-nyň öňünden aýdylýanlygy we partlamalardan, hyýanatçylyklardan we "noisy neighbor" -dan goramak.
1) Esasy düşünjeler
Rate limit - haýyşlaryň/amallaryň intensiwliginiň çäklendirilmegi (req/s, msg/min, baýt/sek).
Burst - orta rate-den gysga möhletli tolkun.
Quota - wagt penjiresi üçin göwrümiň çägi (resminamalar/gün, GB/aý).
Concurrency cap - bir wagtyň özünde amallaryň (bir wagtyň özünde soraglaryň/joblaryň) çäklendirilmegi.
Skope - ulanylyşy: per-tenant, per-user, per-token, per-endpoint, per-IP, per-region, per-feature.
2) Çäklendirmek algoritmleri
2. 1 Token Bucket
Parametrler: 'rate' (bellikler/sek), 'burst' (çelek ululygy).
"Karz" hökmünde işleýär: toplanan tokenler gysga piklere mümkinçilik berýär.
Daşarky API we ulanyjy soraglary üçin amatlydyr.
2. 2 Leaky Bucket (akýan çelek)
Akymy yzygiderli tizlikde ýuwaş-ýuwaşdan "urýar".
Duýgur backend 'amlara traffigi tekizlemek üçin amatly.
2. 3 Fixed/Sliding Window
Fixed window: ýönekeý, ýöne "penjiräni çalyşmak" üçin ejiz.
Sliding window: has takyk, ýöne has gymmat hasaplamak.
2. 4 GCRA (Generic Cell Rate Algorithm)
Wirtual geliş wagty nukdaýnazaryndan Token Bucket-iň ekwiwalenti.
Paýlanan çäkler üçin takyk we durnukly (az gapma-garşylyk ýagdaýy).
2. 5 Concurrency Limits
Bir wagtyň özünde ýerine ýetirilýän amallaryň çäklendirilmegi.
Akym/baglanyşyk howuzlarynyň tükenmeginden we "head-of-line blocking" -den goraýar.
3) Çäklendirmeleri nirede ulanmak
Serhetde (L7/API-şlýuz): esasy päsgelçilik, çalt şowsuzlyk (429/503), arzan barlaglar.
Hyzmatlaryň içinde: agyr amallar üçin goşmaça caps (eksportlar, hasabatlar, üýtgeşmeler).
Daşarky ulgamlara çykanda: üçünji taraplar üçin aýratyn çäklendirmeler (anti-penalty).
Nobatlarda/workerlerde: umumy howuzlara fairness.
4) Satyn almak we ileri tutmak (multi-tenant)
Иерархия: Global → Region → Tenant/Plan → User/Token → Endpoint/Feature → IP/Device.
Priority-aware: VIP/Enterprise has köp 'burst' we agram alýar, ýöne umumy SLO-lary bozmaýar.
Çäkleriň düzümi: jemleýji rugsat = 'min (global, sebit, tenant, ulanyjy, endpoint)'.
5) Göwrümi boýunça kwotalar
Gündelik/aýlyk kwotalar: resminamalar/gün, GB/aý, habarlar/min.
Ýumşak/gaty bosagalar: duýduryşlar (80/90%) we "gaty dur".
Roll-up: obýektleriň (tablisalaryň, faýllaryň, wakalaryň) hasaby we billingde "aýyrmak".
6) Paýlanan çäklendirijiler
Talaplar: pes gijä galmak, utgaşdyrmak, şowsuzlyga çydamlylyk, gorizontal masştablamak.
Local + probabilistic sync: ýerli şar çelekleri + wagtal-wagtal sinhronizasiýa.
Central store: Redis/KeyDB/Memcached с LUA/atomic ops (INCR/PEXPIRE).
Sharding: 'limit: {scope}: {id}: {window}' görnüşiniň birmeňzeş paýlanan açarlary.
Clock skew: "Hakykaty" müşderilerde däl-de, çäklendiriji serwerde saklaň.
Idempotentlik: "amallaryň" (Idempotency-Key) açarlary ýalan hasapdan çykarmalary azaldýar.
7) Hyýanatçylyga garşy we gorag
Per-IP + device fingerprint.
Anomaliýalarda Proof-of-Work/CAPTCHA.
UX has möhüm bolanda, doly şowsuzlygyň ýerine slowdown (throttling).
Adaptive limits: hadysalarda/gymmat bahaly zaýalanmalarda çäkleriň dinamiki peselmegi.
8) Müşderiniň özüni alyp barşy we teswirnama
Kodlar: '429 Too Many Requests' (rate), '403' (kwota/meýilnama geçildi), '503' (gorag pese gaçmagy).
Jogaplaryň sözbaşylary (iň oňat practice):- 'Retry-After:
' - Haçan synap görmeli.
- `RateLimit-Limit:
;w= ` - `RateLimit-Remaining:
` - `RateLimit-Reset:
` - Backoff: eksponensial + jitter (full jitter, equal jitter).
- Idempotentlik: 'Idempotency-Key' sözbaşysy we howpsuz amallaryň gaýtalanmagy.
- Taým-autlar we ýatyryş: çäklendirmeleri "ele almazlyk" üçin asylan haýyşlary dogry kesmek.
9) Gözegçilik we synag
Теги: `tenant_id`, `plan`, `user_id`, `endpoint`, `region`, `decision` (allow/deny), `reason` (quota/rate/concurrency).
Metrikler: geçirijilik ukyby, 429/403/503 şowsuzlyklarynyň paýy, limiteriň gijikdirilmegi p95/p99, açarlar kesişiniň hit ratio, meýilnamalar boýunça paýlanylyşy.
Audit ýazgylary: bloklaryň sebäpleri, "şowhunly" açarlar.
Synaglar: "mişar/burst/plato" ýükleýiş profilleri, bulam-bujarlyk - Redis/çarda şowsuzlygy, sagatlaryň sinhronizasiýasy.
10) Billing bilen integrasiýa
Usage-hasaplaýjylar serhetde ýygnalýarlar, baplar bilen (her N min) dempotentlik bilen jemlenýärler.
Meýilnamalar boýunça gysgaça maglumat: artykmaç çykdajy → overçarj ýa-da meýilnamany wagtlaýyn ýokarlandyrmak.
Tapawutlar: barlamak usage vs invoice; delta alertleri.
11) Içindäki fairness (nobatlar, workerler)
Weighted Fair Queuing/DRR: meýilnamanyň agramyna görä kärendeçileriň arasynda slotlary paýlamak.
Per-tenant worker pools: VIP/şowhunly berk izolýasiýa.
Admission control: kwotalar gutarsa, ýerine ýetirilmezlik; nobatlar ulalmaýar.
Caps on concurrency: bir wagtyň özünde agyr joblary çäklendiriň.
12) Meýilnamalaryň görnüş profilleri (mysal)
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) Binagärlik standarty (söz shemasy)
1. Edge/API-şlýuz: TLS → konteksti aýyrmak (tenant/plan) → çäklendirmeleri/kwotalary barlamak → RateLimit- → log/trade sözbaşylaryny ýerleşdirmek.
2. Policy Engine: ileri tutulýan düzgünler (VIP), uýgunlaşma çäkleri.
3. Limiter Store: Redis/KeyDB (atomic ops, LUA), açarlary bölmek, köpeltmek.
4. Services: agyr amallar üçin ikinji çäk we caps; idempotentlik; WFQ/DRR bilen nobatlar.
5. Usage/Billing: ýygnamak, agregasiýa, invoýs, bosagalar boýunça aladalar.
6. Observability: metrikler/loglar/treysler bilen taglar, daşbordlar per-tenant.
14) Azyk önüminden öň çek-sanawy
- Limit skoplary (tenant/user/token/endpoint/IP) we olaryň iýerarhiýasy kesgitlenildi.
- Algoritm (Token Bucket/GCRA) we 'rate/burst' parametrleri saýlandy.
- Agyr amallar üçin concurrency caps we admission control amala aşyryldy.
- 'RateLimit-' we 'Retry-After' sözbaşylary goşuldy; müşderiler backoff + jitter-i goldaýarlar.
- Paýlanan we şowsuzlyga çydamly limiter (şarlar, köpeltmek, pese gaçmak).
- Usage-ýygnamak idempotenten; billing bilen baglanyşyk, artykmaç çykdajy üçin aladalar.
- Syn edilişi: metrikler/söwda nokatlary/bellikler, "şowhunly" açarlar, alerter's.
- Synaglar: burstlar, "pyçak", ýüz öwürmek, clock skew, sowuk başlamak.
- Müşderiler üçin resminamalar: meýilnamalar boýunça çäkler, 429/Retry-After mysallary, retraýlaryň iň oňat amallary.
- Kadadan çykmalar syýasaty: çäkleri wagtlaýyn nädip ýokarlandyrmaly we haçan.
15) Adaty ýalňyşlyklar
Per-tenant/per-endpoint bolmasa global çäk - "noisy neighbor" SLO-lary bozýar.
'burst' ýoklugy: UX gysga partlamalarda ejir çekýär.
Diňe kesgitlenen penjiräni ulanmak → "penjiräniň serhedinde goşa urgy".
Jitter → tupan gaýtalamalary bilen deňsizlik we retraýalar ýok.
Çäkler diňe serhetde, hyzmatlarda/nobatlarda caps bolmasa → içerki "dyknyşyklar".
Jogaplarda çäkleriň görkezilmezligi (ýok 'Retry-After', 'RateLimit-') → müşderiler uýgunlaşmaýarlar.
ALTP DB-de limiteriň ýagdaýyny saklamak → ýokary gizlinlik we "gyzgyn" blokirlemeler.
16) Strategiýany çalt saýlamak
Iň ýokary API: Token Bucket + uly 'burst', RateLimit- sözbaşylar, CDN/edge kesh.
Içerki agyr joblar: concurrency caps + WFQ/DRR, admission control.
Üçünji taraplar bilen integrasiýa: çykmagyň, buferleşmegiň/retraýanyň aýratyn çäkleri.
Köp tenant SaaS: çäkleriň iýerarhiýasy (global → tenant → user → endpoint), VIP ileri tutulýan ugur, aýlar boýunça kwotalar.
Netije
Gowy rate limits we kwotalar platforma bilen müşderiniň arasynda yzygiderli şertnama bolup durýar: çeşmeleriň dogruçyl paýy, partlamalara garşylygy, öňünden aýdyp boljak SLO we aç-açan billing. Algoritmleri (Token/GCRA + concurrency caps) birleşdiriň, skoplaryň iýerarhiýasyny giriziň, aýdyň sözbaşylary we metrikleri beriň we hakyky traffik profilleriniň aşagyndaky shemalary yzygiderli barlaň - platforma agressiw ýük ýokarlansa-da durnukly bolar.