GH GambleHub

Zero-Downtime өрістету

(Бөлім: Сәулет және Хаттамалар)

1) Zero-Downtime дегеніміз не және ол не үшін қажет

Zero-Downtime (ZDT) - бұл пайдаланушылар үшін сервистің қолжетімсіздігінсіз және сұрауларсыз жаңа нұсқаларын шығару тәсілі. Мақсаттары:
  • Клиенттер мен интеграциялар үшін нөлдік қарапайым.
  • Болжамды релиздер, жылдам қайту және басқарылатын тәуекел.
  • Уағдаластықтар шегінде SLO/SLI (жасырындылық, қателер, қол жетімділік) сақтау.

ZDT кілті - бір ғана «сиқырлы» техника емес, жеткізу үлгілерінің комбинациясы, деректердің үйлесімділігі және трафикті сауатты бағыттау.

2) Zero-Downtime базалық қағидаттары

1. Нұсқалардың үйлесімділігі: жаңа және ескі нұсқалар бір уақытта трафик пен деректерді дұрыс өңдеуі тиіс.
2. Операциялардың теңсіздігі: қайта өңдеу күйді бұзбауы тиіс.
3. Әдемі аяқтау (graceful shutdown) және қосылыстарды дренаждау.
4. Денсаулықты қадамдық тексеру: readiness/liveness сынамалары, health-эндпойнттар.
5. Бірінші сыныпты азамат ретінде қайту: rollback hotfix-ке қарағанда жеңіл және жылдам.
6. Байқалуы by design: релиз белгілері, бірыңғай дашбордтар, SLO бойынша алерттар.
7. Автоматтандыру: шығару және кері қайтару сценарийлері - қол нұсқаулықтары емес, код.

3) Түбіртексіз жеткізу үлгілері

3. 1 Rolling Update

Бірте-бірте ескі нұсқадағы инстанциялардың бір бөлігін трафиктен шығарып, жаңасына жаңартып, пулға қайтарамыз.

Артықшылықтары: инфрақұрылым бойынша үнемді, жай ғана k8s/ASG.
Кемшіліктері: кластер бір уақытта екі нұсқамен жұмыс істейді (version skew).

3. 2 Blue-Green

Екі толық прод-стек: белсенді (Blue) және кандидат (Green). Трафикті ауыстырып қосу - атомарлық флип.

Артықшылықтары: бірден қайту, таза оқшаулау.
Минустары: ↑ инфрақұрылымға арналған шығыстар, stateful-ден күрделі.

3. 3 Canary/Прогрессивті rollout

Жаңа нұсқадағы трафиктің аз үлесін (1-5-10-25-50-100%) метрикалар бойынша гейтпен береміз.

Артықшылықтары: ең аз blast radius, data-driven шешімдері.
Кемшіліктері: жетілген бақылау және зияткерлік бағыттау қажет.

3. 4 Shadow traffic / Dark launch

Жаңа нұсқадағы нақты сұрауларды (пайдаланушыға жауап бермей) айналаймыз немесе метриканы жинау үшін жасырын түрде іске қосамыз.

Артықшылықтары: проблемаларды ерте анықтау.
Минустар: тәуелділікке екі есе жүктеме, жанама әсерлерді бақылау қажет.

4) Трафикті және қосылыстарды басқару

4. 1 Readiness/Liveness

Liveness оркестрге «мені қайта жегіңіз» дейді.
Readiness - «трафикті жібермеңіз, мен әлі дайын емеспін».
Дұрыс readiness-логикасыз және таймаусыз шығаруға болмайды.

4. 2 Қосылыстарды дренаждау (Connection Draining)

Инстанцияны пулдан шығару алдында:
  • жаңа қосылыстарды қабылдауды тоқтатамыз,
  • белсенділердің аяқталуын күтеміз,
  • таймаут бойынша «ілінгендерді» үземіз.

4. 3 Sticky-сессиялар және L7 деңгейін бағдарлау

Sticky stateful сценарийлерінде пайдалы, бірақ жүктеме балансын қиындатады.
L7 ережелері (жол бойынша, тақырып бойынша, куке, API нұсқалары) canary/ring үшін ыңғайлы.

4. 4 Ұзақ өмір сүретін қосылыстар

WebSocket/gRPC streaming: жаңарту алдында drain mode + «GOAWAY» сигналын қосыңыз.
Ағындарды және клиенттердің бэкоф-ретраларын асу үшін Windows бағдарламаларын жоспарлаңыз.

5) Деректер мен көші-қонның ДБ үйлесімділігі

5. 1 Expand-Migrate-Contract

1. Expand: жаңа бағандарды/индекстерді/кестелерді ескі нұсқасын бұзбай қосыңыз.
2. Migrate: деректерді фондық және идемпотенттік түрде көшіреміз (батчилер, чек пункттері).
3. Contract: ескісін тұрақтандырғаннан кейін ғана жойамыз.

5. 2 Тәжірибелер

Шығарылым терезесіндегі эксклюзивті DDL блоктарынан аулақ болыңыз.
API/оқиғалар келісімшарттарын (schema registry, CDC) нұсқалаңыз.
Ауыр көші-қон үшін - online-құралдар, репликалар, кезең-кезеңмен ауыстырып қосу.
Екі контурлы жазба (dual-write) тек дедупликациямен және демпотентті тұтынушылармен.
Outbox/Inbox кезек арқылы сенімді біріктіру үшін.

6) Кэштер, сессиялар және фондық тапсырмалар

Сеанстар мен кэш - сыртқы (Redis/Memcached), осылайша нұсқалар өзара алмастырылатын болады.
Кэшті/джиттерді/қарқын индекстерін пулға қосар алдында жылыту.
Өң кезектерін нұсқа бойынша бөліңіз немесе жарысты болдырмау үшін көшбасшылықты пайдаланыңыз.

7) Бақылау және SLO бойынша гейталар

Golden signals: латентность p95/p99, error rate, RPS, saturation, лаг очередей.
Бизнес-SLA: авторизация, конверсия, сәтті төлемдер, құйғыштың қадамдарынан бас тарту.
Гейтс: rollout тек canary ≤ baseline + деградация табалдырығы жылжытылады, ал error budget жанбайды.

8) Қауіпсіз аяқтау және кері шегіну

Кері қайту - бұл сол пайплайн, тек кері бағытта: бекітілген командалар, «қол крафты» емес.
blue-green үшін - flip back; canary үшін - 0% немесе алдыңғы тұрақты қадамға дейін салмақ түсіру.
Деректер: өтемдік транзакциялар, қайта өңдеу, оқиғаларды дедупликациялау.

9) Zero-Downtime чек-парақтары

Шығару алдында

  • Қол қойылған бір артефакт (immutable), SBOM және тәуелділікті тексеру жиналды.
  • Readiness/liveness іске асырылды және сынақтан өткізілді.
  • expand режиміндегі көші-қон жоспары, қайтарымдылығы расталды.
  • Дашбордтар мен алерталар жаңа нұсқаға дайын, релиз белгілері тасталды.
  • Кері қайту staging/pre-prod бағдарламасында тексерілді.

Шығару кезінде

  • Қосылыстардың дренажы қосылған, таймауттар барабар.
  • Трафик бірте-бірте аударылады (canary/ring) немесе flip (blue-green).
  • Метриктер baseline-мен салыстырылады, гейт табалдырықтары сақталады.

Шығарылғаннан кейін

  • N сағат пост-мониторинг, инциденттер жоқ.
  • contract көші-қоны аяқталды, уақытша жалаушалар/бағыттар алынып тасталды.
  • Ретроспектива, ойнатқыштарды жаңарту.

10) Қарсы үлгілер

Дренажсыз Recreate-deploy және readiness ⇒ сұрау үзілістері.
Дайындалмаған DDL ⇒ прайм-таймдағы блоктар мен таймауттар.
Қызмет нұсқалары арасында үйлеспейтін схемаларды араластыру.
Өңдегіштер мен воркерлерде іспеттіліктің болмауы.
«Сезіммен ұрып шығару» гейтсіз және baseline-мен салыстырусыз.
blue-green кезінде ұзын DNS-TTL, сондықтан 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

Теңгерушіден кейін екі стек: 'blue. example. com` и `green. example. com`.
Жылыту green, smoke/регресс, содан кейін listener/route swap (немесе төмен TTL-мен DNS-ауыстырып қосу).
Проблемалар кезінде - жедел flip back.

11. 3 Stateful-сервис

Деректер репликасы + online-көші-қон; валидациямен екі рет оқу.
Фондық джобтар «көшбасшылық» нұсқа немесе бөлінген кезектер бойынша көшіріледі.
Инстанциядан тыс сессиялар/кэш; sticky тек уақытша қосылған.

12) Фичефлагтар және клиенттік қосымшалар

Жаңа фичтер жалаулармен іске қосылады (сегменттер: қызметкерлер → бета → барлығы).
Мобильді/десктоп клиенттері үшін хаттаманың сыйысымдылық шегін және ескі нұсқалардың өміршеңдігін ескеріңіз (deprecation policy, server-side fallback).

13) Өнімділік және құн

Rolling арзан, бірақ мұқият үйлесімділікті талап етеді.
Blue-Green шығарылым кезінде қымбат, бірақ жылдам қайту.
Canary тәуекелдер мен құнды теңестіреді, бірақ күшті байқауды талап етеді.
Ephemeral-prevyu және стендтерді автоматты түрде тазалау арқылы үнемдеңіз.

14) Минималды референс-пайплайн ZDT

1. Build: бірыңғай артефакт, қолтаңба, SBOM.
2. Test: unit/integration/contract + security.
3. Staging: smoke, жүктеме, expand режимінде көші-қон, кері қайтаруды тексеру.
4. Prod: shadow → canary (гейт) немесе blue-green flip.
5. Post-deploy: бақылау, contract-cleanup, ретро.

15) Қысқаша түйіндеме

Zero-Downtime - бұл пән: үйлесімді нұсқалар + дұрыс бағыттау + басқарылатын көші-қон + бақылау және тез кері қайту. Контекст үшін үлгіні таңдаңыз (rolling, blue-green, canary), SLO бойынша гейттерді автоматтандырыңыз, деректерді демпотентті ұстаңыз - және релиздер сенімді дағдылы процеске айналатын оқиға болмайды.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.