© Excellent backgrounds/Shutterstock.com
Integration von Netflix Hystrix und Turbine

Resilience mit Spring Cloud


Microservices machen aus einem System ein verteiltes System. Da Netzwerk und Server ausfallen können, sind auch Microservices nicht immer verfügbar. Hystrix und Turbine von Netflix (s. Artikel ab Seite 44) sind die Technologien, die Spring Cloud für dieses Problem wappnen.

Wenn ein Microservice ausfällt, kann das verheerende Folgen haben: Im schlimmsten Fall fällt jeder Microservice, der diesen Microservice nutzt, auch aus. Das pflanzt sich fort – und ehe man sich versieht, steht das gesamte System still. Ebenso können Systeme bei der Netzwerkkommunikation auf ungewöhnliche Probleme stoßen. Wenn beispielsweise eine Netzwerkverbindung vom Betriebssystem nicht erfolgreich aufgebaut wird, meldet es das Problem erst nach einem Time-out, das oft fünf Minuten oder länger ist. Wenn nun bei der Bearbeitung von Requests ein solches Problem auftritt, ist der Thread blockiert – und sehr schnell ist der Threadpool leer und nichts geht mehr.

Die Lösung liegt auf der Hand: Kommunikation mit anderen Microservices muss abgesichert werden. Beispielsweise muss ein Microservice in die Netzwerkkommunikation ein eigenes Time-out einbauen, um so schneller über Probleme informiert zu werden und das bereits erwähnte Leerlaufen des Threadpools auszuschließen. Eine weitere mögliche Maßnahme: Bei einem Ausfall eines Service tritt ein Circuit Breaker (engl. Sicherung) in Aktion: Die Sicherung springt beim ersten Fehler während eines Aufrufs heraus. Weitere Aufrufe gehen gar nicht mehr an den Service, sondern stoßen gleich auf einen Fehler. So wird das Time-out vollständig umgangen. Wenn der Service wieder zur Verfügung steht, kann die Sicherung schrittweise geschlossen werden, um eine Überlastung des Service zu vermeiden.

Außerdem kann statt des Aufrufs eines Service ein Default genutzt werden, wenn der Service nicht zur Verfügung steht. So kann das Gesamtsystem weiter funktionieren, auch wenn ein Service ausfällt. Dadurch entsteht ein Gesamtsystem, das eine sehr hohe Verfügbarkeit bieten kann. In einer klassischen monolithischen Architektur kann ein Fehler in einem Teil des Systems das gesamte System zum Ausfall bringen – beispielsweise kann ein Fehler in der Suche, der zu einem OutOfMemoryError führt, eine ganze Website zum Absturz bringen. Bei Microservices würde nur der Microservice für die Suche ausfallen, und die anderen Teile des Systems wären nicht beeinträchtigt, wenn entsprechende Vorkehrungen wie beispielsweise Default-Werte genutzt werden. So können Microservices trotz ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang