API Gateway și rutare
1) API Gateway Rol în arhitectură
Un gateway API este un singur punct de intrare în microservicii. El este:- Cereri de rute (după traseu/antet/geo/greutate/versiune).
- Protejează perimetrul (TLS/mTLS, WAF, DDoS, limitele ratei, authN/Z).
- Controlează traficul (canar/AB, umbră/oglindă, întrerupător de circuit, retras, timeout).
- Standardizează protocoalele (REST/gRPC/WebSocket), anteturile, codurile.
- Observă (busteni, metrici, urme, corelație).
- Transformă și validează (JSON/XML, normalizare, validare schemă).
Pentru iGaming, este, de asemenea, geo-conformitate (blocare țară/vârstă), rutare de plată inteligentă și politici de joc responsabil pe margine.
2) Opțiuni de rutare
Pe cale: "/api/v1/payments/ → payments-svc'.
Bazat pe gazdă: "eu. api. exemplu. com → eu-edge ', "psp. exemplu. com → psp-proxy ".
Header-based: „X-Client: partener-A” → partener backend; „Accept: cerere/grpc”.
Geo-rutare: prin IP/ASN/țară (GDPR/interdicții locale, latență).
Ponderat/Canar: „90%” pe vechiul, „10%” pe noua versiune; revenire rapidă.
Revendicare-rutare: по 'JWT. revendicări. nivel/rol/regiune "(de exemplu, high-roller → limite premium).
Failover: active-active/active-răspundere între centrul de date/cloud și PSP.
3) Securitatea perimetrului
TLS peste tot: TLS 1. 2 + pe exterior, mTLS în interior (shlyuz↔servisy).
OAuth2/JWT: verificarea semnăturii, auditul „exp/nbf/aud/scope”, rotația JWKS; cache de validare cu TTL.
HMAC: Semnătura corporală pentru webhook-uri/plăți.
chei API: pentru clienții sistemului; asociat cu cote/roluri.
WAF: reguli de bază (injecție, anomalii de protocol), dimensiunea corpului, lista de negare a țărilor.
Protecție DDoS: limitarea conexiunii, cookie-uri SYN, limită de rată pe IP/cheie/punct final.
Zero-Trust: politici obligatorii (SPIFFE/SPIRE, identități de serviciu), principiul celor mai puține drepturi.
Confidențialitate: editare PII în jurnale, mascare PAN/IBAN, politică de stocare.
4) Limite, cote și protecție împotriva exploziilor
Модели: cupă token, găleată cu scurgeri, fereastră fixă/glisantă.
Frontiere: per-IP, per-cheie, per-utilizator, per-rută.
- Explozie + susţinută (de ex. „50 rps izbucni”, „10 rps susține”).
- Retry-Budget și Slow-Loris de protecție (citește timeout).
- Cota de zi/lună pentru parteneri.
5) Transformări și validare
Normalizați anteturile (trace-id, locale, client-id).
Cerere/Răspuns-mapare.
Schema de validare (OpenAPI/JSON Schema) înainte de proxying - precoce 4xx eșec.
Compresie/' Accept-Encoding ', caching (vezi mai jos).
6) Caching și performanță
Memorie cache pentru directoare, metadate publice, configurații (TTL, „ETag ”/„ If-None-Match”).
Micro-cache 1-5 s pentru hot GET (reduce sarcina maximă).
Scurt-cache negativ (la 404/gol) - atent.
Solicitări de acoperire a riscurilor și cereri competitive de replici la pragul p95>.
7) Timeout, retrageri, reziliență
Timeout: conectați/citiți/scrieți separat; p95-repere rezonabile.
Retrai: metode idempotente (GET/PUT) cu backoff + jitter; reîncercați-buget.
POST idempotency: 'Idempotency-Key' + service/gateway deduplication.
Întrerupător de circuit: prin erori/latență; proces pe jumătate deschis.
Perete etanș/Izolarea piscinei prin amonte.
8) Versioning și compatibilitate
Metode:- URI: '/v1/... '(rute simple, dar „zgomotoase”).
- Antet/Conținut-Negociere: 'Acceptă: cerere/vnd. app. v2 + json '.
- Caracteristică-steaguri/capacitatea de server - pentru compatibilitate minor-schimbare.
Politică: SemVer, fereastră de asistență (de exemplu, 'v1' = 12-18 luni), program de depricție, răspunsuri compatibile pentru extensii (adăugarea câmpurilor nu se rupe).
9) Observabilitatea și controlul calității
Corelaţie: "traceparent "/" x-request-id' necesar; Îl aruncăm în jos.
OpenTelemetry: RPS/p50/p95/p99/5xx/4xx, saturație, retry/circuit metrica evenimentelor.
Busteni: structural JSON; deghizare PII; niveluri de cod.
Urme de eșantionare: de bază 5-10% + țintă pentru erori/lent.
SLO/alerte: pe rute/clienti (uptime, latenta, eroare).
10) Release Managementul traficului
Comutator DNS/LB albastru-verde.
Canare: cota de greutate/segmente (regiune, partener, rol).
Shadow/Mirror: copie a traficului către noua versiune fără a răspunde clientului.
Kill-switch: pavilion pentru a dezactiva rapid problema în amonte/caracteristică.
11) rutare de plată inteligentă (iGaming)
Reguli de selecție PSP: geo, valută, sumă, rată de risc, disponibilitate, comision.
Failover PSP: tranziție automată la '5xx/timeout'.
Regula aceleiași metode: retururi/ieșiri prin metoda originală - verificați la margine.
ID-ul de plată: cheie pe 'userId + sumă + monedă + scop'.
Transparența ETA: gateway-ul adaugă stări și cauze de eșec (nu coduri PSP).
12) Politici transregionale și conformitate
Geo-filtre: liste albe/negre de țări, restricții de vârstă, intervale IP.
Date rezidente: rutare către clustere regionale (GDPR/legi locale).
Jurnale și TTL: stocare pe regiuni, anonimizare automată.
13) Exemple de configurare
13. 1 NGINX (rutare + limită + antete)
nginx http {
map $http_x_request_id $req_id { default $request_id; }
limit_req_zone $binary_remote_addr zone=per_ip:10m rate=20r/s;
server {
listen 443 ssl http2;
server_name api. example. com;
Security add_header Strict-Transport-Security "max-age = 31536000" always;
add_header X-Content-Type-Options nosniff;
Limit on IP location/api/v1/{
limit_req zone=per_ip burst=40 nodelay;
proxy_set_header X-Request-Id $req_id;
proxy_set_header X-Client-Ip $remote_addr;
proxy_read_timeout 5s;
proxy_connect_timeout 1s;
proxy_pass http://payments_v1;
}
Canary traffic by header location/api/v2/{
if ($http_x_canary = "1") { proxy_pass http://payments_v2; }
proxy_pass http://payments_v1;
}
}
}
13. 2 Trimisul (JWT, limita ratei, retries, outlier)
yaml static_resources:
listeners:
- name: https address: { socket_address: { address: 0. 0. 0. 0, port_value: 443 } }
filter_chains:
- filters:
- name: envoy. filters. network. http_connection_manager typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. network. http_connection_manager. v3. HttpConnectionManager route_config:
name: local_route virtual_hosts:
- name: payments domains: ["api. example. com"]
routes:
- match: { prefix: "/api/v1/payments" }
route:
cluster: payments_v1 timeout: 5s retry_policy:
retry_on: "connect-failure,refused-stream,5xx,retriable-status-codes"
num_retries: 2 per_try_timeout: 2s http_filters:
- name: envoy. filters. http. jwt_authn typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. http. jwt_authn. v3. JwtAuthentication providers:
main:
issuer: "https://auth. example. com/"
remote_jwks: { http_uri: { uri: "https://auth. example. com/.well-known/jwks. json" } }
forward: true rules:
- match: { prefix: "/api/" }
requires: { provider_name: "main" }
- name: envoy. filters. http. ratelimit
- name: envoy. filters. http. router clusters:
- name: payments_v1 connect_timeout: 0. 5s type: STRICT_DNS lb_policy: ROUND_ROBIN load_assignment: { cluster_name: payments_v1, endpoints: [{ lb_endpoints: [{ endpoint: { address: { socket_address: { address: payments, port_value: 8080 }}}}]}] }
outlier_detection: { consecutive_5xx: 5, interval: 5s, base_ejection_time: 30s }
14) Liste de verificare
Înainte de eliberarea traseului
- Schema de autentificare (JWT/JWKS, chei, TTL cache).
- Timeouts/Retroys/Idempotency sunt configurate.
- Limite: per-IP, per-cheie, per-rută; cote partenere.
- Validarea schemei de solicitare/răspuns.
- Jurnale și urme cu 'trace-id', măști PII.
- SLO/alerte și tablou de bord.
- Geo-reguli/conformitate/vârstă verificate.
Tranzacții și plăți
- PSP Smart Routing: Reguli, Priorități, Feilover.
- Aceeași metodă este verificată la margine.
- Stări transparente și coduri de eroare pentru client (fără cod PSP brut).
Lansări
- Canare/AB și kill-switch, plan de rollback.
- Trafic de umbre la noua versiune, compararea metricii.
- Testarea sarcinii și țintele p95.
15) Măsurători de calitate (minim)
Disponibilitate/SLO pe rute; rata de eroare 5xx/4xx.
Latență p50/p95/p99 (externă și internă).
Retry/timeout/circuit evenimente (nivel de zgomot).
Cache hit-raport și economii RPS.
Rata-limită hit-uri și a scăzut cererile.
KPI-uri de rutare PSP: succese, TtW, procent de feilover, comision.
16) Anti-modele
O limită totală „pentru orice”.
„Instant” se retrage fără jitter (intensificarea furtunii).
Trust 'X-Forwarded-For' fără normalizare și listă de proxy de încredere.
Timeout-uri dure, cu excepția p95 (fals pozitive).
Transformări dure care sparg compatibilitatea.
Jurnale cu PII/PAN/secrete.
Se amestecă API intern și extern sub același domeniu/politică.
17) Modele de răspuns și erori (microcopie)
429 Prea multe cereri: "Limita de solicitare atinsă. Repetați în N secunde sau creșteți cota în biroul partenerului"
401/403: "Tokenul este nevalid/expirat. Vă rugăm să vă conectați din nou"
408/504: "Serviciul răspunde mai mult decât era de așteptat. Cererea nu a fost acceptată"
Idempotency-conflict: „O cerere cu această cheie de Idempotency a fost deja procesată (statut: succes/eșec)”.
18) Procesul de implementare (pași)
1. Model de traseu: domeniu/cale/regiune hartă.
2. Politici de securitate: TLS/mTLS, WAF, authN/Z, chei/JWKS.
3. Fiabilitate: timeout, retroys, idempotency, circuit-breaker.
4. Observabilitate: busteni/metrici/urme, corelatie.
5. Cache/perf: edge/micro-cache, compresie, bazine de conexiune.
6. Rutarea plăților: reguli, teste, monitorizare.
7. Versiuni: canar/umbră, kill-switch, plan rollback.
8. Conformitate/geo: filtre de țară, stocarea datelor, vârsta.
Foaie de trișat finală
Perimetru strict (TLS/mTLS, WAF, limite) + trafic gestionat (retrai, circuit, canar).
Validarea și transformările la marginea → sunt mai mici decât defectele „în interior”.
Observabilitatea cu măști trace-id și PII nu este o opțiune, ci un standard.
Rutarea inteligentă a plăților și geo-ul de conformitate sunt esențiale pentru iGaming.
Politica de versionare și privare - predictibilitate pentru parteneri.