Zero-Downtime joylashtirish
(Bo’lim: Arxitektura va Protokollar)
1) Zero-Downtime nima va nima uchun kerak
Zero-Downtime (ZDT) - bu ilovaning yangi versiyalarini foydalanuvchilar uchun mavjud bo’lmagan va so’rovlarni yo’qotmagan holda chiqarish usuli. Maqsadlar:- Mijozlar va integratsiyalar uchun nol oson.
- Prognoz qilinadigan relizlar, tez qaytish va boshqariladigan xavf.
- Kelishuvlar doirasida SLO/SLI (yashirin, xato, foydalanish imkoniyati) ni saqlash.
ZDTning kaliti - bitta «sehrli» texnika emas, balki yetkazib berish patternlarining kombinatsiyasi, ma’lumotlarning mosligi va trafikning malakali yo’nalishi.
2) Zero-Downtime asosiy tamoyillari
1. Versiyalar mosligi: yangi va eski versiyalar bir vaqtning o’zida trafikni va ma’lumotlarni to’g’ri qayta ishlashi kerak.
2. Operatsiyalarning idempotentligi: qayta ishlash holatni buzmasligi kerak.
3. Goʻzal yakunlash (graceful shutdown) va ulanishlarni drenaj qilish.
4. Salomatlikni bosqichma-bosqich tekshirish: readiness/liveness namunalari, health-endpointlar.
5. Birinchi darajali fuqaro sifatida orqaga qaytish: rollback hotfixdan osonroq va tezroq.
6. Kuzatilganlik by design: reliz belgilari, yagona dashbordlar, SLO alertlari.
7. Avtomatlashtirish: reliz va qaytarish ssenariylari - qo’l yo’riqnomalari emas, balki kod.
3) Dauntaymsiz yetkazib berish patternlari
3. 1 Rolling Update
Asta-sekin eski versiyadagi instansiyalarning bir qismini trafikdan chiqarib, yangilab, pulga qaytaramiz.
Afzalliklari: infratuzilma jihatidan tejamkor, shunchaki k8s/ASG.
Minuslar: klaster bir vaqtning o’zida ikkita versiya bilan ishlaydi (version skew).
3. 2 Blue-Green
Ikkita toʻliq prod-stek: faol (Blue) va nomzod (Green). Trafikni almashtirish - atomik flip.
Ijobiy tomonlari: bir zumda orqaga qaytish, toza izolyatsiya.
Minuslar: ↑ infratuzilma xarajatlari, stateful bilan qiyinroq.
3. 3 Canary/Progressiv rollout
Metrik geytali yangi versiyadagi trafikning kichik qismini (1-5-10-25-50-100%) beramiz.
Plyuslar: minimal blast radius, data-driven yechimi.
Kamchiliklar: yetuk kuzatuv va intellektual yo’nalish kerak.
3. 4 Shadow traffic / Dark launch
Haqiqiy so’rovlarni yangi versiyada aks ettiring (foydalanuvchiga javobsiz) yoki metrikalarni yig’ish uchun yashirincha ishga tushiring.
Ijobiy tomonlari: muammolarni erta aniqlash.
Kamchiliklar: giyohvandlikka ikki baravar yuk, nojo’ya ta’sirlarni nazorat qilish kerak.
4) Trafik va birikmalarni boshqarish
4. 1 Readiness/Liveness
Liveness orkestrga «meni qayta ishga tushiring» deydi.
Readiness - «trafikni yo’naltirmang, men hali tayyor emasman».
To’g’ri readiness-mantiq va taymautlarsiz chiqarish mumkin emas.
4. 2 Ulanishlar drenaji (Connection Draining)
Instansiyani puldan chiqarishdan oldin:- yangi ulanishlarni qabul qilishni to’xtatamiz,
- Biz faollarning tugashini kutmoqdamiz
- Taymaut bo’yicha «osilgan» larni to’xtatamiz.
4. 3 Sticky-sessiyalar va L7 darajasini yoʻnaltirish
Sticky stateful-stsenariylarda foydali, ammo yuk balansini murakkablashtiradi.
L7 qoidalari (yo’l, sarlavha, kuke, API versiyasi) canary/ring uchun qulay.
4. 4 Uzoq umr ko’radigan birikmalar
WebSocket/gRPC streaming: yangilashdan oldin drain mode + «GOAWAY» signalini yoqing.
Mijozlarning oqimlari va orqa retralarini yuklash uchun Windows dasturini rejalashtiring.
5) Ma’lumotlar va DB migratsiyasining mosligi
5. 1 Expand-Migrate-Contract
1. Expand: Eski versiyani buzmasdan yangi ustunlar/indekslar/jadvallarni qoʻshing.
2. Migrate: ma’lumotlarni fon va idempotent (batchi, chekpint) bilan ko’chiramiz.
3. Contract: eskisini faqat barqarorlashgandan keyingina olib tashlaymiz.
5. 2 Amaliyot
Reliz oynasida eksklyuziv DDL loklaridan qoching.
API/hodisa shartnomalarini (schema registry, CDC) versiya qiling.
Og’ir migratsiyalar uchun - onlayn vositalar, replikalar, bosqichma-bosqich o’zgarishlar.
Ikki konturli yozuv (dual-write) faqat deduplikatsiya va idempotent iste’molchilar bilan.
Navbatlar orqali ishonchli integratsiya qilish uchun Outbox/Inbox.
6) Keshlar, sessiyalar va fon vazifalari
Versiyalar almashtirilishi uchun sessiyalar va kesh tashqi (Redis/Memcached).
Pulga qoʻshishdan oldin kesh/jit/temp indekslarini isitish.
Orqa fon chiziqlarini ajrating yoki poygalardan qochish uchun etakchilikdan foydalaning.
7) SLO bo’yicha kuzatuv va geytlar
Golden signals: latentlik p95/p99, error rate, RPS, saturation, lag navbatlar.
Biznes-SLA: avtorizatsiya, konvertatsiya, muvaffaqiyatli to’lovlar, huni qadamlari bo’yicha rad etish.
Geytlar: rollout faqat canary ≤ baseline + degradatsiya chegarasi va error budget yonmasa harakatlanadi.
8) Xavfsiz tugatish va orqaga qaytish
Orqaga qaytish - bu xuddi shu payplayn, faqat teskari tomonga: «qo’l krafti» emas, balki qat’iy buyruqlar.
blue-green uchun - flip back; canary uchun - 0% gacha vazn yo’qotish yoki oldingi barqaror qadam.
Ma’lumotlar: kompensatsiya qilingan tranzaksiyalar, qayta ishlov berish, voqealarni deduplikatsiya qilish.
9) Zero-Downtime chek-varaqlari
Chiqarishdan oldin
- Bitta imzolangan artefakt (immutable), SBOM va qaramlikni tekshirish yig’ildi.
- Readiness/liveness amalga oshirildi va sinovdan o’tkazildi.
- Expand rejimidagi migratsiya rejasi, qaytariluvchanlik tasdiqlandi.
- Dashbordlar va alertlar yangi versiya uchun tayyor, reliz belgilari tashlangan.
- Qaytish staging/pre-prod orqali tekshirildi.
Reliz paytida
- Ulanishlar drenaji yoqilgan, taymautlar etarli.
- Trafik asta-sekin tarjima qilinadi (canary/ring) yoki flip (blue-green).
- Metriklar baseline bilan solishtiriladi, geyt ostonalariga rioya qilinadi.
Chiqarilgandan keyin
- N soat post-monitoring, hodisalar yo’q.
- Contract migratsiyasi tugadi, vaqtinchalik bayroqlar/marshrutlar olib tashlandi.
- Retrospektiv, pleybuklarni yangilash.
10) Anti-patternlar
Drenajsiz recreate-deploy va readiness ⇒ so’rovlarning uzilishi.
Tayyorlanmagan DDL ⇒ praym-taymdagi blokirovka va taymautlar.
Xizmat versiyalari o’rtasida nomuvofiq sxemalarni aralashtirish.
Ishlov beruvchilar va vorkerlarda idempotentlik yo’qligi.
«Hissiyotlarga ko’ra» geytsiz va baseline bilan taqqoslanmagan.
Uzun DNS-TTL blue-green bilan flip soatlab davom etadi.
rolling/canary tizimida lokal sessiyalar/kesh.
11) Joriy etish stsenariylari
11. 1 Kubernetes (rolling + canary)
Deployment с `maxUnavailable=0`, `maxSurge=25%`.
Readiness isinishni kutmoqda (kesh boshlanishi, minor migratsiyasi).
Servis-mesh/Ingress bilan weighted routing (1-5-10-25-50-100%).
Alertlar: p95, 5xx, navbat, biznes huni.
11. Bulutda 2 ta Blue-Green
Balanschi uchun ikki stek:’blue. example. com` и `green. example. com`.
Isitish green, smoke/regress, so’ngra listener/route swap (yoki past TTL bilan DNS almashtirish).
Muammoga duch kelganda - tezkor flip back.
11. 3 Stateful-servis
Ma’lumotlar nusxalari + onlayn-migratsiya; validatsiya bilan ikki marta oʻqish.
Orqa fon joblari «etakchilik» versiyasi yoki bo’lingan navbatlar bo’yicha ko’chiriladi.
Sessiyalar/instansiyadan tashqari kesh; sticky faqat vaqtincha yoqilgan.
12) Jismoniy naflaglar va mijozlar ilovalari
Yangi chichlar bayroqlar bilan faollashtiriladi (segmentlar: xodimlar → beta → hammasi).
Mobil/ish stoli mijozlar uchun protokolning mos kelishi chegaralarini va eski versiyalarning (deprecation policy, server-side fallback) chidamliligini hisobga oling.
13) Unumdorlik va qiymat
Rolling arzonroq, ammo ehtiyotkorlik bilan moslashishni talab qiladi.
Blue-Green chiqarilganda qimmatroq, ammo orqaga qaytish bir zumda.
Canary xavflar va xarajatlarni muvozanatlaydi, ammo kuchli kuzatishni talab qiladi.
Ephemeral prevyu va stendlarni avtomatik tozalash orqali tejang.
14) Minimal referens-payplayn ZDT
1. Build: yagona artefakt, imzo, SBOM.
2. Test: unit/integration/contract + security.
3. Staging: smoke, yuk, expand rejimida migratsiya, qaytishni tekshirish.
4. Prod: shadow → canary (geytlar) yoki blue-green flip.
5. Post-deploy: kuzatish, contract-cleanup, retro.
15) Qisqacha xulosa
Zero-Downtime - bu intizom: mos keladigan versiyalar + to’g’ri marshrut + boshqariladigan migratsiya + kuzatish va tez orqaga qaytish. Kontekst (rolling, blue-green, canary) uchun pattern tanlang, SLO bo’yicha geytlarni avtomatlashtiring, ma’lumotlarni idempotentda saqlang - va relizlar ishonchli odatiy jarayonga aylanib, voqea bo’lishni to’xtatadi.