Տեխնոլոգիաներ և ենթակառուցվածքներ www.Latency և API արձագանքի օպտիմիզացում
Latency և API արձագանքի օպտիմիզացում
1) Ի՞ նչ է «latency» -ը, և ինչո՞ ւ է դա կարևոր։
Latency-ը ընդհանուր հարցման ուշացում է 'ցանցը (SDC + TCP + TMS + RTT), հավասարակշռությունը/դարպասը, ծրագիրը, BD/kashi/հերթը, արտաքին։ Բիզնեսի համար քննադատական են P95/P99, ոչ թե միջինը, դա UX, CR և SLO-ն է։
Հիմնական SLI։
«SLI _ latency _ P95 = P95 (ժամանակը _ արձագանք)» 5/30 րոպեում։
«SLI _ latency _ P99 = P99 (ժամանակը _ արձագանք)»
«SLI _ queue _ time = P95 (ժամանակը _ հերթում _ worker)»
«SLI _ ext _ calt _ P95 = P95 (լատենտ _ արտաքին _ պրովայդեր)»
2) Հետաձգման աղբյուրների քարտեզը (և որտեղ փորել)
1. Ցանցը և արձանագրությունները ՝ CSA, TCP handshakes, TSA, head-of-2019 (HTTP/1։ 1), միգրանցների կորուստ, BBR/ECN։
2. Նավակը/հավասարակշռիչը 'դանդաղ health-71 k, անգնահատելի թայմաուտներ, տաք փոշիներ։
3. Հավելված 'արգելափակումներ, GC/stop-the-world, սինխրոն I/O, entention։
4. Տե՛ ս 'BD-ի դանդաղ հարցումները, ինդեքսների բացակայությունը, սառը էջերը։
5. Արտաքին ծառայությունները ՝ PFC/KYC, աջակողմյան API (նեղ SLA)։
6. Գծերը և ֆոնային ջոբները 'ծանրաբեռնված գողեր, չկան backpressure։
7. Քաշ/edge: Բաց թողեք քեշը, թույլ TTL-ը, անգնահատելի հաշմանդամություն։
3) Ցանցը և արձանագրությունները
3. 1 DNS/TCP/TLS
XXIII fetch/preconnae-ը առջևում, որը երկար է IP-ը PSA-ին։
Keep-Alive/connational pooling հաճախորդների մեջ; սերվերի վրա միաձուլեք միացությունները։
TFC: resumption/Session Tickets, ժամանակակից ծածկագրերի փաթեթը; խուսափեք 0-RTT-ից անապահով գաղափարական վիրահատությունների համար։
TCP: Անջատեք Nagle («TCP _ NODELAY») չաթերի/փոքր շարժիչների համար։ tune 'initial dive', միացրեք BBR-ը որտեղ տեղին է։
3. 2 HTTP/2 и HTTP/3
HTTP/2 'բազմապատկումը նվազեցնում է HOL-արգելափակումը HTTP/1։ 1; հետևեք հոսքերի գերակայություններին։
HTTP/3/QUIC: Ցածր ազդեցություն 2019/RTT; օգտակար է բջջային/միջազգային ցանցին։
Header compression: HPACK/QPACK, բայց պահպանեք վերնագրերի խելացի չափը։
3. 3 Հավասարակշռություն/ռոտինգ
Delality-a.ru (գոտիություն), EWMA/least-request դեմ «տաք» instans։
Նստաշրջանների կպչելը միայն այն դեպքում, եթե կա state; հակառակ դեպքում, stateless + ընդհանուր քաշ/նստաշրջան։
4) Մոսկվան, օգտակար պաշտպանությունը, ագրեսիան
Սեղմեք 'Brotli (տեքստ), Gzip որպես fallback; երկուական կոմպոզիցիաներ ՝ Systobuf/Avro gRPC/ներքին API համար։
Նվազեցրեք payload: Ընտրովի դաշտերը («fields =...»), պագինացիա, պայմանական GET (ETag/If-None-Match), delta-պատասխանները։
GraphQL: persisted queries, «ճարպային» բեկորների արգելք, խորության և բարդությունների սահմաններ։
Խուսափեք N + 1 'ջոյնից/պրեսպոզիզացիայից, բատչ-էնդպոինտներից ագրեգատների համար։
5) Թայմաուտներ, ռեթրա, կուռքեր
Թայմաուտները շղթայի վրա 'հաճախորդ <դարպաս <պահեստ/արտաքին մարտահրավեր։
Retrai backoff + jitter-ից, միայն ռուսական սխալների համար։ տեղադրեք budgets գետերի վրա։
Idempotention: որոնման բանալին/հոսքը + արդյունքի պահպանումը։ ծախսերը չպետք է կրկնօրինակեն վիրահատությունները (հատկապես ֆինանսները)։
Circuit Breaker: Բացեք քայքայման ժամանակ։ hedged/backup reques.ru «պոչերի» համար (ուղարկել կրկնօրինակը P95 միջոցով)։
6) Հերթեր, ասինխրոն և backpressure
Մի արգելափակեք սինխրոն ճանապարհը 'ծանր վիրահատություններ (KYC սկաններ, հաշվետվություններ) - ֆոնի մեջ։
Backpressure: Սահմանափակեք հերթից սպառումը, գրեք զուգահեռ։
Batching/coalescing: Համախմբեք փոքր վիրահատությունները (օրինակ, հավասարակշռությունների նորարարությունը համախմբման հետ)։
Medibox/Inbox-ը 'իրադարձությունների երաշխավորված առաքումը հեռացման ժամանակ։
7) Ծրագիր 'ռանտայմեր և փամփուշտներ
Պուլները կապված են BD/kasham/NTTR-ի հետ։ սահմանափակեք դրանք, որպեսզի չփորձեք «խեղդել» backend.
JVM 'ավելացրեք GC (G1/ZGC), խուսափեք մեծ ալոկացիաներից, .NET - ThreadPool/async; Node. js - մի արգելափակեք event loop, վերցրեք CPU ծանր։
Python: asinhron վարորդներ (asyncpg/httpx), uvloop; CPU առաջադրանքները worker-pool-ի միջոցով։
Warm-up: տաքացրեք JIT/kashi, «warm poope» instans պիկի համար։
8) Տվյալների և քեշի հիմքերը
Ինդեքսները և պլանները 'ստացիոնար' MSAIN ", auto-վակուում/վերլուծություն, սկանների սահմանափակում։
Connational pooling (PgBouncer/Multiplexing), կարճ գործարքներ։
Քեշի ռազմավարությունը 'read-through, write-through/write-behind; TTL + հաշմանդամություն իրադարձությունների համար։
Շարդինգը/կրկնօրինակները 'սլեյվներից կարդալը, «տաք բանալիները» տեղական քեշներ են (near-cache)։
9) Քեշինգը և edge
CDN/edge ստատիկի/սուլֆերի համար, API պատասխանների քեշը (եթե ապահով) «Cache-Corl», «ETag»։
Stale-while-revalidate և stale-if-error-ի համար UX-կայունության համար։
Geo-բաշխումը 'ամենամոտ ROR/տարածաշրջանը նվազեցնում է RTT-ը։
10) Ճարտարապետական փամփուշտները P99 պոչերի դեմ
Hedged reques.ru: կրկնօրինակեք դանդաղ հարցումը մեկ այլ ինստանսի մասին շեմից հետո։
Request collapsing: Մեկ «առաջնորդող» հարցումը BD-ի համար, մնացածը սպասում են արդյունքին (խուսափում է փոթորիկներից)։
Prioritization: VIP/քննադատական վիրահատություններ 'ընտրված փամփուշտը/գերակայությունը։
Graceful degradation: Կտրեք երկրորդական դաշտերը/վիջետետետները բեռնելիս։
11) Գեորգի (մոտավորապես)
11. 1 NGINX (թայմաուտներ/ագրեսիա)
nginx proxy_connect_timeout 1s;
proxy_send_timeout 2s;
proxy_read_timeout 2s;
send_timeout 2s;
gzip on;
gzip_types application/json text/plain text/css application/javascript;
11. 2 Envoy (hedge + retry budget)
yaml
RetryPolicy:
retry_on: 5xx,reset,connect-failure num_retries: 2 per_try_timeout: 300ms retry_back_off: { base_interval: 50ms, max_interval: 200ms }
retry_priority:
name: envoy. retry_priorities. previous_priorities
HedgePolicy:
hedge_on_per_try_timeout: true initial_requests: 1 additional_request_chance: 0. 2
11. 3 GRPC (հաճախորդ)
json
{
"methodConfig": [{
"name": [{"service": "payments. Service"}],
"timeout": "0. 8s",
"retryPolicy": {
"maxAttempts": 3,
"initialBackoff": "0. 05s",
"maxBackoff": "0. 2s",
"backoffMultiplier": 2. 0,
"retryableStatusCodes": ["UNAVAILABLE","DEADLINE_EXCEEDED"]
}
}]
}
12) Observability: Չափեք ճիշտ
RED/USE metrics + OTel: «trace _ id» - ը նավի ծառայության-BD-արտաքին API-ի միջոցով։
Առանձին կոմպոզիցիաներ ՝ «api _ version», «region», «partner», «endpoint»։
Dashbords: P50/P95/P99, queue Time, error mix, retry rate, cache hit։
Pronthet.ru-ից/ASN (TR/MS/EU) և կրիտիկական ճանապարհներով (reg, payout)։
SLO-ի օրինակ
SYAPI: «P95 24250.ru», «P99 24500.ru» (30 օր)
PMS webhook մշակումը '«P99 2460s» գետերով
Freshness 2019: «P95 lag no. 30s»
13) FinOps и latency
Միլիոնավոր մարդիկ արժե գումար, գնահատեք դոլար/մզ շահույթը CR/ARPPU-ում։
Right-sizing: ավելի արագ, քան միշտ։ գրագետ քեշը/կոմպոզիցիան ավելի էժան և արագացնում են։
Egress/edge: CDN-ը նվազեցնում է RTT-ը և տարածաշրջանի ելքային մրցույթի արժեքը։
14) Չեկի օպտիմիզացման թերթիկը (գոմո)
1. Տեղադրեք SLO-ը և չափեք պոչերը (P95/P99) էնդպոինթամների/տարածաշրջանների վրա։
2. Միացրեք HTTP/2/3, TMS resumption, երկար կապեր։
3. Այրեք և կորցրեք պատասխանները ՝ Brotli/Gzip, դաշտեր, պահանջով, պագինացիա, ETag։
4. Տայմաուտներ/ռետրաններ/բրեյքերներ։ ավելացրեք կուռքերը։
5. Քաշ/edge: hit-rate և ճիշտ TTL; stale ռեժիմներ։
6. ԲԴ ՝ ինդեքսներ, պլաններ, փամփուշտներ, կրկնօրինակներ։ վերացրեք N + 1։
7. Ասինհրոնդը ծանր է 'հերթեր, բատչինգ, backpressure։
8. Hedge/collapse/priority քննադատական ճանապարհների համար։
9. Warm-up-ը և նախատիպային սկեյլինգը գագաթներին (Records/խաղեր)։
10. Սինթետիկ և ալերտներ P99 և queue Time-ում։ մեջբերում է փերֆ ռևին։
15) Anti-patterna
Մեկ գլոբալ թայմաուտը «ամեն ինչի վրա» և անվերահսկելի ռետրան (DDOS ինքն իրեն)։
Առանց անհրաժեշտության, նստաշրջանները կպչուն են։
Մեծ JSON-ը առանց դաշտային ֆիլտրերի։
Դանդաղ արտաքին API-ի համաժամանակյա մարտահրավերները «տաք ճանապարհին»։
Ինդեքսների/լիմիթների բացակայությունը BD-ում; N + 1 ORM-ում։
Ոչ քեշա/edge և ETag; մշտական լիակատար պատասխաններ։
Բիզնես և տեխնոլոգիական սխալները մեկ «վերականգնվող» զամբյուղում։
16) iGaming/fintech համատեքստը 'գործնական նոտաներ
Ռեգը (CR) 'երթուղիների գերակայությունը, առանձին փամփուշտը, «P99 24500.1»; դեգրադացիա - անջատել UI-ի «զարդերը»։
PMS-2019 'Concarency-ի լիմիթներ, ռետրեր ժամանակավոր կոդերով, warm-connects, տարածաշրջանային egress-IP։
VIP վիրահատությունները 'երաշխավորված փամփուշտը/գերակայությունը, շրջանցելով ընդհանուր հերթերը։
Aleksra/ivents: նախատիպային սկեյլ, տաքացնելով քեշը, www.fetch։
Հաշվետվությունները ՝ async և SLA freshness-ում, չեն արգելափակում prod ճանապարհը։
Արդյունքը
Latency-ի օպտիմիզացումը հավասարակշռության կարգապահությունն է 'ցանցը (HTTP/2/3, TSA), արձանագրությունները և քեշը, թայմաուտները/ռետաները' idempotenty, BD/kashi, asinhron paternes և P95/P99 դիտարկումը։ Կենտրոնանալով պոչի վրա և վերացնելով «նեղ դողերը», դուք կայունացնում եք արձագանքը, բարելավում ծրարը և նվազեցնում միլիոնավոր սեկունդների արժեքը, որտեղ դա իսկապես ազդում է բիզնեսի վրա։