GH GambleHub

Baglanyşyk we latency pullary

Baglanyşyk we latency howuzlary

1) Näme üçin howuzlar gerek?

Baglanyşyklar gaty gymmat (TCP/TLS handshakes, autentification, warm-up). Howuz:
  • Taýýar konnektleri gaýtadan ulanmak (keep-alive) → TTFB-den aşakda.
  • Paralelligi gözegçilikde saklaň we retraý göçüniň ýerine backpressure beriň.
  • p95/p99 guýruklaryny dogry ululykda we wagtlarda azaltmak.

Esasy töwekgelçilikler: howuzda garaşmagyň nobatlary, kelleli-çyzykly blokirleme, konnektler üçin kontrenşen we retraý tupany.

2) Matematika binýady: howuzyň ululygyny nädip hasaplamaly

Little kanunyny ulanýarys: 'L = λ × W'. Howuz üçin bu:
  • 'λ' - orta haýyş akymy (RPS).
  • 'W' - soraga birikdirmegiň ortaça tutýan orny (tor gizlinligini we uzakdaky hyzmatyň işini goşmak bilen service time).
  • Iň kiçi basseýn ululygy: 'N _ min ≈ λ × W'.
  • Üýtgeşiklik we p99 üçin ätiýaçlyk goşuň: headroom 20-50%.
  • Mysal: 300 RPS, ortaça hold-time 40 ms → 'N _ min = 300 × 0. 04 = 12`. Ätiýaçlyk bilen 50% → 18 konnekt.

Guýruklary uly bolsa: möhüm ýollar üçin 'W _ p95' ýa-da 'W _ p99' -y göz öňünde tutuň - howuzlar ösýär.

3) Taslamanyň umumy ýörelgeleri

1. Gysga maglumat ýoly: reuse (keep-alive, HTTP/2/3 multiplekslemek).
2. Paralelligi çäklendirmek: arka tarapy gowurmakdan çalt (429/503) ýüz öwürmek has gowudyr.
3. Taýmautlar> retrailer: jitter bilen kiçi taýmautlary we seýrek retraileri goýuň.
4. Müşderiniň nobatlary serwerden gysga (çalt fil-fast).
5. Backpressure: howuz doldurylanda - derrew NACK/ýalňyşlyk/kollbek "soň".
6. Howuzlaryň maksatlar boýunça izolýasiýasy: DB, nagt pul, daşarky PSP - öz çäkleri.

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

HTTP/1. 1: bir wagtyň özünde konnekt üçin bir haýyş (iş ýüzünde); host üçin bir howuz gerek.
HTTP/2: bir TCP-de akymlary köpeltmek; az baglanyşyk bar, ýöne bukjalar ýitirilende TCP-de HOL-blocking mümkin.
HTTP/3 (QUIC): UDP-iň üstündäki akym garaşsyzlygy - az HOL problemalary, ilkinji baýtlardan has çalt.

Kömek edýän sazlamalar:
  • keep-alive timeout 30-90s (profil boýunça), konnekt haýyşlarynyň çäkleri (graceful recycle).
  • Worker başlananda preconnect
  • HTTP/2 üçin iň ýokary akymlary çäklendirmek (mysal üçin 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) BD pullary: PgBouncer, HikariCP, sürüjiler

Maksat bäsdeşlik amallaryny çäklendirmek we konnektiň gysga saklanmagyny saklamak.

5. 1 PgBouncer (PostgreSQL)

Usullar: 'session '/' transaction '/' statement'. API üçin - köplenç transaction.
Möhüm parametrler: '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)

Kiçijik, çalt konnektler, gaty wagtlar.

properties dataSourceClassName=org. postgresql. ds. PGSimpleDataSource maximumPoolSize=30 minimumIdle=5 connectionTimeout=250 validationTimeout=200 idleTimeout=30000 maxLifetime=1800000 leakDetectionThreshold=5000
Düzgünler:
  • `maximumPoolSize ≈ RPS × W × headroom`.
  • 'connectionTimeout' sekunt däl, ýüzlerçe millisekunt.
  • Leak detection.

5. 3 Go/Node/Python - mysallar

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) Garaşmagyň nobatlary we tail-latency

Guýruklar:
  • Howuz 'λ × W' → -den kiçidir.
  • Ýüküň deňsizligi (bursts) bufersiz we çäksiz.
  • Uzyn haýyşlar konnekti eýeleýär we HOL döredýär.
Garşy çäreler:
  • Howuzlary soraglaryň görnüşlerine görä bölüň (çalt/haýal).
  • Connect (client-side) garaşmak wagtyny giriziň. Möhleti geçen bolsa - çalt NACK.
  • Outlier detection we circuit-breaking (Envoy, HAProxy).
  • "Agyr" ugurlar üçin kwotalar, hasabat/eksport üçin aýratyn howuz.
Envoy circuit breaker (mysal):
yaml circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 200 max_pending_requests: 100 max_requests: 1000 max_retries: 2

7) Wagtlar we retralar (dogry tertip)

1. Connect timeout (gysga: 50-250 ms DC içinde).
2. TLS handshake timeout (500–1000 ms вне DC).
3. Request/Read timeout (SLO ugruna has ýakyn).
4. Retry: iň köp 1 gezek, diňe idempotent usullary üçin; jitler + backoff.
5. Retrada budget: global çäk RPS-den göterim (mysal üçin ≤ 10%).

8) Keep-alive, Nagle, teswirnamalar

Kiçi habarly RPC üçin Nagle (TCP_NODELAY) öçüriň.
HTTP keep-alive-i mümkin boldugyça açyň.
TIME_WAIT yzarlaň - tune 'reuse '/' recycle' diňe netijelerine düşünseňiz; has gowusy - ýadro sazlamak däl-de, konnektleriň reuse.
TLS: session resumption we ALPN ulanyň.

9) OS/Kernel sazlamak (seresaplylyk bilen)

`net. core. somaxconn`, `net. ipv4. ip_local_port_range`, `net. ipv4. tcp_fin_timeout`.
Deskriptorlar: 'nofile' ≥ 64k proxy.
IRQ, GRO/LRO balansy - traffigiň profili boýunça.
Ileri tutulýan - profillemek; metrsiz sazlamak köplenç zyýanly.

10) Syn etmek: näme ölçemeli

Pool utilization: boş/jemi, p50/p95 konnekt garaşýar.
In-flight soraglary we olaryň hold-time (marşrutlar boýunça kesişler).
Error budget retraýewler: gaýtalamalaryň paýy.
Connection churn: sekuntda dörediň/ýapyň.
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) Keýs-reseptler

11. 1 API şlýuzy → backend

HTTP/2 girişi, 'max _ concurrent _ streams = 200'.
Şlýuz düwünine hyzmat etmek üçin 20-40 konnekt howuzy.
Wagtlar: connect 100ms, per-try 300-500ms, umumy 1-2s, jitter bilen 1 retry.

11. 2 Hyzmat → PgBouncer arkaly PostgreSQL

'pool _ mode = transaction', 'default _ pool _ size' formula (RPS × W × 1. 3).
'connectionTimeout ≤ 250ms' programmasynda, gysga amallar (<100ms).
Agyr hasabat soraglary - aýratyn howuz/göçürme.

11. 3 gRPC içerki

100-200 akym çäkli maksatly host üçin bir kanal (HTTP/2).
SLO ugry boýunça RPC-e deadline, retra diňe idempotent.
Uzyn RPC we hold-time metrikleri üçin treýsleriň samplingleri.

12) Giriş çek-sanawy (0-30 gün)

0-7 gün

Esasy ugurlarda/müşderilerde 'W' -ni (hold-time) ölçäň.
'N _ min = λ × W' hasaplaň we 30-50% headroom goşuň.
Konnektiň keep-alive we gysga wagtlaryny açyň.

8-20 gün

Howuzlary bölüň (çalt/haýal/daşarky).
Circuit-breakers we budgets retraini giriziň.
Dashbordlary goşuň: pool wait p95, reuse ratio, in-flight.

21-30 gün

Burstlar bilen ýüklemek, "arkanyň ýykylmagy" bulam-bujarlyk synagy.
Guýruklar boýunça optimizasiýa: agyr marşrutlaryň izolýasiýasy, ýerli keşler.
Formulalary we çäkleri runbook 'ax-da resminamalaşdyryň.

13) Anti-patternler

Howuzyň ululygy "tötänleýin" we headroom ýoklugy.
Çalt şowsuzlyklaryň ýerine → uzyn guýruklar.
Jittersiz we idempotentliksiz köp retraýalar → tupan.
Soraglaryň ähli görnüşleri üçin bir umumy howuz.
Uzak amallar galanlaryň konnektini (DB) → starvation saklaýar.
Kesilen keep-alive ýa-da gaty kiçi çäklendirmeler idle → churn we TTFB ösüşi.

14) Kämillik ölçegleri

Pool wait p95 önümde <10% umumy p95 marşrutdan.
Reuse ratio (içerki HTTP üçin> 90%; daşarky HTTP üçin> 80%).
DB txn time p95 < 100–200 ms; uzak geleşikleriň paýy <1%.
Retry rate <5% (we ≤ budget), timeouts sebäpli ýalňyşlyklar durnukly we öňünden aýdyp bolýar.
Ähli möhüm müşderiler üçin dokumentleşdirilen howuz hasaplamasy.

15) Netijenama

Netijeli connection pooling - nobatlaryň in engineeringenerçiligi + wagt tertibidir. "W" -ni ölçäň, "λ × W" howuzyny ätiýaçlyk bilen hasaplaň, keep-alive/HTTP2 + -ni açyň, haýal ýollary bölüň, gysga wagtlary we jitter bilen iň az retralary saklaň. "Pool wait vs latency" we circuit-breakers syn edilişini goşsaňyz, pes TTFB, gözegçilik edilýän p99 guýrugy we arka taraplary gyzdyrmazdan partlamalara garşylygy alarsyňyz.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.