Texnologiyalar va infratuzilma → Latency va API javobini optimallashtirish
Latency va API javobini optimallashtirish
1) «latency» nima va nima uchun bu muhim?
Latency - so’rovning jami kechikishi: tarmoq (DNS + TCP + TLS + RTT), balanschi/shlyuz, ilova, DB/kesh/navbatlar, tashqi integratsiyalar. UX, CR va SLO «dumini» yo’q qilayotgan biznes uchun o’rtacha emas, balki P95/P99 juda muhim.
Asosiy SLI:- ’SLI _ latency _ P95 = P95 (_ javob vaqti)’ uchun 5/30 daqiqa
- ’SLI _ latency _ P99 = P99 (_ javob vaqti)’
- ’SLI _ queue _ time = P95 (_ vorkerning _ navbatidagi _ vaqt)’
- ’SLI _ ext _ call _ P95 = P95 (tashqi _ provayderlarning yashirligi)’
2) Kechikish manbalari xaritasi (va qayerga qazish kerak)
1. Tarmoq va protokollar: DNS, TCP handshakes, TLS, head-of-line (HTTP/1. 1), paketlarni yo’qotish, BBR/ECN.
2. Shlyuz/balanschi: sekin health-check, nevalid taymautlar, issiq pod.
3. Ilova: blokirovka, GC/stop-the-world, sinxron I/O, contention.
4. Omborxonalar: sekin so’rovlar, indekslar yo’qligi, sovuq sahifalar.
5. Tashqi servislar: PSP/KYC, uchinchi tomon API (tor SLA).
6. Navbatlar va orqa fon joblari: ortiqcha yuklangan vorkerlar, backpressure yoʻq.
7. Kesh/edge: kesh xatolari, zaif TTL, nolalid nogironlik.
3) Tarmoq va protokollar
3. 1 DNS/TCP/TLS
DNS prefetch/preconnect frontda, uzoq umr ko’radigan IP PSP.
Keep-Alive/connection pooling mijozlarda; serverda - ulanishlarni birlashtirish.
TLS: resumption/Session Tickets, zamonaviy shifrlar paketi; xavfli idempotent operatsiyalari uchun 0-RTT qilishdan qoching.
TCP: chatlar/kichik paketlar uchun Nagle (’TCP _ NODELAY’) ni oʻchiring; tune’initial window’, mos keladigan BBRni yoqing.
3. 2 HTTP/2 и HTTP/3
HTTP/2: multiplekslash HOL blokirovkasini HTTP/1. 1; oqimlarning ustuvorligini kuzatib boring.
HTTP/3/QUIC: yo’qotishlar/RTT ta’siri past; mobil/xalqaro tarmoqlarda foydali.
Header compression: HPACK/QPACK, ammo sarlavhalar hajmini saqlang.
3. 3 Balanslash/routing
Locality-aware (zonallik), EWMA/least-request «issiq» instansiyalarga qarshi.
Seanslarni yopishtirish - faqat state mavjud bo’lsa; aks holda stateless + umumiy kesh/sessiya.
4) Formatlar, foydali yuk, kompresssiya
Qisish: Brotli (matn), Gzip fallback sifatida; binar formatlar: gRPC/ichki API uchun Protobuf/Euro.
Payload qismini kamaytiring: tanlangan maydonlar (’fields =...’), paginatsiya, shartli GET (ETag/If-None-Match), delta-javoblar.
GraphQL: persisted queries, «yog’» parchalarini taqiqlash, chuqurlik va murakkablik chegaralari.
N + 1 dan qoching: joylar/prekompozitsiya, agregatlar uchun batch-endpointlar.
5) Taymautlar, retrajlar, idempotentlik
Taymautlar zanjir boʻyicha: mijoz <shlyuz <appa <saqlash/tashqi chaqiruv.
Faqat vaqtinchalik xatolar uchun backoff + jitter bilan retrajlar; budgetlarni retrajga qo’ying.
Idempotentlik: soʻrov kaliti/tokeni + natijani saqlash; retralar operatsiyalarni (ayniqsa moliyaviy) takrorlamasliklari kerak.
Circuit Breaker: buzilganda oching; «quyruqlar» uchun hedged/backup requests (dublikatni P95 orqali yuborish).
6) Navbatlar, asinxronizm va backpressure
Sinxron yo’lni to’sib qo’ymang: og’ir operatsiyalar (KYC skaner, hisobot) - orqa fonda.
Backpressure: navbatdan foydalanishni cheklang, parallellikni aniqlang.
Batching/coalescing: kichik operatsiyalarni birlashtiring (masalan, balansni yangilash va birlashtirish).
Outbox/Inbox: muvaffaqiyatsiz tugaganida hodisalarni kafolatlangan yetkazib berish.
7) Ilova: rantaym va pullar
DB/kessham/MTTRga ulanish pullari; ularni cheklab qo’ying, shunda orqa tomonni bo’g’ib qo’ymang.
JVM: GC (G1/ZGC) profilini oching, katta alokatsiyalardan qoching; .NET - ThreadPool/async; Node. js - event loop to’sib qo’ymang, og’ir CPU chiqaring.
Python: asinxron drayverlar (asyncpg/httpx), uvloop; CPU vazifalari worker-pool orqali.
Warm-up: JIT/keshlarni isiting, «warm pools» instantsiyalarini cho’qqilarga.
8) Ma’lumotlar bazalari va keshlar
Indekslar va rejalar: muntazam’EXPLAIN’, avto-vakuum/tahlil, skanlar limiti.
Connection pooling (PgBouncer/Multiplexing), qisqa tranzaksiyalar.
Cash-strategiyalar: read-through, write-through/write-behind; TTL + hodisalar bo’yicha nogironlik.
Sharding/replikalar: sleyvlardan o’qish, «issiq kalitlar» - mahalliy keshlar (near-cache).
9) Keshlash va edge
Statik/kataloglar uchun CDN/edge,’Cache-Control’,’ETag’bo’yicha API javoblar keshi (xavfsiz bo’lsa).
Stale-while-revalidate va stale-if-error UX-barqarorlik uchun.
Geo-taqsimot: eng yaqin XTR/mintaqa RTTni kamaytiradi.
10) P99 chiqindilariga qarshi arxitektura patternlari
Hedged requests: chegaradan keyin boshqa instansiyaga sekinlik soʻrovini takrorlang.
Request collapsing: bitta «yetakchi» DB soʻrovi, qolganlari natijani kutmoqda (boʻronlardan qochadi).
Prioritization: VIP/tanqidiy operatsiyalar - ajratilgan pul/ustuvorlik.
Graceful degradation: ortiqcha maydonlarni/vidjetlarni qisqartiring.
11) Konfigi (taxminan)
11. 1 NGINX (taymaut/kompresssiya)
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 (mijoz)
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: to’g "ri o’lchang
RED/USE metrika + treys OTel:’trace _ id’orqali shlyuz-servis-DB-tashqi API.
Alohida belgilar:’api _ version’,’region’,’partner’,’endpoint’.
Dashbordlar: P50/P95/P99, queue time, error mix, retry rate, cache hit.
Maqsadli mamlakatlar Synthetics/ASN (TR/BR/EU) va tanqidiy yo’llar bo’yicha (reg → depozit, payout).
- Core API:’P95 ≤ 250ms’,’P99 ≤ 500ms’(30 kun)
- PSP webhook qayta ishlash:’P99 ≤ 60s’retralari bilan
- Freshness katalogi:’P95 lag ≤ 30s ’
13) FinOps и latency
Millisekundlar pul turadi: CR/ARPPU da $/ms yutuq baholang.
Right-sizing: tezroq ≠ har doim qimmatroq; savodli kesh/formatlar arzonlashtiradi va tezlashtiradi.
Egress/edge: CDN RTT va mintaqadan chiqadigan trafik narxini kamaytiradi.
14) Optimallashtirish chek-varaqasi (bosqichma-bosqich)
1. SLOni joylashtiring va endpointlar/mintaqalar/sheriklar bo’yicha dumlarini (P95/P99) o’lchang.
2. HTTP/2/3, TLS resumption, uzoq davom etadigan ulanishlarni yoqing.
3. Javoblarni siqing va vazn yo’qoting: Brotli/Gzip, so’rov dalalari, paginatsiya, ETag.
4. Taymaut/retray/breykerlarni moslash; idempotentlik qo’shing.
5. Kesh/edge: hit-rate va toʻgʻri TTL; stale-rejimlar.
6. DQ: indekslar, rejalar, pullar, replikalar; N + 1 ni olib tashlang.
7. Og’ir: navbatlar, batching, backpressure.
8. Kritik yoʻllar uchun xedge/collapse/priority.
9. Warm-up va cho’qqilarga taxminiy skeyling (turnirlar/o’yinlar).
10. Sintetika va alertlar P99 va queue time; muntazam perf-revyu.
15) Anti-patternlar
Bitta global vaqt «hamma narsaga» va nazoratsiz retrajlar (DDOS o’zi).
Seanslarni keraksiz yopishtirish → issiq nodlar.
Katta JSONlar siqish va maydon filtrlarisiz.
«Issiq yo’lda» sekin tashqi APIga sinxron qo’ng’iroqlar.
DBda indekslar/limitlar mavjud emasligi; ORMda N + 1.
Kesh/edge va ETag mavjud emas; doimiy to’liq javoblar.
Biznes va texnik xatolarni bitta «retraj» savatga aralashtirish.
16) iGaming/fintech konteksti: amaliy notalar
Reg → depozit (CR): yo’nalishlarning ustuvorligi, alohida pul,’P99 ≤ 500ms’; degradatsiya - «bezak» UI o’chirish.
PSP integratsiyalari: konkarrensi limitlari, vaqtinchalik kodlar bo’yicha retraylar, warm-konnektlar, mintaqaviy egress-IP.
VIP-operatsiyalar: kafolatlangan pul/ustuvorlik, umumiy navbatlarni chetlab o’tish.
Turnirlar/tadbirlar: oldindan aytiladigan skeyl, kesh isitish, prefetch.
Hisobot: async va SLA freshness, prod-yo’lni to’sib qo’ymaydi.
Jami
Latency - bu balans intizomi: tarmoq (HTTP/2/3, TLS), protokollar va kesh, idempotentlik taymautlari/retraalari, DD/keshlar, asinxron patternlar va P95/P99 kuzatilishi. Siz dumlarga e’tibor qaratib, «tor og’izlarni» yo’q qilsangiz, siz javobni barqarorlashtirasiz, konversiyani yaxshilaysiz va biznesga ta’sir qiladigan millisekundlar narxini pasaytirasiz.