Jawaban:
Secara umum, tujuan dari pola sekat adalah untuk menghindari kesalahan di satu bagian sistem sehingga seluruh sistem tidak berfungsi. Istilah ini berasal dari kapal di mana kapal dibagi dalam kompartemen kedap air terpisah untuk menghindari kerusakan lambung tunggal yang membanjiri seluruh kapal; itu hanya akan membanjiri satu sekat.
Penerapan pola sekat dapat mengambil banyak bentuk tergantung pada jenis kesalahan yang Anda inginkan untuk melindungi sistem. Saya hanya akan membahas jenis kesalahan yang ditangani Hystrix dalam jawaban ini.
Menurut saya pola sekat dipopulerkan oleh buku Release It! oleh Michael T. Nygard.
Implementasi sekat di Hystrix membatasi jumlah panggilan bersamaan ke sebuah komponen . Dengan cara ini, jumlah sumber daya (biasanya utas) yang menunggu balasan dari komponen dibatasi.
Asumsikan Anda memiliki permintaan berdasarkan, multi aplikasi threaded (misalnya aplikasi web yang khas) yang menggunakan tiga komponen yang berbeda, A , B , dan C . Jika permintaan untuk komponen C mulai menggantung, akhirnya semua permintaan penanganan benang akan bertahan menunggu jawaban dari C . Ini akan membuat aplikasi sepenuhnya tidak responsif. Jika permintaan ke C ditangani dengan lambat, kami memiliki masalah serupa jika bebannya cukup tinggi.
Implementasi Hystrix dari pola sekat membatasi jumlah panggilan bersamaan ke komponen dan akan menyimpan aplikasi dalam kasus ini. Anggaplah kita memiliki 30 benang permintaan penanganan dan ada batas dari 10 panggilan bersamaan ke C . Kemudian paling banyak 10 permintaan penanganan benang dapat menggantung saat memanggil C , yang lain 20 benang masih bisa menangani permintaan dan penggunaan komponen A dan B .
Hystrix 'memiliki dua pendekatan berbeda untuk sekat, isolasi benang dan isolasi semafor.
Pendekatan standarnya adalah menyerahkan semua permintaan ke komponen C ke kumpulan utas terpisah dengan jumlah utas tetap dan tidak ada (atau sedikit) antrean permintaan.
Pendekatan lain adalah untuk memiliki semua penelepon memperoleh izin (dengan 0 timeout) sebelum permintaan untuk C . Jika izin tidak bisa diperoleh dari semaphore, panggilan ke C tidak diteruskan.
Keuntungan dari pendekatan kumpulan benang adalah bahwa permintaan yang diteruskan ke C bisa habis waktunya, sesuatu yang tidak mungkin dilakukan saat menggunakan semaphore.
Berikut adalah contoh yang baik dengan penjelasan runtime untuk sekat di Resilience4j yang terinspirasi oleh Netflix Hystrix.
Contoh konfigurasi di bawah ini mungkin memberikan beberapa kejelasan penggunaan.
Contoh konfigurasi: Izinkan maksimal 5 panggilan serentak pada waktu tertentu. Biarkan panggilan lain menunggu hingga salah satu dari 5 panggilan dalam proses selesai atau hingga maksimal 2 detik.
Ide untuk tidak membebani sistem apapun dengan beban lebih dari yang dapat mereka konsumsi. Jika beban masuk lebih besar dari konsumsi, maka tunggu waktu yang wajar atau hanya waktu tunggu & pergi ke jalur alternatif.