Ҳавзҳои пайвастшавӣ ва ниҳонӣ
Ҳавзҳои пайвастшавӣ ва ниҳонӣ
1) Чаро ҳавзҳо лозиманд
Пайвастшавӣ гарон аст (дастони TCP/TLS, аутентификатсия, гармӣ). Ҳавз имкон медиҳад:- Пайвастҳои тайёрро аз нав истифода баред (зинда монед) → дар зери TTFB.
- Ҳамоҳангии назоратро назорат кунед ва ба ҷои тарма аз ақибмонӣ фишор диҳед.
- Аз сабаби андозаи дуруст ва танаффус думҳои p95/p99-ро кам кунед.
Хатарҳои асосӣ: навбатҳои интизорӣ дар ҳавз, басташавии сатр, мундариҷа барои пайвастшавӣ ва тӯфони ақибнишинӣ.
2) Пойгоҳи математикӣ: Чӣ гуна андозаи ҳавзро ҳисоб кардан мумкин аст
Мо қонуни Литлро истифода мебарем: 'L = λ × W'. Барои ҳавз ин маънои онро дорад:- 'λ' ҷараёни миёнаи дархост (RPS) мебошад.
- 'W' is пайвасти миёнаи ҳар як дархост банд аст (вақти хидмат, аз ҷумла таъхири шабака ва кори хадамоти дурдаст).
- Андозаи ҳадди ақали ҳавз 'N _ min ≈ λ × W' мебошад.
- Маржа барои вариантҳо ва p99 илова кунед: headroom 20-50%.
- Мисол: 300 RPS, вақти миёнаи нигоҳдорӣ 40 мс → 'N _ min = 300 × 0. 04 = 12`. Бо маржаи 50%, 18 пайвастшавӣ → мебошанд.
Агар думҳо калон бошанд: 'W _ p95' ё 'W _ p99' -ро барои роҳҳои интиқодӣ дида бароед - ҳавзҳо калон мешаванд.
3) Принсипҳои умумии тарроҳӣ
1. Роҳи кӯтоҳи маълумот: истифодаи дубора (зинда мондан, HTTP/2/3 мултиплексинг).
2. Маҳдудияти параллелизм: беҳтар аст, ки зудтар рад кунед (429/503) нисбат ба пухтани ақиб.
3. Вақтсанҷҳо> ақибнишинӣ: Таътили хурд ва ақибнишинии нодирро таъин кунед.
4. Навбати муштариён нисбат ба навбати сервер кӯтоҳтар аст (зуд бо нокомӣ зуд).
5. Backpressure: вақте ки ҳавз пур аст - фавран NACK/хато/collbeck "баъдтар".
6. Ҷудокунии ҳавзҳо аз рӯи ҳадафҳо: DB, кэш, PSP беруна - ҳудуди онҳо.
4) HTTP/1. 1 против HTTP/2/3, зинда мондан
HTTP/1. 1: як дархости пайвастшавӣ дар як вақт (амалан); ба ҳавз бо пайвастҳои сершумор барои як мизбон ниёз дорад.
HTTP/2: мултиплекссияи ҷараён дар як TCP; алоқаҳои камтар, аммо HOL-бастани TCP ҳангоми гум шудани пакетҳо имконпазир аст.
HTTP/3 (QUIC): ҷараёни мустақилият аз болои UDP - мушкилоти камтар аз HOL, байтҳои тезтар.
- давомнокии 30-90s (аз рӯи профил), маҳдудияти дархостҳо барои пайвастшавӣ (истифодаи такрории зебо).
- Пеш аз гармкунӣ (preconnect) дар оғози коргар.
- Маҳдудияти ҷараёни максималии ҳар як HTTP/2 (мас. 100-200).
nginx upstream backend {
server app-1:8080;
server app-2:8080;
keepalive 512;
keepalive_requests 1000;
keepalive_timeout 60s;
}
proxy_http_version 1. 1;
proxy_set_header Connection "";
Фиристанда (HTTP/2 ҳавз):
yaml http2_protocol_options:
max_concurrent_streams: 200 common_http_protocol_options:
idle_timeout: 60s max_connection_duration: 3600s
5) Ҳавзҳои DB: Pg
Ҳадаф маҳдуд кардани муомилоти рақобатӣ ва нигоҳ доштани пайвасти кӯтоҳ аст.
5. 1 PGBouncer (Postgre- SQL)
Модулҳо: 'сессия '/' транзаксия '/' изҳорот'. Барои API - бештар муомилот.
Параметрҳои муҳим инҳоянд: 'pool _ size', 'min _ pool _ size', 'reserve _ pool _ size', 'server _ idle _ timeout'.
ini
[databases]
appdb = host=pg-primary port=5432 dbname=appdb
[pgbouncer]
pool_mode = transaction max_client_conn = 5000 default_pool_size = 100 min_pool_size = 20 reserve_pool_size = 20 query_wait_timeout = 500ms server_idle_timeout = 60 server_reset_query = DISCARD ALL
5. 2 Ҳикари (Java)
Пайвастҳои хурд, зуд, танаффуси сахт.
properties dataSourceClassName=org. postgresql. ds. PGSimpleDataSource maximumPoolSize=30 minimumIdle=5 connectionTimeout=250 validationTimeout=200 idleTimeout=30000 maxLifetime=1800000 leakDetectionThreshold=5000
Қоидаҳо:
- 'maximum' Pool ≈ Андозаи RPS × W × headroom '.
- 'connection' Timeout 'hundreds миллисекундҳо, на сонияҳо.
- Фаъол кардани муайянкунии ихроҷ.
5. 3 Гузаштан/гиреҳ/Python - намунаҳо
Бирав http. Мизоҷ (истифодаи такрорӣ + вақт):go tr:= &http. Transport{
MaxIdleConns: 512,
MaxIdleConnsPerHost: 128,
IdleConnTimeout: 60 time. Second,
TLSHandshakeTimeout: 2 time. Second,
}
c:= &http. Client{
Transport: tr,
Timeout: 2 time. Second ,//general
}
Гиреҳ. js агенти зинда:
js const http = require('http');
const agent = new http. Agent({ keepAlive: true, maxSockets: 200, maxFreeSockets: 64, timeout: 60000 });
psycopg/SQLA lchemy (Python):
python engine = create_engine(
url, pool_size=30, max_overflow=10, pool_recycle=1800, pool_pre_ping=True, pool_timeout=0. 25
)
6) Навбати интизорӣ ва таъхири дум
Думҳо вақте рух медиҳанд, ки:- Ҳавз аз 'λ × W' → хурдтар аст, навбати пайвастшавӣ меафзояд.
- Бе буфер ва маҳдудиятҳо нобаробарӣ (дарида) бор кунед.
- Дархостҳои тӯлонӣ пайвастшавиро оғоз мекунанд ва HOL эҷод мекунанд.
- Ҳавзҳои ҷудогона аз рӯи намуди дархост (зуд/суст).
- Иҷрои вақти истироҳати муштарӣ. Агар мӯҳлати истифодааш гузашта бошад - НАК-и тез.
- Кашфи берунӣ ва шикастани гардиш дар хатсайрҳо (Фиристанда, HAP-roxy).
- Квотаҳо барои хатсайрҳои "вазнин", ҳавзи алоҳида барои ҳисобот/содирот.
yaml circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 200 max_pending_requests: 100 max_requests: 1000 max_retries: 2
7) Вақти истироҳат ва ақибнишинӣ (тартиби дуруст)
1. Вақти пайвастшавӣ (кӯтоҳ: 50-250 мс дар дохили DC).
2. Вақти тамдиди дасти TLS (500-1000 мс вне DC).
3. Дархост/Вақти хондан (ба масири SLO наздиктар).
4. Retry: ҳадди аксар 1 вақт, танҳо барои усулҳои idempotent; jitter + бозгашт.
5. Буҷаи бозгашт: лимити глобалӣ ҳамчун фоизи RPS (масалан, ≤ 10%).
8) Зинда мондан, Нагле, протоколҳо
Ғайрифаъол кардани Nagle (TCP_NODELAY) барои RPC-ҳои хурд.
Дар ҷойҳои имконпазир HTTP-ро зинда нигоҳ доред.
Танҳо вақте ки шумо оқибатро мефаҳмед, TIME_WAIT - оҳанги 'истифодаи такрорӣ '/' истифодаи такрорӣ' -ро тамошо кунед; беҳтар - истифодаи дубора, на танзими ядро.
TLS - Истифодаи дубораи сессия ва ALPN.
9) Танзими OS/ядро (бо эҳтиёт)
'нет. аслӣ. somaxconn ',' холис. ипв4. ip_local_port_range', 'холис. ипв4. tcp_fin_timeout'.
Тавсифкунандагон: 'nofile' ≥ 64k як раванди прокси.
Тавозуни IRQ, GRO/LRO - аз рӯи профили трафик.
Афзалият - профил; танзими бидуни ченак аксар вақт зараровар аст.
10) Мушоҳида: чиро чен кардан лозим аст
Истифодаи ҳавз: банд/умумӣ, пайвасти p50/p95 то интизорӣ.
Дархостҳои парвоз ва вақти нигоҳдории онҳо (иловаро ба масир).
Буҷаи хатогӣ: таносуби такрорӣ.
Пайвастшавӣ Эҷод/Пӯшидан дар як сония.
TCP/TLS: SYN RTT, дастпӯшакҳо, истифодаи такрории сессия.
Для Б.Д.: пайвастҳои фаъол, интизорӣ, муомилоти тӯлонӣ, қуфлҳо.
Графики: "RPS vs ҳавзи интизорӣ", "тақсимоти вақт", "таносуби истифодаи дубора", "сафарҳои ноҳиявӣ".
11) Дастурҳои парванда
11. 1 дарвозаи API → пушти сар
HTTP/2 ба ақиб, 'max _ concurrent _ streams = 200'.
Ҳавзи 20-40 пайвастшавӣ барои як хидмат дар як гиреҳи дарвоза.
Вақтсанҷҳо: 100 мс пайваст кунед, барои ҳар як озмоиш 300-500м, 1-2s муштарак, 1 retry бо jitter.
11. 2 Хидмати Postgre
'pool _ mode = транзаксия', 'пешфарз _ pool _ size' аз рӯи формула (RPS × W × 1). 3).
Дар 'Connection' Timeout ≤ 250ms ', муомилоти кӯтоҳ (<100ms).
Дархостҳои гузоришдиҳии вазнин - ҳавзи алоҳида/нусхабардорӣ.
11. 3 GRPC дохилӣ
Як канал (HTTP/2) барои як мизбони ҳадаф бо маҳдудияти ришта 100-200.
Мӯҳлати ниҳоии RPC дар масири SLO, танҳо idempotent-ро бозпас гиред.
Ченакҳои дарозмуддати RPC ва ченакҳои нигоҳдорӣ.
12) Рӯйхати санҷиши амалисозӣ (0-30 рӯз)
0-7 рӯз
Андозагирии 'W' (вақти нигоҳдорӣ) дар хатсайрҳои асосӣ/муштариён.
Ҳисоб кунед 'N _ min = λ × W' and илова 30-50% сарлавҳа.
Имкон диҳед, ки танаффусҳои зинда ва кӯтоҳ пайваст карда шаванд.
8-20 рӯз
Ҳавзҳои ҷудогона (зуд/суст/беруна).
Навъи гардишгарон ва буҷаҳои бозсозӣ.
Панели панелро илова кунед: интизории ҳавз p95, таносуби истифодаи такрорӣ, ҳангоми парвоз.
21-30 рӯз
Сарборӣ бо таркишҳо, озмоиши бесарусомонӣ "афтиши ақиб" мегузарад.
Оптимизатсияи дум: ҷудокунии хатсайрҳои вазнин, кэшҳои маҳаллӣ.
Формулаҳо ва маҳдудиятҳои ҳуҷҷат дар runbook 'ax.
13) Анти-намунаҳо
Андозаи ҳавз "ба таври тасодуфӣ" ва ҳеҷ сарпӯш нест.
Ба ҷои нокомии зуд, вақти интизории пайвасти калон → думҳои дароз.
Бисёре аз ақибнишинӣ бе ҷиттер ва аблаҳӣ → тӯфон.
Як ҳавзи муштарак барои ҳама намудҳои дархост.
Амалиётҳои тӯлонӣ пайвастшавиро (DB) → гуруснагии боқимондаро нигоҳ медоранд.
Маъюбон зинда ё бекорхобида аз ҳад кам ва маҳдудиятҳои churn ва афзоиши TTFB.
14) Нишондиҳандаҳои камолот
Интизории ҳавзи p95 дар prod <10% масири умумии p95.
Таносуби истифодаи такрорӣ (> 90% барои HTTP дохилӣ;> 80% барои беруна).
Вақти DB txn p95 <100-200 ms; фоизи муомилоти дароз <1%.
Меъёри такрорӣ <5% (ва буҷаи ≤), хатогиҳо бо сабаби танаффус устувор ва пешгӯишаванда мебошанд.
Ҳисоббаробаркунии ҳавз барои ҳамаи муштариёни муҳим.
15) Хулоса
Муттаҳидсозии самараноки пайвастшавӣ ин муҳандисии навбатӣ + интизоми вақт мебошад. Андозагирии 'W', ҳисоб кардани ҳавз ' W' with як маржа, фурӯзон кардани +, роҳҳои сустро ҷудо кунед, танаффуси кӯтоҳ ва бозгашти ҳадди аққалро бо ҷиттер нигоҳ доред. Мушоҳидаҳои "интизории ҳавз ва таъхир" -ро илова кунед - ва шумо TTFB-и паст, думи назоратшавандаи p99 ва муқовимати шадидро бидуни аз ҳад зиёд гарм кардан мегиред.