Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Absicherung gegenüber externen Diensten mit Hystrix

Absicherung gegenüber externen Diensten mit Hystrix

Anwendungen benötigen meist mehr als nur Daten aus ihrer eigenen Datenbank. Mit zunehmender Verknüpfung mit externen Diensten steigt jedoch die Gefahr von Ausfällen der eigenen Anwendung, wenn diese Dienste gar nicht, falsch oder zu langsam antworten. Schnell wird die eigene Anwendung unbedienbar, sobald ein Dienst ausfällt.

Hystrix, das von Netflix 2012 als OpenSource-Projekt bereitgestellt wurde, ermöglicht einfach und konsistent Sollbruchstellen und Backup-Srategien zu implementieren. Alle wichtigen Informationen zum Zustand der Schnittstellen zu den Diensten können komfortabel überwacht, zur Laufzeit rekonfiguriert und in Echtzeit als Dashboard dargestellt werden. Hystrix kann auch in bestehenden Software-Projekten mit wenigen Schritten Schnittstelle für Schnittstelle integriert werden. Bestehende Bibliotheken können gekapselt werden, um nachträglich eine Absicherung hinzuzufügen.

Alexander Schwartz

September 04, 2014
Tweet

More Decks by Alexander Schwartz

Other Decks in Technology

Transcript

  1. Trau, schau, wem!
    Absicherung gegenüber externen Diensten mit Hystrix
    Alexander Schwartz
    msg systems ag

    View full-size slide

  2. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    2
    AGENDA
    1. Anwendungen mit externen Diensten
    2. Einbau von Hystrix Schritt für Schritt
    3. Anwendungsüberwachung mit Hystrix
    4. Hystrix – für jede Anwendung geeignet?
    5. Zusammenfassung

    View full-size slide

  3. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    3
    Mein Sponsor und Arbeitgeber
    1980 gegründet
    mehr als 4.500 Kollegen
    583 Mio € Umsatz 2013
    23 Länder
    in 13 Städten
    in Deutschland präsent
    msg systems ag

    View full-size slide

  4. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    4
    Wer ich bin
    Alexander Schwartz
    Principal IT Consultant im GB Travel und Logistics
    12 Jahre Java
    7 Jahre PL/SQL
    7 Jahre
    Absatzfinanzierung
    3,5 Jahre Direktbank
    1 Frau
    2 Kinder
    384 gefundene
    Geocaches

    View full-size slide

  5. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    5
    AGENDA
    1. Anwendungen mit externen Diensten
    2. Einbau von Hystrix Schritt für Schritt
    3. Anwendungsüberwachung mit Hystrix
    4. Hystrix – für jede Anwendung geeignet?
    5. Zusammenfassung

    View full-size slide

  6. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    6
    Idealisierte Anwendungen haben keine Abhängigkeiten
    Anwendungen mit externen Diensten
    Registrierung

    View full-size slide

  7. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    7
    Echte Anwendungen haben Abhängigkeiten
    Anwendungen mit externen Diensten
    Registrierung
    Kontodaten-
    validierung
    Kunden-
    datenbank

    View full-size slide

  8. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    8
    Ein Dominoeffekt tritt auf, wenn eine Komponente ausfällt
    • Ein Nutzer kann sich nur registrieren, wenn alle drei
    Komponenten funktionieren.
    • (Performance-)Probleme können sich fortpflanzen
    und verstärken.
    Anwendungen mit externen Diensten

    View full-size slide

  9. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    9
    Domino: Eine langsame Kundendatenbank destabilisiert das System
    • Eine langsame Kundendatenbank führt zur Überlastung der Kontovalidierung.
    • Die aufgestauten Nutzer führen zu einer Überlastung der Registrierung.
    • Das System kann nicht ohne Hilfe in einen stabilen Zustand gelangen.
    Anwendungen mit externen Diensten
    Registrierung
    Kontodaten-
    validierung
    Kunden-
    datenbank

    View full-size slide

  10. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    10
    Probleme in einer Komponente sollen sich nicht fortpflanzen
    Möglichkeit 1: Asynchrone Verarbeitung
    • Warteschlangen: Die Kunden werden nach der Registrierung asynchron in der
    Kundendatenbank angelegt.
    Aber: Funktioniert nicht bei synchroner Rückgabe von Werten wie bei der
    Kontovalidierung.
    Möglichkeit 2: Robuste synchrone Verarbeitung
    • Beschränkung der Antwortzeit (Timeout)
    • Sicherungen beim Abweichen vom Normbereich (Circuit Breaker)
    • Abschottung der Komponenten untereinander (Bulkhead)
    Technische Implementierung: Netflix Hystrix
    Anwendungen mit externen Diensten

    View full-size slide

  11. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    11
    AGENDA
    1. Anwendungen mit externen Diensten
    2. Einbau von Hystrix Schritt für Schritt
    3. Anwendungsüberwachung mit Hystrix
    4. Hystrix – für jede Anwendung geeignet?
    5. Zusammenfassung

    View full-size slide

  12. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    12
    Netflix Hystrix: Kapselung von Schnittstellen
    • Java-Bibliothek: kann beliebige Schnittstellen kapseln
    • Implementiert Patterns für robuste Anbindung von Schnittstellen
    • Open Source seit 2011
    • Hystrix @ Github: https://github.com/Netflix/Hystrix
    • Hystrix Tutorial: https://github.com/ahus1/hystrix-examples
    Einbau von Hystrix Schritt für Schritt

    View full-size slide

  13. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    13
    Ausgangsbasis: Aufruf des externen Services ohne Absicherung
    Einbau von Hystrix Schritt für Schritt
    if (!IBANValidator.isValid(account)) {
    throw new ValidationException("invalid");
    }

    View full-size slide

  14. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    14
    Schritt 1: Kapselung des Aufrufs als HystrixCommand
    Einbau von Hystrix Schritt für Schritt
    private static class IBANValidatorCommand extends
    HystrixCommand {
    private Account account;
    protected IBANValidatorCommand(Account account) {
    super(Setter.withGroupKey(HystrixCommandGroupKey.Factory
    .asKey("iban")));
    this.account = account;
    }
    @Override
    protected Boolean run() throws Exception {
    return IBANValidator.isValid(account);
    }
    }

    View full-size slide

  15. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    15
    Schritt 2: Anpassen des ursprünglichen Codes
    Einbau von Hystrix Schritt für Schritt
    if (!new IBANValidatorCommand(account).execute()) {
    throw new ValidationException("invalid");
    }
    IBANValidatorCommand wirft HystrixRuntimeExceptions.
    Die Exceptions des gekapselten Aufrufs werden in
    HystrixRuntimeExceptions eingepackt.

    View full-size slide

  16. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    16
    Schritt 2b: Entpacken der ursprünglichen Exceptions (bei Bedarf)
    Einbau von Hystrix Schritt für Schritt
    try {
    if (!new IBANValidatorCommand(account).execute()) {
    throw new ValidationException("invalid");
    }
    } catch (HystrixRuntimeException e) {
    if (e.getCause() instanceof MyException) {
    throw (MyException) e.getCause();
    }
    throw e;
    }

    View full-size slide

  17. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    17
    Standardverhalten von Hystrix implementiert alle drei Patterns
    • Zeitlimit von 1.000 ms für die Antwort (Timeout)
    • Maximal 10 parallele Anfragen (Bulkhead)
    • Abschaltung, wenn mehr als 50% der Aufrufe fehlschlagen (Circuit Breaker)
    • Nach einer Abschaltung Wiederanlaufversuch alle 5 Sekunden (Circuit Breaker)
    Die Standardwerte und die individuellen Werte auf Kommandoebene sind
    konfigurierbar.
    Einbau von Hystrix Schritt für Schritt

    View full-size slide

  18. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    18
    Schritt 3: Hinzufügen von Fallbacks
    Einbau von Hystrix Schritt für Schritt
    private static class IBANValidatorCommand ... {
    /* ... */
    @Override
    protected Boolean getFallback() {
    return IBANFallback.isCheckDigitValid(account);
    }
    }

    View full-size slide

  19. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    19
    Schritt 4: Konfiguration zur Laufzeit
    • Hystrix wird standardmäßig über Archaius konfiguriert.
    • Archaius kann die Werte aus einer Datenbank, einer Datei, etc. auslesen.
    • Änderungen werden ohne Neustart aktiv.
    (Mehr Informationen: https://github.com/Netflix/Hystrix/wiki/Configuration)
    Einbau von Hystrix Schritt für Schritt
    # Java Start-Parameter
    -Darchaius.configurationSource.additionalUrls=file:///.../archaius.properties
    -Darchaius.fixedDelayPollingScheduler.delayMills=1000
    -Darchaius.fixedDelayPollingScheduler.initialDelayMills=1000
    # archaius.properties (Standard-Werte)
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000
    hystrix.command.default.circuitBreaker.errorThresholdPercentage=50
    hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
    hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5000
    # archaius.properties (spezifische Werte für ein HystrixCommand)
    hystrix.command.IBANValidatorCommand.execution.isolation.thread.timeoutInMilliseconds=1000
    hystrix.command.IBANValidatorCommand.circuitBreaker.errorThresholdPercentage=50
    hystrix.command.IBANValidatorCommand.circuitBreaker.requestVolumeThreshold=20
    hystrix.command.IBANValidatorCommand.circuitBreaker.sleepWindowInMilliseconds=5000

    View full-size slide

  20. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    20
    Option: Verwendung von Futures
    Einbau von Hystrix Schritt für Schritt
    Future futureResult =
    new IBANValidatorCommand(account).queue();
    /* ... do something in between ... */
    // see if the call has completed in the meantime
    if(futureResult.isDone()) {
    /* ... */
    }
    // retrieve result - wait if necessary
    Boolean result = futureResult.get();

    View full-size slide

  21. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    21
    Option: Verwendung von Observables
    Einbau von Hystrix Schritt für Schritt
    Observable result =
    new IBANValidatorCommand(account).observe();
    result.subscribe(new Action1() {
    @Override
    public void call(Boolean b) {
    // do something once the response is ready
    }
    });

    View full-size slide

  22. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    22
    Interner schematischer Ablauf eines HystrixCommands
    Quelle: https://github.com/Netflix/Hystrix/wiki/How-it-Works
    Einbau von Hystrix Schritt für Schritt

    View full-size slide

  23. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    28
    AGENDA
    1. Anwendungen mit externen Diensten
    2. Einbau von Hystrix Schritt für Schritt
    3. Anwendungsüberwachung mit Hystrix
    4. Hystrix – für jede Anwendung geeignet?
    5. Zusammenfassung

    View full-size slide

  24. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    29
    Langzeit- und Echtzeit-Überwachung
    • Überwachung liefert mir wichtige Informationen:
     Funktioniert die Anbindung wie gewünscht?
     Hat sich der Normbereich verändert?
    • Alle Parameter und Kennzahlen sind verfügbar per API oder Konnektoren für
    Yammer Metrics, Netflix Servo, JMX, …
    • Proof of Concept mit Zabbix und Riemann im Tutorial
    • Hystrix Dashboard ist Teil der Hystrix Distribution:
    Browser-Seite mit Commands und Thread Pools pro Anwendung im Cluster
    Anwendungsüberwachung mit Hystrix

    View full-size slide

  25. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    30
    Echtzeitinformationen werden im Hystrix Dashboard angezeigt
    Anwendungsüberwachung mit Hystrix
    Anfragen
    Fehlerrate
    Zustand
    Verlauf der letzten
    Minuten
    Anzahl der Hosts
    im Cluster
    Antwortverhalten
    IBANValidatorCom…
    Ergebnisse absolut

    View full-size slide

  26. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    31
    Echtzeitinformationen werden im Hystrix Dashboard angezeigt
    Anwendungsüberwachung mit Hystrix

    View full-size slide

  27. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    32
    Echtzeitinformationen werden im Riemann Dashboard angezeigt
    Anwendungsüberwachung mit Hystrix

    View full-size slide

  28. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    33
    Langzeitinformationen werden in Zabbix angezeigt
    Anwendungsüberwachung mit Hystrix

    View full-size slide

  29. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    34
    AGENDA
    1. Anwendungen mit externen Diensten
    2. Einbau von Hystrix Schritt für Schritt
    3. Anwendungsüberwachung mit Hystrix
    4. Hystrix – für jede Anwendung geeignet?
    5. Zusammenfassung

    View full-size slide

  30. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    35
    Rezept für die Einführung von Hystrix
    1. Bewusstsein schaffen: Komponenten können ausfallen, Fehler dürfen sich
    nicht fortpflanzen.
    2. Vermessung des Normalzustands.
    3. Identifikation der geeigneten Schnittstellen (synchron und idempotent).
    4. Akzeptieren, dass zu langsame Antworten als Fehler gewertet werden.
    5. Aufbau Monitoring und Einbau und Aktivierung von Hystrix in die Anwendung.
    Hystrix – für jede Anwendung geeignet?

    View full-size slide

  31. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    36
    Alternative: Rezept II für die Einführung von Hystrix
    1. Identifikation der geeigneten Schnittstellen (synchron und idempotent).
    2. Einbau von Hystrix mit neutralisierter/deaktivierter Funktion.
    3. Aufbau Monitoring und Vermessung des Normalzustands.
    4. Akzeptieren, dass zu langsame Antworten als Fehler gewertet werden.
    5. Hystrix scharfschalten.
    Hystrix – für jede Anwendung geeignet?

    View full-size slide

  32. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    37
    Mögliche Herausforderungen rund um Hystrix
    1. Hystrix ist Open-Source-Software
    Für Korrekturen und neue Funktionalität ist Mitarbeit am Code explizit
    gewünscht.
    2. Gebaut für Netflix-Infrastruktur
    Durch die Nutzung bei Netflix bewährt. Eigene Anwendungsfälle sollten
    ausgiebig getestet werden.
    3. Entkopplung basiert auf Threads
    Kein Problem in Apache Tomcat, ggf. in anderen Application Servern.
    Eingeschränkte Nutzung ohne Threads ist möglich.
    JEE7 JSR 236 (Concurrency Utilities for Java EE) noch nicht unterstützt.
    4. Exceptions des Service werden als HystrixRuntimeExceptions verpackt
    Wenn der eigene Code die Exceptions des Service erwartet, so müssen die
    HystrixRuntimeExceptions entpackt werden.
    Hystrix – für jede Anwendung geeignet?

    View full-size slide

  33. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    38
    AGENDA
    1. Anwendungen mit externen Diensten
    2. Einbau von Hystrix Schritt für Schritt
    3. Anwendungsüberwachung mit Hystrix
    4. Hystrix – für jede Anwendung geeignet?
    5. Zusammenfassung

    View full-size slide

  34. © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    39
    Hystrix ermöglicht widerstandsfähige Anwendungen
    • Mit Hystrix steht eine erprobte technische Lösung für bewährte Patterns zur
    Verfügung.
    • Ein Umbau bestehender Anwendungen ist auch nachträglich möglich.
    • APIs mit bestehenden Implementierungen für die Integration in ein
    bestehendes Monitoring existieren.
    Literatur: Release It! – Design and Deploy Production-Ready Software (M. Nygard)
    Hystrix @ Github: https://github.com/Netflix/Hystrix
    Hystrix @ Heise Developer: http://heise.de/-2176465
    Hystrix Examples: http://ahus1.github.io/hystrix-examples/
    Zusammenfassung
    @ahus1de

    View full-size slide

  35. Vielen Dank für Ihre Aufmerksamkeit
    © msg systems ag, 04.09.2014
    Herbstcampus 2014 / Absicherung mit Hystrix / Alexander Schwartz
    40
    Alexander Schwartz
    Geschäftsbereich Travel & Logistics
    Principal IT Consultant
    Telefon: +49 171 5625767
    [email protected]
    www.msg-systems.com

    View full-size slide