Resilient Software Design Patterns Version: 17.1 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de info@oio.de
Ihr Sprecher Thorsten Maier Trainer, Berater, Entwickler Orientation in Objects GmbH Resilient Software Design Patterns 2
Resilient Software? 3
Resilient Software? Widerstandsfähig gegen Fehler 4
Warum? 5
Warum? weil jeder Ausfall viel Geld kostet und viele User verärgert 6
Warum? weil jeder Ausfall viel Geld kostet und viele User verärgert 7
Was ist daran neu? 8
Was ist daran neu? mehr User mehr Daten schnellere Anpassungen 9
Wie machen wir eine Software resilient? 10
Wie machen wir eine Software resilient? Redundanz 11
Wie machen wir eine Software resilient? Redundanz Isolation 12
Wie machen wir eine Software resilient? Redundanz Isolation Lose Kopplung 13
Wie machen wir eine Software resilient? Redundanz Isolation Lose Kopplung Fallback 14
Wie machen wir eine Software resilient? Redundanz Isolation Lose Kopplung Fallback 15
ISOLATION 16
17
18
BULKHEADS 19
Bulkheads im Kleinen: Methodenaufrufe 20
public int fakultaet(int n) { return (n == 0)? 1 : n * fakultaet(n - 1); } Mögliche Probleme? 21
public int fakultaet(int n) { if (n < 0) { throw new IllegalArgumentException(); } return (n == 0)? 1 : n * fakultaet(n - 1); } Schon besser 22
Validierung der Aufrufparameter Datentypen korrekt? Wertebereiche eingehalten? Vorbedingungen erfüllt?!= null Kreditkartennummer valide Freundliche Rückgabewerte Niemals null zurückliefern Datenmengen beschränken 23
Bulkheads im Großen: Software-Bausteine 24
3 Bausteine 25
Anwendung mit 3 Bausteinen Orientation in Objects GmbH Resilient Software Design Patterns 26
Anwendung mit 3 Bausteinen Deployment auf einem Server 27
Anwendung mit 3 Bausteinen Baustein wird 4 mal benötigt 28
Anwendung mit 3 Bausteinen Nachteile Änderung an wird nur 2 mal benötigt erfordert Reploy von Baustein wird 4 mal benötigt 29
Anwendung mit 3 Bausteinen Unabhängige Artefakte Baustein wird 4 mal benötigt 30
Anwendung mit 3 Bausteinen Unabhängige Artefakte Baustein wird 4 mal benötigt Flexible Skalierung auf 3 Server 31
Vorteile Unabhängige Artefakte Isolierte Entwicklung Isolierte Fehler Isoliertes Deployment Flexible Skalierung auf 3 Server 32
Nachteil Unabhängige Artefakte Kommunikation über Prozess- und Netzwerkgrenzen Verteilte Datenverarbeitung Flexible Skalierung auf 3 Server 33
8 Irrtümer der verteilten Datenverarbeitung Netzwerk ist ausfallsicher Latenzzeit = 0 Datendurchsatz Netzwerk ist sicher Netzwerktopologie ist stabil 1 Netzwerkadministrator Kosten des Datentransports = 0 Netzwerk ist homogen Bill Joy, Tom Lyon, L Peter Deutsch und James Gosling 34
In Kürze: Zuverlässigkeit und Konsistenz existieren nicht mehr 35
Verhalten und Standorte der Komponenten unseres Systems verändern sich ständig 36
Komponenten liefern unzuverlässige Daten oder verschwinden völlig 37
Ok, wir brauchen ISOLATION Aber wie kommen die Teile wieder zusammen? 38
LOSE KOPPLUNG 39
LOSE KOPPLUNG synchron asynchron 40
Startet gerade? nicht erreichbar Mit wem kann / soll ich kommunizieren? 41
Startet gerade? nicht erreichbar Als Architekt lassen sich alle Probleme mit Boxes and Lines lösen 42
2. Dienst finden 3. Dienst nutzen Verzeichnisdienst 1. registrieren 43
2. Dienst finden 3. Dienst nutzen Verzeichnisdienst 1. registrieren Als Entwickler brauchen wir etwas mehr 44
2. Dienst finden 3. Dienst nutzen Eureka 1. registrieren @SpringBootApplication @EnableEurekaServer public class Application { public static void main(string[] args) { //... } } 45
Security? 46
Security! 47
Soll ich mich etwa 2x einloggen? 48
Meine Session wird geteilt External Session Store 49
Netter Nebeneffekt: Anwendung wird zustandslos! External Session Store 50
@EnableRedisHttpSession public class SpringSessionConfig { @Bean public JedisConnectionFactory connectionfactory() { return new JedisConnectionFactory(); } } Redis 51
Problem: Doppelte Implementierung Redis 52
External Session Store Security API Gateway 53
External Session Store Security Zuul @EnableZuulProxy @EnableDiscoveryClient @SpringBootApplication public class ZuulProxy { public static void main(string[] args) { SpringApplication.run(ZuulProxy.class, args); } } 54
LOSE KOPPLUNG synchron asynchron 55
Asynchrone Kommunikation Entkoppelt Sender und Empfänger Verhindert Fehlerketten Sender muss nicht warten Sender Message Queue Empfänger Orientation in Objects GmbH Resilient Software Design Patterns 56
Starbucks Does Not Use Two-Phase Commit Kunde Kassierer Becherwarteschlange Ausgabe Barista http://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html Orientation in Objects GmbH Resilient Software Design Patterns 57
JmsTemplate jmstemplate = context.getbean(jmstemplate.class); jmstemplate.convertandsend("coffeeorderqueue", new CoffeeOrder("Thorsten", "Cappuccino")); Kassierer coffeeorderqueue Barista @Component public class Barista { } @JmsListener(destination = "coffeeorderqueue") public void receivemessage(coffeeorder coffeeorder) { System.out.println("Received <" + coffeeorder + ">"); } Orientation in Objects GmbH Resilient Software Design Patterns 58
Weiche zeitliche Anforderungen Strict Consistency Eventual Consistency türschloss = geschlossen letzte_reise = 523km (engl. irgendwann nicht eventuell ) 59
Exactly Once- Kommunikation notwendig Sender toggletuerschloss() Empfänger tuerschloss=offen Nicht idempotent 60
At Least Once- Kommunikation möglich Sender schliessetuerschloss() Empfänger tuerschloss=offen Idempotent! 61
FALLBACK 62
2. Dienst finden 3. Dienst nutzen Verzeichnisdienst 1. registrieren zur Erinnerung 63
Instanz fällt kurz NACH der Auswahl aus 64
Circuit Breaker 65
Circuit Breaker 66
Circuit Breaker errorcount = 3 67
Hystrix @HystrixCommand(fallbackMethod = "fallback") public String readstring() { return remoteservicecall(); } public String fallback() { return "Fallback result"; } 68
Alternative finden Hystrix Eureka registrieren 69
Resilient Software Design Patterns?! 70
Bulkheads Parameter Checking Microservice Async Communication Discovery Service Exactly Once- und At Least Once- Location Transparency Kommunikation External Session Store Circuit Breaker Idempotenz Eventual Consistency Stateless API Gateway 71
??? Fragen?? Orientation in Objects GmbH? Weinheimer Str. 68 68309 Mannheim www.oio.de info@oio.de 72
Vielen Dank für Ihre Aufmerksamkeit! Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de info@oio.de