Ցածր ուշացման ճարտարապետությունը
Ինչու՞ պետք է ցածր ձգձգման ճարտարապետություն
Ցածր ձգումը ոչ միայն «արագ միջին» է, այլ կայուն պոչերը (p95/p99) իրական բեռի ժամանակ։ Դրա ճանապարհը ձգձգման բյուջե է, հերթերի/հետքերի կարգապահություն, տվյալների և քեշի մոտ, ճիշտ արձանագրություններ/կոննեկտներ և խիստ գործողություն (սահմաններ, դիտարկումներ, դեգրադացիա)։
Նպատակներ և հետաձգման բյուջե
1. NO SLO: "p95-120 ms, p99-250 Ms, սխալ 240։ 3%».
2. Հավաքեք բյուջեն ՝ հաճախորդը wwww.edge www.orld wwwww.eeedge wwww.r
3. Բաժանեք սահմանները (օրինակ, ընդհանուր SLO 120 ms p95)
Հաճախորդ-edge: 15 մզ
Edge շրջան: 15 մզ
Gateway/L7: 10 Ms
Բիզնես ծառայություն ՝ 40 մզ
Պահեստ/քաշ: 25 մզ
Արգելոց/ջիտթեր ՝ 15 մզ
Մետրեր և պոչեր
Merite p50/p90/p95/p99, միջով և յուրաքանչյուր հոփում։
Կոտրեք պիտակները 'տարածաշրջանը, մեթոդը, հաճախորդի տարբերակը, ցանցի տեսակը (www.il/brodbend), payload չափսը։
Տարբերեք հերթի ժամանակը և կատարման ժամանակը (տե՛ ս Little's Lox: L = www.W)։
Tail-զգայուն տեխնոլոգիաներ ՝ hedged reques.ru (հազվադեպ պաշտպանությամբ), կասկադային գետերի արգելքը։
Ցանցը և արձանագրությունները
QUIC/HTTP/3: ավելի քիչ շարժական/ռոումինգի վրա, բազմապատկումը առանց head-of-2019։
TLS 1. 3 և 0-RTT (միայն անվտանգ idempotent հարցումների համար)։
CSA: կարճ TTL-ը դինամիկ երթուղիների համար, Anycast-ը POP-ի համար։
TCP: «TCP _ NODELAY» (), ավելորդ «Nagle »/« Diayed ACK» անջատումը, որտեղ արդարացված է։ keep-alive և արագ վերականգնումը։
GRPC/HTP/2 'մուլտիպլեքս, flow-winl և wwww.ru պատուհաններ; խուսափեք ավելորդ հակումից փոքր payload-ում։
Միացություններ և փամփուշտներ
Բաժանեք փամփուշտները պարամետրերով/նպատակներով (որպեսզի «դանդաղ հարևանները» չհանեն արցունքները)։
Warm-up/Keep-alive: աջակցեք տաք ձիերի կայուն քանակը։
Connection coalescing (HTTP/2/3) и reuse.
Թայմ-աուտներ '«connational», «TMS handshake», «request», «idle»։ Տարբեր արժեքներ տարբեր հոփերի վրա։
Տվյալների և հաշվարկների տեղայնությունը
Edge/տարածք 'կարդացեք և թեթև հաշվարկներ ավելի մոտ օգտագործողին (տե՛ ս «Edge-2019 և հիբրիդային տրամաբանությունը»)։
Read-ental/Write-global-ը 'կարդալու, համաշխարհային ճշմարտությունը ձայնագրելու համար։
Քաշ-հիերարխիա ՝ CDN/edge-cash no. KV/Redis-ը ռուսական ծառայողական քեշը տեղական in-proc է։
Progrev (warming) 'տաք շարժիչների բեռնումը ջեռուցման/մեծացման ժամանակ։
Stale-wile-revalidate-ը ցածր ռիսկային տվյալների համար։
Intel և ինդեքսներ
Ընտրեք O (1 )/O (logN) հասանելիության սխեմաները։ պահեք նեղ ինդեքսներ հաճախակի հարցումների համար։
Hot-keys: Շարդիրումը 'hash (id) "կամ ավելացրեք" աղ "հավասարության համար։
Batching-ը դուրս է գալիս BD/kash (մինչև խելացի չափերը) փոխարեն տասնյակ միայնակ զանգերի փոխարեն։
OLTP-ի համար հնարավորինս կարճ գործարքներ են։ read-committed/www.apshot փոխարեն սերիական բլոկների փոխարեն։
Մրցակցություն և արգելափակման մեթոդներ
Նախ վերացրեք սպասումները, ապա օպտիմիզացրեք CPU-ն։
Async I/O և անտեսող վարորդներ։ տեղադրված k-free կառուցվածքները այնտեղ, որտեղ տեղին է։
Խուսափեք գլոբալ մյուտեքսներից։ granular-loks, CAS/տարբերակումը։
Հոսքի փամփուշտները 'չափսերը գրանցեք, որպեսզի չընկնեք ենթատեքստում։
NUMA-գիտակցությունը 'հոսքերի կապումը գանձերին, տեղական ալոկատորներին։
JVM/GC և rantaim-tuning (եթե կիրառելի է)
Կոդի և ալլոզիայի արտադրությունը 'ավելի քիչ տեխնոլոգիական էֆեկտներ, քան GC դադարը։
Ժամանակակից կոլեկցիոներները (G1/ZGC/Shenandoah) բուժական սարդերով։ escapes և 105 օրինագծեր։
Class/Winsharing, JIT warming, AOT/native-image-ի համար կախված գործառույթների համար։
Գիստոգրամները GC-ի դադարը ներառեք հետաձգման ընդհանուր բյուջեում։
Հերթեր, backpressure, պաշտպանություն պերեստրոյից
Հերթերի չափը = փոքր է, երկար գծերը տալիս են «գեղեցիկ p50» և սպանում են p99։
Ակնհայտ backpressure: Պատասխանեք «դանդաղ», քան պատճենեք։
Adaptive concurrency: նվազեցրեք զուգահեռ սխալների/լատենտության աճի ժամանակ (VEGAS/gradient ալգորիթմներ, AIMD)։
Circuit breaker: Արագ ձախողումներ, երբ ապստրիման քայքայվում է, bulkhead (kaut-ընկերություններ) փամփուշտների և ռեսուրսների վրա։
Rate limit: սահուն պատուհան/հոսանք, գերակայություն (user tier/critical-path)։
Retrai, hejing և impotenty
Retray-ը միայն տրանսցենտենտ սխալների, ջիթերի և փորձերի առավելագույնի է հասնում։
Idempotent վիրահատությունները և «Idempotency-Key» -ը պարտադիր են խոհարարների համար։
Hedged reques.ru: ուղարկեք դուբլներ շեմից հետո (օրինակ ՝ p95 + 10 մզ) և միշտ վերացրեք ավելցուկը։
Երբեք մի կտրեք յուրաքանչյուր շերտի ներսում առանց համակարգման, կստանաք փոթորիկ։
Քեշինգը և մեղքը
Տաք ճանապարհը պետք է անցնի առանց ցանցի տիպային բեռի (in-proc/LRU)։
Negative cache-ը 10-60 c-ով, որպեսզի չվնասի բացակայող բանալիները։
Զանգվածային տաքացումը դելֆում/սկեյլինգում 'տաք կոդերի ցուցակները, read-ahead, background refresh։
Դեգրադացիա և ֆոլբեկ
Graceful Degradation: Կտրեք երկրորդական ֆիտները լատենտության աճի ժամանակ (ավելի քիչ մանրամասն պատասխանը, հարստության անջատումը)։
Softimeouts: Վերադարձեք հիմնական պատասխանը/քեշը 5xx-ի փոխարեն։
Fail-open/Fail-closed-ը ակնհայտ է յուրաքանչյուր զանգի համար։
Դիտարկումը և ավելացումը
Բաշխիչ թրեյսինգը 'քնել յուրաքանչյուր հոփում, պոչի սեմպլինգ (tail-based)։
RED/USE метрики: Rate, Errors, Duration / Utilization, Saturation, Errors.
Top-N «դանդաղ» երթուղիներ ամեն օր։
Ավելացողները (alloc/cpu/www.k) վաճառում են ցածր ոչխարների (eBPF/async-profiler/Flight Recorder)։
Սինթեզիկան տարբեր ASN/ցանցերից և բջջային ալիքներից։
Արտադրողականության փորձարկումը
Latency-SLO թեստերը (p95/p99) իրական payload և փոփոխականության հետ։
Chaos-սցենարները 'RF-ի դեգրադացիան, ռուսական շարժիչների աճը, TFC-ի ուշացումը, «դանդաղ» սթորը։
Cold-start/scale-up: սառեցրեք առաջին րոպեները, երբ քեշերը դատարկ են։
Բեռի փամփուշտները բաժանեք սցենարներով (մի խառնեք read/write թեստերը)։
Մինի ձևանմուշ
Թայմաուտների/ռետրերի քաղաքականությունը (կեղծ)
yaml timeouts:
connect: 100ms tls_handshake: 150ms request_p95_budget: 80ms retries:
max_attempts: 2 backoff: exp_jitter(10ms..60ms)
retry_on: [CONNECT_ERROR, TIMEOUT, 502, 503, 504]
hedging:
enabled: true threshold: p95 + 10ms cancel_extra_on_first_success: true circuit_breaker:
error_rate_threshold: 5%
p95_threshold_increase: 30%
half_open_after: 10s
Pula և bulkhead 'a
yaml pools:
checkout:
max_conns: 256 per_host: 64 queue: 8 # small analytics queue:
max_conns: 64 queue: 4
Պատասխանը քայքայման հետ
json
{
"status": "ok",
"profile": { "id": "u123", "name": "…"},
"recommendations": "degraded, "//disabled the heavy part
"served_from": "edge-cache",
"trace_id": "…"
}
Օգտագործման քեյս
IGaming/ֆինանսներ 'հեղինակային իրավունքի պաշտպանություն <200 ms p95, limits/հավասարակշռություն - կարդալ տարածաշրջանային նախագծերից, ձայնագրությունները' idempotent տարբերակով։
Մարքեթինգ/առաջարկություն ՝ պատասխաններ <100 ms p95, edge-ի վրա գտնվող դրոշներ, մոդելներ, նախնական սկորինգ + արագ կանոններ տաք ճանապարհի վրա։
Բջջային հաճախորդները ՝ HTTP/3, ագրեսիվ reuse connects, կրճատված payload (Eurobuf), պաշտպանիչ թայմաուտներ և www.kash։
Anti-patternes
Երկար գծեր գողերի առջև '«գեղեցիկ միջին» և սպանված p99։
Կասկադային ռետրերը յուրաքանչյուր շերտի վրա առանց համակարգման։
Համաշխարհային «մեգա-քեշը» առանց հաշմանդամության և մեղքի։
Պարզ թայմաուտները (ամենուր «լռելյայն») անվերահսկելի պոչեր են։
Կոննեկտների մեկ ընդհանուր փամփուշտը ամբողջ ոճի համար 'head-of-international արգելափակման համար։
Ծանր տրամաբանությունը edge-ի վրա ստատեֆուլ էֆեկտներով։
Պոչի անջատված հեռաչափը դուք չեք տեսնում p99։
Chek-Lister վաճառվել է
- Կա հետաձգման բյուջե և դրա տակ գտնվող թայմաուտները։
- Ներառված են HTTP/2/3, TMS 1։ 3, ձիերի փամփուշտներ և warm-up։
- Քեշի հիերարխիա, տաք տարածքների և ռազմավարության ցուցակ։
- Read-ental/Write-global-ը և տաք շարժիչների շարդինգը։
- Ակնհայտ backpressure, փոքրիկ գծեր, circuit-breakers և bulkhead 'a.
- Retray-ը ջիթերի, գաղափարախոսության, սահմանափակված հեդինգի հետ։
- Թրեյսինգը տարածաշրջանի պիտակներով/տարբերակով/հաճախորդի; 24p95/p99։
- Perf-թեստերը սինթեզիկայով ASN/entaila, cold-start և chaos սցենարներ։
- Քայքայման և ֆոլբեկների ընթացակարգերը մեկնաբանվում են։
- p95/p99 համապատասխանում է SLO իրական բեռի վրա։
FAQ
Ինչո՞ ւ է p99-ը ավելի կարևոր, քան միջին։
Որովհետև օգտագործողները հանդիպում են պոչերի հետ, ոչ թե միջին։ p99-ը ցույց է տալիս, թե որքան է իրականում հիվանդանում "։
Պե՞ տք է ներառել հեդինգը ամենուր։
Ոչ։ Այն օգտակար է հազվագյուտ պոչերի համար կրիտիկական ճանապարհներում և միայն խիստ լիմիտներում/կուռքում։
Ինչպե՞ ս նվազեցնել սառը մեկնարկը։
Տաքացնելով քեշը/108, նախնական հավաքածուը/JIT-progreve, lazy-նախաձեռնությունների նվազագույնի, warm-puls։
Կարո՞ ղ եք «հաղթել ցանցը»։
Մասամբ ՝ HTTP/3, edge-POP, Anycript, կոմպակտ payload, connational reuse և խելացի թայմաուտներ։
Արդյունքը
Ցածր ձգձգման ճարտարապետությունը պայմանագրերի և կարգապահության համակարգն է 'հետաձգման բյուջեն, տվյալների հարևանությունը, փոքր գծերը, կանխատեսելի ռետրերը, քեշի հիերարխիան, ճիշտ արձանագրությունները և պոչերի անողոք դիտարկումը։ Այս սկզբունքներին հետևելով ՝ դուք պահում եք p95/p99 'առանց կայունության զոհվածների և դրամապանակի։