Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
Orientation in Objects GmbH
Weinheimer Str. 68
68309 Mannheim
www.oio.de
Resilient Software Design Patterns
18.2
Resilient Software Design Patterns© Orientation in Objects GmbH
Ihr Sprecher
2
Thorsten Maier
Trainer, Berater, Entwickler
SchwerpunkteArchitektur
ProzesseQualitätssicherung
Resilient Software Design Patterns© Orientation in Objects GmbH 3
Resilient Software?
Resilient Software Design Patterns© Orientation in Objects GmbH 4
Resilient Software?
Widerstandsfähig gegen Fehler
Resilient Software Design Patterns© Orientation in Objects GmbH 5
Warum?
Resilient Software Design Patterns© Orientation in Objects GmbH 6
Warum?
… weil jeder Ausfall viel Geld kostet
und viele User verärgert
Resilient Software Design Patterns© Orientation in Objects GmbH 7
Warum?
… weil jeder Ausfall viel Geld kostet
und viele User verärgert
Resilient Software Design Patterns© Orientation in Objects GmbH 8
Was ist daran neu?
Resilient Software Design Patterns© Orientation in Objects GmbH 9
Was ist daran neu?
…mehr User…mehr Daten
…schnellere Anpassungen
Resilient Software Design Patterns© Orientation in Objects GmbH 10
𝑉𝑒𝑟𝑓ü𝑔𝑏𝑎𝑟𝑘𝑒𝑖𝑡 =M𝑇𝑇𝐹
M𝑇𝑇𝐹 + M𝑇𝑇R
MTTF = Mean Time To FailureMTTR = Mean Time To Recovery
Resilient Software Design Patterns© Orientation in Objects GmbH 11
Verfügbarkeit Betriebszeit (h)Maximale erlaubte
Ausfallzeit (h)Maximale erlaubte
Ausfallzeit (min)
99 % 8672,4 87,6 525699,5 % 8716,2 43,8 262899,9 % 8751,24 8,76 525,6
99,99 % 8759,124 0,876 52,56100 % 8760 0 0
99% =8672,4h
8672,4h + 87,6h
Resilient Software Design Patterns© Orientation in Objects GmbH 12
Traditioneller Stabilisierungsansatz
𝑉𝑒𝑟𝑓ü𝑔𝑏𝑎𝑟𝑘𝑒𝑖𝑡 =M𝑇𝑇𝐹
M𝑇𝑇𝐹 + M𝑇𝑇R
∞
Resilient Software Design Patterns© Orientation in Objects GmbH 13
Der „resilient“ Ansatz
𝑉𝑒𝑟𝑓ü𝑔𝑏𝑎𝑟𝑘𝑒𝑖𝑡 =M𝑇𝑇𝐹
M𝑇𝑇𝐹 + M𝑇𝑇R
0
Resilient Software Design Patterns© Orientation in Objects GmbH 14
2 Millionen Google-Server
Unrealistische Annahme
MTTF = 30 Jahre
~ alle 8 Minuten fällt ein Server aus
Resilient Software Design Patterns© Orientation in Objects GmbH 15
Typical first year for a new cluster (~2400 server)
~0.5 overheating (power down most machines in <5 mins)
~1 PDU failure (~500-1000 machines suddenly disappear)
~1 rack-move (~500-1000 machines powered down)
~1 network rewiring (rolling ~5% of machines down over 2-day span)
~20 rack failures (40-80 machines instantly disappear)
~8 network maintenances (4 might cause ~30-minute random connectivity losses)
~3 router failures (have to immediately pull traffic for an hour)
~1000 individual machine failures
...
http://www.odbms.org/download/dean-keynote-ladis2009.pdf
Resilient Software Design Patterns© Orientation in Objects GmbH 16
Things will crash.
Deal with it!
Resilient Software Design
Resilient Software Design Patterns© Orientation in Objects GmbH 17
Wie machen wir eine Software „resilient“?
Resilient Software Design Patterns© Orientation in Objects GmbH 18
Wie machen wir eine Software „resilient“?
Redundanz
Resilient Software Design Patterns© Orientation in Objects GmbH 19
Wie machen wir eine Software „resilient“?
Redundanz
Isolation
Resilient Software Design Patterns© Orientation in Objects GmbH 20
Wie machen wir eine Software „resilient“?
Redundanz
Isolation
Lose Kopplung
Resilient Software Design Patterns© Orientation in Objects GmbH 21
Wie machen wir eine Software „resilient“?
Redundanz
Isolation
Lose Kopplung
Fallback
Resilient Software Design Patterns© Orientation in Objects GmbH 22
Wie machen wir eine Software „resilient“?
Redundanz
Isolation
Lose Kopplung
Fallback
Resilient Software Design Patterns© Orientation in Objects GmbH 23
ISOLATION
Resilient Software Design Patterns© Orientation in Objects GmbH 24
Resilient Software Design Patterns© Orientation in Objects GmbH 25
Resilient Software Design Patterns© Orientation in Objects GmbH 26
BULKHEADS
Resilient Software Design Patterns© Orientation in Objects GmbH 27
Bulkheads im Kleinen:
Methodenaufrufe
Resilient Software Design Patterns© Orientation in Objects GmbH 28
Mögliche Probleme?
public int fakultaet(int n) {return (n == 0) ? 1 : n * fakultaet(n - 1);
}
Resilient Software Design Patterns© Orientation in Objects GmbH 29
Schon besser…
public int fakultaet(int n) {if (n < 0) {
throw new IllegalArgumentException("n zu klein");}return (n == 0) ? 1 : n * fakultaet(n - 1);
}
Resilient Software Design Patterns© Orientation in Objects GmbH 30
…
public int fakultaet(int n) {if (n < 0) {
throw new IllegalArgumentException("n zu klein");}if (n > 12) {
throw new IllegalArgumentException("n zu groß");}return (n == 0) ? 1 : n * fakultaet(n - 1);
}
Resilient Software Design Patterns© Orientation in Objects GmbH 31
8
3
6
7
1 + 2
7
3
3
7
20 % 10 = 0
1 + 6
Zahl Verdoppeln SummierenLU
HN
Alg
ori
thm
us
Resilient Software Design Patterns© Orientation in Objects GmbH 32
Validierung der AufrufparameterDatentypen korrekt?
Wertebereiche eingehalten?
Vorbedingungen erfüllt?
!= null
Kreditkartennummer valide
…
„Freundliche“ RückgabewerteNiemals „null“ zurückliefern
Datenmengen beschränken
…
Resilient Software Design Patterns© Orientation in Objects GmbH 33
Bulkheads im Großen:
Software-Bausteine
Resilient Software Design Patterns© Orientation in Objects GmbH 34
3 Bausteine
Resilient Software Design Patterns© Orientation in Objects GmbH
Anwendung mit 3 Bausteinen
35
Resilient Software Design Patterns© Orientation in Objects GmbH 36
Deployment auf einem Server
Anwendung mit 3 Bausteinen
Resilient Software Design Patterns© Orientation in Objects GmbH 37
Anwendung mit 3 Bausteinen
Baustein wird 4 mal benötigt
Resilient Software Design Patterns© Orientation in Objects GmbH 38
Anwendung mit 3 Bausteinen
Nachteile
wird nur 2 mal benötigt
Änderung an erfordert Reploy von
Baustein wird 4 mal benötigt
Resilient Software Design Patterns© Orientation in Objects GmbH 39
Unabhängige ArtefakteAnwendung mit 3 Bausteinen
Baustein wird 4 mal benötigt
Resilient Software Design Patterns© Orientation in Objects GmbH 40
Unabhängige Artefakte
Flexible Skalierung auf 3 Server
Anwendung mit 3 Bausteinen
Baustein wird 4 mal benötigt
Resilient Software Design Patterns© Orientation in Objects GmbH 41
Unabhängige ArtefakteVorteile
Isolierte Entwicklung
Isolierte Fehler
Isoliertes Deployment
…
Flexible Skalierung auf 3 Server
Resilient Software Design Patterns© Orientation in Objects GmbH 42
Unabhängige ArtefakteNachteil
Kommunikation über
Prozess- und Netzwerkgrenzen
Verteilte Datenverarbeitung
Flexible Skalierung auf 3 Server
Resilient Software Design Patterns© Orientation in Objects GmbH 43
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
…
Resilient Software Design Patterns© Orientation in Objects GmbH 44
In Kürze:
Zuverlässigkeit und Konsistenzexistieren nicht mehr
Resilient Software Design Patterns© Orientation in Objects GmbH 45
Verhalten und Standorte der Komponenten unseres Systems
verändern sich ständig
Resilient Software Design Patterns© Orientation in Objects GmbH 46
Komponenten liefern unzuverlässige Daten oder
verschwinden völlig
Resilient Software Design Patterns© Orientation in Objects GmbH 47
Ok, wir brauchen ISOLATION
Aber wie kommen die Teile wieder zusammen?
Resilient Software Design Patterns© Orientation in Objects GmbH 48
LOSE KOPPLUNG
Resilient Software Design Patterns© Orientation in Objects GmbH 49
LOSE KOPPLUNG
asynchron synchron
Resilient Software Design Patterns© Orientation in Objects GmbH 50
Asynchrone KommunikationEntkoppelt Sender und Empfänger
Verhindert Fehlerketten
Sender muss nicht warten
Resilient Software Design Patterns© Orientation in Objects GmbH
Barista
51
Kunde BecherwarteschlangeKassierer
Ausgabe
http://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html
„Starbucks Does Not Use Two-Phase Commit”
Resilient Software Design Patterns© Orientation in Objects GmbH 52
Weiche zeitliche Anforderungen
Strict Consistency
Eventual Consistency (engl. „letztendlich“ nicht „eventuell“)
türschloss = geschlossen
letzte_reise = 523km
Resilient Software Design Patterns© Orientation in Objects GmbH 53
EmpfängerSender
tuerschloss=offentoggleTuerschloss()
Nicht idempotent
Exactly Once-Kommunikation
notwendig
Resilient Software Design Patterns© Orientation in Objects GmbH 54
EmpfängerSender
Idempotent!
At Least Once-Kommunikation
möglich
schliesseTuerschloss() tuerschloss=offen
Resilient Software Design Patterns© Orientation in Objects GmbH
Listener
55
TopicNachricht wird an alle Listener zugestellt
Falls kein „Interessent“ aktiv ist, wird die Nachricht u.U. nicht verarbeitet
Sender Topic
Listener
Listener 26°C
26°C26°C
26°C
Resilient Software Design Patterns© Orientation in Objects GmbH
Listener
56
QueueNachricht wird an einen Listener zugestellt
Es kann sichergestellt werden, dass eine Nachricht genau einmal verarbeitet wird
Sender Queue
Listener
Listener
26°C26°C
Resilient Software Design Patterns© Orientation in Objects GmbH 57
??
Resilient Software Design Patterns© Orientation in Objects GmbH 58
Java Message Servicenur Java
Komplexe ObjekteQueues und Topics
Verteilte Transaktionen
Resilient Software Design Patterns© Orientation in Objects GmbH
Barista
59
Kassierer coffeeOrderQueue
JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);jmsTemplate.convertAndSend("coffeeOrderQueue", new CoffeeOrder("Thorsten", "Cappuccino"));
@Componentpublic class Barista {
@JmsListener(destination = "coffeeOrderQueue")public void receiveMessage(CoffeeOrder coffeeOrder) {System.out.println("Received <" + coffeeOrder + ">");
}}
Resilient Software Design Patterns© Orientation in Objects GmbH 60
Advanced Message Queuing ProtocolViele Sprachen
Komplexe ObjekteQueues und Topics
Verteilte Transaktionen
Resilient Software Design Patterns© Orientation in Objects GmbH 61
Message Queuing Telemetry TransportViele Sprachen
Nur Byte StreamsNur Topics
Für „dünne Leitungen“ und Geräte mit „Batterie“
QoS 0: At most onceQoS 1: At least onceQoS 2: Exactly once
Resilient Software Design Patterns© Orientation in Objects GmbH 62
Und welchen Broker?
Resilient Software Design Patterns© Orientation in Objects GmbH 63
LOSE KOPPLUNG
asynchron synchron
Resilient Software Design Patterns© Orientation in Objects GmbH 64
?
Mit wem kann / soll ich kommunizieren?
nicht erreichbar
Startetgerade
Resilient Software Design Patterns© Orientation in Objects GmbH 65
?
nicht erreichbar
Startetgerade
Als Architekt lassen sich alle Probleme mit
„Boxes and Lines“ lösen☺
Resilient Software Design Patterns© Orientation in Objects GmbH 66
Verzeichnis-dienst
1. registrieren
2. Dienst finden
3. Dienst nutzen
z.B.:Netflix EurekaApache ZooKeeperCloud Foundry DiscoveryHashicorp Consul…
Resilient Software Design Patterns© Orientation in Objects GmbH 67
Verzeichnis-dienst
1. registrieren
2. Dienst finden
3. Dienst nutzen
Als Entwickler brauchen wir etwas mehr
Resilient Software Design Patterns© Orientation in Objects GmbH 68
Eureka
1. registrieren
2. Dienst finden
3. Dienst nutzen
@SpringBootApplication@EnableEurekaServerpublic class Application {
public static void main(String[] args) {// ...
}}
Resilient Software Design Patterns© Orientation in Objects GmbH 69
Eureka
1. registrieren
2. Dienst finden
3. Dienst nutzen
@SpringBootApplication@EnableEurekaServerpublic class Application {
public static void main(String[] args) {// ...
}}
Resilient Software Design Patterns© Orientation in Objects GmbH 70
Eureka
Resilient Software Design Patterns© Orientation in Objects GmbH 71
Eureka?
Weitere
Instanz
Resilient Software Design Patterns© Orientation in Objects GmbH 72
AlgorithmenSimple Round Robin
Zone Aware Round RobinRandom
Weighted Response Time
Resiliente Lösung:
Clientseitiges
Load-Balancing
Resilient Software Design Patterns© Orientation in Objects GmbH 73
@RibbonClient(name = "blauerService")@RestControllerpublic class Application {
@LoadBalanced@BeanRestTemplate restTemplate() {
return new RestTemplate();}
@RequestMapping("/")public String serviceCall() {
return restTemplate().getForObject("http://blauerService/", String.class);}
}
Resiliente Lösung:
Clientseitiges
Load-Balancing
Resilient Software Design Patterns© Orientation in Objects GmbH 74
Security?
Resilient Software Design Patterns© Orientation in Objects GmbH 75
Security!
Resilient Software Design Patterns© Orientation in Objects GmbH 76
„Soll ich mich etwa 2x einloggen?“
Resilient Software Design Patterns© Orientation in Objects GmbH 77
„Meine Session wird geteilt ☺“
ExternalSession Store
Resilient Software Design Patterns© Orientation in Objects GmbH 78
Netter Nebeneffekt:
Anwendung wird zustandslos!
ExternalSession Store
Resilient Software Design Patterns© Orientation in Objects GmbH 79
Redis
@EnableRedisHttpSessionpublic class SpringSessionConfig {
@Beanpublic JedisConnectionFactory connectionFactory() {
return new JedisConnectionFactory();}
}
Resilient Software Design Patterns© Orientation in Objects GmbH 80
Redis
Problem:
Doppelte Implementierung
Resilient Software Design Patterns© Orientation in Objects GmbH 81
API Gateway
Security
…/blauerKreis/orders…/gruenerStern/customers
Resilient Software Design Patterns© Orientation in Objects GmbH 82
Zuul
@EnableZuulProxy@EnableDiscoveryClient@SpringBootApplicationpublic class ZuulProxy {public static void main(String[] args) {SpringApplication.run(ZuulProxy.class, args);
}}
ExternalSession Store Security
Resilient Software Design Patterns© Orientation in Objects GmbH 83
FALLBACK
Resilient Software Design Patterns© Orientation in Objects GmbH 84
Verzeichnis-dienst
1. registrieren
2. Dienst finden
3. Dienst nutzen
zur Erinnerung
Resilient Software Design Patterns© Orientation in Objects GmbH 85
Instanz fällt kurzNACH der Auswahl aus
Resilient Software Design Patterns© Orientation in Objects GmbH 86
Circuit Breaker
Resilient Software Design Patterns© Orientation in Objects GmbH 87
Circuit Breaker
Resilient Software Design Patterns© Orientation in Objects GmbH 88
Circuit Breaker
errorCount = 3
Resilient Software Design Patterns© Orientation in Objects GmbH 89
Hystrix
@HystrixCommand(fallbackMethod = "fallback")public String readString() {return remoteServiceCall();
}
public String fallback() {return "Fallback result";
}
Resilient Software Design Patterns© Orientation in Objects GmbH 90
Eureka
registrieren
Alternativefinden
Hystrix
Resilient Software Design Patterns© Orientation in Objects GmbH 91
API Gateway
Security
…/blauerKreis/orders…/gruenerStern/customers
Resilient Software Design Patterns© Orientation in Objects GmbH 92
ZENTRALE DIENSTE
Resilient Software Design Patterns© Orientation in Objects GmbH 93
db.url=green.dbserver.de
db.url=blue.dbserver.de
db.url=yellow.dbserver.de
db.url=green.dbserver.de
Wo liegt unsere Konfiguration?
Resilient Software Design Patterns© Orientation in Objects GmbH 94
CentralConfiguration
Resilient Software Design Patterns© Orientation in Objects GmbH 95
Spring CloudConfig
@SpringBootApplication@EnableConfigServerpublic class ConfigServerApplication {
public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);
}}
Resilient Software Design Patterns© Orientation in Objects GmbH 96
Spring CloudConfig
@SpringBootApplication@EnableConfigServerpublic class ConfigServerApplication {
public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);
}}
@Value("${db.url}")private String url;
Resilient Software Design Patterns© Orientation in Objects GmbH 97
Resilient Software Design
Patterns?!
Resilient Software Design Patterns© Orientation in Objects GmbH 98
Circuit Breaker
Bulkheads
Discovery Service
Location Transparency
Stateless
Microservice
External Session Store
Parameter Checking
Eventual Consistency
Async Communication
Exactly Once- und At Least Once-Kommunikation
Idempotenz
API Gateway
Central Configuration
Orientation in Objects GmbH
Weinheimer Str. 68
68309 Mannheim
www.oio.de
? ?
??
?Fragen ?
Orientation in Objects GmbH
Weinheimer Str. 68
68309 Mannheim
www.oio.de
Vielen Dank für Ihre
Aufmerksamkeit!