Paket 2 · Praktik LanjutanModul C — Production Deployment

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

StrategiDowntimeRollbackBiaya resourceRisiko
RecreateYaSedangRendahTinggi
RollingMinimalSedangSedangSedang
Blue-GreenNolInstanTinggiRendah
CanaryNolCepatSedangRendah

Recreate

Matikan versi lama, jalankan versi baru.

docker compose down
docker compose up -d

Cocok 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:

  1. Deploy versi baru ke green.
  2. Uji green secara internal.
  3. Alihkan trafik dari blue ke green.
  4. Pantau.
  5. 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 nginx

Canary

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

SituasiRekomendasi
Server tunggal, downtime diterimaRecreate
Beberapa instance di belakang proxyRolling
Butuh rollback instanBlue-Green
Perubahan berisiko tinggiCanary + feature flag
KubernetesRolling/Canary dengan readiness probe

Rollback

StrategiCara rollback
RecreateDeploy tag lama
RollingRollback deployment
Blue-GreenAlihkan trafik ke blue
CanaryHentikan 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 nginx

Jika 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.

On this page