Բեռի հավասարակշռումը և failover
Բեռի հավասարակշռությունը և failover
1) Նպատակներն ու տերմինները
Հավասարակշռությունը բաժանում է պարամետրերի/գոտիների/տարածաշրջանների միջև արտադրողականության և կայունության համար։
Failover-ը կառավարվող փոխանցումն է, երբ մերժվում է։
RTO/RPO 'վերականգնման նպատակային ժամանակը և տվյալների թույլատրելի կորցումը։
SLO 'հասանելիության/լատենտության ստանդարտ մակարդակ; ծառայում է որպես «դարպաս» ավտոմատ կեղծարարի և արձագանքման համար։
2) Հավասարակշռության շերտերը
2. 1 L4 (TCP/UDP)
Պլյուսներ 'արտադրողականություն, պարզություն, TMS passthrough։ Մինուսներ 'բացակայում է հասկանալը/կտորները։
Օրինակներ ՝ NLB/GLB, HAProxy/Envoy L4, IPVS։
2. 2 L7 (HTTP/gRPC)
Պլյուսներ 'երթուղայնացում/հեդերներ, կանարյան քաշներ, sticky։ Մինուսներ 'ավելի թանկ է CPU/լատենտ։
Օրինակներ ՝ NGINX/HAProxy/Envoy/Cloud ALB/API Gateway։
2. 3 Գլոբալ մակարդակ
III/GSLB: health-winks + geo/կշռված պատասխանը։
Anycom/BGP: մեկ IP ամբողջ աշխարհում, մոտակա անոնսի կետը։
CDN/Edge: kes/feilover պարագծի վրա։
3) Բաշխման ալգորիթմներ
Round-robin/weighted-ը հիմնական է։
Least connections/latency-ը «ծանր» հարցումների համար է։
Consistent hashing-ը բանալին (user/tenae) առանց կենտրոնային նստաշրջանի։
Hash-based delality-ը քեշի և stateful-ծառայությունների համար է։
4) Նստաշրջաններ և սոսինձ (sticky)
Cookie-sticky: L7 LB-ը տեղադրում է cookie-ը կիսագնդի համար։
Disc-IP sticky: L4-ում ավելի վատ է NAT/CGNAT-ի դեպքում։
Consistent hashing 'ավելի լավ է հորիզոնական քեշի/չաթի համար։
A.r. հնարավորության դեպքում կատարեք stateless ծառայությունը, հակառակ դեպքում, ձեր վիճակը (Redis/DB), որպեսզի պարզեցնեք failover-ը։
5) Lenta.ru: health-winks և հեռացումը տարհանումից։
Actions: HTTP 200/խորը բիզնեսի փորձարկումներ (օրինակ ՝ «/healthz/withdr.ru »կախվածությամբ)։
Passive (wwww.ier det.ru): Backends ejection 5x/timauth-ում։
Warm-up 'նոր instans (slow-start) լողացող ստանդարտ։
Graceful intain: հեռացնել փամփուշտից, որպեսզի սպասենք հարցումների ավարտին։
NGINX (օրինակ)
nginx upstream api {
zone api 64k;
least_conn;
server app-1:8080 max_fails=2 fail_timeout=10s;
server app-2:8080 max_fails=2 fail_timeout=10s;
keepalive 512;
}
proxy_next_upstream error timeout http_502 http_503 http_504;
proxy_next_upstream_tries 2;
Envoy www.ier det.ru (հատված)
yaml outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50
6) Ձախողումների կառավարում ՝ timeout/retry/circuit-breaking
Timeouts: ավելի կարճ, քան հաճախորդի թայմաուտը։ տալ per-rome։
Retries: 1-2 ջիթերի և կուռքերի հետ։ հոսանքի արգելքը POST-ի վրա առանց շարունակականության։
Circuit breaker 'միաժամանակ հարցումների/սխալների սահմանափակումը։ «կիսաթափանցիկ» վերականգնումը։
Budgets: Retrav/Bursts միաձուլումը, որպեսզի չլինի www.f-DDOS։
7) Kubernetes-pattern-ը
ClusterIP/NodePox/LoadBalancer/Ingress - հիմնական պրիմիտիվներ։
Readiness/Liveness: International միայն պատրաստի պոդների վրա։
PodPortrupics Budget-ը 'հակառակը N կրկնօրինակը։
HPA/WPA-ն 'CPU/RED մետրերի մեծացումը, LB-ի միացումը։
DirecTopology/Topology Ault Hinault: տարածքը։
Deltype = LoadBalancer (zonal): Առնվազն երկու կրկնօրինակներ յուրաքանչյուր AZ-ում։
Քննադատական մրցույթի համար readiness-ի օրինակ
yaml readinessProbe:
httpGet: { path: /healthz/dependencies, port: 8080 }
periodSeconds: 5 failureThreshold: 2
8) Քրոս-գոտին և Քրոս-105-ը։
Multi-AZ (տարածաշրջանի ներսում), բաժանեք միատեսակ (zonal LB), պահպանեք սինխրոն կրկնօրինակները։
Multi-region:- Active-Action-ը 'երկու տարածաշրջանները ծառայում են զբոսաշրջիկներին։ ավելի բարդ է, անհրաժեշտ է կրկնօրինակել տվյալները, համակարգել և ուղղել աշխարհագրությունը։
- Active-Passive: հիմնական տարածքը սպասարկում է, պահուստը «տաք/տաք/սառը» է։ Ավելի հեշտ է, ավելի արագ, բայց RPO-ից բարձր։
GSLB ռազմավարությունը
Geo-IV (ամենամոտ տարածքը)։
Weighted III (kanaraks/վերաբաշխում)։
Latency-based (RTT չափումներ)։
Failover = առողջության/հասանելիության ազդանշանների վրա (probes մի քանի vantage կետերից)։
9) Տվյալները և failover
Քաշ/սթեյթ 'հնարավորության դեպքում' տեղական; Active-Action-ի համար - CRDT/կոնսիստենտ հեշեր։
ԲԴ
Սինխրոն կրկնօրինակումը = ցածր RPO, ավելի բարձր լատենտություն։
Ասինխրոն = ավելի ցածր լատենտ, բայց RPO> 0։
Գծեր ՝ հացահատիկ/բազմաբնույթ կացիններ; իրադարձությունների կրկնապատկումը։
Նախագծեք գործողությունների և replay-մեխանիկայի համադրելիությունը։
10) Պարիմետրը ՝ RF/Anycrim/BGP/CDN
CSA: կարճ TTL (30-60s) + health-winks ձեր ցանցից դուրս։
Anycase: մի քանի ROR 'ov մեկ IP-ով, ամենամոտ վերցնում է գրանցումը, ֆեյլերը ուղղության մակարդակում։
CDN/Edge: Քեշը և «դարպասը» պաշտպանության համար, ստատիկան/մեդիան սպասարկվում են origin անկման ժամանակ։ origin-shield + пер-POP health.
11) Միգրացիայի նմուշները
HAProxy L7:haproxy defaults timeout connect 2s timeout client 15s timeout server 15s retries 2 option redispatch
backend api balance leastconn option httpchk GET /healthz/dependencies http-check expect status 200 server app1 app-1:8080 check inter 5s fall 2 rise 2 slowstart 3000 server app2 app-2:8080 check inter 5s fall 2 rise 2 slowstart 3000
NGINX sticky по cookie:
nginx upstream api {
hash $cookie_session_id consistent;
server app-1:8080;
server app-2:8080;
}
Envoy retry/timeout (route):
yaml route:
timeout: 2s retry_policy:
retry_on: 5xx,connect-failure,reset num_retries: 1 per_try_timeout: 500ms
12) Ավտոմատ failover 'ազդանշաններ և խաղեր
Այդ SLI: 5xx-rate, p95/p99, saturation, TMS, TCP resets։
Բիզնես-SLI 'դեպոզիտների հաջողությունը/2019, PSA-ի ոչ պաշտոնական սխալներ։
Գեյթ 'երբ ավելի բարձր է շեմերը, անջատեք գոտին/ինստան, բարձրացրեք կայուն փամփուշտի քաշը, փոխեք GSLB-ը։
Runbook: Քայլող հրահանգներ ռուսական և ռուսական (rollback)։
13) Թեստեր և թեստեր (chaos & game-days)
Chaos-թեստեր 'AZ/տարածաշրջանների անջատումը, BD/kash քայքայումը, packet-loss սիմուլյացիան։
Game-day: Ուսումնամարզական ֆեյլեր, որը մասնակցում է on-call թիմերին։
Ախտորոշումը 'պարագծից մինչև բեկենդներ, ռելիզի և մետրի համեմատություն։
14) Անվտանգություն և ընկերակցություն
MTSA-ի միջև LB-ի միջև տեղադրված ծառայություններ, WAF/Rate limits պարագծի վրա։
Մերժման/սեգմենտացիայի գոտիները 'blast-radius մեկուսացումը։
Քաղաքական գործիչները 'միայնակ հրաժարվելու կետերի արգելքը (SPOF), «Նվազագույն N կրկնօրինակման/AZ» պահանջները։
15) Anti-patterna
Մեկ LB/մեկ տարածք ամբողջ prod-2019 համար (SPOF)։
Խորը ստուգման բացակայությունը '/healthz '(կանաչ, բայց BD/հերթը անհասանելի է)։
Repray առանց idempotenty-ը բացատրում է վիրահատությունների/վճարումների դուբլը։
Sticky per IP-ը զանգվածային NAT-ի ժամանակ անհավասարակշռում է։
MS-ֆեյլերը բարձր TTL-ով (ժամացույց մինչև 105)։
Ոչ մի graceful international-ի դեպքում 'հարցումների բացը։
16) Chek-Show-( 0-45 օր)
0-10 օր
Բաժանել instans 2 AZ; միացրեք readiness/liveness, health-winks։
Տեղադրել L7-timeouts/retries (1 փորձ), medier detae։
Ներառել graceful and slow-start։
11-25 օր
Ներդրել GSLB (geo/weighted) կամ Anycript-ը պարագծի համար։
Կանարյան քաշը/երթուղիների քաղաքականությունը; sticky cookie/consistent hash միջոցով։
SLO-gatts ավտոմեքենայի ֆեյլերի համար (p95/5xx + բիզնես SLI)։
26-45 օր
DR 'Action-Active կամ Acctive-Passive-ը թարգմանության թեստի հետ։
Chaos-օրեր AZ/տարածաշրջանների անջատմամբ, RTO/RPO զեկույցները։
Ավտոմատացված runbook "և (pause/shift/rollback)։
17) Հասունության մետրերը
Multi-AZ-ի ծածկումը կրիտիկական ճանապարհների 99 տոկոսն է։
III/GSLB/Anycript-ը ներդրված է հանրային էնդպոինտների համար։
MTTR-ը, երբ ընկավ մեկ AZ <5 րոպե (p95)։
RPO-ը կրիտիկական տվյալների համար 210 (օրինակ ՝ 3,30 վայրկյան)։
Եժեքվարթալ game-days-ը և հաջողակ պլանավորված ֆեյլովերը։
18) Եզրակացություն
Հուսալի հավասարակշռությունը և failover-ը փխրուն ճարտարապետություն է 'տեղական L7 քաղաքականությունները (timeouts/retries/CB, health-winks), ճիշտ սոսնձումը և քաշումը, խաչաձև հովանոցը, իսկ պարագծի վրա' GSLB/IV/Anycripe։ Ավելացրեք SLO-gatts, impotenty, graceful and www.chaos-թեստերը, և հանգույցի ցանկացած կորուստ, գոտիները կամ նույնիսկ տարածաշրջանները կդառնա կառավարվող իրադարձություն կանխատեսելի RTO/RPO-ի հետ։