GH GambleHub

Odwrócony proxy i routing

1) Odwrócona rola proxy

Odwrócony proxy - „przednia linia” platformy: akceptuje TLS, dystrybuuje ruch między upstream, stosuje zasady bezpieczeństwa i wydajności. Celem jest minimalna opóźnienie, przewidywalna trasa i szybkie odizolowanie poniżających instancji/stref.

2) Warstwy i protokoły

L4: TCP/UDP proxy (SNI-based TLS passthrough, QUIC). Niska cena, bez zrozumienia HTTP.
L7: HTTP/1. 1-2-3, gRPC, WebSocket. Bogaty routing (host, ścieżka, nagłówki, pliki cookie), transformacje i pamięć podręczną.

Model TLS: zakończyć na obwodzie (NGINX/Envoy), wewnątrz - mTLS/mesh. SNI umożliwia wirtualne hosty na tym samym IP.

3) Strategie routingu (L7)

1. Hosta: według domeny ('api. marki. com '→ cluster' marka-api ').
2. Ścieżka: '/v1/payments '→' payments-svc', '/v1/wallets '→' portfele-svc'.
3. Na podstawie nagłówka: „X-Region: eu-central”, „X-Najemca: 42”, „User-Agent ”/„ Accept”.
4. Oparte na plikach cookie: testy A/B, sesje lepkie.
5. Ważony/Kanaryjski: procent ruchu do nowej wersji (1-5% → 100%).
6. Geo/ASN: według kraju/ASN wysłany do najbliższego POP/region.
7. Konsekwentne hashing: powiązanie klucza (user_id/tenant_id) z instancją → lokalizacja pamięci podręcznej/lepkość.
8. Shadow/Mirroring: kopiowanie ruchu do „cienia” w górę strumienia bez wpływu na odpowiedź (w przypadku testów regresji).

4) Wyważenie i tolerancja uszkodzeń

Algorytmy: round-robin, least-request, random, ring-hash (consistent).
Kontrole zdrowotne: aktywne (HTTP/TCP) + pasywne (kodami/terminami).
Wyrzut zewnętrzny: tymczasowo „knock out” host ze zwiększonym błędem/opóźnieniem.
Ponowne próby: ograniczone, z wypróbowaniem czasu i jitterem; nie wycofywać niebezpiecznych metod bez idempotencji.
Łączenie połączeń: zachować ciepłe baseny do góry rzeki, ograniczyć wzloty.

5) Wydajność obwodu

Buforowanie: za pomocą klawisza (metoda + host + ścieżka + Vary), warunków 'ETag/If-None-Match', TTL i stale-while-revalidate.
Kompresja: brotli/gzip dla odpowiedzi tekstowych.
HTTP/2/3: multipleksowanie, kompresja nagłówka; Sprawdź zgodność WAF/IDS.
Żądanie koalescingu - Załamać równoległe żądania dla tego samego klucza pamięci podręcznej.

6) Bezpieczeństwo na serwerze proxy

TLS: 1. 2 + (lepszy niż 1. 3), zszywanie OCSP, HSTS.
Filtry WAF/bot: przed routing do aplikacji.
CORS/CSP/Fetch-Metadane: zgodnie z polityką.
Nagłówek-мибиена: "X-Forwarded-For/Proto", "Forwarded", "Traceparent'; wtrysk nagłówka i zabezpieczenie przed nadmiernym rozmiarem.
Limity ciała/nagłówków: wczesne 413/431 dla wzorów DoS.
mTLS dla integracji partnerów i wewnętrznych interfejsów API.

7) Programy wdrażania: kanaryjski/niebiesko-zielony/wersje

Ważony poziom routingu на-7 (1%, 5%, 25%, 50%, 100%).
Brama nagłówka: włącz funkcję według flagi/nagłówka (wewnętrzna/testowa).
Niebiesko-zielony: pełny przełącznik DNS/trasy, szybki zwrot.
Cień: równoległy przebieg nowej wersji z wpisem mierników/kłód.

8) Lepkie sesje i routing hash

Lepkość plików cookie ('Set-Cookie: SRV = shard-a; Ścieżka =/; Tylko ') dla obciążeń statecznych.
Ring-hash/consistent by 'user _ id/tenant _ id' - reduce cache cross-disabilities.
Uwaga: unikać „wiecznej” lepkości dla zapisu ładunków → hot-spot; Użyj lokatora kwot.

9) Trasa regionalna i geograficzna

Anycast + geo-DNS, aby wybrać najbliższy POP.
Nadmiar nagłówka (na przykład „X-Region”) do testów i debugowania.
Koordynacja z legalnie wymaganą lokalizacją danych (trasa według regionu/jurysdykcji).

10) Obserwowalność i kontrola

Wskaźniki RED: RPS, prędkość błędów (według klas), opóźnienie p95/p99 na trasę/klastra.
Stan zewnętrzny/stan zdrowia: liczba edycji/rekrutacji, tempo powolnego wywoływania.
Kłody: ustrukturyzowane, bez PII; korelacja 'trace _ id'/' span _ id'.
Odwzorowanie (OTel): spans ingress → router → upstream; przykłady na wykresach p99.

11) Przykłady konfiguracji

11. 1 NGINX: host/ścieżka/ważony + kka

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 Wysłannik: header-routing, canary, outlier-ejection, lustering

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: zasady + oprogramowanie pośrednie

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 + manifest dla kanarka (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) Przekształcenia i kompatybilność

Normalizacja nagłówków/ścieżek, spis lokalizacji, kontrola Cache-Control.
gRPC z HTTP/JSON za pośrednictwem tłumaczy (grpc-json-transcoder).
Uaktualnienia WebSocket/HTTP2 - upewnij się, że serwer proxy pomija 'Upgrade '/' Connection'.

13) Scenariusze testowania i chaosu

Załadunek: wybuchy, długi płaskowyż, „długie” ciała (slow-POST).
Wtrysk opóźnienia/straty do góry strumienia → ponowne próbowanie/wyczucie czasu/kontrola zewnętrzna.
Metryka kanaryjska: p95/p99, szybkość błędów nowej wersji vs stare; automatyczny zwrot przez SLO.
Cień: porównanie odpowiedzi (pobieranie próbek) i logiki obok siebie.

14) Antypattery

Globalne rekolekcje z wyłączeniem idempotencji i terminu → podwójne i burza.
Lepkie sesje bez sterowania gorącymi strzałami → skew obciążenia.
Brak kontroli zdrowotnych/wytrysku z zewnątrz → „zgniłe” przypadki w basenie.
Nieograniczone nagłówki/ciała → najprostszy DoS.
Mieszanie transformacji i bezpieczeństwa bez wersji schematu → nieoczekiwane regresje.
Pojedynczy globalny pamięć podręczna bez 'Vary' → błędne odpowiedzi.

15) Szczegóły dotyczące iGaming/Finance

Regionalność: routing według gracza/jurysdykcji marki; izolacja stref płatniczych.
Drogi krytyczne (depozyty/wyjścia): krótkie czasy, jedno powtórzenie, idempotencja; pojedyncze skupiska.
PSP/KYC: dedykowane baseny upstream, ścisłe zasady retry/timeout, circuit-breaker, geo-pins.
kanały AB: bezpieczne eksperymenty z płatnościami/limitami tylko dla ścieżki odczytu; pisać - poprzez flagi i małe procenty.

16) Lista kontrolna gotowości Prod

  • TLS 1. 2+/1. 3, zszywanie OCSP, HSTS; poprawne 'X-Forwarded-'.
  • Jasne zasady routingu: host/path/header/cookie; dokumentację.
  • Kontrole zdrowotne, wyrzucanie na zewnątrz, wypróbowywanie czasu na próbę, przekaźniki ograniczone.
  • Ważony/kanaryjski + cień; auto-rollback przez SLO/alert.
  • Pamięć podręczna/kompresja/ETag; granice nadwozia/nagłówków; zażądać koalescencji.
  • Kłody/ścieżki z "trace _ id'; RED + wskaźniki zewnętrzne/zdrowotne; deski rozdzielcze na trasę/klaster.
  • Filtry WAF/bot/CORS; zbyt duża i powolna ochrona POST.
  • Sklejone/spójne hashing w razie potrzeby; Sterowanie na gorąco.
  • Konfiguracje są wersjonowane, migracje są bezpieczne, sekrety w KMS/Vault.

17) TL; DR

Zakończ TLS na obwodzie i trasę do L7 poprzez host/path/header/cookie. Do zwolnień - ważone kanarka i cień; w przypadku stabilności - kontrole zdrowotne, wytryskiwanie na zewnątrz, ograniczone ponowne próby z wyprzedzeniem na próbę. Użyj pamięci podręcznej, kompresji i spójnego hashingu, gdzie poprawia p95. Zmierz sygnały RED i status klastra, trzymaj WAF i limity rozmiarów. Dla krytycznych tras płatniczych - oddzielne klastry, krótkie SLA i ścisłe zarządzanie retras/idempotency.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.