1: Apa itu Hystrix
Dalam lingkungan terdistribusi, beberapa dari banyak dependensi layanan pasti akan gagal. Hystrix adalah perpustakaan yang membantu Anda mengontrol interaksi antara layanan terdistribusi ini dengan menambahkan toleransi latensi dan logika toleransi kesalahan. Hystrix meningkatkan ketahanan keseluruhan sistem dengan mengisolasi titik akses antara layanan, menghentikan kegagalan cascading di antaranya, dan memberikan opsi fallback.
Hystrix dirancang untuk melakukan hal berikut
1: Memberikan perlindungan dan latensi kontrol dan kegagalan untuk dependensi yang diakses melalui perpustakaan klien pihak ketiga (biasanya melalui jaringan).
2: Mengisolasi kegagalan cascading dalam sistem terdistribusi yang kompleks.
3: Dengan cepat mendeteksi kesalahan dan pulih sesegera mungkin.
4: Rewind dan downgrade sebanyak mungkin.
5: Mengaktifkan pemantauan, peringatan, dan kontrol operasional yang hampir real-time.
2: Mengapa Anda membutuhkan Hystrix?
Dalam sistem terdistribusi besar, klien atau layanan tergantung pada layanan eksternal. Jika suatu layanan sedang down, maka kami mengatur waktu batas waktu sistem panggilan layanan, yang pasti akan mempengaruhi waktu yang sesuai. Dalam hal konkurensi tinggi, kumpulan utas sebagian besar server akan diblokir (blok), mempengaruhi stabilitas seluruh layanan online.
(Foto gambar resmi)
Saat semuanya sehat, permintaannya bisa terlihat seperti ini
Ketika salah satu dari banyak sistem layanan backend turun, seluruh pengguna meminta:
Jika banyak klien memanggil layanan pengecualian yang sama, situasi terjadi:
3: Masalah apa yang dipecahkan Hystrix?
Aplikasi dalam arsitektur terdistribusi memiliki lusinan dependensi, dan setiap ketergantungan pasti akan memiliki pengecualian di beberapa titik. Jika aplikasi tidak terisolasi dari kegagalan eksternal ini, pemblokiran kumpulan utas dapat terjadi, menyebabkan longsoran sistem.
Misalnya, untuk aplikasi yang mengandalkan 30 layanan, setiap layanan memiliki waktu kerja 99,99%, Anda dapat:
99,99% daya 30 = 99,7% uptime
0,3% dari 1 miliar permintaan = 3.000.000 kegagalan
2+ jam downtime/bulan, bahkan dengan semua dependensi uptime.
Saat menggunakan Hystrix untuk pemecahan sirkuit, setiap ketergantungan diisolasi satu sama lain, membatasi penyumbatan saat penundaan terjadi.
Empat: Hystrix dikombinasikan dengan berpura -pura
Buat proyek eureka_feign_hystrix_client
konten file pom.xml
<Dependencies> <dependency> <GroupId> org.springframework.cloud </groupid> <t ArtifactId> Spring-cloud-starter-feign </artifactid> </dependency> <dependency> <Roupid> org.springframework.cloud </groupid> <Arttifactid> SPRING-CLOURPENCY-PONDENCING.COURCE </groupid> <ArTtifactid> Spring-coudency--starter--starter-croud. <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <GroupId> org.springframework.boot </groupid> <ArtifactId> spring-boot-starter-test </arttifactid> <scope> test </seupope> </dependency> </dependency> <dependencyManagement> <dependencies> <groupid> <groupid> org.springfring. <ArtifactId> Spring-cloud-Dependencies </arttifactid> <version> brixton.sr5 </version> <ype> pom </ype- type> <scope> impor </ scope> </dependency> </dependencies> </dependencyManagement>
Buat file startup
FegnHystrixapplication
@SpringbootApplication@enableDiscoveryclient@enableFeignClientSpublic kelas feignhytrixapplication {public static void main (string [] args) {springApplication.run (feignhytrixapplication.class, args); }}Kelas UserClient
@FeignClient (value = "Biz-service-0", fallback = userclientHystrix.class) antarmuka publik UserClient {@RequestMapping (Method = requestMethod.get, value = "/getUser") pengguna publik getUserinfo (); @RequestMapping (method = requestMethod.get, value = "/getUser") String publik getUserInfostr (); @RequestMapping (Method = RequestMethod.get, value = "/info") Public String Info ();}Buat Kelas Pemutus Flash UserClientHystrix
@ServICEPublic UserClientHystrix mengimplementasikan UserClient {@Override pengguna umum pengguna getUserInfo () {throw new nullpointerException ("Layanan pengguna getUserInfo () tidak tersedia .."); } @Override Public String getUserInfostr () {return "userclientHystrix getUserInfostr () adalah layanan fallback tidak tersedia .."; } @Override Public String Info () {return "UserClientHystrix Info () adalah layanan fallback tidak tersedia .."; }}Ketika pengecualian terjadi di jaringan, itu mungkin melompat langsung ke kelas implementasi di sini
Buat Kelas Aksi
Usercontroller
@Autowired userclient userclient; @RequestMapping (value = "/getUserInfo", method = requestMethod.get) pengguna publik getUserInfo () {return userclient.getUserInfo (); } @RequestMapping (value = "/getUserInfostr", Method = requestMethod.get) String publik getUserInfostr () {return userclient.getUserInfostr (); } @RequestMapping (value = "/info", method = requestMethod.get) Public String info () {return userclient.info (); }Mulai proyek: eureka_register_service (pusat register)
Kemudian jalankan fegnhytrixapplication yang kami tulis
Pada saat ini, kami jelas menemukan bahwa layanan biz-service-0 tidak berjalan, jadi kami membuka http://127.0.0.1:8005/getuserinfostr
Muncul
UserClientHystrix getUserInfostr () adalah Fallback Layanan tidak tersedia. .
Ini adalah hasil pengembalian sirkuit khusus kami
Jika Anda tidak perlu merusak halaman, ini akan muncul
WHITELABEL ERROR PAGETHIS APLIKASI TIDAK MEMILIKI pemetaan eksplisit untuk /Kesalahan, jadi Anda melihat ini sebagai fallback.dayal 22 Mar 14:32:21 CST 2017 Ada kesalahan yang tidak terduga (tipe = kesalahan server internal, status = 500) .getUserInfo gagal dan fallback gagal.
Alamat kode: https://github.com/zhp8341/springclouddemo
Saya juga telah membaca beberapa prinsip terkait Hystrix. Karena saya belum selesai membaca semuanya, saya belum menulisnya. Artikel ini didasarkan pada penggunaan dan pembelajaran Petchign.
Jika Anda tertarik, Anda dapat memeriksa detail Hystrix resmi, tetapi terlihat agak sulit.
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.