Вақти назорати ноҳиявӣ
1) Чаро ба шумо лозим аст
Системаҳо на аз як шикасти "марговар", балки аз ҷамъшавии таъхирҳо ва кашишҳои "мавҷ" меафтанд. Вақти истироҳат вақти интизориро маҳдуд мекунад ва захираҳоро озод мекунад ва назорати ноҳиявӣ (рахна + рехтан + рақобати мутобиқшавӣ) паҳншавии таназзулро дар қатори вобастагӣ пешгирӣ мекунад. Ҳадаф нигоҳ доштани p95/p99 дар ҳудуди ҳадаф ва нигоҳ доштани дастрасӣ барои камбудиҳои қисман мебошад.
2) Таърифҳои асосӣ
2. 1 Намуди танаффус (L7/L4)
Вақти пайвастшавӣ - Барқарор кардани пайвасти TCP/TLS.
TLS/Вақти дастӣ - дастнависҳо TLS/HTTP2 муқаддима.
Вақти сабтро нависед - дархост фиристед (аз он ҷумла бадан).
Вақти хондан - байти аввали ҷавоб ва/ё тамоми баданро интизор шавед.
Вақти бекорӣ/нигоҳдорӣ - пайвасти ғайрифаъол.
Мӯҳлати умумӣ - мӯҳлати "сахт" барои тамоми дархост (то ба охир).
2. 2 Мӯҳлати ниҳоӣ
'Мӯҳлати ниҳоӣ' -ро интихоб кунед ва марҳилаҳоро тақсим кунед:- 'ingress (gateway) + authZ + барнома + DB/кэш + PSP-и берунӣ'.
- дарвоза: 30 мс,
- ариза: 120 мс,
- DB: 120 мс,
- PSP: 100 мс,
- маржа: 30 мс.
2. 3 Тарғиб ва бекоркунӣ
'deadline '/' timeout' must ба занҷир интиқол дода мешавад (контекст, сарлавҳа, мӯҳлати ниҳоии GRPC). Мӯҳлати истифода - бекор кардани амалиётҳои пасзамина (бекоркунӣ/ctx), қуфлҳои тоза/семафорҳо.
3) Стратегияҳои таъини вақт
1. Аз боло ба поён: дар асоси SLO ва p95 - мӯҳлати ниҳоӣ то ба охир муқаррар карда шуда, пас ба зерқиматҳо тақсим карда мешавад.
2. Роҳҳои "гарон" -ро муайян кунед (зеркашии файлҳо, гузоришҳо, PSP-ҳои беруна) - инфиродӣ дарозтар, вале маҳдуд.
- idempotent (такрори GET/status) - кӯтоҳтар, хашмгинтар;
- навиштан/пулӣ - каме дарозтар, аммо бо такрори ягона ва номутаносибӣ.
4. Хатмкунӣ аз рӯи нақшаҳо/иҷорагирон (корхона метавонад вақти тӯлонитар дошта бошад, аммо параллелизм камтар).
4) Қатъи гардиш: моделҳо ва параметрҳо
4. 1 Сиёсати триггер
Сатҳи нокомӣ - сатҳи хатогӣ ≥ X% дар дархост/вақти N тиреза.
Нокомии минбаъда: Нокомии пайдарпай M.
Суръати зангҳо - таносуби зангҳо аз ҳадди Т. дарозтар аст.
Синфҳои хатогӣ: танаффус/5xx/connection-reset → "марговар", 4xx - ба назар нагиред.
4. 2 Шартҳо
Пӯшида - ҳама чизро аз даст медиҳад, омор ҷамъ мекунад.
Кушода - нокомии фаврӣ (захираҳоро сарфа мекунад, вобастагиро нест намекунад).
Нисфи кушода - "намунаҳои" хурд (дархостҳои N) барои "санҷиши об".
4. 3 Иловаҳои муфид
Bulkhead: ҳавзи риштаҳо/пайвастҳо аз як вобастагӣ, то ки ҳама чизро "ғарқ накунад".
Мувофиқати мутобиқшавӣ: маҳдудияти ҳамоҳангии автоматӣ (алгоритмҳои ба монанди AIMD/Вегас) бо таъхири мушоҳидашуда.
Рехтани сарборӣ: нокомии барвақт/таназзул дар сурати набудани захираҳои маҳаллӣ (навбатҳо, CPU, таваққуфи GC).
5) Ҳамкорӣ: танаффус, ақибнишинӣ, маҳдудиятҳо
Мӯҳлати аввал, пас бозпас: ҳар як такрор бояд ба мӯҳлати умумӣ мувофиқат кунад.
Backoff + jitter барои такрорӣ; эҳтиром 'Retry-After' ва такрори буҷа.
Маҳдудияти нархҳо: Бо шикастани кушод - маҳдудиятҳои поёнтар, то тундбодро шадидтар накунанд.
Idempotency: ҳатмӣ дар амалиёти навиштан (барои пешгирӣ кардани танаффуси "гунг").
Дар куҷо бозпас гирифтан мумкин аст: беҳтараш дар канори (муштарӣ/дарвоза) на дар дохили чуқур.
6) Арзишҳои амалии мақсаднок (нишондиҳандаҳо)
Хондани оммавии API: то ба охир '200-500 мс', хондани вақти '100-300 мс'.
Навиштани интиқодӣ (пардохтҳо): '300-800 мс' e2e; берунии PSP ≤ '250-400 мс'.
Пайвастшавӣ/TLS: '50-150 мс' (бештар - мушкилоти шабака/ҳалкунӣ).
Бекор: '30-90 с' (мизоҷони мобилӣ - барои сарфаи батарея кӯтоҳтар).
Арзишҳоро барои p95/p99 ва минтақаҳо танзим кунед.
7) Конфигуратсияҳо ва намунаҳо
7. 1 Фиристанда (кластер + масир, псевдо)
yaml clusters:
- name: payments_psp connect_timeout: 100ms type: STRICT_DNS lb_policy: ROUND_ROBIN circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 2000 max_requests: 2000 max_retries: 50 outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50
routes:
- match: { prefix: "/api/v1/payments" }
route:
cluster: payments_psp timeout: 350ms # per-request deadline idle_timeout: 30s retry_policy:
retry_on: "reset,connect-failure,refused-stream,5xx,gateways"
num_retries: 1 per_try_timeout: 200ms
7. 2 NGINX (периметри)
nginx proxy_connect_timeout 100ms;
proxy_send_timeout 200ms; # write proxy_read_timeout 300ms; # read (первый байт/все тело)
keepalive_timeout 30s;
send_timeout 15s;
Быстрый отказ при перегрузке limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 50;
7. 3 GRPC (мизоҷ, Go-псевдо)
go ctx, cancel:= context.WithTimeout(context.Background(), 350time.Millisecond)
defer cancel()
resp, err:= client.Pay(ctx, req) // Deadline передается вниз
7. 4 Мизоҷи HTTP (Бирав)
go client:= &http.Client{
Timeout: 350 time.Millisecond, // общий дедлайн на запрос
Transport: &http.Transport{
TLSHandshakeTimeout: 100 time.Millisecond,
ResponseHeaderTimeout: 250 time.Millisecond,
IdleConnTimeout: 30 time.Second,
MaxIdleConnsPerHost: 100,
},
}
7. 5 Resilience4j (Java, псевдо)
yaml resilience4j.circuitbreaker.instances.psp:
slidingWindowType: TIME_BASED slidingWindowSize: 60 failureRateThreshold: 50 slowCallDurationThreshold: 200ms slowCallRateThreshold: 30 permittedNumberOfCallsInHalfOpenState: 5 waitDurationInOpenState: 30s
resilience4j.timelimiter.instances.psp:
timeoutDuration: 350ms
8) Мушоҳида ва огоҳӣ
8. 1 Ченак
'http _ client _ дархостҳо {нуқтаи ниҳоӣ, ҳолати}', 'client _ latency _ bucket'
8. 2 Роҳҳо
Фосила: ingress → handler → DB/Redis → берунӣ.
Атрибутҳо: 'timeout _ ms _ target', 'circuit _ state', 'quenue _ time _ ms'.
Намунаҳо: Қуллаҳои Tie p99 ба микроэлементҳои мушаххас.
8. 3 Огоҳӣ
'p99 _ latency {critical}'> ҳадафи X дақиқа дар як саф.
'timeout _ rate {вобастагӣ}' hopped> Y%.
Гузаришҳои зуд-зуд ба шикастани 'кушодан '/' часпидан'.
Афзоиши 'shed _ дархостҳо _ total' бо баландии CPU/GC.
9) Мувофиқати мутобиқшавӣ ва рехтани сарборӣ
9. 1 Идея
Автоматизатсия параллелизмро коҳиш медиҳад, зеро думҳои ниҳонӣ калон мешаванд:- AIMD: оҳиста афзоиш диҳед, якбора кам шавед.
- Ба Вегас монанд: вақти навбатро нигоҳ доред.
- Дар асоси токен: ҳар як дархост аломати "сӯзондан" -ро талаб мекунад; нишонаҳо дар асоси суръати ченшуда бароварда мешаванд.
9. 2 Татбиқ
Семафорҳои маҳаллӣ дар як масир; ҳадаф нигоҳ доштани 'навбат _ вақт' аз ҳадди ниҳоӣ мебошад.
Глобалии "пешгирикунанда" (RPS/рақобатпазир) дар дарвоза.
Агар норасоии CPU/пайвастшавӣ мавҷуд бошад, нокомии барвақт пеш аз иҷрои мантиқ (429/503 бо 'Retry-After').
10) Сенарияҳои озмоишӣ ва бетартибӣ
Тазриқи дермонӣ: ба таври сунъӣ ба ҳар як вобастагӣ 50-300 мс илова кунед.
Талафоти пакет/dup/drop (tc/tbf, Toxiproxy).
Гардиши тугма: ҳавзҳои пайвастшавиро кам кунед, сарбориро ба пуррагӣ зиёд кунед.
Куштан/хароб кардани як минтақа/шард (қисман дастнорас будан).
Санҷишҳо: тӯфони бозгаштро "ноком" намекунад; breaker пешгӯишаванда мекушояд; оё навбат меафзояд.
11) Антипаттернҳо
Як "вақти хондан" -и ҷаҳонӣ бидуни тафсилоти пайвастшавӣ/TLS/дар як марҳила.
Набудани мӯҳлати муқаррарии § бозпурсӣ аз доираи SLO берун аст.
Retrai бе jitter ва бе retry-буҷет.
Пайвастҳои "абадӣ" бидуни танаффуси бекорӣ → дескрипторҳои ихроҷ.
Breaker 4xx-ро ҳамчун хатогиҳои марговар ҳисоб мекунад.
Пас аз ба итмом расидани муштарӣ кори пасзамина бекор карда/бекор карда намешавад.
Вақти истироҳат барои шабакаҳои мобилӣ/ноустувор хеле дароз аст.
12) Хусусиятҳои IGaming/Finance
Навиштани интиқодӣ (пасандозҳо/натиҷаҳо): як такрори кӯтоҳ бо Idempotency-Key, пас '202 қабул' + ба ҷои интизориҳои беохир.
PSP/бонкдорӣ: сиёсати алоҳида аз ҷониби провайдер/минтақа (баъзе сусттар).
Пардохтҳо ва маҳдудиятҳои масъул: барои қуфлҳо/баррасиҳо - зуд '423/409', амалиёти "овезон" -ро дароз накунед.
Ҳисоботдиҳӣ/ҷамъбаст - асинхронӣ кор кунед (партия + захираи вазъ).
13) Рӯйхати санҷиши омодагии Prod
- Мӯҳлати ниҳоии хатсайр (GET/POST) муайян карда шуд.
- Аз рӯи марҳила буҷа карда мешавад; паҳнкунии мӯҳлат фаъол аст.
- Конфигуратсияҳои пайвастшавӣ/TLS/хондан/навиштан/бекор кардан дар дарвоза ва мизоҷон.
- Қатъи гардиш бо ҳадди нокомӣ ва зангҳои суст; мантиқи нимтайёрро дуруст кунед.
- Bulkheads оид ба вобастагӣ; маҳдудиятҳои мувофиқати ҳар як масир.
- Рехтани сарборӣ пеш аз иҷрои мантиқи тиҷорат ҳангоми изофабор.
- Ҳамгироӣ бо ақибнишинӣ: backoff + jitter, retry-budget, эҳтиром 'Retry-After'.
- Idempotency менависад, 'Idempotency-Key' ва outbox барои чорабиниҳо.
- Нишондиҳандаҳо: вақти истироҳат/занги суст/танаффус/вақти навбатӣ/рақобат.
- Санҷишҳои бетартибӣ: тазриқи таъхирҳо/талафот/нокомӣ, таназзули минтақаҳо.
- Ҳуҷҷатҳои муштариён: вақти интихоб, рамзҳои посух, маслиҳатҳои такрорӣ.
14) TL; ДР
Ба ҳар як дархост мӯҳлати ниҳоӣ диҳед, онро марҳила ба марҳила тартиб диҳед ва ба занҷир паҳн кунед. Идоракунии камбудиҳо тавассути шикастани схема + болопӯшҳо + мувофиқати мутобиқшавӣ + рехтани сарборӣ. Бозсозӣ - танҳо дар доираи мӯҳлат, бо ҷиттер ва буҷа; нависед - танҳо idempotent. Вақти истироҳат/занги суст, ҳолати вайронкунанда ва 'навбат _ вақт' -ро чен кунед, мунтазам озмоишҳои бетартибиҳоро пеш баред.