resilient software design patterns - oio · 2020-06-08 · 1 orientation in objects gmbh weinheimer...
TRANSCRIPT
1
Orientation in Objects GmbH
Weinheimer Str. 6868309 Mannheim
Resilient Software Design Patterns
19.1
Resilient Software Design Patterns© Orientation in Objects GmbH
Ihr Sprecher
2
Thorsten Maier
Trainer, Berater, Entwickler
SchwerpunkteArchitektur
ProzesseQualitätssicherung
2
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
3
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
4
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?
5
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 Failure
MTTR = Mean Time To Recovery
6
Resilient Software Design Patterns© Orientation in Objects GmbH 11
Traditioneller Stabilisierungsansatz
����ü������ = M���
M��� + M��R
∞
Resilient Software Design Patterns© Orientation in Objects GmbH 12
Der „resilient“ Ansatz
����ü������ = M���
M��� + M��R
0
7
Resilient Software Design Patterns© Orientation in Objects GmbH 13
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 14
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
8
Resilient Software Design Patterns© Orientation in Objects GmbH 15
Things will crash.
Deal with it!
Resilient Software Design
Resilient Software Design Patterns© Orientation in Objects GmbH 16
Wie machen wir eine Software „resilient“?
9
Resilient Software Design Patterns© Orientation in Objects GmbH 17
Wie machen wir eine Software „resilient“?
Redundanz
Resilient Software Design Patterns© Orientation in Objects GmbH 18
Wie machen wir eine Software „resilient“?
Redundanz
Isolation
10
Resilient Software Design Patterns© Orientation in Objects GmbH 19
Wie machen wir eine Software „resilient“?
Redundanz
Isolation
Lose Kopplung
Resilient Software Design Patterns© Orientation in Objects GmbH 20
Wie machen wir eine Software „resilient“?
Redundanz
Isolation
Lose Kopplung
Fallback
11
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
ISOLATION
12
Resilient Software Design Patterns© Orientation in Objects GmbH 23
Resilient Software Design Patterns© Orientation in Objects GmbH 24
13
Resilient Software Design Patterns© Orientation in Objects GmbH 25
BULKHEADS
Resilient Software Design Patterns© Orientation in Objects GmbH 26
Bulkheads im Kleinen:
Methodenaufrufe
14
Resilient Software Design Patterns© Orientation in Objects GmbH 27
Mögliche Probleme?
public int fakultaet(int n) {
return (n == 0) ? 1 : n * fakultaet(n - 1);
}
Resilient Software Design Patterns© Orientation in Objects GmbH 28
Schon besser…
public int fakultaet(int n) {
if (n < 0) {
throw new IllegalArgumentException("n zu klein");
}
return (n == 0) ? 1 : n * fakultaet(n - 1);
}
15
Resilient Software Design Patterns© Orientation in Objects GmbH 29
…
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 30
Validierung der AufrufparameterDatentypen korrekt?
Wertebereiche eingehalten?
Vorbedingungen erfüllt?
!= null
Kreditkartennummer valide
…
„Freundliche“ RückgabewerteNiemals „null“ zurückliefern
Datenmengen beschränken
…
16
Resilient Software Design Patterns© Orientation in Objects GmbH 31
Bulkheads im Großen:
Software-Bausteine
Resilient Software Design Patterns© Orientation in Objects GmbH 32
3 Bausteine
17
Resilient Software Design Patterns© Orientation in Objects GmbH
Anwendung mit 3 Bausteinen
33
Resilient Software Design Patterns© Orientation in Objects GmbH 34
Deployment auf einem Server
Anwendung mit 3 Bausteinen
18
Resilient Software Design Patterns© Orientation in Objects GmbH 35
Anwendung mit 3 Bausteinen
Baustein wird 4 mal benötigt
Resilient Software Design Patterns© Orientation in Objects GmbH 36
Anwendung mit 3 Bausteinen
Nachteile
wird nur 2 mal benötigt
Änderung an erfordert Reploy von
Baustein wird 4 mal benötigt
19
Resilient Software Design Patterns© Orientation in Objects GmbH 37
Unabhängige ArtefakteAnwendung mit 3 Bausteinen
Baustein wird 4 mal benötigt
Resilient Software Design Patterns© Orientation in Objects GmbH 38
Unabhängige Artefakte
Flexible Skalierung auf 3 Server
Anwendung mit 3 Bausteinen
Baustein wird 4 mal benötigt
https://martinfowler.com/articles/microservices.html
20
Resilient Software Design Patterns© Orientation in Objects GmbH 39
Unabhängige ArtefakteVorteile
Isolierte Entwicklung
Isolierte Fehler
Isoliertes Deployment
…
Flexible Skalierung auf 3 Server
https://martinfowler.com/articles/microservices.html
Resilient Software Design Patterns© Orientation in Objects GmbH 40
Unabhängige ArtefakteNachteil
Kommunikation über
Prozess- und Netzwerkgrenzen
Verteilte Datenverarbeitung
Flexible Skalierung auf 3 Server
https://martinfowler.com/articles/microservices.html
21
Resilient Software Design Patterns© Orientation in Objects GmbH 41
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 42
In Kürze:
Zuverlässigkeit und Konsistenz
existieren nicht mehr
22
Resilient Software Design Patterns© Orientation in Objects GmbH 43
Verhalten und Standorte der
Komponenten unseres Systems
verändern sich ständig
Resilient Software Design Patterns© Orientation in Objects GmbH 44
Komponenten liefern
unzuverlässige Daten oder
verschwinden völlig
23
Resilient Software Design Patterns© Orientation in Objects GmbH 45
Ok, wir brauchen ISOLATION
Aber wie kommen die Teile
wieder zusammen?
Resilient Software Design Patterns© Orientation in Objects GmbH 46
LOSE KOPPLUNG
24
Resilient Software Design Patterns© Orientation in Objects GmbH 47
LOSE KOPPLUNG
asynchron synchron
Resilient Software Design Patterns© Orientation in Objects GmbH 48
Asynchrone KommunikationEntkoppelt Sender und Empfänger
Verhindert Fehlerketten
Sender muss nicht warten
25
Resilient Software Design Patterns© Orientation in Objects GmbH
Barista
49
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 50
Weiche zeitliche Anforderungen
Strict Consistency
Eventual Consistency (engl. „letztendlich“ nicht „eventuell“)
türschloss = geschlossen
letzte_reise = 523km
26
Resilient Software Design Patterns© Orientation in Objects GmbH 51
EmpfängerSender
tuerschloss=offentoggleTuerschloss()
Nicht idempotent
Exactly Once-Kommunikation
notwendig
Resilient Software Design Patterns© Orientation in Objects GmbH 52
EmpfängerSender
Idempotent!
At Least Once-Kommunikation
möglich
schliesseTuerschloss() tuerschloss=offen
27
Resilient Software Design Patterns© Orientation in Objects GmbH 53
??
Resilient Software Design Patterns© Orientation in Objects GmbH
Barista
54
Kassierer coffeeOrderQueue
JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
jmsTemplate.convertAndSend("coffeeOrderQueue", new CoffeeOrder("Thorsten", "Cappuccino"));
@Component
public class Barista {
@JmsListener(destination = "coffeeOrderQueue")
public void receiveMessage(CoffeeOrder coffeeOrder) {
System.out.println("Received <" + coffeeOrder + ">");
}
}
28
Resilient Software Design Patterns© Orientation in Objects GmbH 55
LOSE KOPPLUNG
asynchron synchron
Resilient Software Design Patterns© Orientation in Objects GmbH 56
?
Mit wem kann / soll ich kommunizieren?
nicht
erreichbar
Startet
gerade
29
Resilient Software Design Patterns© Orientation in Objects GmbH 57
?
nicht
erreichbar
Startet
gerade
Als Architekt lassen sich alle Probleme mit
„Boxes and Lines“ lösen
Resilient Software Design Patterns© Orientation in Objects GmbH 58
Verzeichnis-dienst
1. registrieren
2. Dienst finden
3. Dienst nutzen
z.B.:
Netflix Eureka
Apache ZooKeeper
Cloud Foundry Discovery
Hashicorp Consul
…
30
Resilient Software Design Patterns© Orientation in Objects GmbH 59
Verzeichnis-dienst
1. registrieren
2. Dienst finden
3. Dienst nutzen
Als Entwickler brauchen wir etwas mehr
Resilient Software Design Patterns© Orientation in Objects GmbH 60
Eureka
1. registrieren
2. Dienst finden
3. Dienst nutzen
@SpringBootApplication
@EnableEurekaServer
public class Application {public static void main(String[] args) {
// ...}
}
31
Resilient Software Design Patterns© Orientation in Objects GmbH 61
Eureka
1. registrieren
2. Dienst finden
3. Dienst nutzen
@SpringBootApplication
@EnableEurekaServer
public class Application {public static void main(String[] args) {
// ...}
}
Resilient Software Design Patterns© Orientation in Objects GmbH 62
Eureka?
Weitere
Instanz
32
Resilient Software Design Patterns© Orientation in Objects GmbH 63
AlgorithmenSimple Round Robin
Zone Aware Round Robin
Random
Weighted Response Time
Resiliente Lösung:
Clientseitiges
Load-Balancing
Resilient Software Design Patterns© Orientation in Objects GmbH 64
@RibbonClient(name = "blauerService")
@RestController
public class Application {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
@RequestMapping("/")
public String serviceCall() {
return restTemplate().getForObject("http://blauerService/", String.class);
}
}
Resiliente Lösung:
Clientseitiges
Load-Balancing
33
Resilient Software Design Patterns© Orientation in Objects GmbH 65
Security?
Resilient Software Design Patterns© Orientation in Objects GmbH 66
Security!
34
Resilient Software Design Patterns© Orientation in Objects GmbH 67
„Soll ich mich etwa
2x einloggen?“
Resilient Software Design Patterns© Orientation in Objects GmbH 68
„Meine Session
wird geteilt “
ExternalSession Store
35
Resilient Software Design Patterns© Orientation in Objects GmbH 69
Netter Nebeneffekt:
Anwendung wird zustandslos!
ExternalSession Store
Resilient Software Design Patterns© Orientation in Objects GmbH 70
Redis
@EnableRedisHttpSession
public class SpringSessionConfig {
@Bean
public JedisConnectionFactory connectionFactory() {
return new JedisConnectionFactory();
}
}
36
Resilient Software Design Patterns© Orientation in Objects GmbH 71
?
Resilient Software Design Patterns© Orientation in Objects GmbH 72
API Gateway …/blauerKreis/orders…/gruenerStern/customers
37
Resilient Software Design Patterns© Orientation in Objects GmbH 73
Zuul
@EnableZuulProxy
@EnableDiscoveryClient
@SpringBootApplication
public class ZuulProxy {
public static void main(String[] args) {
SpringApplication.run(ZuulProxy.class, args);
}
}
Resilient Software Design Patterns© Orientation in Objects GmbH 74
FALLBACK
38
Resilient Software Design Patterns© Orientation in Objects GmbH 75
Verzeichnis-dienst
1. registrieren
2. Dienst finden
3. Dienst nutzen
zur Erinnerung
Resilient Software Design Patterns© Orientation in Objects GmbH 76
Instanz fällt kurz
NACH der Auswahl aus
39
Resilient Software Design Patterns© Orientation in Objects GmbH 77
Circuit Breaker
Resilient Software Design Patterns© Orientation in Objects GmbH 78
Circuit Breaker
40
Resilient Software Design Patterns© Orientation in Objects GmbH 79
Circuit Breaker
errorCount = 3
Resilient Software Design Patterns© Orientation in Objects GmbH 80
Hystrix
@HystrixCommand(fallbackMethod = "fallback")
public String readString() {
return remoteServiceCall();
}
public String fallback() {
return "Fallback result";
}
41
Resilient Software Design Patterns© Orientation in Objects GmbH 81
Eureka
registrieren
Alternative
findenHystrix
Resilient Software Design Patterns© Orientation in Objects GmbH 82
ZENTRALE DIENSTE
42
Resilient Software Design Patterns© Orientation in Objects GmbH 83
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 84
CentralConfiguration
43
Resilient Software Design Patterns© Orientation in Objects GmbH 85
Spring CloudConfig
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
Resilient Software Design Patterns© Orientation in Objects GmbH 86
Spring CloudConfig
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
@Value("${db.url}")
private String url;
44
Resilient Software Design Patterns© Orientation in Objects GmbH 87
Resilient Software Design
Patterns?!
Resilient Software Design Patterns© Orientation in Objects GmbH 88
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
45
Orientation in Objects GmbH
Weinheimer Str. 6868309 Mannheim
??
? ?
????
Fragen ?
Orientation in Objects GmbH
Weinheimer Str. 6868309 Mannheim
Vielen Dank für Ihre Aufmerksamkeit!