Meningkatkan keandalan proses rilis: membandingkan canary, blue-green, dan progressive delivery, memakai feature flags untuk memisahkan deploy dari release, serta mempraktikkan canary deployment yang memantau metrik dan rollback otomatis sebelum traffic penuh

Jika kalian bertanya ke SRE mana pun "apa sumber insiden terbesar?", salah satu jawaban yang selalu muncul: deployment. Rilis adalah momen paling berisiko dalam siklus layanan — perubahan kode, konfigurasi, dan data bertemu dalam satu gerakan. Episode 11 mengubah rilis dari "momen menegangkan" menjadi proses yang bisa dikendalikan dengan gradasi risiko.
Ini hubungan langsung dengan pelajaran episode 4: error budget memberi izin untuk bergerak, dan release reliability adalah cara menggerakkan perubahan dalam batas budget itu. Semakin aman proses rilis, semakin sering kalian bisa rilis — dan semakin sedikit ruang error yang terbakar. Inilah paradoks yang indah: keandalan yang lebih baik membuat tim lebih cepat, bukan lebih lambat.
Semua traffic berpindah ke versi baru dalam satu langkah. Sederhana, tetapi risiko penuh: jika versi baru bermasalah, semua pengguna kena pada saat yang sama. Rollback-nya juga penuh — seluruh versi lama harus di-restore.
Dua environment identik: blue (versi lama, menerima traffic) dan green (versi baru, kosong). Setelah green dites, switch traffic ke green dalam satu langkah. Rollback semudah memindahkan traffic kembali ke blue.
| Aspek | Blue-green | Canary |
|---|---|---|
| Paparan risiko | Switch instan (semua atau tidak sama sekali) | Bertahap (1% → 5% → 100%) |
| Kecepatan rilis | Cepat | Lebih lambat, tetapi terukur |
| Rollback | Instant (switch kembali) | Instant (hapus canary) |
| Biaya infrastruktur | 2x environment | N+1 (beberapa pod) |
| Data/state | Butuh migrasi schema dua arah | Sama seperti umumnya |
Versi baru diluncurkan ke sebagian kecil traffic (misal 5%), dipantau, lalu diperbesar bertahap sambil dibandingkan metrik error/latency-nya dengan versi lama. Risiko terkecil dan bukti terkuat — keputusan "lanjut" dibuat berdasarkan data nyata, bukan harapan.
Payung yang mencakup semua: canary, feature flags, dan otomasi promosi berdasarkan metrik. Inilah cara pandang modern — rilis bukan satu peristiwa, melainkan proses yang dikontrol sepanjang jalan.
Keputusan di setiap titik cabang diambil dari perbandingan metrik, bukan dari perasaan. Persentase dan durasi tiap langkah sebaiknya dikonfigurasi sebagai parameter yang bisa diubah per rilis — skala risiko diatur, bukan dikira-kira.
Konsep kunci yang sering disalahartikan: deploy ≠ release. Deploy adalah kode baru masuk ke production; release adalah saat fitur benar-benar terlihat pengguna. Feature flags memisahkan keduanya: kode berisi fitur di belakang saklar (flag) yang bisa diubah kapan saja tanpa deployment baru.
Manfaat untuk SRE:
features:
checkout-v2:
enabled: true
percentage: 5
rules:
- segment: internal
dark-mode:
enabled: falseWarning
Feature flag adalah kode berjalan — flag yang ditinggalkan menumpuk dan menjadi hutang: if statement tak terhitung, logika mati, dan kerentanan. Tetapkan disiplin hidup: setiap flag wajib punya pemilik, tanggal cleanup, dan metrik pakai. Flag tanpa cleanup adalah toil dalam bentuk kode.
Canary tanpa metrik hanyalah "deploy beruntun dengan nama keren". Sebelum canary jalan, pastikan kalian membandingkan:
| Metrik | Pertanyaan |
|---|---|
| Error rate | Apakah error versi baru lebih tinggi dari baseline? |
| Latency (p50/p95/p99) | Apakah versi baru lebih lambat? |
| Saturation downstream | Apakah DB/queue tertekan? |
| Business signal | Apakah order/checkout selesai secara normal? |
Aturan mainnya: bandingkan pada periode yang sama (bukan canary siang vs baseline malam) dan otomatiskan keputusannya — manusia terlalu lambat dan subjektif untuk perbandingan 5 menit.
Kita praktikkan canary di Kubernetes memakai Argo Rollouts, yang menggantikan mekanisme rolling update Deployment standar:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: demo
spec:
replicas: 6
strategy:
canary:
steps:
- setWeight: 5
- pause: { duration: 5m }
- setWeight: 25
- pause: { duration: 10m }
- setWeight: 100
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo
image: demo:2.5.0Alur yang terjadi: rilis 2.5.0 menerima 5% traffic selama 5 menit, lalu 25% selama 10 menit, lalu 100%. Bila di tengah jalan metrik melanggar (Argo Rollouts terhubung ke Prometheus untuk analysis), canary otomatis di-rollback:
kubectl argo rollouts get rollout demo
kubectl argo rollouts promote demoName: demo
Strategy: Canary
Status: ✔ Healthy
STEP WEIGHT STATUS DURATION
1 5 ✔ Progressing 5m
2 25 ✔ Progressing 10m
3 100 ✔ Succeeded 30sTip
Mulailah dengan durasi dan persentase yang sederhana: 5% selama 5-10 menit sudah cukup untuk menangkap sebagian besar masalah nyata. Durasi panjang hanya menunda nilai dan menahan error budget untuk hal yang tidak perlu. Naikkan tingkat kepercayaan dengan menambah analysis otomatis, bukan menambah lama jeda.
Pada episode 11 ini, kalian telah menguasai seni rilis yang aman.
Inti yang harus dibawa pulang:
Di episode 12 selanjutnya, kita akan membahas area yang paling ditakuti banyak SRE: data reliability — database HA, backup & restore yang benar-benar berfungsi, dan keandalan data pipeline dengan SLO untuk data. Sampai jumpa di episode 12!