(0275) 2974 127
Dalam pengembangan aplikasi modern, pembaruan software perlu dilakukan secara berkala untuk memperbaiki bug, meningkatkan performa, menambahkan fitur, atau memperkuat keamanan. Namun, proses pembaruan dapat menjadi tantangan ketika aplikasi harus tetap tersedia dan melayani pengguna selama proses deployment berlangsung.
Salah satu strategi yang digunakan untuk mengurangi gangguan tersebut adalah rolling deployment. Strategi ini memungkinkan versi lama aplikasi digantikan secara bertahap oleh versi baru, sehingga tidak semua instance aplikasi diperbarui pada waktu yang sama.
Rolling deployment banyak digunakan dalam lingkungan cloud, container, orchestration platform, dan sistem yang membutuhkan ketersediaan aplikasi secara berkelanjutan. Kubernetes, misalnya, menggunakan strategi RollingUpdate sebagai strategi default untuk Deployment dan mengganti Pod lama secara bertahap dengan Pod baru.
Rolling deployment adalah strategi deployment yang memperbarui aplikasi secara bertahap dengan mengganti instance atau server yang menjalankan versi lama menjadi versi baru secara berurutan atau dalam beberapa kelompok.
Dalam proses ini, versi lama dan versi baru aplikasi dapat berjalan secara bersamaan untuk sementara waktu. Instance baru terlebih dahulu dijalankan dan dipastikan siap menerima trafik sebelum sebagian instance lama dihentikan.
Dengan mekanisme tersebut, aplikasi tidak perlu menghentikan seluruh instance sekaligus hanya untuk memasang versi terbaru. AWS menjelaskan bahwa rolling deployment secara perlahan mengganti versi aplikasi sebelumnya dengan versi baru, misalnya dengan mengganti container lama satu per satu pada lingkungan Amazon ECS.
Sebagai gambaran sederhana, sebuah aplikasi memiliki 4 instance:
Versi lama: Instance 1 — Instance 2 — Instance 3 — Instance 4
Ketika versi baru dirilis, proses rolling deployment dapat berjalan seperti berikut:
Tahap 1:
Instance 1 → versi baru
Instance 2 → versi lama
Instance 3 → versi lama
Instance 4 → versi lama
Tahap 2:
Instance 1 → versi baru
Instance 2 → versi baru
Instance 3 → versi lama
Instance 4 → versi lama
Tahap 3:
Instance 1 → versi baru
Instance 2 → versi baru
Instance 3 → versi baru
Instance 4 → versi lama
Tahap 4:
Semua instance → versi baru
Dengan pendekatan tersebut, kapasitas aplikasi dapat tetap tersedia selama proses pembaruan, selama jumlah instance dan konfigurasi deployment dirancang dengan tepat.
Rolling deployment bekerja dengan mengganti komponen aplikasi secara bertahap. Mekanisme detailnya dapat berbeda tergantung platform yang digunakan, tetapi konsep dasarnya relatif sama.
1. Menentukan Versi Baru
Deployment dimulai ketika tim ingin merilis versi aplikasi yang baru. Perubahan dapat berupa update kode, container image, konfigurasi tertentu, atau komponen aplikasi lainnya. Dalam Kubernetes, perubahan pada Pod template seperti container image dapat memicu rollout baru pada Deployment.
2. Menjalankan Instance Versi Baru
Sistem kemudian membuat atau mengaktifkan instance yang menggunakan versi baru. Instance tersebut perlu memenuhi kondisi yang ditentukan sebelum dianggap siap. Dalam Kubernetes, misalnya, Pod baru akan dijalankan dan sistem secara bertahap mengganti Pod lama setelah Pod baru tersedia.
3. Memastikan Instance Baru Siap
Sistem perlu memastikan versi baru dapat berjalan dengan baik sebelum instance lama dikurangi. Pemeriksaan dapat melibatkan health check, readiness check, status aplikasi, atau mekanisme monitoring lainnya. Tahap ini penting karena deployment tidak seharusnya hanya melihat apakah proses aplikasi berhasil dijalankan, tetapi juga apakah aplikasi benar-benar siap melayani trafik.
4. Mengurangi Instance Lama
Setelah instance baru siap, sebagian instance lama dapat dihentikan atau dikeluarkan dari layanan. Jumlah instance yang diganti pada setiap tahap bergantung pada konfigurasi deployment.
5. Mengulangi Proses
Langkah tersebut dilakukan secara berulang sampai seluruh instance menggunakan versi baru. Jika selama proses ditemukan masalah, rollout dapat dihentikan atau dikembalikan ke versi sebelumnya, tergantung kemampuan platform dan konfigurasi deployment.
Misalnya sebuah website memiliki 5 instance aplikasi dan ingin diperbarui dari versi 1.0 ke versi 2.0. Tanpa rolling deployment, seluruh instance dapat dihentikan terlebih dahulu kemudian diganti dengan versi baru. Cara tersebut berpotensi menyebabkan downtime. Dengan rolling deployment, proses dapat dilakukan secara bertahap:
| Tahap | Versi 1.0 | Versi 2.0 | Total Instance |
|---|---|---|---|
| Awal | 5 | 0 | 5 |
| Tahap 1 | 4 | 1 | 5 |
| Tahap 2 | 3 | 2 | 5 |
| Tahap 3 | 2 | 3 | 5 |
| Tahap 4 | 1 | 4 | 5 |
| Selesai | 0 | 5 | 5 |
Dalam praktik, jumlah instance yang tersedia dapat berubah selama proses jika konfigurasi deployment mengizinkan penambahan instance sementara. Pada Kubernetes, hal ini dikendalikan antara lain melalui parameter maxUnavailable dan maxSurge.
Dalam implementasi rolling deployment, terdapat beberapa konfigurasi yang menentukan bagaimana proses penggantian dilakukan.
Max Unavailable
Max unavailable menentukan jumlah maksimum instance yang boleh berada dalam kondisi tidak tersedia selama proses deployment. Pada Kubernetes, maxUnavailable dapat ditentukan menggunakan angka absolut atau persentase. Nilai default untuk RollingUpdate Kubernetes adalah 25%.
Misalnya terdapat 10 Pod dan maxUnavailable ditetapkan sebesar 20%. Secara sederhana, maksimal sekitar 2 Pod dapat tidak tersedia selama proses update, sesuai aturan perhitungan platform. Semakin kecil nilai ini, semakin banyak kapasitas yang dipertahankan selama deployment, tetapi proses pembaruan dapat menjadi lebih lambat.
Max Surge
Max surge menentukan jumlah maksimum instance tambahan yang boleh dibuat melebihi jumlah instance yang diinginkan selama proses rolling update. Pada Kubernetes, maxSurge juga dapat dinyatakan dalam angka atau persentase dan memiliki nilai default 25%.
Sebagai contoh, jika aplikasi memiliki 10 Pod dan maxSurge ditetapkan 20%, sistem dapat membuat Pod tambahan selama proses update hingga batas yang ditentukan. Pengaturan ini memungkinkan instance baru tersedia terlebih dahulu sebelum instance lama dihentikan.
Rolling deployment sangat erat kaitannya dengan Kubernetes karena RollingUpdate merupakan strategi default untuk objek Deployment. Kubernetes secara bertahap melakukan scale down pada ReplicaSet lama dan scale up pada ReplicaSet baru. Contoh konfigurasi sederhana:
apiVersion: apps/v1
kind: Deployment
metadata:
name: aplikasi-web
spec:
replicas: 4
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
selector:
matchLabels:
app: aplikasi-web
template:
metadata:
labels:
app: aplikasi-web
spec:
containers:
- name: aplikasi-web
image: aplikasi-web:v2
Pada konfigurasi tersebut, aplikasi menjalankan empat replica. maxUnavailable: 1 membatasi jumlah Pod yang dapat tidak tersedia selama update, sedangkan maxSurge: 1 memungkinkan satu Pod tambahan dibuat di atas jumlah replica yang diinginkan selama proses pembaruan.
Setelah konfigurasi atau image diperbarui, Kubernetes akan melakukan rollout secara bertahap. Status proses dapat dipantau menggunakan perintah kubectl rollout status.
Salah satu alasan utama menggunakan rolling deployment adalah untuk mengurangi atau menghindari downtime selama proses deployment. Namun, penting untuk memahami bahwa rolling deployment tidak otomatis menjamin zero downtime dalam semua kondisi.
Agar aplikasi tetap tersedia, sistem harus memiliki beberapa instance yang dapat melayani trafik, konfigurasi deployment harus tepat, dan aplikasi harus mampu berjalan dengan baik selama periode ketika versi lama dan versi baru mungkin hidup bersamaan.
Dokumentasi Kubernetes menjelaskan bahwa rolling update dapat melakukan update secara bertahap sehingga aplikasi tetap tersedia, tetapi menjalankan beberapa instance aplikasi merupakan bagian penting untuk melakukan update tanpa memengaruhi availability. Karena itu, rolling deployment sebaiknya dipadukan dengan:
Rolling deployment memiliki sejumlah kelebihan yang membuatnya populer dalam lingkungan aplikasi modern.
Meskipun memiliki banyak manfaat, rolling deployment juga mempunyai keterbatasan.
Rolling deployment dapat dibandingkan dengan strategi Recreate.
| Aspek | Rolling Deployment | Recreate |
|---|---|---|
| Proses | Mengganti instance secara bertahap | Menghentikan instance lama sebelum membuat yang baru |
| Downtime | Dapat diminimalkan | Umumnya terjadi selama transisi |
| Versi lama & baru | Dapat berjalan bersamaan | Tidak dirancang untuk berjalan bersamaan selama upgrade |
| Kompleksitas | Lebih tinggi | Lebih sederhana |
| Cocok untuk | Aplikasi yang membutuhkan availability | Aplikasi yang dapat menerima downtime |
| Risiko transisi | Perlu memperhatikan kompatibilitas versi | Transisi lebih sederhana tetapi downtime lebih besar |
Dalam Kubernetes, Recreate akan menghentikan Pod yang ada sebelum membuat Pod baru, sedangkan RollingUpdate mengganti Pod lama dengan Pod baru secara bertahap.
Rolling deployment dan blue-green deployment sama-sama dapat digunakan untuk mengurangi risiko deployment, tetapi mekanismenya berbeda.
| Aspek | Rolling Deployment | Blue-Green Deployment |
|---|---|---|
| Infrastruktur | Menggunakan instance yang sama secara bertahap | Menyiapkan environment lama dan baru |
| Penggantian | Bertahap | Dapat dialihkan sekaligus |
| Versi berjalan bersamaan | Umumnya ya | Ya, pada environment berbeda |
| Isolasi environment | Lebih rendah | Lebih tinggi |
| Kebutuhan resource | Cenderung lebih hemat | Dapat membutuhkan resource lebih besar |
| Rollback | Dapat lebih kompleks | Umumnya lebih sederhana karena environment lama tetap tersedia |
| Kecepatan switching | Bertahap | Dapat sangat cepat |
| Cocok untuk | Deployment bertahap dan efisien | Rilis yang membutuhkan isolasi dan rollback cepat |
AWS menjelaskan bahwa rolling deployment umumnya lebih cepat dibandingkan blue-green, tetapi rolling deployment tidak memiliki isolasi environment antara versi lama dan versi baru seperti yang dimiliki blue-green.
Rolling deployment juga sering dibandingkan dengan canary deployment.
| Aspek | Rolling Deployment | Canary Deployment |
|---|---|---|
| Fokus | Mengganti instance secara bertahap | Menguji versi baru pada sebagian kecil trafik atau pengguna |
| Tujuan utama | Melakukan update bertahap | Mengurangi risiko dengan validasi pada kelompok kecil |
| Distribusi trafik | Bergantung konfigurasi sistem | Sengaja diarahkan ke kelompok tertentu |
| Validasi | Berlangsung selama rollout | Sangat menekankan evaluasi versi baru sebelum diperluas |
| Rollout | Bertahap hingga seluruh instance diperbarui | Diperluas setelah hasil canary dianggap baik |
Keduanya dapat digunakan bersama. Kubernetes, misalnya, mendokumentasikan penggunaan partisi pada StatefulSet RollingUpdate untuk mendukung skenario seperti canary update.
Rolling deployment cocok digunakan ketika aplikasi memiliki beberapa instance yang dapat berjalan secara paralel dan perusahaan ingin memperbarui aplikasi tanpa menghentikan seluruh layanan. Strategi ini sangat berguna untuk:
Namun, keputusan menggunakan rolling deployment tetap harus mempertimbangkan arsitektur aplikasi, kebutuhan availability, kompatibilitas versi, database, dan kemampuan rollback.
Agar rolling deployment berjalan lebih aman, beberapa praktik berikut dapat diterapkan.
Gunakan Health Check
Pastikan sistem dapat membedakan instance yang benar-benar siap melayani trafik dengan instance yang hanya berhasil menjalankan proses aplikasinya.
Atur Max Unavailable dan Max Surge
Jangan menggunakan konfigurasi secara sembarangan. Sesuaikan jumlah instance yang boleh dihentikan dan instance tambahan yang boleh dibuat dengan kapasitas infrastruktur.
Gunakan Monitoring
Pantau error rate, latency, CPU, memory, request rate, serta metrik aplikasi selama rollout.
Siapkan Rollback
Deployment harus memiliki mekanisme untuk kembali ke versi sebelumnya apabila versi baru mengalami masalah. Kubernetes menyediakan revision history dan mekanisme rollback untuk Deployment, sehingga versi sebelumnya dapat digunakan kembali ketika diperlukan.
Pastikan Kompatibilitas Antarversi
Karena versi lama dan baru dapat berjalan bersamaan, API, database schema, konfigurasi, dan format data harus dirancang agar tetap kompatibel selama masa transisi.
Lakukan Pengujian Sebelum Deployment
Automated testing, integration testing, dan pemeriksaan konfigurasi dapat membantu mengurangi kemungkinan versi bermasalah masuk ke production.
Gunakan Observability
Logging, metrics, tracing, dan alerting membantu tim mengetahui kondisi aplikasi selama rollout dan menemukan masalah lebih cepat.
Tidak selalu. Rolling deployment dirancang untuk melakukan pembaruan aplikasi secara bertahap sehingga gangguan layanan dapat diminimalkan, tetapi strategi ini tidak secara otomatis menjamin zero downtime. Keberhasilannya bergantung pada arsitektur aplikasi, jumlah instance, konfigurasi deployment, kesiapan sistem, serta kemampuan aplikasi dalam menangani proses pergantian versi.
Sebagai contoh, jika aplikasi hanya memiliki satu instance, tidak ada instance lain yang dapat melayani trafik ketika instance tersebut sedang diperbarui. Gangguan juga dapat terjadi apabila versi baru mengalami kegagalan saat dijalankan, health check tidak dikonfigurasi dengan baik, atau terdapat perubahan database yang tidak kompatibel antara versi lama dan versi baru. Oleh karena itu, rolling deployment sebaiknya dipahami sebagai strategi untuk melakukan pembaruan secara bertahap dan mengurangi risiko downtime, bukan sebagai jaminan bahwa layanan akan selalu tersedia tanpa gangguan.
Rolling deployment adalah strategi deployment yang mengganti versi lama aplikasi dengan versi baru secara bertahap, sehingga tidak seluruh instance diperbarui secara bersamaan. Pendekatan ini dapat membantu menjaga availability, mengurangi risiko deployment, dan mendukung proses rilis aplikasi yang lebih terkontrol.
Dalam penerapannya, rolling deployment perlu memperhatikan jumlah instance, health check, monitoring, kompatibilitas antara versi lama dan baru, serta mekanisme rollback. Pada Kubernetes, strategi RollingUpdate menjadi strategi default untuk Deployment dan dapat dikontrol menggunakan parameter seperti maxUnavailable dan maxSurge.
Rolling deployment juga memiliki karakteristik berbeda dibandingkan Recreate, Blue-Green Deployment, dan Canary Deployment. Oleh karena itu, pemilihan strategi perlu disesuaikan dengan arsitektur aplikasi, kebutuhan availability, kapasitas infrastruktur, dan tingkat risiko perubahan.
Dengan perencanaan dan monitoring yang tepat, rolling deployment dapat menjadi salah satu pendekatan penting dalam CI/CD, cloud computing, container orchestration, dan pengembangan aplikasi modern. Untuk memperdalam wawasan mengenai hosting, server, cloud computing, DevOps, dan teknologi website, Anda dapat menemukan berbagai panduan informatif di Blog Hosteko. Sementara itu, Hosteko Hosting Indonesia dapat menjadi pilihan bagi Anda yang membutuhkan layanan hosting untuk mendukung website dan kebutuhan digital bisnis.
Perkembangan pola kerja jarak jauh membuat kebutuhan untuk mengakses komputer kantor dari rumah atau lokasi…
Apa Saja Fungsi Command Prompt? Command Prompt memiliki berbagai fungsi yang memungkinkan pengguna menjalankan tugas…
Dalam pemasaran B2B, tidak semua calon pelanggan memiliki nilai bisnis yang sama. Ada perusahaan yang…
Command Prompt atau yang sering disingkat CMD adalah antarmuka baris perintah (command-line interface/CLI) pada Windows…
Setelah domain, hosting, WordPress, tema, WooCommerce, produk, pembayaran, dan pengiriman berhasil dikonfigurasi, website e-commerce sebenarnya…
Ransomware merupakan salah satu ancaman siber yang dapat mengganggu operasional organisasi dengan cara mengenkripsi data…