Proxy қабаттары және кері бағыттау
Қысқаша түйіндеме
Прокси-қабат - платформаның «алдыңғы шина»: ол TLS аяқтайды, клиенттерді куәландырады, трафикті таратады, шыңдарды тегістейді және шығаруды қауіпсіз етеді (канарейка, blue-green). Жетілудің ең аз жиынтығы: прокси-рольдердің нақты стратификациясы, бағыттаудың детерминирленген ережелері, таймауттарды/ретрайларды бақылау, кэш + rate-limit, толассыз бақылау және автоматтандыру.
Прокси таксономиясы
Forward proxy - клиенттердің/сервистердің сыртқа шығатын трафигі (egress), сүзгілер/зеркалау, DLP.
Reverse proxy - сыртқы сұрауларды қабылдайды және бэкендерге бағыттайды (біздің негізгі фокусымыз).
1. Edge/CDN/WAF (Anycast, бот-сүзгілер, кэш)
2. L7 Ingress/API-gateway (бағыттау, аутентификация, саясат)
3. east-west, mTLS және ретрайлерге арналған сервистік қабат/Mesh (sidecar)
4. Шығыс интеграцияларына арналған Egress-gateway (PSP, серіктестер)
Бағыттау (L4/L7) және алгоритмдер
L4 (TCP/UDP, passthrough TLS): HTTP түсініксіз ең аз кідіріс.
L7 (HTTP/1. 1, HTTP/2, HTTP/3/gRPC): host/path/header/cookie, трансформация, WAF, кэш ережелері.
- Round-robin/Least-connections/EWMA - жалпы жағдайлар.
- Consistent-hash (cookie/идентификатор бойынша) - sticky-сессиялар және кэш-локальдығы.
- Header-/Geo-/Latency-based - өңірлер/провайдерлер бойынша таргетинг, жылдам PoP.
- Canary/Weighted - кезең-кезеңімен rollout (5 → 25 → 50 → 100%).
- Shadow/Mirroring - жауаптарға әсер етпейтін жаңа қызметке трафиктің көшірмесі.
Сұрауларды/жауаптарды трансформациялау
URL rewrite/redirect: жолдарды біріздендіру, нұсқалау ('/v1/→/svc/v1/').
Тақырыптар: 'X-Forwarded-For/Proto/Host' дегенді қалыпқа келтіріңіз, 'traceparent '/' x-request-id' дегенді қосыңыз, артық сүзіңіз.
CORS/CSRF: gateway жүйесінде орталықтандырыңыз, әрбір сервисте баптауларды көбейтпеңіз.
Compression/Decompression: Brotli/gzip, түрлері бойынша бақылау.
Body-limits және slowloris/oversized headers қорғанысы.
Аутентификация және қауіпсіздік
TLS 1. 3 + OCSP stapling + HSTS сыртқы фронттарда.
mTLS: әкімшілер, операциялық API, серіктестік арналар.
OAuth2/OIDC: gateway (token introspection/JWT-verify) → claims upstream.
Сервистік және серіктестік интеграциялар үшін API-кілттер/қолтаңбалар (HMAC).
WAF/бот-сүзгілер: белгі + мінез-құлық ережелері, greypass/капча.
CSP/X-Frame-Options/Referrer-Policy - шетіндегі security-тақырыптар.
Сенімділік: ретрациялар/таймауттар/СВ
Таймауттар: L4/L7 connect/read/write, бірыңғай саясат (мысалы, 'connect 500ms', 'read 3-5s' API үшін).
Ретраилер: тек демпотенттік ('GET/HEAD'), уақыт/сан бойынша лимит, 'retry-budget'.
Circuit-breaker: бір уақыттағы сұрауларға/қателерге шектеулер, жылдам істен шығу және тозу.
Outlier detection: «жаман» даналарды пулдан алып тастау.
Backoff + jitter: «табын әсерін» жасамау үшін.
Кэш және трафикті басқару
L7 кэші: статика/жартылай динамика (каталогтар, конфигалар), 's-maxage' + 'stale-while-revalidate'.
Rate-limit/Quota: IP/ASN/device/cookie бойынша, бөлінген есептеуіш (Redis/Rate-service).
Sticky-сессиялар: cookie/consistent-hash; failover және «қайта жабыстыруды» ескеріңіз.
Request collapsing (dedupe): origin бірдей GET «дауылынан» қорғау.
Хаттамалар мен ерекшеліктер
HTTP/2: мультиплексиялау, басымдықтар; сақтаңыз 'ALPN: h2'.
HTTP/3/QUIC: жоғалтуға/джиттерге төзімділік; UDP/443 ашыңыз, MTU/PMTUD бағдарламасын қадағалаңыз.
gRPC: health-checks, streaming, deadlines; 'grpc-status' проксиін қолдауы керек.
WebSocket/SSE: long-lived коннектілері, сауатты idle-таймауттар мен лимиттер.
Бақылау және SLO
Өлшемдері:- L4/L7: `p50/p95/p99`, ошибки (`4xx/5xx/Grpc-codes`), `open_conns`, `CPS/RPS`, `retry_rate`.
- TLS: нұсқа/шифрлар, p95 handshake, resumption.
- Маршруттау: route/cluster, outlier-ejections бойынша үлестер.
- Rate-limit/WAF: іске қосылу/FP-rate.
- Логи: қолжетімділік (PII жоқ), бағыттау себептері, трассалау тақырыптары.
- Трестер: 'traceparent '/B3, сэмплеу.
- p95 TTFB API ≤ 250-300 мс; L7 ≤ 0 қатесі. 5%.
- Канареялардың табысы (метриктердің тозуынсыз) ұшырулардың 99% -ын ≥.
- FP-rate WAF ≤ 0. 1%.
Үлгілік конфигалар
Nginx (reverse proxy, HTTP/2, канарейка, сығу)
nginx map $http_x_canary $upstream_pool {
default "stable";
~^1$ "canary";
}
upstream api_stable { zone zst 64k; server 10. 0. 1. 10:8443; server 10. 0. 1. 11:8443; keepalive 256; }
upstream api_canary { zone zcn 64k; server 10. 0. 2. 10:8443; keepalive 64; }
server {
listen 443 ssl http2 reuseport;
server_name api. example. com;
ssl_protocols TLSv1. 2 TLSv1. 3;
ssl_stapling on; ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=31536000" always;
basic limits/protection client_max_body_size 10m;
sendfile on; brotli on; gzip on;
location / {
proxy_http_version 1. 1;
proxy_set_header Host $host;
proxy_set_header X-Request-Id $request_id;
proxy_set_header X-Forwarded-Proto https;
proxy_connect_timeout 500ms;
proxy_read_timeout 5s;
proxy_next_upstream error timeout http_502 http_503 http_504;
proxy_next_upstream_tries 1; # Retrays are limited to proxy_pass https://api_$upstream_pool;
}
}
HAProxy (JWT-verify + mTLS бэкендке + rate-limit)
haproxy frontend fe_https bind:443 ssl crt /etc/haproxy/certs/ alpn h2,http/1. 1 http-request set-header X-Request-Id %[unique-id]
http-request lua. jwt_verify # external verification script JWT stick-table type ip size 1m expire 10m store http_req_rate (10s)
http-request deny if { src_http_req_rate(10s) gt 100 }
default_backend be_api
backend be_api balance roundrobin option httpchk GET /healthz server s1 10. 0. 1. 10:8443 check ssl verify required ca-file /etc/haproxy/ca. pem server s2 10. 0. 1. 11:8443 check ssl verify required ca-file /etc/haproxy/ca. pem
Envoy (JWT + weighted routes + outlier detection)
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 stat_prefix: ingress route_config:
virtual_hosts:
- name: api domains: ["api. example. com"]
routes:
- match: { prefix: "/" }
route:
weighted_clusters:
clusters:
- { name: api-stable, weight: 95 }
- { name: api-canary, weight: 5 }
http_filters:
- name: envoy. filters. http. jwt_authn typed_config: { "@type": type. googleapis. com/envoy. extensions. filters. http. jwt_authn. v3. JwtAuthentication }
- name: envoy. filters. http. router clusters:
- name: api-stable connect_timeout: 0. 5s type: STRICT_DNS lb_policy: ROUND_ROBIN outlier_detection: { consecutive_5xx: 3, interval: 2s, base_ejection_time: 30s }
transport_socket:
name: envoy. transport_sockets. tls
- name: api-canary connect_timeout: 0. 5s type: STRICT_DNS lb_policy: ROUND_ROBIN transport_socket:
name: envoy. transport_sockets. tls
Traefik (rule-based бағыттары, тұжырымдамасы)
yaml http:
routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1/`)"
service: api-svc tls: { certResolver: letsencrypt }
services:
api-svc:
loadBalancer:
servers:
- url: "https://10. 0. 1. 10:8443"
- url: "https://10. 0. 1. 11:8443"
Прокси өнімділігі
Бэкендерге connection pooling және keepalive, инстанцияға коннектердің лимиті
Reuseport, pin CPU/IRQ, сокеттердің жеткілікті буферлері.
TLS: ECDSA + қысқа тізбектер, resumption ≥ 70%, HTTP/2/3 қосылған.
«Ыстық» жауаптарға арналған проксидегі кэш (оның ішінде 304-валидация).
Warm-up: шыңдар алдында DNS/TLS/коннектілерді жылыту.
DR және істен шығуға төзімділік
Тозған тораптардың автожабдығы ('outlier-ejection').
Health-checks L4/L7 (HTTP body-маркер нұсқасы).
Fail-open/Fail-closed - төлем/сыни жолдар үшін саналы түрде таңдаңыз.
Трафикті жаңа қызметке ауыстыру алдында Shadow режимі.
Runbooks: «кластердің құлауы», «директорлардың ілмегі», «коннектілердің жылыстауы», «ретрайлардың дауылы».
Енгізу чек-парағы
- Стратификация: Edge → Ingress/API-GW → Mesh/Egress, рөлдері және жауапкершілік шегі.
- Бағдар саясаты: host/path/header/weight, canary/blue-green, shadow.
- Қауіпсіздік: TLS 1. 3, mTLS сезімтал жолдар, JWT/OAuth2, WAF үшін.
- Таймауттар/ретраилер/СВ: бірыңғай мәндер, теңсіздік, retry-budget.
- Кэш/Rate-limit/Request-collapsing орынды жерде.
- Бақылау қабілеті: метрика/логи/трейстер, correlation-сәйкестендіргіштер.
- SLO: p95/қателер/ресурстар; периметрлік іркілістерге алаңдар.
- IaC/GitOps: репозиторийдегі прокси конфигі, канареялық релиздер, жылдам rollback.
- Тесттер: e2e-бағыттар, chaos-сценарийлер, іс-шаралар алдындағы жүктеме.
Типтік қателер
Рөлдерді бөлусіз «сиқырлы» прокси-комбайн → күрделі RCA және жоғары blast-радиусы.
Демпотенттік емес сұрау ретрайлері → транзакция көшірмелері.
Тақырып/URL → cache-poisoning және дұрыс емес кілттер жоқ.
Sticky-сессиялар жоспарсыз failover → деградациялық инстанцияда жабысқақ.
'traceparent '/' x-request-id' → жоқ.
Прокси деңгейіндегі қатты 301/302 → «ілмектер» және API нұсқаларын бақылауды жоғалту.
iGaming/финтех ерекшелігі
Төлемдер/PSP: mTLS-мен бөлінген egress-gateway, қатаң таймауттар, демпотенттік кілттер, IP/ASN ақ тізімдері.
Шыңдар (матчтар/турнирлер): canary/weighted, боттар үшін сұр маршруттар, агрессивті GET кеші, origin «дауылдан» қорғау.
Реттеуіш/логика: саясат нұсқаларын және бағыт себептерін аудит-логтарда белгілеңіз; PII-ні барынша азайтыңыз.
Контент провайдерлері: кэш-локальдылық және тегіс тарату үшін провайдерлік кілт бойынша consistent-hash.
Шағын ойнатқыштар
1) Канар релизі API
1. 'api-canary' -де 5% салмақты қосу; 2) р95/қателер мониторингі; 3) үлесті кеңейтуге; 4) тозу кезіндегі автооткат.
2) Тозу торабын шұғыл алып тастау
1. Outlier-ejection немесе қол 'drain'; 2) кештің пулы мен хитін тексеру; 3) инциденттен кейінгі RCA.
3) Функцияны зеркалау
1. Жауаптарға әсер етпей shadow бағдарламасын қосу; 2) жауаптардың метрикасын/диффін салыстыру; 3) ауыстырып қосу туралы шешім қабылдау.
4) Ретрайлардың дауылы
1. retry-budget/уақытша лимиттерді төмендету; 2) request-collapsing қосылсын; 3) жергілікті бітеуіштер/кэш; 4) origin тұрақтандыру.
Жиынтық
Жақсы жобаланған прокси қабаты - бұл рөлдерді бөлу, детерминирленген бағыттау, сенімді саясат (таймауттар/ретраилер/СВ), қауіпсіздік (mTLS/JWT/WAF) және бақылау. Конфигурацияларды IaC-ге бекітіңіз, канареялар мен shadow-ды пайдаланыңыз, SLO-ны өлшеңіз - және сіздің платформаңыз ең ыстық шыңдалған сағаттарда да масштабталады, болжанады және қорғалады.