GH GambleHub

Puls of and latency

Puls of and latency

1) Ինչո՞ ւ է անհրաժեշտ փամփուշտները

Միացությունները թանկ են (TCP/TMS handshakes, վավերացում, warm-up)։ Փուլը թույլ է տալիս

Օգտագործեք պատրաստի կոննեկտներ (keep-alive) TTFB-ից ցածր։

Վերահսկել զուգահեռականությունը և տալ backpressure-ի փոխարեն։

Նվազեցնել պոչերը p95/p99 ճիշտ չափի և թայմաուտների պատճառով։

Հիմնական ռիսկերը 'փամփուշտի, head-of-blocking-ի սպասման հերթերը, կոննեկտների և գետերի փոթորիկների համար։

2) Մաթեմատիկայի հիմքը 'ինչպես հաշվել փամփուշտի չափը

Մենք օգտագործում ենք Լիթլի օրենքը '«L = now.W»։ Փամփուշտի համար դա նշանակում է

«07» -ը հարցումների միջին հոսքն է (RPS)։

«W» -ը հարցման միջին զբաղվածությունն է (Time-ը, ներառյալ ցանցային լատենտությունը և հեռավոր հեռակառավարման աշխատանքը)։

Փամփուշտի նվազագույն չափը '«N _ min nower.W»։

Ավելացրեք պահուստը տատանումների տակ և p99: headrope 20-50 տոկոսը։

Օրինակ ՝ 300 RPS, միջին hold-time 40 no _ N _ min = 300-0։ 04 = 12`. Պահուստով 50 տոկոսը 18 կոննեկտներ են։

Եթե պոչերը մեծ են, հաշվի առեք «W _ p95» կամ «W _ p99» կրիտիկական ճանապարհների համար, փամփուշտները աճում են։

3) Նախագծման ընդհանուր սկզբունքները

1. Կարճ տվյալների ճանապարհը 'reuse (keep-alive, HTTP/2/3 բազմաֆիլմացիա)։

2. Զուգահեռականության սահմանափակումը 'ավելի լավ հրաժարվել արագ (429/503) քան սեղմել backend։

3. Timauts> retray: Տեղադրել փոքրիկ թայմաուտներ և հազվագյուտ հետքեր ջիթերի հետ։

4. Հաճախորդի հերթերը կարճ են, քան սերվերը (արագ fail-fox)։

5. Backpressure: Երբ փամփուշտը լցված է, անմիջապես NACK/սխալ/կոլեկցիոներ «ավելի ուշ»։

6. Փամփուշտների մեկուսացումը նպատակներով 'DB, kash, արտաքին PSA-ները' իրենց սահմանները։

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

HTTP/1. 1: մեկ հարցումը միևնույն ժամանակ (գրեթե); պետք է փամփուշտը մի քանի կոննեկտներով։

HTTP/2 'հոսքերի բազմապատկումը մեկ TCP-ում; ավելի քիչ կոնեկտներ, բայց հնարավոր է HOL-blocking TCP-ում, երբ պարտքը կորցնում է։

HTTP/3 (QUIC) 'UDP-ի վրա հոսող անկախությունը ավելի քիչ HOL խնդիրներ է, ավելի արագ առաջին բայթերը։

Մոսկվան, որոնք օգնում են

keep-alive-alive timeout 30-90s (ըստ ալյումինի), ձիու պահանջների սահմանափակում (graceful recycle)։

Preconnect (preconnect), երբ գողը սկսում է։

Հոսքերի սահմանափակումը HTTP/2 վրա (օրինակ, 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 'PgBouncer, HikariCP, վարորդներ

Նպատակը սահմանափակելն է մրցակցային գործարքները և կարճ պահելը։

5. 1 PgBouncer (PostgreSQL)

Ռեժիմները ՝ «session »/« transaction »/« stations»։ API-ի համար ավելի հաճախ transaction է։

Կարևոր պարամետրեր ՝ «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)

Փոքր, արագ կոնեկտներ, կոշտ թայմաուտներ։

properties dataSourceClassName=org. postgresql. ds. PGSimpleDataSource maximumPoolSize=30 minimumIdle=5 connectionTimeout=250 validationTimeout=200 idleTimeout=30000 maxLifetime=1800000 leakDetectionThreshold=5000

Կանոնները

`maximumPoolSize ≈ RPS × W × headroom`.

«connational Timeout» հարյուրավոր միլիմետրեր, ոչ վայրկյաններ։

Միացրեք leak detics-ը։

5. 3 Go/Node/Python - օրինակներ

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 գործակալ

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) Սպասման հերթերը և tail-latency-ը

Պոչերը առաջանում են, երբ

Փամփուշտը ավելի քիչ է, քան «W- ն» աճում է կոննեկտի սպասման հերթը։

Բեռի անհավասարությունը (bursts) առանց ածխաջրածինների և լիմիտների։

Երկար հարցումները զբաղեցնում են ձիավարություն և ստեղծում են HOL-ը։

Ֆինանսական միջոցներ

Կիսեք պուլերը հարցումների տեսակների վրա (արագ/դանդաղ)։

Ներդրեք կոննեկտի սպասման թայմաուտը (client-side)։ Եթե ավարտը արագ NACK-ն է։

Medier detics և circuit-breaking երթուղիներում (Envoy, HAProxy)։

Քվոտաները «ծանր» երթուղիների վրա, առանձին փամփուշտը 108/105 համար։

Envoy circuit breaker (օրինակ)

yaml circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 200 max_pending_requests: 100 max_requests: 1000 max_retries: 2

7) Թայմաուտները և գետերը (ճիշտ կարգը)

1. Connational timeout (կարճ ՝ 50-250 ռուբլիներ DC-ի ներսում)։

2. TLS handshake timeout (500–1000 ms вне DC).

3. Request/Read timeout (ավելի մոտ SLO 71)։

4. Retry 'առավելագույնը 1 անգամ, միայն idempotent մեթոդների համար։ Ջիթթեր + backoff.

5. Budget-ի վրա 'գլոբալ սահմանը RPS-ի տոկոսներում (օրինակ ՝ 10%)։

8) Keep-alive, Nagle, արձանագրություն,

Անջատեք Nagle (TCP _ NODELAY) RPC-ի համար փոքր հաղորդագրություններով։

Միացրեք HTTP keep-alive-ը ամենուր, որտեղ հնարավոր է։

Հետևեք TIME _ WAIT-ին 'tune' reuse '/' recycle "միայն եթե հասկանում եք հետևանքները։ ավելի լավ 'reuse connects, ոչ թե միջուկի թյունինգ։

TFC 'օգտագործեք session resumption և ALPN։

9) OS/Kernel tuning (զգուշությամբ)

`net. core. somaxconn`, `net. ipv4. ip_local_port_range`, `net. ipv4. tcp_fin_timeout`.

Էսքիզներ ՝ «nofile» 3664k գործընթացի վրա։

IRQ-ի հավասարակշռությունը, GRO/LRO-ը 'ֆոսֆորով։

Առաջնահերթությունը ավելացնելն է։ թյունինգը առանց մեթրիկի հաճախ վնասում է։

10) Նկատողությունն այն է, որ ինչ չափել

Pool utilization: զբաղված/ընդհանուր, p50/p95 կոննեկտի սպասումներ։

In-flight հարցումները և նրանց hold-time (հատվածները երթուղիներով)։

Error budget Retrav-ը կրկնապատկիչների մասն է։

Connationchurn: Ստեղծում/105 վայրկյանում։

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) Քեյս բաղադրատոմսեր

11. 1 API դարպաս no backend

HTTP/2 դեպի backends, «max _ concurrent _ streams = 200»։

Պուլ 20-40 կոնեկտներ ծառայելու համար դարպասի հանգույցի վրա։

Թայմաուտները ՝ connational 100.1, per-try 300-500.1, ընդհանուր 1-2s, 1 retry հետ։

11. 2 PostgreSQL ծառայության PgBouncer միջոցով

«pool _ mode = transaction», «բանաձևը _ pool _ size» բանաձևով (RPS 35W 351։ 3).

Connational Timeout-ում 250.1 ", կարճ գործարքներ (<100.1)։

Զեկույցի ծանր հարցումները առանձին փամփուշտներ/կրկնօրինակներ են։

11. 3 GRPC ներքին

Մեկ ջրանցք (HTTP/2) 100-200 հոսքերի սահմանաչափով։

Deadium-ում RPC-ում SLO-ի վրա տեղադրված է, միայն idempotent-ը։

Sampling treiss երկար RPC-ի և hold-time-ի մետրերի համար։

12) Ներդրման թուղթ (0-30 օր)

0-7 օր

Չափեք «W» (hold-time) հիմնական երթուղիներում/հաճախորդների վրա։

Հաշվեք 'N _ min = www.W "և ավելացրեք 30-50 տոկոսը headrome։

Միացրեք keep-alive-ը և կարճ թայմաուտները կոննեկտին սպասելու համար։

8-20 օր

Կիսեք փամփուշտները (արագ/դանդաղ/արտաքին)։

Մուտքագրեք circuit-breakers և budgets retav։

Ավելացնել dashbords: pool wait p95, reuse ratio, in-flight։

21-30 օր

Բուրգերի, քաոս-թեստ «բեկենդների նվազում»։

Պոչերի օպտիմիզացումը 'ծանր երթուղիների մեկուսացումը, տեղական քեշները։

Փաստաթղթավորեք բանաձևերը և սահմանները runbook 'ax-ում։

13) Anti-patterna

«Նաուգադի» փամփուշտի չափը և headrope-ի բացակայությունը։

Ձիասպորտի սպասման մեծ թայմաուտները արագ ձախողումների փոխարեն երկար պոչեր են տալիս։

Շատ գետեր առանց ջիտերի և կուռքերի։

Մեկ ընդհանուր փամփուշտը բոլոր տեսակի հարցումների վրա։

Երկար գործարքները պահում են կոննեկտը (DB) հաստատվում են մնացած starvation։

Անջատված keep-alive կամ չափազանց փոքր idle churn և TTFB աճը։

14) Հասունության մետրերը

Pool wait p95 վաճառքում <10 տոկոսը ընդհանուր p95 ռուբլիից։

Reuse ratio (> 90 տոկոսը ներքին HTTP;> 80 տոկոսը արտաքին համար)։

DB txn time p95 < 100–200 ms; երկար գործարքների մասնաբաժինը <1%։

Retry rate <5% (և www.budget), timeouts-ի սխալները կայուն և կանխատեսելի են։

Փամփուշտի փաստաթղթավորված հաշվարկը բոլոր քննադատական հաճախորդների համար։

15) Եզրակացություն

International pooling-ը հերթափոխի ինժեներություն է + թայմաուտների կարգապահություն։ Չափեք 'W', հաշվեք փամփուշտը 'www.W.' պահուստով, միացրեք keep-alive/HTTP2 +, անջատեք դանդաղ ճանապարհները, պահեք կարճ թայմաուտներ և նվազագույն հոսանքներ ջիթերի հետ։ Ավելացրեք «pool wait vs latency» և circuit-breakers, և կստանաք ցածր TTFB, որը վերահսկվում է p99 պոչի և առանց backends տաքացման դիմադրության։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։