Berbicara tentang Breaking Sirkuit Springcloud mengingatkan saya pada pemecahan sirkuit di pasar saham tahun lalu. Saya telah menyadari banyak saat yang menyakitkan. Dampak pemecahan sirkuit acak pada seluruh sistem adalah bencana. Baiklah, mari kita bicara tentang masalah serius selanjutnya.
Sekering
Efek longsoran
Dalam arsitektur Microservice, biasanya ada beberapa lapisan layanan untuk dihubungi. Kegagalan layanan yang mendasarinya dapat menyebabkan kegagalan kaskade, yang pada gilirannya menyebabkan seluruh sistem tidak tersedia. Fenomena ini disebut efek longsor layanan. Efek longsor layanan adalah proses di mana tidak tersedianya "penyedia layanan" mengarah pada tidak tersedianya "konsumen layanan" dan secara bertahap memperkuat tidak tersedianya.
Jika gambar di bawah ini menunjukkan: A adalah penyedia layanan, B adalah konsumen layanan A, dan C dan D adalah konsumen layanan B. tidak tersedianya suatu penyebab tidak tersedianya B dan ketika tidak tersedianya diperbesar menjadi C dan D seperti bola salju, efek longsor dibentuk.
Circuitbreaker
Prinsip sekering sangat sederhana, seperti pelindung kelebihan daya. Itu bisa mencapai kegagalan cepat. Jika mendeteksi banyak kesalahan serupa selama periode waktu tertentu, ia akan memaksa panggilan selanjutnya untuk gagal dengan cepat dan tidak lagi mengakses server jarak jauh, sehingga mencegah aplikasi dari terus -menerus mencoba melakukan operasi kegagalan yang mungkin, menyebabkan aplikasi terus mengeksekusi tanpa menunggu koreksi kesalahan, atau membuang waktu CPU untuk menunggu sampai waktu yang lama terjadi. Sekring juga dapat mengaktifkan aplikasi untuk mendiagnosis apakah kesalahan telah diperbaiki, dan jika telah diperbaiki, aplikasi akan mencoba memanggil operasi lagi.
Mode sekering seperti proxy yang dapat dengan mudah menyebabkan operasi yang salah. Proxy ini dapat mencatat jumlah kesalahan yang terjadi dalam panggilan terbaru, dan kemudian memutuskan untuk menggunakan operasi izin untuk melanjutkan, atau mengembalikan kesalahan segera.
Logika konversi timbal balik dari sakelar sekering adalah sebagai berikut:
Sekring adalah garis pertahanan terakhir untuk melindungi ketersediaan layanan yang tinggi.
Fitur Hystrix
1. Mekanisme pemutus sirkuit
Pemutus sirkuit mudah dimengerti. Ketika perintah Hystrix meminta kegagalan layanan back-end melebihi proporsi tertentu (default 50%), pemutus sirkuit akan beralih ke status terbuka (terbuka). Pada saat ini, semua permintaan akan gagal secara langsung tanpa mengirim ke layanan back-end. Setelah pemutus sirkuit tetap dalam keadaan terbuka untuk jangka waktu tertentu (default 5 detik), ia akan secara otomatis beralih ke keadaan setengah terbuka (setengah terbuka). Pada saat ini, status pengembalian permintaan berikutnya akan dinilai. Jika permintaan berhasil, pemutus sirkuit akan beralih kembali ke status sirkuit tertutup (tertutup), jika tidak ia akan beralih ke status terbuka (terbuka). Pemutus sirkuit Hystrix seperti sekering di sirkuit rumah kami. Setelah layanan back-end tidak tersedia, pemutus sirkuit akan langsung memotong tautan permintaan untuk menghindari mengirim sejumlah besar permintaan tidak valid untuk mempengaruhi throughput sistem. Pemutus sirkuit memiliki kemampuan untuk mendeteksi dan memulihkan diri.
2. Fallback
Fallback setara dengan operasi penurunan peringkat. Untuk operasi kueri, kami dapat menerapkan metode fallback. Ketika pengecualian terjadi dalam layanan kembali yang diminta, nilai yang dikembalikan oleh metode fallback dapat digunakan. Nilai pengembalian metode fallback umumnya ditetapkan oleh nilai default atau berasal dari cache.
3. Isolasi Sumber Daya
Di Hystrix, isolasi sumber daya terutama dicapai melalui kumpulan benang. Biasanya saat menggunakannya, kami membagi beberapa kumpulan utas sesuai dengan layanan jarak jauh yang kami hubungi. Misalnya, perintah yang memanggil layanan produk ditempatkan ke dalam kumpulan utas, dan perintah yang memanggil layanan akun ditempatkan ke dalam kumpulan BACA B. Keuntungan utama dari ini adalah bahwa lingkungan lari terisolasi. Dengan cara ini, bahkan jika kode yang memanggil layanan disadap atau kumpulan utas yang dikonsumsi karena alasan lain, itu tidak akan mempengaruhi layanan lain dari sistem. Namun, biayanya adalah mempertahankan beberapa kumpulan utas akan membawa overhead kinerja tambahan ke sistem. Jika Anda memiliki persyaratan kinerja yang ketat dan Anda yakin tidak akan ada masalah dengan kode klien yang memanggil layanan, Anda dapat menggunakan mode sinyal Hystrix (Semaphores) untuk mengisolasi sumber daya.
Petera Hystrix
Karena pemutus sirkuit hanya berfungsi pada akhir panggilan layanan, kita hanya perlu mengubah kode yang relevan dari proyek spring-cloud-consumer berdasarkan kode contoh dalam artikel sebelumnya. Karena Petana sudah tergantung pada Hystrix, tidak perlu melakukan perubahan pada konfigurasi Maven.
1. File Konfigurasi
Tambahkan ini ke application.properties:
Fegny.hystrix.enabled = true
2. Buat kelas panggilan balik
Buat helloremotehystrix kelas warisan dan helloremote untuk mengimplementasikan panggilan balik
@ComponentPublic kelas HelloRemotehystrix mengimplementasikan HelloRemote {@Override Public String Hello (@RequestParam (value = "name") Name) {return "Hello" +Name +", pesan ini mengirim gagal"; }}3. Tambahkan atribut fallback
Tambahkan kelas Fallback yang ditentukan ke kelas HelloRemote, dan kembalikan konten di kelas Fallback ketika layanan diedarkan.
@FeignClient (name = "spring-cloud-producer", fallback = helloremotehystrix.class) antarmuka publik HelloRemote {@RequestMapping (value = "/hello") Public String Hello (@RequestParam (value = "name") nama string);}Inilah titik perubahan, ini sangat sederhana.
4. Tes
Lalu mari kita mengujinya untuk melihat efeknya.
Mulailah tiga proyek Spring-Cloud-Eureka, Spring-Cloud-Producer, dan Spring-Cloud-Consumer.
Masukkan di browser: http: // localhost: 9001/hello/neo
Return: Halo Neo, ini pesan pertama
Ini berarti bahwa setelah menambahkan informasi terkait pemutus sirkuit, itu tidak akan mempengaruhi akses normal. Selanjutnya, kami secara manual menghentikan proyek produser awan-musim semi dan mengujinya lagi:
Masukkan di browser: http: // localhost: 9001/hello/neo
Kembali: Halo Neo, Kirim Pesan ini gagal
Menurut hasil pengembalian, pemutus sirkuit berhasil ditunjukkan.
Kode sampel
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.