Маҳдудиятҳои меъёри тарроҳӣ
1) Чаро маҳдудияти нарх
Маҳдудияти нархҳо мавҷудият ва иқтисодии API-ро ҳифз мекунад: обхезиро қатъ мекунад, ҷараёни бозпас гирифтан, қуттиҳои эътимоднокро муҳофизат мекунад, амалиёти гаронбаҳо (муомилоти пулӣ, тавлиди гузориш) -ро ҳифз мекунад, сарбориро ба системаҳои вобастагӣ (пойгоҳи додаҳо/провайдерҳо) ҳамвор мекунад. Тарҳи хуб адолат, пешгӯии ниҳонӣ ва SLO-ҳои тозаро медиҳад.
Ҳадафҳои асосӣ
Устувории RPS ва муҳофизати изофабор.
Назорати "чандирӣ" (кӯмакпулӣ).
Тафовути муштариён (барои як корбар/барои як созмон/барои як калид/IP/дар як минтақа).
Модели арзиш: "нархҳо" -и гуногун барои амалиётҳои гуногун.
2) Маҳдудияти намудҳо
Маҳдудиятҳои RPS: дархостҳо дар як сония/дақиқа.
Квотаҳо: буҷети умумӣ дар як давра (рӯз/моҳ).
Рақобатпазирӣ: амалиёти ҳамзамон (санҷиш, кори вазнин).
Баҳои/Stripe Bytes/sec (Сарборӣ/Борфарорӣ).
Маҳдудиятҳои вазншуда: "арзиши" дархост аз рӯи мураккабӣ (масалан, мураккабии Graph
Мутобиқшавӣ: дар ҳолати аномалия мустаҳкам карда шудааст (фаъолияти шубҳанок/хатогиҳо 401/403/5xx).
3) Алгоритмҳо ва кай ба кор бурдани онҳо
3. 1 Ҳисобкунаки тирезаи собит
Оддӣ: ҳисобкунак дар як фосила (масалан, 100 р/дақ).
Тарафдор: Арзиши ҳадди аққал. Омӯз: "пардаи канорӣ" дар сарҳади тиреза.
Кай: панелҳои маъмурӣ, дақиқии паст, арзиши кам.
3. 2 Тирезаи лағжанда (log/counter)
Log - мӯҳлатҳои дархостҳои охиринро нигоҳ медорад, дақиқ, гарон дар хотира.
Ҳисоб: ба ҳисоби миёна ду тирезаи ҳамсоя (ғелонда), созишномаи дақиқ ва нарх.
Вақте ки: API-ҳои оммавии ҳаракати миёна, ба шумо ҳамвор бидуни математикаи мураккаб лозим аст.
3. 3 Сатил токен
Параметрҳо: меъёри 'r' (токенҳо/сония) ва иқтидори 'b' (дарида). Ҳар як дархост аломати "сӯзондан" -ро талаб мекунад.
Тарафдор: кӯмакпулии табиӣ, татбиқи оддӣ. Омӯз: Бегоҳии қатъӣ вуҷуд надорад.
Вақте: қариб ҳамеша барои RPS, агар "вулусҳо" дар дохили 'b' лозим бошанд.
3. 4 Сатил ихроҷ (қатрагӣ)
Навбат, ки аз он бо суръати муайян "мебарояд".
Тарафдор: ҳатто ҷараёни баромад. Омӯз: Таъхирҳои бештар.
Вақте: ҳамвор кардани провайдерҳои берунии "нозук".
3. 5 GCRA (Алгоритми умумии меъёри ҳуҷайра)
Модели вақти ташрифи назариявӣ (TAT):- 'TAT _ next = max (TAT_current, ҳоло) + 1/r', дархост қабул карда мешавад, агар 'акнун <= TAT_current + burst/r'.
- Тарафдор: хотираи қатъӣ, дақиқ, каме (TAT-ро бо калид нигоҳ доред). Омӯз: фаҳмидан душвортар аст.
Вақте ки: ба назорати қатъӣ ва ҳамворӣ ниёз дорад, маҳдудиятҳои тақсимшуда.
3. 6 Семафорҳои рақобатӣ
Ҳисобкунаки фаъол; даромадгоҳ - агар "чиптаҳо" мавҷуд бошанд; баромадан - озод кардан.
Вақте ки: амалиётҳои дарозмуддат, риштаҳо, Web-Socket, зеркашӣ мекунанд.
4) Маҳдуд кардани модели калидӣ
Калид = маҷмӯи атрибут:- 'client _ id '/' api _ key '/' user _ id '/' org _ id'
- 'IP/ASN/geo' (муҳофизати ноҳамвор)
- 'нуқта/усул' (хатсайрҳои гарм)
- 'миқёс/нақша/сатҳ' (монетизатсия)
- 'idempotency _ key' (навиштани амалиёт)
- Иерархияро истифода баред: аввал як калид барои як калид, баъд барои як созмон, баъд глобалӣ.
5) Модели арзиш
"Арзиш" 'арзиш (q)' -ро муайян кунед:- Диаграммаи QL: мураккабии майдон × чуқурӣ.
- REST: андозаи ҷавоб/дархост, навъи амалиёт (хонед = 1, навиштан = 3, гузориш = 10).
- Маҷмӯа: 'арзиш = min (n, cap)'.
- Мо нишонаҳоро маҳдуд мекунем, на "дархостҳо": 'буҷа - = арзиш (q)'.
6) Татбиқи тақсимшуда
6. 1 Таҳхона
Дар ҷараён: ултра-зуд, аммо на маҳдудияти умумӣ (барои маҳдудиятҳои "мулоим" -и маҳаллӣ мувофиқ аст).
Редис: стандарти де-факто. INCR/EXPIRE, скриптҳои Луа (атомӣ), ZSET барои тирезаи лағжиш, калидҳо бо TTL.
Фиристанда/NGINX/Kong/Traefik: филтрҳои дарунсохт; барои периметри қулай.
Service Mesh: маҳдудиятҳои маҳаллӣ дар sidecar + ҳамоҳангсозии глобалӣ.
6. 2 Атом ва мусобиқа
Луа дар Редис: тафтиш ва афзоиш дар як қадам.
GCRA: як TAT-ро бо CAS/скрипт нигоҳ доред.
Мувофиқати соат: NTP, таймерҳои якхела.
Sharding: hash пайваста аз ҷониби калид; аз рехтани "гарм" канорагирӣ кунед.
6. 3 Тақсимоти гео
Маҳдудиятҳои маҳаллӣ дар кластерҳои минтақавӣ + глобалии болоӣ (дағалӣ).
CRDT/такрорӣ - бодиққат (таъхирҳо, истеъмоли дукарата). Ҳудуди минтақавӣ бо маржа афзалтар аст.
7) Сиёсат ва афзалият
Нақшаҳо: Free/Pro/Enterprise бо 'r', 'b', квотаҳои гуногун.
Афзалиятҳо: хатсайрҳои "гарон" арзиши камтар ё арзиши бештар мегиранд.
Рӯйхатҳо: рӯйхати иҷозат барои ҳамгироӣ, рад кардани ASN/proxy/TOP.
Афзоиш: агар шумо аз он зиёдтар бошед, маҳдудиятро кам кунед, ба исботи кор/captcha/мушкилот ворид шавед.
8) Намунаҳои конфигуратсияҳо
8. 1 Фиристанда (филтри меъёри HTTP, псевдо)
yaml rate_limit:
domain: public-api descriptors:
- key: api_key rate_limit:
unit: second requests_per_unit: 50 burst: 100
- key: api_key value: payments. write rate_limit:
unit: second requests_per_unit: 5 burst: 10
8. 2 NGINX (луа + Редис, псевдо)
nginx lua_shared_dict limits 10m;
location /api/ {
access_by_lua_block {
local key = ngx. var. arg_apikey.. ":".. ngx. var. request_method.. ":".. ngx. var. uri
-- token bucket in Redis (evalsha)
local allowed, retry_after = ratelimit_allow(key, 50, 100) -- r=50/s, b=100 if not allowed then ngx. header["Retry-After"] = retry_after return ngx. exit(429)
end
}
proxy_pass http://backend;
}
8. 3 Маҳдудиятҳои рақобатӣ (рамзи псевдо)
pseudo on_request_start(key):
if redis. incr_with_ttl("sem:" + key, ttl=60) > MAX_CONCURRENCY:
redis. decr("sem:" + key); reject(429)
on_request_finish(key):
redis. decr("sem:" + key)
8. 4 GCRA (псевдокод)
pseudo params: r tokens/sec, burst b tat = redis. get(key) or now allowed_time = tat - (b / r)
if now < allowed_time: reject(429, retry_after = allowed_time - now)
tat_next = max(tat, now) + 1/r redis. set(key, tat_next, ttl = ceil(b/r) + safety)
9) Ҳамгироӣ бо ақибнишинӣ, танаффус ва схемаи барқ
Буҷаи такрорӣ: ҳиссаи бозпардохтро то X% трафики асосӣ маҳдуд кунед.
Jitter: ҳангоми бозгашт, ҳамеша ҷиттерро илова кунед - таркишҳои синхрониро коҳиш медиҳад.
Қатъи гардиш: агар хатои баланд ('5xx', танаффус) вуҷуд дошта бошад, маҳдудиятҳоро кам кунед ё баъзе хатсайрҳоро ба "танҳо хондан" интиқол диҳед.
Хеджинг: тозаву озода; хароҷотро барои пешгирӣ кардани ду баробар зиёд кардани буҷаи худ баррасӣ кунед.
10) Мушоҳида ва идоракунӣ
Метрикӣ: 'rps _ lated', 'rps _ blocked', '429 _ rate', 'retry _ after _ avg', 'burst _ used', 'quota _ remain', 'active _ concurrency'.
Тамғакоғазҳо: аз рӯи калиди маҳдуд, минтақа, нуқтаи ниҳоӣ, нақша.
Сабтҳои қарор (интихобшуда): сабаби нокомӣ, ҳисобкунакҳои ҷорӣ, калиди TTL.
Панели панелҳо: кортҳои гармидиҳӣ аз рӯи калидҳо/нуқтаҳои ниҳоӣ, мизоҷони "гарм".
Огоҳиҳо: афзоиши 429> 2-5% дар масирҳои интиқодӣ, зуд-зуд "хастагӣ" -и квотаҳо, номутавозунии шардҳо.
11) Санҷиш ва санҷиш
Санҷишҳои шартномавии сиёсатҳо (агар ҷадвалҳо бошанд).
Боркунӣ: буришҳо (x10 аз r), доманакӯҳҳои дароз, намунаҳои "ифлос" (суст-POST, пайвастҳои дароз).
Ҳаракати бесарусомонӣ: ҷараёнҳои нобаробар, кашиши соат, Редис/тарки тарки.
A/B-фарогирӣ: маҳдудиятҳои паҳнкунии канарӣ, ҳалли сояҳо (сабти ном, аммо манъ накунед) пеш аз дохил кардан.
12) Парвандаҳо ва нозукиҳои Edge
Қуттии соат: 'Ҳозир ()' -ро аз як манбаъ (сервер) истифода баред, на аз сарлавҳаҳои муштарӣ.
Калиди Idempotency: барои навиштан - амплитсияро дар ретрас коҳиш медиҳад.
Амалиётҳои гурӯҳӣ: андозаи партия ва арзиши умумиро маҳдуд кунед.
Long-poll/Web-Socket: шумораи каналҳо/обунаҳо ва давомнокиро маҳдуд мекунад.
Оғози хунук: оғози "гарм" -и ҳисобкунакҳо/боркунӣ; вагарна пардаи бардурӯғ 429.
Дархостҳои аз ҷиҳати ҳисоббарорӣ гарон: маҳдуд кардани иҷрои мантиқи тиҷорат.
Ҳудуди TTL: TTL калидҳо равзанаи + марзи бехатариро фаро мегиранд.
13) Авҷгирии антибот
Марҳилаҳо: огоҳӣ → 429 + 'Retry-After' → мушкилот (captcha/puzzle) → блоки муваққатӣ.
Сигналҳо: изи ангуштони дастгоҳ, курсор/рафтори вақт, TOR/proxy/hosting.
Сиёсатҳо бояд барои криминалистӣ муайянкунанда ва такроршаванда бошанд.
14) Бехатарӣ ва риояи
Рад кардани пешфарз дар хатсайрҳои интиқодӣ (навиштан/маблағгузорӣ).
Аудит: қарорҳоро дар бораи маҳдудиятҳои парвандаҳои танзимкунанда ва баррасии ҳодисаҳо нигоҳ доред.
PII: калидҳои маҳдуд набояд маълумоти шахсиро дар гузоришҳо ифшо кунанд.
15) Рӯйхати санҷиши омодагии Prod
- Калидҳои маҳдуд ва модели хароҷот муайян карда мешаванд.
- Алгоритми интихобшуда (сатили токен/GCRA) ва нигоҳдорӣ (Редис/дарвоза).
- Сиёсатҳо барои мизоҷони сатҳӣ + сақфҳои ҷаҳонӣ.
- Маҳдудиятҳои рақобатӣ барои амалиёти дарозмуддат.
- Такрори буҷа, бозгашт бо ҷиттер, ҳамгироӣ бо схемаи барқ.
- Панели панелҳо/огоҳиҳо, сабтҳои интихобшудаи қарор.
- Ҳолати канарӣ ва сояафкан.
- Санҷишҳои таркишҳо, доманакӯҳҳои дароз, нокомии Редис, кӯзаи соат.
- Ҳуҷҷатҳои муштариён: 429, рамзҳои 'Retry-After', намунаҳои пушти экспоненсиалӣ.
16) TL; ДР
Сатили токен ё GCRA-ро бо Redis/дарвоза истифода баред, калидҳои тарроҳӣ ва хароҷоти дархостро илова кунед, семафорҳои рақобатиро барои амалиёти тӯлонӣ илова кунед, бо буҷаи такрорӣ ва схема пайваст кунед, 429 назорат кунед ва "қобилияти буридан" -ро назорат кунед, маҳдудиятҳоро тавассути канария/соя паҳн кунед ва боварӣ ҳосил кунед, ки таркишҳо ва нокомии анборро санҷед