Apa Bulkhead Pattern yang digunakan oleh Hystrix?


Jawaban:


193

Umum

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.

Apa yang Hystrix Pecahkan

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 .

Pendekatan Hystrix

Hystrix 'memiliki dua pendekatan berbeda untuk sekat, isolasi benang dan isolasi semafor.

Isolasi Benang

Pendekatan standarnya adalah menyerahkan semua permintaan ke komponen C ke kumpulan utas terpisah dengan jumlah utas tetap dan tidak ada (atau sedikit) antrean permintaan.

Isolasi Semaphore

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.

Perbedaan

Keuntungan dari pendekatan kumpulan benang adalah bahwa permintaan yang diteruskan ke C bisa habis waktunya, sesuatu yang tidak mungkin dilakukan saat menggunakan semaphore.


10
Sebagai tambahan, di wiki Hystrix asli sekarang ada penjelasan rinci dari kedua pendekatan tersebut: github.com/Netflix/Hystrix/wiki/How-it-Works
Dmitry

1
Apa perbedaan antara circuit breaker dan sekat?
voipp

4
Pemutus sirkuit @voipp adalah hal yang sangat berbeda. Mereka mendeteksi saat layanan berada dalam status tidak sehat dan memindahkan penelepon ke status "cepat gagal" di mana mereka tidak memanggil layanan tidak sehat, tetapi mengembalikan kode kesalahan hingga layanan baik-baik saja. Hal ini untuk menghindari kelebihan beban pada layanan tidak sehat sehingga dapat dipulihkan, dan mencegah kegagalan berjenjang karena pemanggil tidak diperlambat.
K Erlandsson

1

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.