Technologie und Infrastruktur → Latency und API-Reaktionsoptimierung
Latenz und API-Reaktionsoptimierung
1) Was ist „Latenz“ und warum ist es wichtig
Latenz - Gesamtabfrageverzögerung: Netzwerk (DNS + TCP + TLS + RTT), Balancer/Gateway, Anwendung, DB/Caches/Queues, externe Integrationen. Für Unternehmen sind P95/P99 entscheidend, nicht der Durchschnitt: Es ist der „Schwanz“, der UX, CR und SLO zerstört.
Basis-SLIs:- „SLI _ latency _ P95 = P95 (Reaktionszeit)“ in 5/30 Minuten
- „SLI _ latency _ P99 = P99 (Reaktionszeit)“
- „SLI _ queue _ time = P95 (Zeit _ in _ Warteschlange _ worker)“
- „SLI _ ext _ call _ P95 = P95 (Latenz _ externer _ Anbieter)“
2) Karte der Quellen von Verzögerungen (und wo zu graben)
1. Netzwerk und Protokolle: DNS, TCP Handshakes, TLS, Head-of-Line (HTTP/1. 1), Paketverlust, BBR/ECN.
2. Gateway/Balancer: langsame Health-Checks, nicht-valide Timeouts, heiße Pods.
3. Anwendung: Schlösser, GC/stop-the-world, synchrone I/O, Inhalt.
4. Speicher: langsame DB-Abfragen, keine Indizes, kalte Seiten.
5. Externe Dienste: PSP/KYC, APIs von Drittanbietern (schmale SLAs).
6. Warteschlangen und Hintergrundjobs: Überbelastete Worker, keine Backpressure.
7. Cache/Edge: Cache-Fehler, schwache TTL, nicht-valide Behinderung.
3) Netzwerk und Protokolle
3. 1 DNS/TCP/TLS
DNS prefetch/preconnect auf der Vorderseite, langlebige IP zu PSP.
Keep-Alive/Konnektivitäts-Pooling in Clients; auf dem Server - Aggregieren Sie die Verbindungen.
TLS: resumption/Session Tickets, ein modernes Chiffre-Paket; Vermeiden Sie 0-RTT für unsichere idempotente Operationen.
TCP: Deaktivieren Sie Nagle ('TCP _ NODELAY') für Chats/kleine Pakete; tune' initial window', BBR einschalten, wo es angebracht ist.
3. 2 HTTP/2 и HTTP/3
HTTP/2: Multiplexing reduziert HOL-Blockierungen von HTTP/1. 1; Behalten Sie die Prioritäten der Threads im Auge.
HTTP/3/QUIC: geringere Auswirkung von Verlust/RTT; nützlich auf einem mobilen/internationalen Netzwerk.
Header Kompression: HPACK/QPACK, aber halten Sie eine angemessene Größe der Titel.
3. 3 Auswuchten/Routing
Locality-aware (zonality), EWMA/least-request gegen „heiße“ Instanzen.
Kleben von Sitzungen - nur wenn es einen Zustand gibt; ansonsten stateless + shared cache/sessions.
4) Formate, Nutzlast, Kompression
Komprimieren: Brotli (Text), Gzip als Fallback; binäre Formate: Protobuf/Avro für gRPC/interne APIs.
Payload reduzieren: selektive Felder ('fields =...'), Pagination, bedingte GETs (ETag/If-None-Match), Delta-Antworten.
GraphQL: persistierte Fragen, Verbot von „fettigen“ Fragmenten, Grenzen der Tiefe und Komplexität.
Vermeiden Sie N + 1: Joins/Vorkomposition, Batch-Endpunkte für Aggregate.
5) Timeouts, Retrays, Idempotenz
Timeouts entlang der Kette: Client <Gateway <App <Speicher/externer Anruf.
Retrays mit Backoff + Jitter, nur für temporäre Fehler; stellen Sie budgets auf retrays aus.
Idempotenz: Anforderungsschlüssel/Token + Speichern des Ergebnisses; Retrays dürfen keine Transaktionen (insbesondere Finanzen) duplizieren.
Circuit Breaker: Öffnen bei Degradation; hedged/backup requests for „tails“ (Duplikat über P95 senden).
6) Warteschlangen, Asynchronität und Backpress
Blockieren Sie nicht den synchronen Pfad: schwere Operationen (KYC-Scans, Reporting) - im Hintergrund.
Backpressure: Begrenzen Sie den Verbrauch aus der Warteschlange, erfassen Sie die Parallelität.
Batching/Coalescing: Kombinieren Sie kleine Operationen (z. B. Aktualisieren von Salden mit Aggregation).
Outbox/Inbox: garantierte Lieferung von Ereignissen bei Ausfällen.
7) Anhang: Rantimes und Pools
Verbindungspools zu DB/Caches/NTTR; begrenzen Sie sie, um das Backend nicht zu „ersticken“.
JVM: GC profilieren (G1/ZGC), große Allokation vermeiden; .NET - ThreadPool/async; Node. js - Event-Loop nicht blockieren, CPU-schwer herausnehmen.
Python: asynchrone Treiber (asyncpg/httpx), uvloop; CPU-Aufgaben über worker-pool.
Warm-up: JIT/Caches aufwärmen, Instances „warm pools“ zu Spitzen.
8) Datenbanken und Caches
Indizes und Pläne: regelmäßige' EXPLAIN', Auto-Vakuum/Analyse, Scan-Limit.
Verbindungspooling (PgBouncer/Multiplexing), kurze Transaktionen.
Cache-Strategien: read-through, write-through/write-behind; TTL + Behinderung durch Veranstaltungen.
Sharding/Replikate: Lesen von Slaves, „Hot Keys“ - lokale Caches (Near-Cache).
9) Caching und Edge
CDN/edge für Statik/Verzeichnisse, API Response Cache (wenn sicher) durch 'Cache-Control', 'ETag'.
Stale-while-revalidate und stale-if-error für UX-Nachhaltigkeit.
Geo-Verteilung: Die nächstgelegene RPO/Region reduziert die RTT.
10) Architektonische Muster gegen P99-Schwänze
Hedged requests: Duplizieren Sie eine langsame Anfrage an eine andere Instanz nach dem Schwellenwert.
Anfrage collapsing: eine „führende“ Anfrage an die DB, der Rest wartet auf das Ergebnis (vermeidet Stürme).
Priorisierung: VIP/kritische Operationen - dedizierter Pool/Priorität.
Graceful degradation: Schneiden Sie kleinere Felder/Widgets, wenn überlastet.
11) Confighi (ungefähr)
11. 1 NGINX (Timeouts/Kompression)
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 (Client)
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: Richtig messen
RED/USE-Metriken + OTel-Trails: 'trace _ id' über Gateway-Service-DB-externe APIs.
Einzelne Tags: 'api _ version', 'region', 'partner', 'endpoint'.
Dashboards: P50/P95/P99, queue time, error mix, retry rate, cache hit.
Synthetics aus den Zielländern/ASN (TR/BR/EU) und über kritische Pfade (reg→depozit, Auszahlungen).
- Core-API: „P95 ≤ 250ms“, „P99 ≤ 500ms“ (30 Tage)
- PSP-Webhook-Verarbeitung: 'P99 ≤ 60s' mit Retrails
- Freshness Katalog: „P95 lag ≤ 30s“
13) FinOps и latency
Millisekunden kosten Geld: Schätzen Sie $/ms Gewinne in CR/ARPPU.
Right-Sizing: Immer schneller ≠ teurer kompetenter Cache/Formate sind billig und beschleunigen.
Egress/edge: CDN reduziert die RTT und die Kosten für ausgehenden Datenverkehr aus der Region.
14) Optimierung Checkliste (Schritt für Schritt)
1. Setzen Sie den SLO und messen Sie die Schwänze (P95/P99) nach Endpunkten/Regionen/Partnern.
2. Schalten Sie HTTP/2/3, TLS-Resumption, langlebige Verbindungen ein.
3. Drücken und Gewicht verlieren Antworten: Brotli/Gzip, Felder auf Anfrage, Pagination, ETag.
4. Konfigurieren Sie Timeouts/Retrays/Breakers; Idempotenz hinzufügen.
5. Cache/edge: Hit-Rate und korrekte TTL; Stale-Modi.
6. DB: Indizes, Pläne, Pools, Repliken; Beseitigen Sie N + 1.
7. Asynchron schwer: Warteschlangen, Batching, Backpressure.
8. Hedge/collapse/priority für kritische Pfade.
9. Warm-up und Predictive Scaling to Peaks (Turniere/Matches).
10. Synthetik und Alerts auf P99 und queue Zeit; regelmäßige Perf-Revue.
15) Anti-Muster
Ein globaler Timeout „für alles“ und unkontrollierte Retrays (DDOS von sich selbst).
Kleben Sie Sitzungen, ohne heiße Knoten → müssen.
Große JSONs ohne Kompression und Feldfilter.
Synchrone Aufrufe zu langsamen externen APIs im Hot-Path.
Keine Indizes/Limits in der DB; N + 1 in ORM.
Kein Cache/Edge und ETag; ständige vollständige Antworten.
Eine Mischung aus geschäftlichen und technischen Fehlern in einem „Retracement“ -Korb.
16) iGaming/Fintech Kontext: Praktische Hinweise
Reg→depozit (CR): Routenpriorität, separater Pool, „P99 ≤ 500ms“; degradation - Deaktivieren Sie „Schmuck“ UI.
PSP-Integrationen: Concarrency-Limits, Zeitcode-Retrays, Warm-Connects, regionale Egress-IPs.
VIP-Operationen: garantierter Pool/Priorität, Umgehung gemeinsamer Warteschlangen.
Turniere/Events: Predictive Scale, Warming Caches, Prefetch.
Reporting: async und SLA auf freshness, blockiert nicht den Prod-Pfad.
Summe
Latency-Optimierung ist die Disziplin der Balance: Netzwerk (HTTP/2/3, TLS), Protokolle und Cache, Timeouts/Retrays mit Idempotenz, DB/Caches, asynchrone Muster und P95/P99 Beobachtbarkeit. Indem Sie sich auf Schwänze konzentrieren und Engpässe beseitigen, stabilisieren Sie die Reaktion, verbessern die Konvertierung und senken die Kosten für eine Millisekunde - wo es das Geschäft wirklich beeinflusst.