Zero-Downtime 2019
(Բաժին ՝ Ճարտարապետություն և Արձանագրություններ)
1) Ի՞ նչ է Zero-Downtime-ը և ինչու՞ դա անհրաժեշտ է։
Zero-Downtime-ը (ZDT) ծրագրի նոր տարբերակներ արտադրելու միջոց է, առանց օգտագործողների և առանց հարցումների կորստի։ Նպատակները
Զրոյական պարզ հաճախորդների և ինտեգրումների համար։
Կանխատեսելի օրինագծերը, արագ արձագանքը և կառավարվող ռիսկը։
SLO/SLI (լատենտ, սխալներ, հասանելիություն) պահպանումը պայմանագրերի սահմաններում։
ZDT-ի բանալին ոչ թե մեկ «կախարդական» տեխնոլոգիա է, այլ առաքման, տվյալների և գրագետ ուղղության պաթոգենների համադրություն։
2) Zero-Downtime հիմնական սկզբունքները
1. Տարբերակների համատեղելիությունը 'նոր և հին տարբերակները միևնույն ժամանակ պետք է ճիշտ մշակեն կոդերը և տվյալները։
2. Վիրահատությունների համադրելիությունը 'վերարտադրումը չպետք է կոտրի վիճակը։
3. Graceful shutdown (graceful shutdown) և drenage։
4. Առողջության կոպիտ ստուգումը 'readiness/liveness թեստեր, health-endpoints։
5. Որպես քաղաքացիների առաջին դասարան 'rollback-ը ավելի հեշտ և արագ է, քան hotfix-ը։
6. By design: www.ru, մեկ dashbords, SLO-ի ալտերտեր։
7. Ավտոմատիզացիա 'կոդավորման և արձագանքման սցենարներ' կոդ, ոչ թե ձեռքով հրահանգներ։
3) Առաքման արտոնագրերը առանց դաունթայմի
3. 1 Rolling Update
Աստիճանաբար մենք հանում ենք հին տարբերակի ինստանցների մի մասը, դրանք նորարարում ենք նոր և վերադառնում փամփուշտին։
Պլյուսներ 'տնտեսապես ենթակառուցվածքով, պարզապես k8s/ASG-ում։
Մինուսներ 'որոշ ժամանակ կլաստերը աշխատում է երկու տարբերակների հետ միաժամանակ (version skew)։
3. 2 Blue-Green
Երկու ամբողջական պրոդ-ապակիներ 'ակտիվ (Blue) և թեկնածուն (Green)։ Շարժումը ատոմային ֆլիպ է։
Պլյուսներ ՝ ակնթարթային արձագանք, մաքուր մեկուսացում։
Մինուսները ՝ ենթակառուցվածքի ծախսերը, ավելի բարդ են ստատեֆուլից։
3. 3 Canary/Առաջադիմական rollout
Մենք տալիս ենք մրցույթի փոքր մասը (1-5-10-25-50-100%) նոր տարբերակի հետ։
Պլյուսներ ՝ նվազագույն blast radius, 71-driven լուծումներ։
Մինուսներ 'անհրաժեշտ է տեսողական դիտարկում և ինտելեկտուալ միկրոօրգանիզացիա։
3. 4 Shadow traffic / Dark launch
Զերկալիմը իրական հարցումներ է տալիս նոր տարբերակում (առանց օգտագործողի պատասխանի) կամ սկսում ենք թաքնված, որպեսզի հավաքենք մետրերը։
Պլյուսներ 'խնդիրների վաղ հայտնաբերումը։
Մինուսները 'երկակի լուծումը կախվածության վրա, պետք է վերահսկել կողմնակի ազդեցությունները։
4) Խողովակաշարի և միացությունների կառավարումը
4. 1 Readiness/Liveness
Liveness-ը ասում է նվագախմբին «վերաարտադրել ինձ»։
Readiness-ը "մի ուղարկիր", ես դեռ պատրաստ չեմ "։
Դուք չեք կարող արտադրել առանց ճիշտ readiness տրամաբանության և թայմաուտների։
4. 2 Drenage International (Connational Internat
Նախքան ինստանի պուլից դուրս գալը
դադարում ենք նոր միացություններ ընդունել,
սպասում ենք ակտիվ
ընդհատում ենք «կախված» թայմաուտով։
4. 3 Sticky-նստաշրջան և L7 մակարդակի միկրոօրգանիզացիա
Sticky-ը օգտակար է stateful-սցենարներում, բայց բարդացնում է բեռի հավասարակշռությունը։
L7 կանոնները (ճանապարհին, վերնագիր, տիկնիկ, API տարբերակները) հարմար են canary/ring-ի համար։
4. 4 Երկարատև միացություններ
WindowSocket/gRPC streaming: Մինչ նորարարությունը միացրեք www.ain mode + ազդանշանը «GOAWAY»։
Պլանավորեք windows-ը, որպեսզի ավելացնենք հաճախորդների սթրիմները և բեքոֆը։
5) Տվյալների և տվյալների համատեղելիությունը BD
5. 1 Expand-Migrate-Contract
1. Expand: Մենք ավելացնում ենք նոր/ինդեքսներ/աղյուսակներ առանց հին տարբերակի կոտրելու։
2. Migrate: Մենք փոխանցում ենք ֆոնային տվյալները և idempotento (բամբեր, chekpoints)։
3. Euract 'հեռացրեք հինը միայն դեպքից հետո։
5. 2 Պրակտիկա
Խուսափեք բացառիկ DDL-loks պատուհանից։
Տարբերեք API/իրադարձությունների պայմանագրերը (schema registry, CDC)։
Ծանր միգրացիաների համար 'on.ru գործիքներ, կրկնօրինակներ, ստացիոնար դեղամիջոցներ։
Երկկողմանի ձայնագրությունը (dult-write) միայն deduplication և idempotent սպառողների հետ։
Eurobox/Inbox-ը հերթով հուսալի ինտեգրման համար։
6) Քեշի, նստաշրջաններ և ֆոնային առաջադրանքներ
Նստաշրջանները և քեշը արտաքին (Redis/Memcached), որպեսզի տարբերակները փոխազդեն։
Տաքացնելով քեշը/ջիտները/տեմպային ինդեքսները մինչև փամփուշտի միացումը։
Բաժանեք ֆոնային հերթերը ըստ վարկածի կամ օգտագործեք առաջնորդությունը մրցավազքից խուսափելու համար։
7) SLO-ում դիտողությունն ու խաղերը
Golden signals: p95/p99, error rate, RPS, saturation, lag։
Բիզնես-SLA 'հեղինակային իրավունքի, հակադարձման, հաջողակ վճարումների, ձագերի քայլերի մերժումը։
Գեյթ 'rollout շարժվում է միայն եթե canary www.baseline + քայքայման շեմն է, իսկ error budget չի այրվում։
8) Ապահով ավարտը և արձագանքը
Rapat-ը նույն pline-ն է, միայն հակառակ ուղղությամբ 'ֆիքսված թիմեր, ոչ թե «ձեռքի կրաֆտ»։
Blue-green-flip back-ի համար։ canary-ի համար քաշը մինչև 0% կամ նախորդ կայուն է։
Տվյալները ՝ փոխհատուցող գործարքներ, վերարտադրում, իրադարձությունների կրկնություն։
9) Zero-Downtime թերթերը
Նախքան ֆորումը
- Հավաքվել է մեկ ստորագրված արտեֆակտը (immutable), SBSA-ը և կախվածության ստուգումը։
- Readiness/liveness իրականացվել և փորձարկվել են։
- Expand ռեժիմում միգրացիայի պլանը հաստատվում է։
- Dashbords և alerts նոր տարբերակի համար պատրաստ են, ավելացնելով արտանետումները։
- Ռեպատը ստուգված է staging/pre-2019 վրա։
Թողարկման ընթացքում
- Դրենաժը ներառված է, թայմաուտները համարժեք են։
- Մոսկվան թարգմանվում է աստիճանաբար (canary/ring) կամ flip (blue-green)։
- Մետրիկները համեմատվում են baseline-ի հետ, խաղացողների շեմերը պահպանվում են։
Թողարկումից հետո
- Post-35N ժամ, միջադեպերը բացակայում են։
- Ավարտված են www.ract, հանվում են ժամանակավոր դրոշները/երթուղիները։
- Հետադարձ հայացք, պլեյբուսների նորարարություն։
10) Anti-patternes
Recreate-deple-ը առանց փչացնելու և readiness-ը բացատրում է հարցումների բեկորները։
Չպատրաստված DDL-ն պլանավորվում է արգելափակել և թայմաուտներ 2019 թվականին։
Անհամատեղելի սխեմաների խառնուրդը կոդավորման տարբերակների միջև։
Իդեմոտենտության բացակայությունը վերամշակումների և վորկերների մեջ։
«Վերցրեք զգացմունքները» առանց խաղացողների և համեմատության baseline-ի հետ։
Երկար MS-TTL-ը կապույտ-green-ում, որի պատճառով flip տևում է ժամեր։
Տեղական նստաշրջանները/քեշը հիշողության մեջ է rolling/canary-ում։
11) Ներդրման սցենարները
11. 1 Kubernetes (rolling + canary)
Deployment с `maxUnavailable=0`, `maxSurge=25%`.
Readiness-ը սպասում է տաքացման (քեշի նախաձեռնումը, minor)։
Ծառայություն-մեշ/Ingress weighted routing (1-5-10-25-50-100%)։
Ալերտներ ՝ p95, 5xx, գիծ, բիզնես ձագար։
11. 2 Blue-Green ամպում
Երկու բաժակ հավասարակշռիչի հետևից '"կապույտ։ example. com` и `green. example. com`.
green, smoke/ream, ապա listener/roult swap (կամ RTL-փոխանցման ցածր TTL)։
Խնդիրների դեպքում ակնթարթային flip back է։
11. 3 Stateful ծառայություն
Տվյալների կրկնօրինակները + on07-2019; կրկնակի ընթերցում վալիդացիայի հետ։
Ֆոնային ջոբները փոխանցվում են տարբերակների «առաջնորդությամբ» կամ բաժանված հերթերով։
Նստաշրջանները/քեշը ինստանից դուրս; sticky ներառված է միայն ժամանակավորապես։
12) Ֆիչեֆլագները և հաճախորդների ծրագրերը
Նոր ֆիչիները ակտիվանում են դրոշներով (հատվածներ ՝ ռուսական բետի աշխատակիցները բոլորը)։
Բջջային/desctop հաճախորդների համար հաշվի առեք արձանագրության սահմանները և հին տարբերակների գոյատևումը (deprecation policy, server-side fallback)։
13) Արտադրողականությունը և արժեքը
Rolling-ը ավելի էժան է, բայց պահանջում է զգույշ պաշտպանություն։
Blue-Green-ը ավելի թանկ է, քան թողարկման ժամանակը, բայց ակնթարթային։
Canary-ը հավասարակշռում է ռիսկերը և արժեքը, բայց պահանջում է ուժեղ դիտարկում։
Խնայեք ephemeral-ի և մեքենայի մաքրման միջոցով։
14) Նվազագույն հանրաքվե-ռուսական ZDT pline ZDT
1. Build: մեկ արտեֆակտը, ստորագրությունը, SBSA-ը։
2. Test: unit/integration/contract + security.
3. Staging: smoke, www.ru, expand ռեժիմում, արձագանքի ստուգում։
4. Իսպանիան 'shadow canary (խաղացողներ) կամ blue-green flip։
5. Post-deploy: Դիտարկումը, www.ract-cleanup, ռետրո։
15) Ռեզյումե
Zero-Downtime-ը կարգապահություն է 'համատեղելի տարբերակներ + ճիշտ միկրոակտիվացում + կառավարվող պարամետրերը + դիտարկումը և արագ արձագանքը։ Ընտրեք pattern համատեքստում (rolling, blue-green, canary), ավտոմատիզացրեք SLO-ի խաղացողները, պահեք տվյալները idempotent-ով, և թողարկումները կդադարեն լինել իրադարձություն 'վերածվելով հուսալի ռուտինի գործընթացի։