Logo GH

Birikmalar va latency pullari

Birikmalar va latency pullari

1) Pullar nima uchun kerak?

Ulanishlar qimmat (TCP/TLS handshakes, autentifikatsiya, warm-up). Pool quyidagilarga imkon beradi:
  • Tayyor konnektlarni qayta ishlatish (keep-alive) → TTFB ostida.
  • Parallellikni nazorat qilish va retray ko’chkisi o’rniga backpressure berish.
  • p95/p99 quyruqlarini toʻgʻri oʻlcham va taymaut hisobiga kamaytirish.

Asosiy xavflar: hovuzda kutish navbati, head-of-line blocking, konnektlar uchun kontenshen va retray bo’roni.

2) Matematika bazasi: pulning o’lchamini qanday hisoblash kerak

Biz Little qonunidan foydalanamiz:’L = λ × W’. Pule uchun bu:
  • ’λ’ - soʻrovlarning oʻrtacha oqimi (RPS).
  • ’W’ - so’rov uchun ulanishning o’rtacha bandligi (service time, shu jumladan tarmoq latentligi va masofaviy servis ishi).
  • Pulning eng kichik o’lchami:’N _ min ≈ λ × W’.
  • O’zgarishlar uchun zaxirani qo’shing va p99: headroom 20-50%.
  • Misol: 300 RPS, o’rtacha hold-time 40 ms →’N _ min = 300 × 0. 04 = 12`. 50% → 18 ta konnekt zaxirali.

Agar quyruqlar katta bo’lsa: kritik yo’llar uchun’W _ p95’yoki’W _ p99’ni hisobga oling - pullar o’sadi.

3) Loyihalashtirishning umumiy prinsiplari

1. Qisqa maʼlumot yoʻli: reuse (keep-alive, HTTP/2/3 multiplekslash).
2. Parallellikni cheklash: tezda (429/503) rad etish, orqa tomonni qovurishdan yaxshiroqdir.
3. Taymautlar> retrajlar: kichik taymautlar va noyob retrajlarni jitter bilan qoʻying.
4. Mijozning navbati serverdan qisqaroq (tezkor fail-fast).
5. Backpressure: pulni toʻldirganda - darhol NACK/xato/kolbek «keyinroq».
6. Maqsadlar bo’yicha pullarni izolyatsiya qilish: DB, kesh, tashqi PSP - o’z limitlari.

4) HTTP/1. 1 vs HTTP/2/3, keep-alive

HTTP/1. 1: konnektga bir vaqtning o’zida bitta so’rov (amalda); Xost uchun bir nechta ulanishli hovuz kerak.
HTTP/2: bitta TCPda oqimlarni multiplekslash; konnektlar kamroq, lekin paketlar yo’qolganda TCPda HOL-blocking mumkin.
HTTP/3 (QUIC): UDP ustidagi oqim mustaqilligi - kamroq HOL muammolari, tezroq birinchi baytlar.

Yordam beradigan moslamalar:
  • keep-alive timeout 30-90s (profil bo’yicha), konnektga so’rovlar limiti (graceful recycle).
  • Vorker boshlanganda preconnect (preconnect).
  • HTTP/2 maksimal oqimini cheklash (masalan, 100-200).
NGINX (upstream keepalive):
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 "";
Envoy (HTTP/2 pool):
yaml http2_protocol_options:
max_concurrent_streams: 200 common_http_protocol_options:
idle_timeout: 60s max_connection_duration: 3600s

5) DB pullari: PgBouncer, HikariCP, drayverlar

Maqsad - raqobatbardosh tranzaksiyalarni cheklash va konnektni qisqa muddatda ushlab turish.

5. 1 PgBouncer (PostgreSQL)

Rejimlar:’session ’/’ transaction ’/’ statement’. API uchun - koʻproq transaction.
Muhim parametrlar:’pool _ size’,’min _ pool _ size’,’reserve _ pool _ size’,’server _ idle _ timeout’,’query _ wait _ 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 HikariCP (Java)

Kichik, tezkor konnektlar, qattiq taymautlar.

properties dataSourceClassName=org. postgresql. ds. PGSimpleDataSource maximumPoolSize=30 minimumIdle=5 connectionTimeout=250 validationTimeout=200 idleTimeout=30000 maxLifetime=1800000 leakDetectionThreshold=5000
Qoidalar:
  • `maximumPoolSize ≈ RPS × W × headroom`.
  • ’connectionTimeout’ yuz millisekund, soniya emas.
  • leak detection.

5. 3 Go/Node/Python - misollar

Go http. Client (reuse + timeouts):
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
}
Node. js keep-alive agent:
js const http = require('http');
const agent = new http. Agent({ keepAlive: true, maxSockets: 200, maxFreeSockets: 64, timeout: 60000 });
psycopg / SQLAlchemy (Python):
python engine = create_engine(
url, pool_size=30, max_overflow=10, pool_recycle=1800, pool_pre_ping=True, pool_timeout=0. 25
)

6) Kutish navbatlari va tail-latency

Quyruqlar:
  • Pool’λ × W’→ dan kichikroq.
  • Yuklamaning notekisligi (bursts) bufer va limitsiz.
  • Uzoq so’rovlar HOLni yaratadi.
Qarshi choralar:
  • Pullarni soʻrov turlariga (tez/sekin) ajrating.
  • Connect kutish vaqtini (client-side) kiriting. Agar muddati tugasa - tezkor NACK.
  • Yo’nalishlarda Outlier detection va circuit-breaking (Envoy, HAProxy).
  • «Og’ir» yo’nalishlarga kvotalar, hisobotlar/eksport uchun alohida pullar.
Envoy circuit breaker (misol):
yaml circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 200 max_pending_requests: 100 max_requests: 1000 max_retries: 2

7) Taymautlar va retrajlar (to’g "ri tartib)

1. Connect timeout (qisqa: DC ichida 50-250 ms).
2. TLS handshake timeout (500–1000 ms вне DC).
3. Request/Read timeout (yo’nalishning SLOga yaqinroq).
4. Retry: ko’pi bilan 1 marta, faqat idempotent usullar uchun; jitter + backoff.
5. Budget retraida: global limit RPS foizida (masalan, 10% ≤).

8) Keep-alive, Nagle, protokollar

Kichik xabarli RPC uchun Nagle (TCP_NODELAY) ni oʻchiring.
HTTP keep-alive’ni iloji boricha yoqing.
TIME_WAIT kuzating - tune’reuse ’/’ recycle’faqat oqibatlarini tushunsangiz; yaxshiroq - yadro tyuningi emas, balki konnektlarning reuse.
TLS: session resumption va ALPN’dan foydalaning.

9) OS/Kernel tyuning (ehtiyotkorlik bilan)

`net. core. somaxconn`, `net. ipv4. ip_local_port_range`, `net. ipv4. tcp_fin_timeout`.
Deskriptorlar:’nofile’≥ 64k proxy jarayoniga.
IRQ, GRO/LRO balansi - trafikning profili bo’yicha.
Ustuvorlik - profillash; metriksiz tyuning ko’pincha zararli.

10) Kuzatish darajasi: nimani o’lchash kerak

Pool utilization: band/hammasi, p50/p95 connect kutish.
In-flight so’rovlari va ularning hold-time (yo’nalishlar bo’yicha kesishlar).
Error budget retrayev: takrorlash ulushi.
Connection churn: sekundiga yaratish/yopish.
TCP/TLS: SYN RTT, handshakes, session reuse.
Для БД: active connections, waiting, long transactions, locks.

Графики: «RPS vs pool wait», «hold-time distribution», «reuse ratio», «circuit trips».

11) Keys-retseptlar

11. 1 API-shlyuz → backend

HTTP/2’max _ concurrent _ streams = 200’.
Shlyuz uzeliga xizmat ko’rsatish uchun 20-40 konnektli hovuz.
Taymautlar: connect 100ms, per-try 300-500ms, umumiy 1-2s, 1 retry jitter bilan.

11. 2 Xizmat → PgBouncer orqali PostgreSQL

’pool _ mode = transaction’,’default _ pool _ size’formula (RPS × W × 1. 3).
’connectionTimeout ≤ 250ms’ ilovasida, qisqa tranzaksiyalar (<100ms).
Og’ir hisobot so’rovlari - alohida pul/nusxa.

11. 3 gRPC ichki

Maqsadli xostga bitta kanal (HTTP/2), oqim limiti 100-200.
Yo’nalishning SLO bo’yicha RPC uchun deadline, faqat idempotent.
Uzun RPC va hold-time metrikasi uchun treys sampling.

12) Joriy etish chek-varaqasi (0-30 kun)

0-7 kun

Asosiy yo’nalishlar/mijozlarda’W’(hold-time) ni o’lchang.
’N _ min = λ × W’ hisoblang va 30-50% headroom qoʻshing.
keep-alive va qisqa kutish vaqtlarini yoqing.

8-20 kun

Pullarni ajrating (tezkor/sekin/tashqi).
circuit-breakers va budgets retraylarni kiriting.
Dashbordlarni qoʻshing: pool wait p95, reuse ratio, in-flight.

21-30 kun

Burstlar bilan yuk tashlash, «orqa tomonning tushishi» bo’yicha xaos-test.
Dumlar bo’yicha optimallashtirish: og’ir yo’nalishlarni izolyatsiya qilish, mahalliy keshlar.
Formulalar va limitlarni runbook’ax’da hujjatlashtiring.

13) Anti-patternlar

Pulning oʻlchami va headroom yoʻqligi.
Konnektni kutishning katta taymautlari → tezda nosozliklar o’rniga uzun dumlar.
Jittersiz va idempotentsiz retrajlar ko’p → bo’ron.
Barcha turdagi soʻrovlar uchun bitta umumiy hovuz.
Uzoq tranzaktsiyalar (DB) → starvation qolganlarini ushlab turadi.
Oʻchirilgan keep-alive yoki juda kichik idle → churn limitlari va TTFB oʻsishi.

14) Etuklik metrikasi

Pool wait p95 proda <10% umumiy p95 yo’nalish.
Reuse ratio (ichki HTTP uchun> 90%; tashqi HTTP uchun> 80%).
DB txn time p95 < 100–200 ms; uzoq tranzaksiyalar ulushi <1%.
Retry rate <5% (va ≤ budget), timeouts tufayli xatolar barqaror va oldindan aytib bo’ladi.
Barcha tanqidiy mijozlar uchun pulning hujjatlashtirilgan hisob-kitobi.

15) Xulosa

Samarali connection pooling - bu navbat muhandisligi + taymaut intizomi. ’W’ ni o’lchang,’λ’× W’ni zaxirali hisoblang, keep-alive/HTTP2 + ni yoqing, sekin yo’llarni ajrating, qisqa vaqtlarni va minimal retrajlarni jitter bilan saqlang. «pool wait vs latency» va circuit-breakers ko’rinishini qo’shing - va siz past TTFB, nazorat qilinadigan p99 dumi va ortiqcha isinmasdan portlashga chidamli bo’lasiz.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.