Reverse-proxy və marşrutlaşdırma
1) Revers-proxy rolu
Reverse-proxy - platformanın «ön xətti»: TLS qəbul edir, trafiki axınlar arasında paylayır, təhlükəsizlik və performans siyasətlərini tətbiq edir. Məqsəd minimal gizlilik, proqnozlaşdırıla bilən marşrutlaşdırma və deqradasiya edən instansiyaların/zonaların sürətli izolyasiyasıdır.
2) Qatlar və protokollar
L4: TCP/UDP proxy (SNI-based TLS passthrough, QUIC). HTTP anlamadan aşağı qiymət.
L7: HTTP/1. 1–2–3, gRPC, WebSocket. Zəngin marşrutlaşdırma (host, path, headers, cookies), transformasiya və cache.
TLS modeli: perimetrdə terminləşdirmək (NGINX/Envoy), daxilində - mTLS/mesh. SNI bir IP virtual hosts imkan verir.
3) Marşrutlaşdırma strategiyaları (L7)
1. Host-based: domen ('api. brand. com '→ klaster' brand-api ').
2. Path-based: `/v1/payments` → `payments-svc`, `/v1/wallets` → `wallets-svc`.
3. Header-based: `X-Region: eu-central`, `X-Tenant: 42`, `User-Agent`/`Accept`.
4. Cookie-based: A/B testləri, «yapışqan» sessiyalar.
5. Weighted/Canary: yeni versiyada trafik faizi (1-5% → 100%).
6. Geo/ASN: Ölkə üzrə/ASN ən yaxın ROR/regiona göndərilir.
7. Consistent hashing: açar bağlamaq (user_id/tenant_id) instant → cache lokalization/yapışqanlıq.
8. Shadow/Mirroring: Cavablara təsir etmədən trafiki «kölgə» axınına köçürürük (reqressiya testləri üçün).
4) Balans və arıza müqaviməti
Alqoritmlər: round-robin, least-request, random, ring-hash (consistent).
Health-checks: aktiv (HTTP/TCP) + passiv (kodlara/taymautlara görə).
Outlier ejection: Müvəqqəti «nokaut» ev sahibi artan səhv/gizli.
Retries: məhdud, per-try timeout və jitter ilə; idempotentlik olmadan təhlükəli metodları geri çəkməyin.
Connection pooling: axınlara warm-hovuzları saxlamaq, maksimumları məhdudlaşdırmaq.
5) Perimetr performansı
Caching: açar (method + host + path + Vary), şərtlər 'ETag/If-None-Match', TTL və stale-while-revalidate.
Kompres: mətn cavabları üçün brotli/gzip.
HTTP/2/3: multiplexing, header-compression; WAF/IDS uyğun əmin olun.
Request coalescing: Eyni cache açarı üçün paralel sorğular.
6) Proxy təhlükəsizlik
TLS: 1. 2 + (daha yaxşı 1. 3), OCSP stapling, HSTS.
WAF/bot filtrləri: app marşrutlaşdırmadan əvvəl.
CORS/CSP/Fetch-Metadata: siyasətlərə görə.
Header-гигиена: `X-Forwarded-For/Proto`, `Forwarded`, `traceparent`; header-injection və oversize qarşı müdafiə.
Body/headers limits: DoS nümunələri üçün erkən 413/431.
Tərəfdaşlıq inteqrasiyası və daxili API üçün mTLS.
7) Deploi sxemləri: canary/blue-green/versiyası
Weighted routing на level-7 (1%, 5%, 25%, 50%, 100%).
Header-gate: bayraq/başlıq (internal/testing) ficha daxil.
Blue-green: bütün DNS/route, sürətli rollback keçid.
Shadow: metrik/log yazma ilə yeni versiyası paralel qaçış.
8) Sticky-sessiyalar və hash-marşrutlaşdırma
Cookie-stickiness (`Set-Cookie: SRV=shard-a; Path=/; HttpOnly ') stateful yükləmələri üçün.
Ring-hash/consistent by 'user _ id/tenant _ id' - cache cross-əlilliyi azaldılması.
Xəbərdarlıq: write yükləri → hot-spot üçün «əbədi» yapışqanlıqdan qaçın; per-tenant kvota istifadə edin.
9) Regional və geo-marşrutlaşdırma
Anycast + geo-DNS ən yaxın POP seçin.
Testlər və hata ayıklama üçün Header-override (məsələn, 'X-Region').
Qanunvericiliklə tələb olunan məlumatların lokallaşdırılması ilə əlaqələndirmək (region/yurisdiksiya üzrə route).
10) Müşahidə və nəzarət
RED metrikası: RPS, error-rate (siniflərə görə), latency p95/p99 per-route/cluster.
Outlier/health: Edjects/təkrar qoşulmaların sayı, slow-call-rate.
Log: strukturlaşdırılmış, PII olmadan; 'trace _ id '/' span _ id' korelyasiyası.
Trace (OTel): ingress → router → upstream yuxular; p99 qrafiklərində exemplars.
11) Konfiqurasiya nümunələri
11. 1 NGINX: host/path/weighted + кэш
nginx map $http_x_canary $canary { default 0; "1" 1; }
upstream app_v1 { least_conn; server 10. 0. 0. 1:8080 max_fails=3 fail_timeout=10s; }
upstream app_v2 { least_conn; server 10. 0. 0. 2:8080; }
server {
listen 443 ssl http2;
server_name api. example. com;
Кэш proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=apicache:256m max_size=10g inactive=10m use_temp_path=off;
location /v1/ {
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Request-ID $request_id;
proxy_read_timeout 300ms; proxy_connect_timeout 100ms;
Weighted: 5% on v2 if canary = 1, otherwise 0%
set $backend app_v1;
if ($canary) { set $backend app_v2; }
proxy_pass http://$backend;
}
Static with cache location/assets/{
proxy_cache apicache;
proxy_cache_valid 200 10m;
add_header Cache-Control "public, max-age=600";
proxy_pass http://static_cluster;
}
}
11. 2 Envoy: header-routing, canary, outlier-ejection, mirroring
yaml static_resources:
clusters:
- name: svc_v1 type: STRICT_DNS lb_policy: LEAST_REQUEST outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50
- name: svc_v2 type: STRICT_DNS lb_policy: LEAST_REQUEST
- name: mirror_svc type: STRICT_DNS
listeners:
- name: https filter_chains:
- filters:
- name: envoy. filters. network. http_connection_manager typed_config:
route_config:
virtual_hosts:
- name: api domains: ["api. example. com"]
routes:
- match:
prefix: "/v1"
headers:
- name: "X-Region"
exact_match: "eu"
route:
cluster: svc_v1 timeout: 350ms retry_policy:
retry_on: connect-failure,reset,5xx num_retries: 1 per_try_timeout: 200ms request_mirror_policies:
- cluster: mirror_svc runtime_key: mirror. enabled
- match: { prefix: "/v1" }
route:
weighted_clusters:
clusters:
- name: svc_v1 weight: 95
- name: svc_v2 weight: 5
11. 3 Traefik: rules + middleware
yaml http:
routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1`)"
service: svc middlewares: [hsts, compress]
middlewares:
hsts:
headers:
stsSeconds: 31536000 stsIncludeSubdomains: true compress:
compress: {}
services:
svc:
weighted:
services:
- name: v1 weight: 95
- name: v2 weight: 5
11. 4 Kubernetes: Ingress + canary üçün manifest (NGINX Ingress)
yaml apiVersion: networking. k8s. io/v1 kind: Ingress metadata:
name: api annotations:
nginx. ingress. kubernetes. io/canary: "true"
nginx. ingress. kubernetes. io/canary-weight: "5"
spec:
rules:
- host: api. example. com http:
paths:
- path: /v1 pathType: Prefix backend:
service:
name: svc-v1 port: { number: 8080 }
12) transformasiya və uyğunluq
Başlıqların/yolların normallaşdırılması, 'Location' siyahıyaalınması, 'Cache-Control' idarəetməsi.
gRPC HTTP/JSON vasitəsilə translatorlar (grpc-json-transcoder).
WebSocket/HTTP2 upgrades: proxy 'Upgrade '/' Connection' keçməsinə əmin olun.
13) Test və xaos ssenariləri
Yük: burst, uzun plato, «uzun» bədən (slow-POST).
Axınlara gecikmə/itki inyeksiyası → retries/timeout/outlier.
Canary metrik: p95/p99, error-rate köhnə vs yeni versiyası; SLO avtomatik rollback.
Shadow: cavabların müqayisəsi (sempling) və side-by-side-məntiq.
14) Antipattern
İdempotentlik və son tarix nəzərə alınmadan qlobal retrajlar → dubl və fırtına.
Sticky-seans nəzarət olmadan «isti» şard → cross yük.
health-checks/outlier-ejection → hovuzda «çürük» instants yoxdur.
Limitsiz başlıqlar/bədən → ən sadə DoS.
Sxemlərin bir versiyası olmadan transformasiya və təhlükəsizlik qarışdırılması → gözlənilməz reqressiyalar.
'Vary' olmadan vahid qlobal cache açarı → səhv cavablar.
15) iGaming/Maliyyə Xüsusiyyətləri
Regionallıq: oyunçu/marka yurisdiksiyasına görə marşrut; ödəniş zonalarının izolyasiyası.
Kritik marşrutlar (depozitlər/nəticələr): qısa vaxtlar, bir təkrarlama, idempotentlik; ayrı-ayrı klasterlər.
PSP/KYC: xüsusi upstream hovuzlar, sərt retry/timeout siyasətləri, circuit-breaker, geo-pin.
AB kanalları: Yalnız read-road üçün ödənişlər/limitlər ilə təhlükəsiz təcrübələr; write - bayraqlar və kiçik faizlər vasitəsilə.
16) Prod hazırlıq yoxlama siyahısı
- TLS 1. 2+/1. 3, OCSP stapling, HSTS; düzgün 'X-Forwarded-'.
- Aydın marşrutlaşdırma qaydaları: host/path/header/cookie; sənədləşmə.
- Health-checks, outlier-ejection, per-try timeout, məhdud retrai.
- Weighted/canary + shadow; SLO/alertlər üzrə avto-rollback.
- Cache/Kompression/ETag; body/headers limitləri; request coalescing.
- 'trace _ id' ilə giriş/treys; RED + outlier/health metriklər; dashboard per-route/cluster.
- WAF/bot filtrləri/CORS; oversize və slow-POST qorunması.
- Sticky/consistent hashing lazım olan yerdə; hot-şard nəzarət.
- Konfiqlər versiyalaşdırılır, miqrasiyalar təhlükəsizdir, KMS/Vault-da sirlər.
17) TL; DR
TLS-i perimetrdə terminləşdirin və host/path/header/cookie ilə L7-yə yönləndirin. Relizlər üçün - weighted canary və shadow; sabitlik üçün - health-checks, outlier-ejection, per-try timeout ilə məhdud retries. Bu p95 yaxşılaşdırır harada cache, kompres və consistent hashing istifadə edin. RED siqnalları və klasterlərin vəziyyətini ölçün, WAF və ölçü limitlərini saxlayın. Kritik ödəniş yolları üçün - ayrı-ayrı klasterlər, qısa SLA və ciddi retras/idempotent idarəetmə.