Proxy շերտեր և reverse-միկրոօրգանիզացիա
Live ռեզյումե
Համակարգային շերտը պլատֆորմի «առջևի անվադողերն» է, այն ավարտում է TFC-ն, վստահեցնում հաճախորդներին, բաժանում է հաճախորդներին, հարթեցնում է պիկաները և արտադրում անվտանգ (կանարեյներ, կապույտ-գրեեն)։ Հասունության նվազագույն շարքը 'դիֆերենցիալ-դերերի հստակ ստրատիֆիկացիան, ուղղման դետերմինացված կանոնները, թայմաուտների/ռետրերի վերահսկումը, քեշ + rate-limit, դիտման և ավտոմատացման միջոցով։
Տաքսոնոմիա
Forward proxy-ը հաճախորդների/ծառայությունների ելքն է (egress), ֆիլտրերը/հացահատիկը, DLP-ը։
Reverse proxy - ընդունում է արտաքին հարցումները և ուղղորդում է backends (մեր հիմնական ֆոկուսը)։
Շերտերը պրդ-կոնտուրայում
1. Edge/CDN/WAF (Anycript, բոտ ֆիլտրեր, քեշ)
2. L7 Ingress/API-gateway (միկրոակտիվացում, վավերացում, քաղաքականություն)
3. Ծառայության շերտը/Mesh (sidecar) east-west, mTSA և retrav
4. Egress-gateway-ը ելքային ինտեգրման համար (PSA, գործընկերներ)
Միկրոակտիզացիա (L4/L7) և ալգորիթմներ
L4 (TCP/UDP, passthrough TSA) 'նվազագույն ուշացում, առանց HTTP հասկանալու։
L7 (HTTP/1. 1, HTTP/2, HTTP/3/gRPC) 'կանոններ host/path/header/cookie, փոխակերպում, WAF, kash։
Ալգորիթմներ
Round-robin/Least-connections/EWMA-ը ընդհանուր դեպքեր են։
Consistent-hash (cookie/wwww.ru) - sticky-նստաշրջան և քեշ-տեղություն։
Header-/Geo-/Latency-based - targeting տարածաշրջաններում/պրովայդերներ, արագ PoP։
Canary/Weighted-ը հիբրիդային rollout (5-25-50-100%)։
Shadow/Mirroring-ը նոր ծառայության վրա կոդավորման պատճենն է առանց պատասխանների ազդեցության։
Հարցումների/պատասխանների փոխակերպում
URREWRITE/redir.ru: Ուղիների միավորում, տարբերակումը («/v1/2019/svc/v1/»)։
Վերնագրեր 'նորմալացրեք' X-Forwarded-For/Systo/Host ", ավելացրեք" traceparent "/" x-request-id ", ֆիլտրեք ավելին։
MSS/CSRF 'կենտրոնացրեք gateway-ում, մի՛ պտուղ յուրաքանչյուր ծառայության մեջ։
Compression/Decompression: Brotli/gzip, վերահսկողություն տիպերի վրա։
Body-limits-ը և պաշտպանությունը slowloris/oversized headers-ից։
Վավերացում և անվտանգություն
TLS 1. 3 + OCMS stapling + HSTS արտաքին ճակատներում։
MTSA 'adminks, API վիրահատական ալիքներ, գործընկերային ալիքներ։
OAuth2/OIDC: Հեղինակային իրավունքը gateway (token introsport/JWT-verify) միջոցով կատարվում է upstream claims։
API-բանալիներ/ստորագրություններ (HMAC) 'պարուրաձև և ինտեգրման համար։
WAF/բոտ ֆիլտրեր 'ազդանշաններ + վարքագծային կանոնները, greypass/գլխարկ։
CSP/X-Frame-Options/Referrer-Policy-ը տարածաշրջանի նախկին վերնագրեր են։
Իսպանիա ՝ retrai/timauta/TASS
Թայմաուտները ՝ connational/read/write L4/L7, մեկ քաղաքականություն (օրինակ ՝ «connational 500.1», «read 3-5s» API-ի համար)։
Retrai: Միայն idempotent («GET/HEAD»), ժամանակի սահմանափակում/քանակով, «retry-budget»։
Circuit-breaker 'սահմանափակումներ միաժամանակ հարցումների/սխալների, արագ մերժման և քայքայման վրա։
Medier detics: բացառություն «վատ» պուլից։
Backoff + jitter: Որպեսզի չստեղծենք «հոյակապ ազդեցություն»։
Քեշը և գյուղի կառավարումը
Քեշ L7: Ստատիկա/կիսագնդեր (www.i), «s-maxage '+ 'stale-while-revalidate»։
Rate-limit/Delta: IP/ASN/device/cookie, բաշխված հաշվիչ (Redis/Rate-2019)։
Sticky-նստաշրջաններ 'cookie/consistent-hash; հաշվի առեք failover և «փոխպատվաստում»։
Request collapsing (dedube) 'origin պաշտպանությունը «փոթորիկից» նույնական GET-ից։
Արձանագրություններ և առանձնահատկություններ
HTTP/2 'բազմաբնույթ, գերակայություններ; պահեք 'ALPN: h2'։
HTTP/3/QUIC 'կորստի դիմադրություն/ջիտթեր; Բացեք UDP/443, հետևեք MTU/PMTUD-ին։
gRPC: health-checks, streaming, deadlines; պետք է աջակցեն «grpc-status»։
Socket/SSE: long-lived կոնեկտներ, idle-timauts և limits։
Դիտարկումը և SLO
Մետրիկները
L4/L7: `p50/p95/p99`, ошибки (`4xx/5xx/Grpc-codes`), `open_conns`, `CPS/RPS`, `retry_rate`.
TFC: տարբերակը/ծածկագրերը, p95 handshake, resumption։
Միկրոակտիզացիա 'rome/cluster, medier-ejections։
Rate-limit/WAF: Գործիքներ/FP-rate։
Լոգներ ՝ հասանելիություն (առանց PII), ուղղման պատճառները, ուղու վերնագրերը։
Թրեյզներ ՝ «traceparent »/B3, sempling։
SLO (օրինակներ)
P95 TTFB API 24250-300 ms; L7 240 սխալը։ 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 + mTSA բեքենդին + 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"
Շարժիչի արտադրողականությունը
Connational pooling-ը և keepalive-ը backends-ի, instans-ի վրա կոննեկտների սահմանափակում։
Reuse.ru, pin CPU/IRQ, բավարար գանձեր։
TFC: ECDPS + կարճ շղթաներ, resumption 2470 տոկոսը, HTTP/2/3 ներառված են։
Քեշը «տաք» պատասխանների համար (ներառյալ 304-վալիդացիան)։
Warm-up: տաքացնելով IV/TSA/կոնեկտները գագաթների առջև։
DR և անկայունություն
Դեգրադային հանգույցների արագությունը («www.ier-ej.ru»)։
Health-winks L4/L7 (HTTbody-marker)։
Fail-open/Fail-closed - ընտրեք գիտակցաբար էքսպորտային/քննադատական ճանապարհների համար։
Shadow-ռեժիմը մինչև նոր ծառայության անցումը։
Runbooks: «Runbooks», «Redirets», «կոննեկտների արտահոսք», «ռետրերի փոթորիկ»։
Ներդրման թուղթ
- Ստրատիֆիա: Edge no Ingress/API-GW no Mesh/Egress, դերի և պատասխանատվության սահմանները։
- Ուղղորդման քաղաքականություն ՝ host/path/header/weight, canary/blue-green, shadow։
- Անվտանգություն: TFC 1։ 3, mTFC զգայուն ճանապարհների համար, JWT/Outh2, WAF։
- Timauts/retrai/RNA 'միասնական արժեքներ, գաղափարախոսություն, retry-budget։
- Քեշ/Rate-limit/Request-collapsing այնտեղ, որտեղ տեղին է։
- Դիտարկումը 'մետրիկներ/լոգներ/թրեյզներ, www.relation-ազդանշաններ։
- SLO: r95/սխալներ/ռեսուրսներ; ալտերտերը պարագծային ձախողումների վրա։
- IaC/GitOps: Reporatoria-ը, canared-ը, արագ rollback-ը։
- Թեստեր ՝ e2e երթուղիներ, chaos-սցենարներ, որոնք բեռնված են ivents։
Տիպիկ սխալներ
«Կախարդական» կոմբայնը առանց դերերի բաժանման բարդ RCA-ն է և բարձր բլոկային շառավիղը։
Repray-ը ոչ idempotent հարցումների համար բացատրում է գործարքների կրկնօրինակները։
Վերնագրերի նորմալացում չկա/UR.cache-poisoning և սխալ բանալիներ։
Sticky-նստաշրջանը առանց failover պլանների բացատրվում է դեգրադային ինստանի վրա։
«Traceparent »/« x-request-id» -ի բացակայությունը անհնար է լուծել խնդիրները։
Կոշտ 301/302 մակարդակում ռուսական «petli» և API տարբերակների վերահսկման կորուստ։
Հատուկ iGaming/fintech համար
Վճարումները/PSA: ընտրված egress-gateway mTSA-ից, խիստ թայմաուտները, idempotent բանալիները, IP/ASN-ի սպիտակ ցուցակները։
Պիկի (խաղեր/մրցույթներ) 'canary/weighted, բոտերի համար մոխրագույն երթուղիներ, ագրեսիվ kes GET, պաշտպանություն origin «փոթորիկից»։
Կարգավորող/տրամաբանությունը 'գրանցեք քաղաքական և աուդիտի պատճառները։ նվազագույնի հասցրեք PII-ը։
Բովանդակության պրովայդերները 'consistent-hash, պրովայդերական բանալին քեշի տեղանքի և հավասարաչափ բաշխման համար։
Մինի պլեյբուկները
1) API-ի Կանարյան թողարկումը
1. Ներառել քաշի 5 տոկոսը 'api-canary'; 2) wwww.r95/սխալներ; 3) ընդլայնել մասնաբաժինը. 4) ավտոտկատը քայքայման ժամանակ։
2) Քայքայված հանգույցի արտակարգ վերացումը
1. Medier-ej.ru կամ ձեռքով 'windain "; 2) փամփուշտի և հիթերի հիթերի ստուգումը. 3) հետպատերազմյան RCA-ն։
3) Գործառույթի հացահատիկ
1. Միացրեք shadow առանց պատասխանների ազդեցության; 2) համեմատել մետրերը/պատասխանները։ 3) որոշում կայացնել տեղափոխման մասին։
4) Գետերի փոթորիկ
1. Նվազեցնել retry-budget/ժամանակավոր լիմիտները։ 2) միացրեք request-colapsing; 3) տեղական փակուղիները/քեշը; 4) կայունացնել origin։
Արդյունքը
Լավ նախագծված ֆիլտրը դերերի բաժանումն է, դետերմինացված միկրոօրգանիզացիան, հուսալի քաղաքականությունները (Timauts/retrai/III), անվտանգությունը (mTFC/JWT/WAF) և դիտարկումը։ Միացրեք կազմաձևերը IaC-ում, օգտագործեք canaraks և shadow, չափեք SLO-ը, և ձեր պլատֆորմը կլինի մեծացված, կանխատեսելի և պաշտպանված նույնիսկ տաք գագաթնակետին։