Технология және инфрақұрылым → Latency және API жауабын оңтайландыру
Latency және API жауабын оңтайландыру
1) «latency» дегеніміз не және ол неге маңызды
Latency - сұрау салудың жиынтық кідіруі: желі (DNS + TCP + TLS + RTT), теңгеруші/шлюз, қосымша, ДБ/кэш/кезек, сыртқы интеграциялар. Бизнес үшін орташа емес, P95/P99 қиын: UX, CR және SLO «құйрығын» қиратады.
Негізгі SLI:- 'SLI _ latency _ P95 = P95 (жауап беру уақыты)' 5/30 минут ішінде
- 'SLI _ latency _ P99 = P99 (жауап беру уақыты)'
- 'SLI _ queue _ time = P95 (_ воркердің _ кезегіндегі _ уақыт)'
- 'SLI _ ext _ call _ P95 = P95 (сыртқы _ провайдерлердің жасырындылығы)'
2) Кідіріс көздерінің картасы (және қайда қазу керек)
1. Желі және хаттамалар: DNS, TCP handshakes, TLS, head-of-line (HTTP/1. 1), пакеттердің жоғалуы, BBR/ECN.
2. Шлюз/теңгеруші: баяу health-check, қалыпты емес таймауттар, ыстық поды.
3. Қосымша: блоктау, GC/stop-the-world, синхронды I/O, contention.
4. Қоймалар: баяу ДБ сұраулары, индекстердің болмауы, салқын беттер.
5. Сыртқы сервистер: PSP/KYC, сыртқы API (тар SLA).
6. Кезектер мен фондық джобтар: қайта жүктелген воркерлер, backpressure жоқ.
7. Кэш/edge: кэштің қателіктері, әлсіз TTL, әлсіз мүгедектік.
3) Желі және хаттамалар
3. 1 DNS/TCP/TLS
DNS prefetch/preconnect алдыңғы, ұзақ өмір сүретін IP PSP.
Клиенттерде Keep-Alive/connection pooling; серверде - қосылымдарды біріктіріңіз.
TLS: resumption/Session Tickets, заманауи шифр пакеті; қауіпсіз емес идемпотенттік операциялар үшін 0-RTT болдырмаңыз.
TCP: сөйлесу/шағын бумалар үшін Nagle ('TCP _ NODELAY') дегенді өшіріңіз; tune 'initial window', орынды жерде BBR қосыңыз.
3. 2 HTTP/2 и HTTP/3
HTTP/2: мультиплексиялау HOL блоктау HTTP/1 азайтады. 1; ағындардың басымдықтарын қадағалаңыз.
HTTP/3/QUIC: төмен шығын әсері/RTT; ұтқыр/халықаралық желіде пайдалы.
Header compression: HPACK/QPACK, бірақ тақырыптардың ақылға қонымды өлшемін сақтаңыз.
3. 3 Теңгерім/роутинг
Locality-aware (аймақтық), EWMA/least-request «ыстық» сатыларға қарсы.
Сессиялардың жабысуы - тек state болса ғана; әйтпесе stateless + жалпы кэш/сессия.
4) Форматтар, пайдалы жүктеме, компрессия
Қысыңыз: Brotli (мәтін), Gzip fallback ретінде; бинарлық пішімдер: gRPC/ішкі API үшін Protobuf/Euro.
payload азайтыңыз: таңдаулы өрістер ('fields =...'), пагинация, шартты GET (ETag/If-None-Match), delta-жауаптар.
GraphQL: persisted queries, «майлы» фрагменттерге тыйым салу, тереңдік пен күрделілік лимиттері.
N + 1-ден аулақ болыңыз: джойна/прекомпозиция, агрегаттарға арналған батч-эндпоинттер.
5) Таймауттар, ретрациялар, іспеттілік
Тізбек бойынша таймауттар: клиент <шлюз <аппа <сақтау орны/сыртқы шақыру.
Тек уақытша қателер үшін backoff + jitter ретрайлері; budgets дегенді ретраға қойыңыз.
Сәйкестік: сұрау кілті/белгісі + нәтижені сақтау; ретрайлер операцияларды қайталамауы тиіс (әсіресе қаржы).
Circuit Breaker: деградация кезінде ашыңыз; «қалдықтар» үшін hedged/backup requests (көшірмесін P95 арқылы жіберу).
6) Кезектер, асинхронды және backpressure
Синхронды жолды бұғаттамаңыз: ауыр операциялар (KYC сканерлері, есептілік) - фонға.
Backpressure: кезектегі тұтынуды шектеңіз, параллелизмді белгілеңіз.
Batching/coalescing: ұсақ операцияларды біріктіріңіз (мысалы, балансты біріктірумен жаңарту).
Outbox/Inbox: істен шыққан жағдайда оқиғаларды кепілді жеткізу.
7) Қосымша: рантаймалар мен пулдар
ДБ/кэштерге/НТТР қосылу пулдары; бэкендті «тұншықтырмау» үшін оларды шектеңіз.
JVM: GC (G1/ZGC) профилін жасаңыз, ірі аллокациялардан аулақ болыңыз; .NET - ThreadPool/async; Node. js - event loop бұғаттамаңыз, CPU-ауыр шығарыңыз.
Python: асинхронды драйверлер (asyncpg/httpx), uvloop; CPU тапсырмалары worker-pool арқылы.
Warm-up: JIT/кэштерді, «warm pools» инстанцияларын шыңға жылытыңыз.
8) Дерекқорлар мен кэштер
Индекстер мен жоспарлар: тұрақты 'EXPLAIN', авто-вакуум/талдау, сканерлер лимиті.
Connection pooling (PgBouncer/Multiplexing), қысқа транзакциялар.
Кэш-стратегиялар: read-through, write-through/write-behind; TTL + оқиғалар бойынша мүгедектік.
Шардинг/репликалар: слейвтерден оқу, «ыстық кілттер» - жергілікті кэштер (near-cache).
9) Кэштеу және edge
Статиктер/каталогтар үшін CDN/edge, 'Cache-Control', 'ETag' бойынша API жауаптар кэші (егер қауіпсіз болса).
UX-тұрақтылық үшін stale-while-revalidate және stale-if-error.
Гео-бөлу: ең жақын РОР/өңір RTT төмендетеді.
10) P99 қалдықтарына қарсы сәулет үлгілері
Hedged requests: босағаннан кейін басқа іске баяу сұрауды қайталаңыз.
Request collapsing: бір «жетекші» ДБ сұрауы, қалғандары нәтижені күтеді (дауылды болдырмайды).
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 метриктер + OTel трейдерлері: 'trace _ id' шлюз-сервис арқылы-БД-сыртқы API.
Жеке белгілер: 'api _ version', 'region', 'partner', 'endpoint'.
Дашбордтар: P50/P95/P99, queue time, error mix, retry rate, cache hit.
Мақсатты елдерден Synthetics/ASN (TR/BR/EU) және сындарлы жолдар бойынша (тіркеу → депозит, payout).
- Core API: 'P95 ≤ 250ms', 'P99 ≤ 500ms' (30 күн)
- PSP webhook өңдеу: 'P99 ≤ 60s' ретраларымен
- Каталогтың Freshness: 'P95 лаг ≤ 30s'
13) FinOps и latency
Миллисекундтар ақша тұрады: CR/ARPPU-да $/мс ұтысты бағалаңыз.
Right-sizing: жылдам ≠ әрқашан қымбат; сауатты кэш/форматтар арзандап, жылдамдатады.
Egress/edge: CDN RTT және аймақтан шығатын трафиктің құнын азайтады.
14) Оңтайландыру чек-парағы (қадамдық)
1. SLO қойыңыз және эндпоинттер/өңірлер/серіктестер бойынша қалдықтарды (P95/P99) өлшеңіз.
2. HTTP/2/3, TLS resumption, ұзақ мерзімді қосылымдарды қосыңыз.
3. Қысыңыз және жауаптарды жоғалтыңыз: Brotli/Gzip, сұраныс бойынша өрістер, пагинация, ETag.
4. Таймауттарды/ретраларды/брейкерлерді теңшеңіз; сәйкестік қосыңыз.
5. Кэш/edge: hit-rate және дұрыс TTL; stale режимдері.
6. ДҚ: индекстер, жоспарлар, пулдар, репликалар; N + 1 жойыңыз.
7. Асинхронды ауыр: кезек, батчинг, backpressure.
8. Сыни жолдар үшін Hedge/collapse/priority.
9. Warm-up және шыңдарға болжамды скейлинг (турнирлер/матчтар).
10. Синтетика және P99 және queue time; тұрақты перф-ревью.
15) Қарсы үлгілер
Барлығына бір жаһандық таймаут және бақылаусыз ретрайлер (DDOS өзі).
Сессиялардың қажетсіз жабысуы → ыстық тамақтар.
Үлкен JSON компрессиясыз және өріс сүзгілерсіз.
«Ыстық жолда» баяу сыртқы API-ге ілеспе шақырулар.
ДҚ-да индекстердің/лимиттердің болмауы; ORM-да N + 1.
Кэш/edge және ETag жоқ; тұрақты толық жауаптар.
Бизнес және техникалық қателерді бір «ретрациялайтын» себетке араластыру.
16) iGaming/финтех контекст: практикалық ноталар
Тіркеу → депозит (CR): бағыттар басымдығы, жеке пул, 'P99 ≤ 500ms'; деградация - UI «әшекейлерді» өшіру.
PSP-интеграция: конкарренси лимиттері, уақытша кодтар бойынша ретра, warm-коннектілер, өңірлік egress-IP.
VIP-операциялар: кепілдік берілген пул/басымдық, жалпы кезектерді аралау.
Турнирлер/ивенттер: болжамды скейл, кэштерді жылыту, prefetch.
Есеп беру: async және SLA freshness, бұғаттамайды.
Жиынтығы
Latency оңтайландыру - теңгерім пәні: желі (HTTP/2/3, TLS), хаттамалар мен кэш, іспеттілігі бар таймауттар/ретрайлер, ДБ/кэштер, асинхронды паттерндер және P95/P99 байқалуы. Құйрықтарыңызға назар аударып, «тар мойындарды» жойсаңыз, сіз үндеуді тұрақтандырасыз, конверсияны жақсартасыз және миллисекундтардың құнын төмендетесіз - бұл шын мәнінде бизнеске әсер ететін жерде.