Apropos Springcloud Circuit Breaking erinnert mich an den Schaltkreis, der im vergangenen Jahr an der Börse bricht. Ich habe viele schmerzhafte Zeiten erkannt. Der Einfluss von Zufallskreislauf auf das gesamte System ist katastrophal. Lassen Sie uns als nächstes über die ernsthaften Angelegenheiten sprechen.
Sicherung
Lawineneffekt
In Microservice -Architekturen müssen normalerweise mehrere Serviceschichten anrufen. Das Ausfall des zugrunde liegenden Dienstes kann zu Kaskadenfehlern führen, was wiederum dazu führt, dass das gesamte System nicht verfügbar ist. Dieses Phänomen wird als Service Avalanche -Effekt bezeichnet. Der Service -Avalanche -Effekt ist ein Prozess, bei dem die Nichtverfügbarkeit des "Dienstleisters" zur Nichtverfügbarkeit der "Service -Verbraucher" führt und die Nichtverfügbarkeit schrittweise verstärkt.
Wenn die folgende Abbildung zeigt: A ist der Dienstleister, B ist der Serviceverbraucher von A, und C und D sind die Dienstleistungsverbraucher von B. Die Nichtverfügbarkeit von A -Ursachen von Nichtverfügbarkeit von B und wenn die Nichtverfügbarkeit wie ein Schneeball zu C und D vergrößert wird, wird der Avalanche -Effekt gebildet.
Circuitbreaker
Das Prinzip einer Sicherung ist sehr einfach, wie ein Beschützer der Leistungsüberlastung. Es kann schnelles Versagen erreichen. Wenn es über einen bestimmten Zeitraum viele ähnliche Fehler erkennt, zwingt es seine nachfolgenden Anrufe dazu, schnell zu scheitern und nicht mehr auf den Remote -Server zugreifen zu können, wodurch die Anwendung ständig versucht, mögliche Fehlervorgänge durchzuführen, sodass die Anwendung weiter ausgeführt wird, ohne auf die Korrektur des Fehlers zu warten, oder die Verschwendung von CPU -Zeiten bis zum Warten bis zum langjährigen Timeout. Die Sicherung kann auch der Anwendung ermöglichen, zu diagnostizieren, ob der Fehler behoben wurde, und wenn er behoben wurde, versucht die Anwendung, die Operation erneut aufzurufen.
Der Sicherungsmodus ist wie ein Proxy, der leicht zu falschen Operationen führen kann. Dieser Stellvertreter kann die Anzahl der Fehler im jüngsten Anruf aufzeichnen und dann entscheiden, dass die Erlaubnisbetriebsbetrieb fortgesetzt oder den Fehler sofort zurückgegeben wird.
Die Logik der gegenseitigen Umwandlung von Sicherungsschaltern lautet wie folgt:
Sicherungen sind die letzte Verteidigungslinie, um die hohe Verfügbarkeit von Dienstleistungen zu schützen.
Hytrixfunktionen
1. Mechanismus des Leistungsschalters
Der Leistungsschalter ist leicht zu verstehen. Wenn der Befehl hystrix Back-End-Dienstfehler einen bestimmten Anteil überschreitet (Standard 50%), wechselt der Leistungsschalter in den offenen Zustand (geöffnet). Zu diesem Zeitpunkt scheitern alle Anfragen direkt, ohne an den Back-End-Dienst zu senden. Nachdem der Leistungsschalter für einen bestimmten Zeitraum (5 Sekunden) im offenen Zustand verbleibt, wechselt er automatisch in den halben Offenstaat (halb geöffnet). Zu diesem Zeitpunkt wird der Rückgabestatus des nächsten Antrags beurteilt. Wenn die Anforderung erfolgreich ist, wechselt der Leistungsschalter wieder in den geschlossenen Schaltungszustand (geschlossen), andernfalls wechselt er in den offenen Zustand (geöffnet). Der Leistungsschalter von Hytrix ist wie eine Sicherung in unserer Heimatkreis. Sobald der Back-End-Dienst nicht verfügbar ist, wird der Leistungsschalter die Anforderungsverbindung direkt unterbrochen, um zu vermeiden, dass eine große Anzahl ungültiger Anfragen zur Auswirkung des Systemdurchsatzes gesendet wird. Der Leistungsschalter hat die Fähigkeit, sich selbst zur Erkennung zu erfassen und sich zu erholen.
2.Fallback
Fallback entspricht einem Herabstufungsvorgang. Für Abfragevorgänge können wir eine Fallback -Methode implementieren. Wenn eine Ausnahme in einem angeforderten Back -Service auftritt, kann der von der Fallback -Methode zurückgegebene Wert verwendet werden. Der Rückgabewert der Fallback -Methode wird im Allgemeinen vom Standardwert festgelegt oder stammt aus dem Cache.
3.. Ressourcenisolation
In Hystrix wird die Ressourcenisolation hauptsächlich über Fadenpools erreicht. Normalerweise teilen wir bei der Verwendung mehrere Thread -Pools gemäß dem Remote -Dienst, den wir anrufen. Der Befehl, der Produktdienste aufruft, wird beispielsweise in einen Thread -Pool aufgebracht, und der Befehl, der Kontodienste aufruft, wird in den B -Thread -Pool eingereicht. Der Hauptvorteil davon ist, dass die laufende Umgebung isoliert ist. Auf diese Weise wird auch wenn der Code, der den Aufruf von Diensten fehlerhaft ist, oder der Thread -Pool, der aus anderen Gründen konsumiert wird, andere Dienste des Systems nicht beeinträchtigt. Die Kosten sind jedoch, dass die Aufrechterhaltung mehrerer Threadpools zusätzliche Leistungsaufwand zum System bringt. Wenn Sie strikte Leistungsanforderungen haben und sicher sind, dass es keine Probleme mit dem Client -Code gibt, der den Dienst aufruft, können Sie den Signalmodus (Semaphores) von Hystrix verwenden, um Ressourcen zu isolieren.
Hystrix vorgeben
Da der Leistungsschalter nur am Ende des Service Call-Endes funktioniert, müssen wir nur den entsprechenden Code des Spring-Cloud-Consumer-Projekts basierend auf dem Beispielcode im vorherigen Artikel ändern. Da vorgetäuscht bereits von Hystrix abhängt, müssen keine Änderungen an der Maven -Konfiguration vorgenommen werden.
1. Konfigurationsdatei
Fügen Sie dies zu application.Properties hinzu:
Feign.hystrix.enabled = true
2. Erstellen Sie eine Rückrufklasse
Erstellen Sie die Erbschaft der Helloremotehystrix -Klasse und die Helloremote, um Rückrufe zu implementieren
@ComponentPublic Class helloremotehystrix implementiert Helloremote {@Override public String Hallo (@RequestParam (value = "name") String -Name) {return "hello" +name +", diese Nachricht fehlgeschlagen"; }}3. fügen Sie Fallback -Attribut hinzu
Fügen Sie die angegebene Fallback -Klasse der Helloremote -Klasse hinzu und geben Sie den Inhalt in der Fallback -Klasse zurück, wenn der Dienst geschaltet ist.
@FeignClient (name = "Spring-Cloud-Producer", fallback = helloremotehyStrix.class) public interface helloremote {@RequestMapping (value = "/hello") public String Hallo (@RequestParam (value = "name") String Name);}Dies ist der Punkt der Veränderung, es ist sehr einfach.
4. Test
Dann testen wir es, um den Effekt zu sehen.
Starten Sie die drei Projekte Spring-Cloud-Eureka, Spring-Cloud-Produzent und Spring-Cloud-Verbraucher.
Geben Sie in den Browser ein: http: // localhost: 9001/hello/neo
Rückkehr: Hallo Neo, das ist die erste Nachricht
Dies bedeutet, dass nach dem Zugabe von Leistungsschalter Informationen nicht auf den normalen Zugriff beeinflusst. Als nächstes stoppen wir das Spring-Cloud-Producer-Projekt manuell und testen es erneut:
Geben Sie in den Browser ein: http: // localhost: 9001/hello/neo
Rückkehr: Hallo Neo, diese Nachricht senden fehl
Nach dem Rückgabeergebnis wurde der Leistungsschalter erfolgreich angegeben.
Beispielcode
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.