Back to Blog DevOps & Scalability

Zero-Downtime Deployment

Bluev1 aktif
traffic switch
Greenv2 siap

Zero-downtime deployment berarti pengguna tidak menerima error saat versi baru dirilis. Kuncinya adalah menjalankan versi lama dan baru secara bersamaan untuk sementara, serta menjaga perubahan database tetap kompatibel.

Build artefak sekali

Artefak yang diuji di CI harus sama dengan yang dijalankan di produksi. Jangan menjalankan instalasi dependency berbeda pada setiap server tanpa lock file.

Bash
docker build -t registry.example.com/app:${GIT_SHA} .
docker push registry.example.com/app:${GIT_SHA}

Health check sebelum menerima traffic

Dockerfile
HEALTHCHECK --interval=10s --timeout=3s --retries=3   CMD curl -fsS http://localhost/health/ready || exit 1

Readiness harus memeriksa dependency penting tanpa menjadi terlalu berat. Instance baru hanya masuk load balancer setelah benar-benar siap.

Migrasi database memakai pola expand–migrate–contract

  1. 1
    Expand: tambahkan kolom/tabel baru tanpa menghapus yang lama.
  2. 2
    Deploy kode yang dapat membaca dua bentuk data.
  3. 3
    Migrate: isi data lama secara bertahap.
  4. 4
    Alihkan pembacaan dan penulisan ke struktur baru.
  5. 5
    Contract: hapus struktur lama pada release terpisah.

Rollback harus nyata

Rollback bukan sekadar menjalankan image lama. Pastikan konfigurasi, migration, dan format message tetap kompatibel. Uji rollback dalam staging dan simpan metrik pembanding sebelum release.

GateContoh
Sebelum deployTest, security scan, migration check.
Saat rolloutReadiness, error rate, latency p95.
Setelah traffic switchBusiness metric dan log exception.
Rollback triggerError rate atau latency melewati ambang.
Share this article

Related articles

Copied