Deployment Strategy
Membandingkan recreate, rolling, blue-green, dan canary deployment serta memilih strategi sesuai risiko dan biaya.
Strategi deployment menentukan bagaimana versi baru menggantikan versi lama dan bagaimana rollback dilakukan. Tidak ada strategi terbaik untuk semua kasus.
Ringkasan strategi
| Strategi | Downtime | Rollback | Biaya resource | Risiko |
|---|---|---|---|---|
| Recreate | Ya | Sedang | Rendah | Tinggi |
| Rolling | Minimal | Sedang | Sedang | Sedang |
| Blue-Green | Nol | Instan | Tinggi | Rendah |
| Canary | Nol | Cepat | Sedang | Rendah |
Recreate
Matikan versi lama, jalankan versi baru.
docker compose down
docker compose up -dCocok untuk aplikasi internal, lingkungan development, atau perubahan yang tidak kompatibel.
Rolling
Ganti instance satu per satu.
[v1] [v1] [v1]
[v2] [v1] [v1]
[v2] [v2] [v1]
[v2] [v2] [v2]Dengan Docker Compose dan reverse proxy, jalankan dua service/app instance lalu alihkan trafik. Kubernetes melakukan rolling update secara bawaan.
Blue-Green
Dua lingkungan penuh: blue aktif, green baru.
┌─────────────┐
users ─────▶ │ Load Balancer│
└──┬───────┬──┘
blue │ │ green
(aktif) (baru, diuji)Langkah:
- Deploy versi baru ke green.
- Uji green secara internal.
- Alihkan trafik dari blue ke green.
- Pantau.
- Jika gagal, alihkan kembali ke blue.
Contoh Nginx upstream:
upstream app_backend {
server 10.10.10.11:3000; # blue
# server 10.10.10.12:3000; # green
}Ganti komentar lalu reload Nginx:
nginx -t && systemctl reload nginxCanary
Rilis ke sebagian kecil pengguna, pantau, lalu tingkatkan.
5% → 25% → 50% → 100%Kriteria promosi:
- Error rate tidak naik.
- Latency stabil.
- Tidak ada alert baru.
- Log tidak menunjukkan exception.
Canary membutuhkan routing berbobot (Nginx, service mesh, atau fitur di load balancer).
Feature flag
Feature flag memisahkan deployment dari rilis fitur.
if (featureFlags.newCheckout) {
return newCheckout(req, res);
}
return oldCheckout(req, res);Kode baru bisa sudah ter-deploy tetapi belum aktif untuk semua pengguna.
Deploy != Release
Dengan feature flag, deployment dapat dilakukan lebih sering tanpa langsung mengubah pengalaman pengguna. Rilis fitur menjadi keputusan terpisah.
Memilih strategi
| Situasi | Rekomendasi |
|---|---|
| Server tunggal, downtime diterima | Recreate |
| Beberapa instance di belakang proxy | Rolling |
| Butuh rollback instan | Blue-Green |
| Perubahan berisiko tinggi | Canary + feature flag |
| Kubernetes | Rolling/Canary dengan readiness probe |
Rollback
| Strategi | Cara rollback |
|---|---|
| Recreate | Deploy tag lama |
| Rolling | Rollback deployment |
| Blue-Green | Alihkan trafik ke blue |
| Canary | Hentikan promosi, arahkan 100% ke versi lama |
Rollback harus diuji, bukan hanya ditulis di runbook.
Praktik: blue-green dengan dua compose project
# Blue aktif
cd /srv/app-blue && IMAGE_TAG=v1 docker compose up -d
# Deploy green
cd /srv/app-green && IMAGE_TAG=v2 docker compose up -d
curl -f http://127.0.0.1:3001/health
# Alihkan Nginx ke green
sed -i 's/3000/3001/' /etc/nginx/conf.d/app.conf
nginx -t && systemctl reload nginxJika health check green gagal, jangan alihkan trafik.
Ringkasan
- Recreate sederhana tetapi downtime.
- Rolling mengurangi downtime dengan beberapa instance.
- Blue-green memberi rollback instan dengan biaya resource lebih tinggi.
- Canary dan feature flag mengurangi risiko rilis.
Selanjutnya
Terapkan rilis tanpa downtime di Zero-Downtime Deployment.