Resilient Software Design Patterns...Java Message Service nur Java Komplexe Objekte Queues und...

Post on 30-Aug-2020

6 views 0 download

Transcript of Resilient Software Design Patterns...Java Message Service nur Java Komplexe Objekte Queues und...

Orientation in Objects GmbH

Weinheimer Str. 68

68309 Mannheim

www.oio.de

info@oio.deVersion:

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

info@oio.de

? ?

??

?Fragen ?

Orientation in Objects GmbH

Weinheimer Str. 68

68309 Mannheim

www.oio.de

info@oio.de

Vielen Dank für Ihre

Aufmerksamkeit!