Saat Anda Ingin Umpan Balik Nyata Sebelum Meluncur Sepenuhnya
Tim Anda telah membangun mesin rekomendasi baru. Tampak hebat di staging. Pengujian lolos. Tim produk sangat antusias. Namun di suatu sudut pikiran Anda, Anda tahu lalu lintas staging tidak ada apa-apanya dibandingkan dengan kondisi nyata. Pengguna memiliki data aneh, pola yang tidak biasa, dan mereka melakukan hal-hal yang tidak pernah diduga siapa pun.
Anda bisa meluncurkannya ke semua orang sekaligus. Namun jika ada yang salah, setiap pengguna akan merasakannya. Anda bisa melakukan swap blue/green dan roll back cepat jika diperlukan. Namun Anda tetap tidak akan tahu bagaimana versi baru berperilaku di bawah beban nyata sampai semua orang menggunakannya.
Yang benar-benar Anda inginkan adalah cara untuk membiarkan sekelompok kecil pengguna menguji versi baru terlebih dahulu, sementara yang lain tetap menggunakan versi lama. Jika ada yang rusak, hanya segelintir orang yang terkena dampaknya. Jika berhasil, Anda bisa secara bertahap mengizinkan lebih banyak orang masuk.
Itulah canary deployment.
Namanya Berasal dari Tambang Batu Bara
Pada masa awal penambangan batu bara, para pekerja membawa burung kenari ke dalam terowongan. Burung-burung ini sensitif terhadap gas beracun seperti karbon monoksida. Jika kenari berhenti berkicau atau mati, para penambang tahu ada bahaya dan bisa mengungsi sebelum terlambat.
Canary deployment bekerja dengan cara yang sama. Anda memperkenalkan versi baru aplikasi Anda ke sebagian kecil pengguna terlebih dahulu. Jika versi baru memiliki masalah, hanya sedikit pengguna yang terkena dampak, dan Anda dapat menariknya kembali dengan cepat. Jika berperilaku baik, Anda memperluas audiens secara bertahap.
Kenari bukanlah versi baru itu sendiri. Kenari adalah kelompok kecil pengguna yang mengujinya untuk Anda.
Cara Kerjanya dalam Praktik
Bayangkan aplikasi Anda berjalan di Kubernetes dengan sepuluh pod. Biasanya, semua sepuluh pod melayani semua pengguna. Dengan canary deployment, Anda memutar satu atau dua pod yang menjalankan versi baru. Kemudian Anda mengarahkan sebagian kecil lalu lintas -- katakanlah 5% atau 10% -- ke pod baru tersebut. Sisa lalu lintas tetap menuju ke versi lama.
Selama periode ini, tim Anda memantau metrik utama: tingkat kesalahan, waktu respons, throughput, dan laporan pengguna. Jika versi baru terlihat sehat setelah beberapa waktu, Anda meningkatkan persentase lalu lintas. Jika ada yang salah, Anda mengarahkan semua lalu lintas kembali ke versi lama.
Diagram alur berikut mengilustrasikan proses pengambilan keputusan:
Ini berbeda dengan rolling update. Dalam rolling update, Anda mengganti instance satu per satu tanpa mengontrol pengguna mana yang mengenai versi baru. Siapa pun yang kebetulan mendarat di instance yang diperbarui akan langsung mendapatkan kode baru. Canary deployment memberi Anda kendali eksplisit atas berapa banyak lalu lintas yang mencapai versi baru, dan Anda dapat mengubah persentase itu kapan saja.
Di Mana Pembagian Lalu Lintas Terjadi
Mekanisme pembagian lalu lintas tergantung pada tumpukan infrastruktur Anda.
Di lapisan jaringan, load balancer seperti HAProxy atau NGINX dapat mengarahkan persentase permintaan ke versi baru. Ini sederhana dan berfungsi untuk sebagian besar pengaturan.
Di lapisan service mesh, alat seperti Istio atau Linkerd memberi Anda kendali yang lebih halus. Anda dapat membagi lalu lintas berdasarkan header HTTP, cookie, atau atribut pengguna tertentu. Ini memungkinkan Anda menargetkan penguji internal, pengguna beta, atau pengguna dari wilayah tertentu tanpa memengaruhi yang lain.
Beberapa aplikasi bahkan menerapkan pembagian lalu lintas dalam kode mereka sendiri. Aplikasi itu sendiri memutuskan versi mana yang akan disajikan berdasarkan ID pengguna atau jenis akun. Pendekatan ini memberikan fleksibilitas maksimum tetapi menambah kompleksitas pada basis kode.
Kapan Canary Deployment Paling Berguna
Canary deployment paling berguna untuk perubahan dengan risiko sedang hingga tinggi. Ini adalah perubahan yang sulit divalidasi sepenuhnya di staging karena data dan pola lalu lintas staging tidak pernah cocok persis dengan produksi.
Contohnya meliputi:
- Mengganti algoritma rekomendasi
- Memperbarui logika pembayaran
- Mengubah cara aplikasi berkomunikasi dengan database
- Memperkenalkan lapisan caching baru
- Memodifikasi alur autentikasi atau otorisasi
Untuk perubahan semacam ini, canary deployment memberi Anda kepercayaan diri melalui validasi dunia nyata. Anda melihat bagaimana versi baru berperilaku dengan data pengguna aktual, pola lalu lintas aktual, dan kondisi infrastruktur aktual -- tetapi hanya pada sebagian kecil pengguna.
Tantangan Nyata
Canary deployment bukanlah peluru ajaib. Ini memiliki serangkaian persyaratan dan risikonya sendiri.
Anda membutuhkan observabilitas yang baik. Tanpa dasbor yang membandingkan tingkat kesalahan, latensi, dan throughput antara versi lama dan baru, Anda buta. Anda perlu tahu, dalam hitungan menit, apakah grup canary mengalami lebih banyak kesalahan atau respons lebih lambat daripada grup kontrol.
Beberapa pengguna akan memiliki pengalaman yang berbeda. Jika versi baru lebih buruk, pengguna tersebut akan merasakannya terlebih dahulu. Ini adalah trade-off yang Anda terima untuk mendapatkan umpan balik awal. Pastikan grup canary cukup kecil sehingga dampaknya dapat diterima jika terjadi kesalahan.
Manajemen sesi dan status menjadi rumit. Jika aplikasi Anda mempertahankan sesi atau status pengguna, pembagian lalu lintas dapat merusak sesi tersebut. Seorang pengguna mungkin memulai permintaan di versi lama dan berakhir di versi baru untuk permintaan berikutnya. Anda perlu memastikan bahwa data sesi kompatibel atau bahwa pembagian lalu lintas menghormati afinitas sesi.
Observabilitas itu sendiri bisa menjadi tantangan. Jika alat pemantauan Anda menggabungkan metrik di semua instance, Anda tidak akan dapat membedakan antara versi lama dan baru. Anda memerlukan metrik yang diberi tag berdasarkan versi atau label deployment.
Mengotomatiskan Jaring Pengaman
Banyak tim menggabungkan canary deployment dengan observasi otomatis. Alih-alih seseorang terus-menerus memantau dasbor, Anda menetapkan ambang batas. Jika tingkat kesalahan versi baru melebihi 1% di atas versi lama, pipeline secara otomatis menghentikan canary dan mengarahkan semua lalu lintas kembali ke versi lama.
Otomatisasi ini membuat canary deployment jauh lebih aman. Sistem melindungi dirinya sendiri tanpa menunggu manusia menyadari masalah, menyelidiki, dan memutuskan untuk roll back.
Ekspansi Bertahap
Setelah versi baru terlihat stabil -- katakanlah setelah satu jam tanpa masalah -- Anda meningkatkan persentase lalu lintas langkah demi langkah. Langkah umum adalah 25%, 50%, lalu 100%. Pada setiap langkah, Anda memantau metrik yang sama dan memastikan tidak ada yang berubah.
Ketika semua lalu lintas berada di versi baru, canary deployment selesai. Versi lama dapat diskalakan dan dihapus.
Daftar Periksa Praktis Singkat
Sebelum menerapkan canary deployment, pastikan hal-hal ini sudah siap:
- Mekanisme pembagian lalu lintas (load balancer, service mesh, atau logika aplikasi)
- Metrik yang diberi tag berdasarkan versi (tingkat kesalahan, latensi, throughput)
- Dasbor yang membandingkan metrik versi lama vs baru secara real-time
- Ambang batas rollback otomatis (misalnya, peningkatan tingkat kesalahan > 1%)
- Afinitas sesi atau kompatibilitas status antar versi
- Rencana komunikasi untuk grup canary (jika pengguna dapat diidentifikasi)
Intisari Konkret
Canary deployment bukan tentang alat mewah atau konfigurasi rumit. Ini tentang mengurangi radius ledakan perubahan. Anda membiarkan sekelompok kecil pengguna nyata memvalidasi pekerjaan Anda dalam kondisi nyata sebelum Anda mengikat semua orang. Teknik ini berhasil karena merangkul kebenaran sederhana: tidak peduli seberapa baik lingkungan staging Anda, produksi selalu menemukan sesuatu yang Anda lewatkan. Canary deployment memastikan bahwa ketika produksi menemukan hal itu, hanya sedikit pengguna yang terkena dampak, bukan semuanya.