resilient software design patterns - oio · 2020-06-08 · 1 orientation in objects gmbh weinheimer...

Post on 29-Jun-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Orientation in Objects GmbH

Weinheimer Str. 6868309 Mannheim

www.oio.deinfo@oio.deVersion:

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

www.oio.deinfo@oio.de

??

? ?

????

Fragen ?

Orientation in Objects GmbH

Weinheimer Str. 6868309 Mannheim

www.oio.deinfo@oio.de

Vielen Dank für Ihre Aufmerksamkeit!

top related