1: Was ist Hytrix
In einer verteilten Umgebung werden einige von vielen Serviceabhängigkeiten unweigerlich scheitern. Hystrix ist eine Bibliothek, mit der Sie die Interaktion zwischen diesen verteilten Diensten steuern können, indem Sie Latenztoleranz und Fehlertoleranzlogik hinzufügen. Hystrix verbessert die allgemeine Widerstandsfähigkeit des Systems, indem er Zugriffspunkte zwischen Diensten isoliert, die darauf hingewiesenen Kaskadierfehler gestoppt und Fallback -Optionen bereitgestellt werden.
Hystrix ist so konzipiert, dass sie Folgendes tun
1: Geben Sie die Schutz- und Kontrolllatenz und Fehler für Abhängigkeiten zur Verfügung, auf die über Clientbibliotheken von Drittanbietern (normalerweise über dem Netzwerk) zugegriffen wird.
2: Isolieren Sie Kaskadierungsfehler in komplexen verteilten Systemen.
3: Erfassen Sie den Fehler schnell und erholen Sie sich so schnell wie möglich.
4: Zurückspulen und so anmutig wie möglich herabstufen.
5: Aktivieren Sie in der Nähe von Echtzeitüberwachung, Warnungen und operativen Kontrollen.
2: Warum brauchst du Hytrix?
In einem großen verteilten System hängt ein Kunde oder Dienst von externen Diensten ab. Wenn ein Dienst gesunken ist, setzen wir die Zeitüberschreitungszeit des Service Call -Systems fest, was sich zwangsläufig auf die entsprechende Zeit auswirkt. Im Falle einer hohen Parallelität wird der Thread -Pool der meisten Server blockiert (Block), was die Stabilität des gesamten Online -Service beeinflusst.
(Foto offizielle Bilder)
Wenn alles gesund ist, kann die Anfrage so aussehen
Wenn eines von vielen Backend -Service -Systemen sinkt, fordert der gesamte Benutzer an:
Wenn mehrere Clients denselben Ausnahmedienst anrufen, tritt die Situation auf:
3: Welche Probleme löst Hystrix?
Anwendungen in verteilten Architekturen haben Dutzende von Abhängigkeiten, und jede Abhängigkeit hat zwangsläufig eine Ausnahme. Wenn die Anwendung nicht von diesen externen Ausfällen isoliert ist, kann ein Fadenpool -Blockieren auftreten, was zu einer Systemlawine führt.
Beispielsweise können Sie für Anwendungen, die auf 30 Diensten angewiesen sind, eine Verfügbarkeit von 99,99%. Sie können:
99,99% der Stromversorgung von 30 = 99,7% Verfügbarkeit
0,3% von 1 Milliarde Anfragen = 3.000.000 Fehler
2+ Stunden Ausfallzeit/Monat, auch bei allen Abhängigkeiten.
Bei der Verwendung von Hytrix für das Schaltungsbruch wird jede Abhängigkeit voneinander isoliert, wodurch die Blockade beschränkt wird, wenn die Verzögerung auftritt.
Vier: Hytrix kombiniert mit Tet
Erstellen Sie ein Projekt eureka_fegn_hystrix_client
pom.xml Dateiinhalt
<Depelencies> <Deponcy> <gruppe> org.springFramework <gruppeId> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-Web </artifactId> </abhängig> <abhängigkeit> <gruppe> org.springFramework <gruppeID> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Test </artifactId> <Scope> test </scope> </abhängig> </abhängig> <DepapyManagement> <Deponcies> <Deponcy> <gruppe org.springframework.cloud.cloud </Groupid> <artifactid> Spring-Cloud-Abhängigkeiten </artifactid> <version> brixton.sr5 </Version> <typs
Erstellen Sie eine Startdatei
FeignhystrixApplication
@SpringBootApplication@enablediscoveryClient@enableFeignClientsPublic Class FeignhyStrixApplication {public static void main (String [] args) {SpringApplication.run (FeignhyStrixApplication.class, args); }}UserClient -Klasse
@FeignClient (value = "biz-service-0", fallback = userClientHystrix.class) public interface userClient {@RequestMapping (methode = requestMethod.get, value = "/getUser") public User getUserInfo (); @RequestMapping (methode = requestMethod.get, value = "/getUser") public String getUserInfoStr (); @RequestMapping (methode = requestMethod.get, value = "/info") public string info ();}Erstellen Sie eine Flash Breaker Class UserClientHyStrix
@ServicePublic Class UserClientHyStrix implementiert userClient {@Override öffentlicher Benutzer des Benutzernutzers getUserInfo () {neue nullPointerexception ("Benutzer getUserInfo () ist nicht verfügbar .."); } @Override public String getUserInfoStr () {return "userClientHyStrix getUserInfoStr () ist der Fallback -Dienst ist nicht verfügbar .."; } @Override public String info () {return "userClientHystrix info () ist der Fallback -Dienst ist nicht verfügbar .."; }}Wenn eine Ausnahme im Netzwerk auftritt, kann sie hier direkt zur Implementierungsklasse springen
Erstellen Sie eine Aktionsklasse
UserController
@Autowired UserClient userClient; @RequestMapping (value = "/getUserInfo", method = requestMethod.get) öffentlicher Benutzer getUserInfo () {return userClient.getUserinfo (); } @RequestMapping (value = "/getUserInfoStr", method = requestMethod.get) public String getUserInfoStr () {return userClient.getUserinfoStr (); } @RequestMapping (value = "/info", method = requestMethod.get) public string info () {return userClient.info (); }Starten Sie das Projekt Eureka_register_Service (Register Center)
Dann führen Sie die FeignhyStrixApplication aus, die wir geschrieben haben
Zu diesem Zeitpunkt haben wir offensichtlich festgestellt, dass der Biz-Service-0-Service nicht ausgeführt wurde, also eröffnen wir http://127.0.0.1:8005/getUserinfoStr
Erscheinen
UserClientHystrix getUserinfoStr () ist Fallback, der nicht verfügbar ist. .
Dies ist unser kundenspezifisches Rückgabeergebnis
Wenn Sie die Seite nicht brechen müssen, wird dies angezeigt
Die Whitelabel -Fehlerpagethis -Anwendung hat keine explizite Zuordnung für /Fehler, daher sehen Sie dies als einen Fallback.
Codeadresse: https://github.com/zhp8341/springclouddemo
Ich habe auch einige hystrixbezogene Prinzipien gelesen. Da ich sie nicht alle fertig gelesen habe, habe ich sie noch nicht geschrieben. Dieser Artikel basiert auf der Verwendung und dem Lernen von Feign.
Wenn Sie interessiert sind, können Sie sich die offiziellen Hystrix -Details ansehen, aber es sieht ein bisschen schwierig aus.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.