14-bo‘lim
Deploy strategiyalari
To'xtatib almashtirish, ketma-ket yangilash, ko'k-yashil va kanareyka usullari, ularning narxi va qachon tanlanishi.
Ushbu bo‘lim mundarijasi
Obraz tayyor, reliz chiqdi. Endi uni serverga qanday olib chiqamiz? Bir necha usul bor va ular narxi hamda xavfi bilan farq qiladi.
To'rt asosiy usul #
| Usul | Uzilish | Murakkabligi | Qachon mos |
|---|---|---|---|
| To'xtatib almashtirish | Bor (soniyalar-daqiqalar) | Eng sodda | Ichki vositalar, kichik loyihalar |
| Ketma-ket yangilash | Yo'q | O'rtacha | Bir nechta nusxa ishlaydigan xizmatlar |
| Ko'k-yashil | Yo'q | O'rtacha, lekin qimmat | Orqaga qaytish tez bo'lishi shart bo'lganda |
| Kanareyka | Yo'q | Eng murakkab | Katta auditoriya, xavfli o'zgarishlar |
1. To'xtatib almashtirish (recreate) #
Eng sodda: eskisini to'xtatasiz, yangisini ishga tushirasiz.
docker compose down
docker compose up -d
Ichki hisobot tizimi kechasi 30 soniyaga o'chsa - hech kim sezmaydi. Murakkab strategiya qurish o'rniga, deploy vaqtini tanlash yetarli.
Murakkablikni faqat u to'laydigan joyda qo'shing.
2. Ketma-ket yangilash (rolling) #
Nusxalar birin-ketin almashtiriladi. Har doim ishlaydigan nusxa bo'ladi:
docker service update --image ghcr.io/loyiha:1.4.2 --update-parallelism 1 ilova
| Bosqich | 1-nusxa | 2-nusxa | 3-nusxa |
|---|---|---|---|
| Boshlanish | v1 | v1 | v1 |
| 1-qadam | v2 | v1 | v1 |
| 2-qadam | v2 | v2 | v1 |
| 3-qadam | v2 | v2 | v2 |
Bu muhim oqibat: o'tish davrida foydalanuvchining bir so'rovi v1 ga, ikkinchisi v2 ga tushishi mumkin.
Shuning uchun:
| Talab | Sabab |
|---|---|
| API mos kelishi | v2 v1 ning so'rovlarini tushunishi kerak |
| Baza sxemasi mos kelishi | Ustunni darhol o'chirmang - avval ishlatishni to'xtating |
| Sessiyalar umumiy bo'lishi | Xotiradagi sessiya nusxalar orasida yo'qoladi |
Baza o'zgarishi bo'lsa, ikki bosqichda chiqaring: avval qo'shadigan o'zgarish (yangi ustun), keyin - eskisini olib tashlash.
3. Ko'k-yashil (blue-green) #
Ikkita bir xil muhit saqlanadi. Yangi versiya ishlamayotgan muhitga chiqariladi, sinaladi, keyin trafik bir zumda o'tkaziladi.
| Ustunligi | Kamchiligi |
|---|---|
| Orqaga qaytish bir soniyada | Ikki barobar resurs kerak |
| Yangi versiya haqiqiy muhitda sinaladi | Baza ikkalasiga umumiy bo'ladi |
| Uzilish yo'q | Sozlash murakkabroq |
4. Kanareyka (canary) #
Yangi versiyaga trafikning kichik qismi yo'naltiriladi. Hammasi yaxshi bo'lsa - ulush oshiriladi.
| Bosqich | v1 ulushi | v2 ulushi | Kuzatiladi |
|---|---|---|---|
| 1 | 95% | 5% | Xatolar soni, javob vaqti |
| 2 | 75% | 25% | Bir necha soat |
| 3 | 50% | 50% | Barqarorlik |
| 4 | 0% | 100% | To'liq o'tish |
Agar siz xatolar sonini va javob vaqtini real vaqtda ko'rmasangiz, kanareyka deploy foydasiz: 5% foydalanuvchi muammoga duch keladi, siz esa bilmaysiz.
Shuning uchun tartib shunday: avval monitoring, keyin kanareyka. Aks holda bu shunchaki sekinlashtirilgan oddiy deploy bo'ladi.
Nomi bo'yicha qaysi biri kerak #
Uzilish qabul qilinadimi?
├── Ha -> to'xtatib almashtirish (eng sodda)
└── Yo'q
├── Bir nechta nusxa bormi?
│ ├── Ha -> ketma-ket yangilash
│ └── Yo'q -> ko'k-yashil
└── Xavf yuqorimi va o'lchov bormi?
└── Ha -> kanareyka
Salomatlik tekshiruvi - hammasining asosi #
Har qanday strategiya "yangi versiya tayyor" degan signalni bilishi kerak. Buning uchun ilovada maxsus manzil bo'ladi:
import { createServer } from 'node:http';
createServer((req, res) => {
if (req.url === '/salomatlik') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ holat: 'yaxshi', versiya: process.env.VERSIYA }));
return;
}
res.end('Salom, CI/CD!\n');
}).listen(3000);
Quvurda esa uni kutamiz:
- name: Yangi versiya ko'tarilishini kutish
run: |
for i in $(seq 1 30); do
if curl -sSf https://sinov.misol.uz/salomatlik > /dev/null; then
echo "Tayyor ($i-urinish)"
exit 0
fi
echo "Kutilmoqda... ($i)"
sleep 2
done
echo "Xizmat 60 soniyada ko'tarilmadi"
exit 1
Eng ko'p uchraydigan xato - shunchaki 200 OK qaytaradigan manzil:
// Bu deyarli foydasiz
if (req.url === '/salomatlik') { res.end('ok'); }
Bunday tekshiruv ilova ishga tushganini aytadi, lekin u ishlay
olishini aytmaydi. Baza yiqilgan bo'lsa ham ok qaytaveradi.
Foydali tekshiruv kamida bazaga bitta yengil so'rov qiladi va javobni kutadi. Lekin uni og'ir qilib yubormang - u har necha soniyada chaqiriladi.
Migratsiyalar - eng nozik qism #
Baza sxemasi o'zgarsa, deploy tartibi muhim bo'lib qoladi:
| Bosqich | Kod | Baza |
|---|---|---|
| 1 | Eski kod ishlaydi | Yangi ustun qo'shiladi (eski kod uni bilmaydi) |
| 2 | Yangi kod chiqariladi | Ikkala ustun mavjud |
| 3 | Yangi kod barqaror | Eski ustun o'chiriladi |
Bu «kengaytir - ko'chir - qisqartir» usuli. Uning ma'nosi: hech qachon kod va baza bir vaqtda o'zgarmaydi, shuning uchun orqaga qaytish har bosqichda mumkin bo'ladi.
- To'rtta strategiyani uzilish, narx va murakkablik bo'yicha jadvalga soling.
- O'z loyihangiz uchun qaysi biri mosligini tanlab, sababini yozing.
- Ilovangizga
/salomatlikmanzilini qo'shing. - Unda bazaga yengil so'rov qilib, natijani JSON sifatida qaytaring.
- Quvurga xizmat ko'tarilishini kutadigan qadam yozing.
- Kutish muddati tugaganda quvur qizil bo'lishini ta'minlang.
- Ketma-ket yangilashda nima uchun ikki versiya bir vaqtda ishlashini tushuntiring.
- Baza ustunini xavfsiz o'chirish uchun uch bosqichni yozing.
- Ko'k-yashil usulda baza qanday muammo tug'dirishini tahlil qiling.
- Kanareyka deploy uchun qanday o'lchovlar kerakligini sanang.
Xulosa #
- To'rt asosiy usul: to'xtatib almashtirish, ketma-ket yangilash, ko'k-yashil, kanareyka.
- Ular uzilish, narx va murakkablik bo'yicha farq qiladi - eng soddasidan boshlang.
- Uzilish har doim ham muammo emas: ichki tizim uchun 30 soniya sezilmaydi.
- Ketma-ket yangilashda ikki versiya bir vaqtda ishlaydi - API va baza mos bo'lishi shart.
- Ko'k-yashil bir soniyada orqaga qaytish imkonini beradi, lekin ikki barobar resurs talab qiladi.
- Kanareyka faqat monitoring bo'lgandagina ma'noga ega.
- Har qanday strategiya salomatlik tekshiruviga tayanadi.
200 OKqaytaradigan bo'sh tekshiruv foydasiz - u bazani ham tekshirsin.- Baza o'zgarishi «kengaytir - ko'chir - qisqartir» tartibida chiqariladi.
- Kod va baza hech qachon bir vaqtda o'zgarmasligi kerak - aks holda orqaga qaytib bo'lmaydi.
Keyingi bo'limda quvurdan haqiqiy serverga ulanib, ilovani chiqaramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.