Apa Itu Circuit Breaker pada Microservices? Cara Kerja & Manfaat

Development & Security •

Arsitektur microservices memungkinkan aplikasi membagi fungsi ke dalam layanan-layanan yang saling berkomunikasi. Namun, ketergantungan antar layanan juga dapat menimbulkan masalah ketika salah satu layanan mengalami gangguan. Jika layanan lain terus mengirim permintaan ke layanan yang bermasalah, kinerja aplikasi secara keseluruhan dapat ikut menurun.

Untuk mengatasi kondisi tersebut, pengembang dapat menerapkan circuit breaker pattern. Mekanisme ini membantu membatasi komunikasi ke layanan yang gagal sementara waktu sehingga gangguan tidak semakin meluas. Dengan penerapan yang tepat, aplikasi dapat menangani kegagalan secara lebih terkontrol.

Baca juga: Mengenal Container dan Cara Kerja – IDCloudHost

Apa Itu Circuit Breaker pada Microservices?

Circuit breaker adalah pola desain yang menghentikan sementara permintaan ke layanan yang mengalami kegagalan berulang atau tidak merespons sesuai batas yang ditentukan. Mekanisme ini terinspirasi dari pemutus arus listrik yang memutus aliran ketika mendeteksi kondisi berbahaya.

Dalam arsitektur microservices, setiap layanan dapat bergantung pada layanan lain untuk menyelesaikan suatu proses. Contohnya, layanan pemesanan membutuhkan layanan pembayaran untuk memproses transaksi. Jika layanan pembayaran mengalami gangguan, permintaan yang terus dikirim dapat menambah beban dan memperlambat proses lainnya.

Circuit breaker membantu mengendalikan komunikasi tersebut. Ketika jumlah kegagalan memenuhi ambang yang telah ditentukan, mekanisme ini menghentikan sementara permintaan ke layanan tujuan. Setelah waktu tertentu, sistem dapat mencoba kembali untuk mengetahui apakah layanan sudah pulih.

Pola ini merupakan bagian dari pendekatan fault tolerance, yaitu kemampuan sistem untuk tetap menangani gangguan tanpa langsung kehilangan seluruh fungsinya. Circuit breaker juga membantu mengurangi risiko cascading failure, ketika gangguan pada satu layanan memengaruhi layanan lain yang bergantung padanya.

Manfaat Circuit Breaker untuk Microservices

Circuit breaker adalah

Penerapan circuit breaker membantu aplikasi menghadapi gangguan antar layanan secara lebih terkontrol. Manfaatnya tidak hanya berkaitan dengan penghentian permintaan, tetapi juga dengan pengelolaan dampak kegagalan terhadap sistem.

1. Mencegah Cascading Failure

Dalam arsitektur microservices, satu layanan dapat bergantung pada beberapa layanan lainnya. Ketika salah satu layanan gagal, layanan yang bergantung padanya berpotensi mengalami penumpukan permintaan atau kehabisan sumber daya karena terus menunggu respons.

Circuit breaker membatasi komunikasi ke layanan yang bermasalah sehingga dampak gangguan tidak terus menyebar. Meski demikian, sistem tetap memerlukan mekanisme penanganan kegagalan yang sesuai agar layanan lain dapat memberikan respons yang terkendali.

2. Mengurangi Permintaan yang Tidak Perlu

Permintaan berulang ke layanan yang belum pulih dapat menghabiskan sumber daya dan memperburuk kondisi sistem. Circuit breaker menghentikan sementara permintaan ketika pola kegagalan memenuhi kriteria yang ditentukan.

Dengan demikian, aplikasi tidak perlu terus menunggu respons dari layanan yang sedang bermasalah. Sumber daya dapat digunakan untuk menangani pekerjaan lain yang masih bisa diproses.

3. Memberi Waktu bagi Layanan untuk Pulih

Layanan yang mengalami beban tinggi atau gangguan sementara membutuhkan kesempatan untuk kembali beroperasi dengan normal. Jika permintaan terus berdatangan, proses pemulihan dapat menjadi lebih sulit.

Circuit breaker membantu mengurangi tekanan tambahan dengan membatasi komunikasi selama periode tertentu. Setelah itu, state Half-Open memungkinkan sistem memeriksa pemulihan layanan secara bertahap.

4. Menjaga Respons Aplikasi

Circuit breaker dapat membantu aplikasi merespons kegagalan dengan lebih cepat karena sistem tidak perlu terus menunggu layanan yang tidak memberikan respons. Pengembang juga dapat menyiapkan fallback, yaitu mekanisme alternatif ketika layanan utama tidak tersedia.

Contohnya, aplikasi dapat menampilkan status layanan sementara atau menyimpan permintaan untuk diproses kemudian jika alur bisnis mendukungnya. Namun, fallback harus dirancang sesuai kebutuhan aplikasi. Untuk transaksi pembayaran, misalnya, sistem tidak boleh menyatakan transaksi berhasil hanya karena layanan pembayaran sedang tidak tersedia.

Baca juga: Optimalkan Bisnis Anda dengan Managed Kubernetes IDCloudHost

Perbedaan Circuit Breaker dan Retry

Circuit breaker dan retry sama-sama membantu menangani kegagalan komunikasi antar layanan, tetapi keduanya memiliki tujuan berbeda. Retry mencoba kembali permintaan yang gagal, sedangkan circuit breaker membatasi permintaan ketika kegagalan terjadi berulang kali.

Circuit Breaker Menghentikan Sementara Permintaan

Circuit breaker berfokus pada pengendalian komunikasi ketika layanan menunjukkan pola kegagalan tertentu. Setelah ambang kegagalan tercapai, sistem menghentikan sementara permintaan dan menunggu sebelum melakukan pengujian kembali.

Pendekatan ini berguna ketika layanan tujuan tidak tersedia atau terus mengalami timeout. Dengan membatasi permintaan, sistem dapat mengurangi tekanan tambahan pada layanan tersebut.

Retry Mencoba Kembali Permintaan yang Gagal

Retry menjalankan kembali permintaan setelah kegagalan, misalnya ketika terjadi gangguan jaringan sesaat. Mekanisme ini dapat membantu jika masalah bersifat sementara dan layanan masih mampu memproses permintaan.

Namun, retry yang terlalu sering dapat menambah beban pada layanan yang sudah bermasalah. Karena itu, pengembang biasanya menetapkan batas percobaan dan jeda antar percobaan, misalnya menggunakan exponential backoff.

Kedua pola ini dapat digunakan bersama. Retry menangani kegagalan sementara dalam batas tertentu, sedangkan circuit breaker membatasi komunikasi jika kegagalan terus berulang. Konfigurasinya perlu diselaraskan agar retry tidak justru memperparah kondisi layanan.

Hal yang Perlu Diperhatikan saat Menerapkan Circuit Breaker

Circuit breaker perlu dikonfigurasi berdasarkan karakteristik aplikasi dan layanan yang dilindungi. Penerapan tanpa pengaturan yang tepat dapat membuat permintaan terputus terlalu cepat atau justru terlambat menghentikan komunikasi.

Menentukan Ambang Kegagalan dan Waktu Tunggu

Pengembang perlu menentukan kondisi yang memicu perpindahan dari state Closed ke Open. Parameter yang dapat digunakan antara lain tingkat kegagalan, jumlah permintaan yang diamati, dan durasi pemantauan. Waktu tunggu pada state Open juga perlu disesuaikan dengan kebutuhan layanan.

Jika terlalu singkat, sistem mungkin mencoba kembali ketika layanan belum pulih. Sebaliknya, jika terlalu lama, aplikasi dapat terus menolak permintaan meskipun layanan sudah kembali normal. Karena karakteristik setiap layanan berbeda, konfigurasi sebaiknya ditentukan berdasarkan pengujian dan hasil pemantauan, bukan menggunakan satu nilai untuk semua layanan.

Menyiapkan Fallback dan Monitoring

Circuit breaker sebaiknya dilengkapi dengan penanganan alternatif yang sesuai ketika permintaan tidak dapat diteruskan. Bentuknya dapat berupa pesan kesalahan yang jelas, data sementara yang masih valid, atau mekanisme antrean jika proses bisnis mendukungnya.

Selain itu, pantau perubahan state circuit breaker, tingkat kegagalan, jumlah timeout, dan waktu respons layanan. Data tersebut membantu tim menemukan pola gangguan dan mengevaluasi apakah konfigurasi yang digunakan sudah sesuai.

Baca juga: Panduan Konfigurasi Load Balancer di Cloud VPS IDCloudHost

Cara Kerja Circuit Breaker

Circuit breaker umumnya memiliki tiga state atau keadaan utama, yaitu Closed, Open, dan Half-Open. Setiap state menentukan bagaimana sistem menangani permintaan ke layanan tujuan.

1. Closed

Pada state Closed, circuit breaker mengizinkan permintaan diteruskan ke layanan tujuan seperti biasa. Sistem juga memantau hasil permintaan untuk mengetahui apakah layanan berjalan normal atau mengalami kegagalan. Jika permintaan berhasil, komunikasi berlanjut seperti biasa.

Namun, ketika jumlah kegagalan mencapai ambang yang telah dikonfigurasi, circuit breaker berpindah ke state Open. Sebagai contoh, layanan pemesanan mengirim permintaan ke layanan pembayaran. Selama layanan pembayaran memberikan respons sesuai harapan, circuit breaker tetap berada pada state Closed.

2. Open

Pada state Open, circuit breaker menghentikan sementara permintaan ke layanan tujuan. Permintaan baru dapat langsung ditolak atau dialihkan ke penanganan alternatif tanpa harus menunggu layanan yang bermasalah memberikan respons. Mekanisme ini membantu mengurangi permintaan yang tidak produktif dan memberi kesempatan kepada layanan tujuan untuk pulih.

Sistem biasanya mempertahankan state Open selama periode tertentu sebelum mengizinkan pengujian kembali. Sebagai contoh, ketika layanan pembayaran terus mengalami timeout, circuit breaker dapat menghentikan sementara pemanggilan layanan tersebut. Aplikasi kemudian dapat menampilkan pesan bahwa transaksi belum dapat diproses, alih-alih terus menunggu respons.

3. Half-Open

Setelah periode tunggu berakhir, circuit breaker berpindah ke state Half-Open. Pada keadaan ini, sistem mengizinkan sejumlah permintaan percobaan untuk memeriksa apakah layanan tujuan sudah pulih. Jika permintaan percobaan berhasil sesuai kriteria yang ditentukan, circuit breaker kembali ke state Closed.

Sebaliknya, jika kegagalan masih terjadi, circuit breaker kembali ke state Open dan menghentikan permintaan sementara waktu. Dengan mekanisme ini, sistem dapat menguji pemulihan layanan tanpa langsung mengirim seluruh permintaan seperti ketika berada pada state Closed.

Penutup

Circuit breaker membantu membatasi permintaan ke layanan yang bermasalah agar gangguan tidak meluas ke bagian lain dari aplikasi microservices. Dengan mengatur state Closed, Open, dan Half-Open, sistem dapat mengendalikan komunikasi serta memeriksa pemulihan layanan secara bertahap.

Untuk mendukung pengelolaan aplikasi berbasis microservices, Managed Kubernetes IDCloudHost dapat menjadi salah satu pilihan infrastruktur yang dipertimbangkan. Pastikan kebutuhan orkestrasi, pemantauan, dan mekanisme ketahanan aplikasi direncanakan sesuai arsitektur yang digunakan.