საპირისპირო მარიონეტული და მარშრუტიზაცია
1) საპირისპირო მარიონეტების როლი
შებრუნებული მარიონეტული - პლატფორმის „წინა ხაზი“: იღებს TLS- ს, ანაწილებს ტრეფიკს აფსიდებს შორის, იყენებს უსაფრთხოებისა და შესრულების პოლიტიკას. მიზანია მინიმალური ლატენტობა, პროგნოზირებადი მარშრუტიზაცია და დეგრადირებული ინსტანციების/ზონების სწრაფი იზოლაცია.
2) ფენები და ოქმები
L4: TCP/UDP proxy (SNI-based TLS passthrough, QUIC). დაბალი ფასი, HTTP გაგების გარეშე.
L7: HTTP/1. 1–2–3, gRPC, WebSocket. მდიდარი მარშრუტიზაცია (host, path, headers, cookies), ტრანსფორმაციები და ქეში.
TLS მოდელი: დაიკარგეთ პერიმეტრზე (NGINX/Envoy), შიგნით - mTLS/mesh. SNI საშუალებას აძლევს ვირტუალურ მასპინძლებს ერთ IP.
3) მარშრუტიზაციის სტრატეგიები (L7)
1. Host-based: დომენში ('app. brand. com '- მტევანი' brand-ap').
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 ტესტები, „წებოვანი“ სესიები.
5. Wighted/Canary: ტრეფიკის პროცენტი ახალ ვერსიაზე (1-5% 100%).
6. Geo/ASN: ქვეყანაში/ASN ჩვენ ვუგზავნით უახლოეს ROP/რეგიონში.
7. Consistent hashing: ღილაკის აკრეფა (user _ id/tenant _ id) ინსტანციამდე - ქეში-ლოკალიტი/წებოვანი.
8. Shadow/Mirroring: ჩვენ კოპირებას ვაძლევთ ტრაფიკს „ჩრდილის“ აფსიდზე პასუხზე გავლენის გარეშე (რეგრესიის ტესტებისთვის).
4) დაბალანსება და წინააღმდეგობა
ალგორითმები: round-robin, least-request, random, ring-hash (consistent).
ჯანმრთელობის შემოწმებები: აქტიური (HTTP/TCP) + პასიური (კოდებით/ტაიმაუტებით).
Outlier Ejection: დროებით „დაარტყა“ მასპინძელი გაზრდილი შეცდომით/ლატენტობით.
Retries: შეზღუდული, per-try timeout და jitter; ნუ დახარჯავთ სახიფათო მეთოდებს იდემპოტენტურობის გარეშე.
კავშირი აუზი: შეინახეთ warm აუზები აფსიდებისთვის, შეზღუდეთ სიმაღლეები.
5) პერიმეტრის შესრულება
ქეშირება: გასაღები (method + host + path + Vary), პირობები 'ETag/If-None-Match', TTL და stale-while-revalidate.
კომპრესია: brotli/gzip ტექსტური პასუხებისთვის.
HTTP/2/3: მულტიპლექსაცია, header-compression; დარწმუნდით WAF/IDS თავსებადობის შესახებ.
Request coalescing: პარალელური თხოვნების დაჭერა იმავე ქეშის ღილაკზე.
6) მარიონეტული უსაფრთხოება
TLS: 1. 2 + (უკეთესია, ვიდრე 1. 3), OCSP stapling, HSTS.
WAF/bot ფილტრები: app მარშრუტიზაციამდე.
CORS/CSP/Fetch-Metadata: პოლიტიკოსების მიხედვით.
Header-гигиена: `X-Forwarded-For/Proto`, `Forwarded`, `traceparent`; დაცვა header-injection და oversize.
Body/headers limits: ადრეული 413/431 DoS ნიმუშებისთვის.
mTLS პარტნიორობისა და შიდა API- სთვის.
7) დამატებითი სქემები: canary/blue-green/ვერსიები
Weighted routing на level-7 (1%, 5%, 25%, 50%, 100%).
Header-gate: ჩართეთ ფიჩი დროშის/სათაურის გასწვრივ (internal/testing).
Blue-green: მთლიანად DNS/route გადართვა, სწრაფი rollback.
Shadow: ახალი ვერსიის პარალელური პროგონი მეტრული/ლოგოების ჩაწერით.
8) Sticky სესიები და hash მარშრუტიზაცია
Cookie-stickiness (`Set-Cookie: SRV=shard-a; Path=/; Only ') stateful დატვირთვისთვის.
Ring-hash/consistent 'user _ id/tenant _ id' - ქეში შეზღუდული შესაძლებლობის მქონე ჯვრის შემცირება.
გაფრთხილება: თავიდან აიცილოთ „მარადიული“ წებოვანი დატვირთვა hot-spot; გამოიყენეთ კვოტის პირველი ტენანტი.
9) რეგიონალური და გეო მარშრუტიზაცია
Anycast + geo-DNS აირჩიოს უახლოესი POP.
Header-override (მაგალითად, 'X-Region') ტესტებისა და გამართვისთვის.
კოორდინაცია მოახდინეთ საკანონმდებლო საჭირო ლოკალიზაციასთან (რეგიონის/იურისდიქციის მარშრუტი).
10) დაკვირვება და კონტროლი
მეტრიკა RED: RPS, error-rate (კლასებში), latency p95/p99 per-route/cluster.
Outlier/health: edgects/განმეორებითი ჩანართების რაოდენობა, slow-call-rate.
ლოგოები: სტრუქტურირებული, PII- ის გარეშე; კორელაცია 'trace _ id '/' spank _ id'.
ტრეისი (OTel): სპილენძის სპილენძი - router - upstream; exemplars გრაფიკებზე p99.
11) კონფიგურაციის მაგალითები
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 + მანიფესტი კანისთვის (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) ტრანსფორმაციები და თავსებადობა
სათაურების/ტრასების ნორმალიზება, აღწერილობა „ლოკაცია“, მენეჯმენტი 'საკონტროლო'.
GRPC არის HTTP/JSON თარჯიმნების საშუალებით (grpc-json-transcoder).
WebSocket/HTTP2 upgrades: დარწმუნდით, რომ მარიონეტული გამოტოვებს 'Upgrade '/' Connection'.
13) ტესტირება და ქაოსის სცენარები
დატვირთული: ბუჩქები, გრძელი პლატოები, „გრძელი“ სხეულები (slow-POST).
შეფერხებების/ზარალის ინექცია - retries/timeout/outlier შემოწმება.
კანარის მეტრიკა: p95/p99, error-rate ახალი ვერსია ძველი; ავტომატური rollback SLO.
Shadow: პასუხების შედარება (ნიმუშები) და side-by-side-logics.
14) ანტიპატერები
გლობალური რეაგირება, იდემპოტენტურობისა და ვადაგადაცილების გამოკლებით, ორმაგი და ქარიშხალი.
Sticky სესიები „ცხელი“ ხუმრობების კონტროლის გარეშე - დატვირთვა.
Health checks/outlier-ejection- ის არარსებობა არის „დამპალი“ ინსტანციები აუზში.
შეუზღუდავი სათაურები/სხეულები - უმარტივესი DoS.
ტრანსფორმაციებისა და უსაფრთხოების ნაზავი სქემების ვერსიის გარეშე არის მოულოდნელი რეგრესიები.
ერთი გლობალური ქეშის გასაღები 'Vary' - ს გარეშე არასწორი პასუხებია.
15) iGaming/ფინანსების სპეციფიკა
რეგიონალურობა: მარშრუტიზაცია მოთამაშის/ბრენდის იურისდიქციით; გადახდის ზონების იზოლაცია.
კრიტიკული მარშრუტები (დეპოზიტები/დასკვნები): მოკლე ტაიმაუტები, ერთი გამეორება, იდემპოტენტობა; ცალკეული მტევანი.
PSP/KYC: იზოლირებული upstream აუზები, მკაცრი პოლიტიკოსები retry/timeout, circuit-breaker, geo-pins.
AB არხები: უსაფრთხო ექსპერიმენტები გადახდებით/ლიმიტებით მხოლოდ read ბილიკისთვის; write - დროშებითა და მცირე პროცენტით.
16) მზადყოფნის სიის სია
- TLS 1. 2+/1. 3, OCSP stapling, HSTS; სწორი 'X-Forwarded-'.
- მარშრუტიზაციის მკაფიო წესები: host/path/header/cookie; დოკუმენტაცია.
- ჯანმრთელობის შემოწმებები, outlier ejection, per-try timeout, შეზღუდული ჭრილობები.
- Weighted/canary + shadow; ავტო-როლბაკი SLO/ალერტებისთვის.
- კეში/კომპრესია/ETag; body/headers limites; request coalescing.
- logs/trace 'id'; მეტრიკა RED + outlier/health; დაშბორდები per route/cluster.
- WAF/bot ფილტრები/CORS; დაცვა oversize და slow-POST.
- sticky/consistent hashing იქ, სადაც საჭიროა; ცხელი ხარდიების კონტროლი.
- კონფისკაციები განახლებულია, მიგრაცია უსაფრთხოა, საიდუმლოებები KMS/Vault- ში.
17) TL; DR
გახეხილი TLS პერიმეტრზე და გადააკეთეთ L7- ზე host/path/header/cookie. გამოშვებისთვის - შაბათ-კვირას და shadow; სტაბილურობისთვის - health checks, outlier ejection, შეზღუდული retries per-try timeout- ით. გამოიყენეთ ქეში, შეკუმშვა და შეკუმშვა, სადაც ის აუმჯობესებს p95. გაზომეთ RED სიგნალები და მტევნების მდგომარეობა, შეინარჩუნეთ WAF და ზომების ლიმიტები. კრიტიკული საგადახდო გზებისთვის - ინდივიდუალური მტევანი, მოკლე SLA და მკაცრი რეაგირება/idempotenty.