Bosh sahifa Wiki Zero-downtime deployment

Zero-downtime deployment

Zero-downtime deployment — yangi versiyani foydalanuvchi so‘rovlari uchun sezilarli rejalashtirilgan uzilishsiz chiqarishga qaratilgan deployment usulidir. Bu mutlaq nol xato kafolati emas; trafikni sog‘lom instance lar orasida uzluksiz saqlash, faol ulanishlarni tugatish va ma’lumot formatlarini mos boshqarishni talab qiladi.

Ortiqcha instance

Xizmat kamida ikki mustaqil instancega ega bo‘lsa bittasi yangilanayotganda boshqasi trafikni qabul qiladi. Rolling yoki blue-green strategiya yangi instance readinessdan o‘tgach eskisini chiqaradi. Bitta instance li xizmatda restart vaqtini yashirish uchun qo‘shimcha capacity kerak.

Load balancer instance ni health check asosida poolga qo‘shadi. Process port ochgani hali cache, migration va dependency tayyorligini anglatmaydi. Readiness critical pathni tekshiradi, liveness esa stuck processni qayta ishga tushirish uchun alohida bo‘ladi.

Graceful shutdown

Eski instance avval yangi trafikdan chiqariladi. Connection draining mavjud HTTP request, stream yoki queue taskni tugatishga vaqt beradi. Termination signal applicationga cleanup boshlash imkonini beradi; grace period tugagach process majburan to‘xtatilishi mumkin.

WebSocket va uzoq connectionlar rolloutni cho‘zadi. Client reconnect va retry backoffga ega bo‘ladi. Server shutdown notice yuborishi yoki connectionning tabiiy tugashini kutishi mumkin. Non-idempotent request qayta yuborilganda duplicate side effectdan himoyalanadi.

Schema mosligi

Eski va yangi versiya bir database bilan parallel ishlaydi. Migration additive va backward-compatible bo‘ladi. Yangi ustun avval nullable yoki default bilan qo‘shiladi, yangi kod deploy qilinadi, data backfill qilinadi, keyin eski ustun alohida release da olib tashlanadi.

Index yaratish katta jadvalni lock qilmasligi uchun online yoki concurrent imkoniyat ishlatiladi. Migration davomiyligi production hajmida sinovdan o‘tadi. Application startiga bloklovchi migration qo‘shish barcha replica bir vaqtda kutishiga olib kelishi mumkin.

Session va cache

In-memory session instance to‘xtaganda yo‘qoladi. Tashqi session store yoki stateless token foydalanuvchini boshqa instancega o‘tkazadi. Sticky session vaqtincha yordam beradi, lekin drain qilingan instancega bog‘liqlikni saqlab qoladi.

Cache key va serialized qiymat ikki versiyada mos bo‘ladi. Versionlangan cache yangi formatni ajratadi. Bir release cache ni tozalasa barcha instance birdan backendga yuk tushirishi mumkin; warm-up va rate control talab qilinadi.

Kuzatuv va rollback

Deployment vaqtida availability, error, latency, connection count va business transaction kuzatiladi. Sintetik test critical pathni doimiy bajaradi. “Podlar ready” control plane holati bo‘lib, foydalanuvchi natijasining to‘liq dalili emas.

Rollback eski artifactni qaytaradi, ammo data va event format mos bo‘lishi kerak. Zero-downtime maqsadi xavfli change ni ko‘r-ko‘rona tez chiqarish emas; kichik bosqich, abort va recovery bilan uzilish ehtimolini kamaytirishdir.

Ulanishlarni tugatish

Instance service discoverydan chiqarilgach ham long-lived TCP, WebSocket yoki streaming ulanishlar davom etishi mumkin. Readinessni o‘chirish yangi ulanishni to‘xtatadi, pre-stop bosqichi esa mavjud ishni tugatish uchun vaqt beradi. Grace period eng uzun odatiy requestdan qisqa bo‘lsa process majburan o‘ldiriladi; cheksiz bo‘lsa rollout to‘xtab qoladi. Load balancer deregistration delay va application shutdown muddati birga sozlanadi. Queue consumer yangi xabar olishni to‘xtatib, joriy xabar ack holatini aniq yakunlaydi.

Bog‘liq tushunchalar

Rolling deployment, Blue-green deployment, Readiness probe, Connection draining, Backward compatibility, Database migration, High availability