Slide 1

Slide 1 text

Events First: Resiliente & Skalierbare Microservices 7.11.2018
 W-JAX @lutzhuehnken

Slide 2

Slide 2 text

„CRUD“ Service Service RDMBS Außen welt

Slide 3

Slide 3 text

Außen welt Service A Service B Service C RDBMS RDBMS RDMBS „Synchrone“ µServices

Slide 4

Slide 4 text

Wie skalieren wir? Service RDMBS Außen welt

Slide 5

Slide 5 text

Service B RDBMS „Stateless“ Services Service B Service B

Slide 6

Slide 6 text

Service B Master Master / Replica Service B Service B Replica Replica

Slide 7

Slide 7 text

Außen welt Service A Service B Service C RDBMS RDBMS RDMBS Wie resilient sind wir?

Slide 8

Slide 8 text

Außen welt Service A Service B Failure RDBMS RDBMS RDMBS Fehler kaskadieren

Slide 9

Slide 9 text

9 „A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable.“ Leslie Lamport

Slide 10

Slide 10 text

Was könnte nur die Lösung sein?

Slide 11

Slide 11 text

Event • Events sind Fakten • immer in Vergangenheitsform, etwas, was passiert ist • Events können nicht zurückgenommen werden • sie können höchstens ignoriert werden • Events sind unveränderlich

Slide 12

Slide 12 text

Arten von Events (nach Martin Fowler: What do you mean by “Event-Driven”?) • Event Notification • es ist etwas passiert • Event-Carried State Transfer • das hier sind die Änderungen • Event-Sourcing • speichere Events statt Zustand

Slide 13

Slide 13 text

1. Skalierbarkeit: Event Sourcing 2. Resilienz: Event Streaming 3. Design: Event Storming Was uns interessiert

Slide 14

Slide 14 text

EVENTSOURCING

Slide 15

Slide 15 text

Ziel: Scale Out

Slide 16

Slide 16 text

Event Sourcing - Prinzip Event Event Event Command A A' • Wir senden ein Kommando an unser „Aggregat“ A. • A validiert Kommando, es resultiert in Fehler oder Event(s). • Die Events werden persistiert. • Als Reaktion auf einen Event ändert A seinen Zustand zu A’

Slide 17

Slide 17 text

Event Sourcing - Philosophie

Slide 18

Slide 18 text

Wie skalieren wir? Node A Node B Node C X B A Z X Y N M „Cluster Sharding“

Slide 19

Slide 19 text

Service B Event Journal Wie skalieren wir? Service B Service B Event Journal Event Journal

Slide 20

Slide 20 text

State, Locks, Contention.. Shared Mutable Share Nothing Immutable

Slide 21

Slide 21 text

„All computers wait at the same speed.“ 21

Slide 22

Slide 22 text

S S Service B RDBMS Die „Stateless“ Illusion Service B Service B Stateless Shared Mutable State

Slide 23

Slide 23 text

S Service B Event Journal „Embrace the state“ Service B Service B Event Journal Event Journal Share-nothing Mutable State

Slide 24

Slide 24 text

Projection Read Side Wie lesen wir? CQRS Event Journal Read Side Projection

Slide 25

Slide 25 text

ES / CRQS- Technologie Event Sourcing / Command Query Responsibility Segregation • Write Side (Event Journal) • z.B. Cassandra - skaliert, schnelle Schreibzugriffe • Read Side • z.B. RDMBS - erlaubt SQL Tooling zu nutzen • oder.. Elastic Search, Hadoop/Spark, .. • „Polyglot Persistence“ (CQRS Read Side heißt immer: Eventual Consistency)

Slide 26

Slide 26 text

EVENTSTREAMING

Slide 27

Slide 27 text

Ziel: Bulkheads

Slide 28

Slide 28 text

Außen welt Service A Service B Service C Event Journal Event Journal Event Journal Ohne Event Streaming

Slide 29

Slide 29 text

Außen welt Service A Service B Service C Event Journal Event Journal Event Journal Mit Event Streaming Event Stream

Slide 30

Slide 30 text

Event Streaming • Services sprechen nicht mehr synchron miteinander, sondern publizieren und abonnieren Events • Tell, don’t ask! • Availability vs. Authority • Wieder: Eventual Consistency

Slide 31

Slide 31 text

Außen welt Service A Service B Failure Event Journal Event Journal Event Journal Resilienz Event Stream

Slide 32

Slide 32 text

Event Streaming - Technologie • Platzhirsch: Apache Kafka • Bewährt, aber Vorsicht vor Marketing-Versprechen • Auf AWS: Kinesis • Möglicherweise Alternativen (nicht getestet) • Chronicle Queue • NATS • Pulsar

Slide 33

Slide 33 text

EVENTSTORMING

Slide 34

Slide 34 text

PPT Master 16:9 / Edition 2018 „Going to microservices is like going from Newton’s physics to Einstein’s physics. Newton’s time marched forward uniformly with instant knowledge at a distance. Before microservices, distributed computing strove to make many systems look like one with RPC, 2PC etc.. In Einstein’s universe, everything is relative to one’s perspective.“ Pat Helland

Slide 35

Slide 35 text

Die Rettung: Event Storming!

Slide 36

Slide 36 text

EventStorming Starte mit Events. Erzähle eine Geschichte. Seat selected

Slide 37

Slide 37 text

EventStorming Wenn die Geschichte erzählt ist, überlege, was / wer die Events auslöst. Seat selected Choose seat

Slide 38

Slide 38 text

EventStorming Wer muss was wissen, um das Kommando zu verarbeiten? So finden wir unsere Aggregate. Seat selected Choose seat Seat map

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

„It is not the things that matter in early stages of design… …it is the things that happen.“ Russ Miles http:/ /www.russmiles.com/essais/going-events-first-for-microservices-with-event-storming-and-ddd 40

Slide 41

Slide 41 text

Wenn ihr nur eine Sache mitnehmt aus diesem Vortrag…

Slide 42

Slide 42 text

Fazit • Ihr könnt wirklich skalierbare und resiliente Microservices bauen, die Technologie ist da.* • Die wahre Hürde ist das Design: Die asynchrone, verteilte Natur, und die damit verbundene Unsicherheit (eventual consistency), akzeptieren und damit arbeiten. • Event Storming kann dabei eine sehr große Hilfe sein. (Ich hab’s ausprobiert, funktioniert ;)

Slide 43

Slide 43 text

Außen welt Service A Service B Service C Event Journal Event Journal Event Journal Bedenkenträger: Event Stream ist SPOF Failure

Slide 44

Slide 44 text

Bedenkenträger: Zu komplex • CQRS heißt ja schonmal mindestens zwei Datenbanken • Cassandra heißt mind. 3 Knoten • Kafka heißt mindestens 3 Knoten für Kafka plus mindestens 3 Knoten für Zookeeper

Slide 45

Slide 45 text

45 Scalability cannot be an after-thought. It requires applications and platforms to be designed with scaling in mind, … Werner Vogels

Slide 46

Slide 46 text

Projection Read Side Bedenkenträger: Änderungen sofort sehen Event Journal Read Side Projection Aggregate (can be read)

Slide 47

Slide 47 text

Bedenkenträger: Out-of-Order Events, Duplicates… Außen welt Service A Service B Service C Event Event Event Event Stream Deal with Uncertainty!

Slide 48

Slide 48 text

1. Skalierbar mit Event Sourcing ✔ 2. Resilient mit Event Streaming ✔ 3. Events First mit Event Storming ✔ Yeah, Events!

Slide 49

Slide 49 text

Bitte lesen / anschauen • Pat Helland • „Beyond Distributed Transactions“ • „Data on the Outside versus Data on the Inside“ • Jonas Boner • „Designing Events First Microservices“ • alles andere auch • Vaughn Vernon • „Dealing with Uncertainty“

Slide 50

Slide 50 text

Fragen, bitte! www.innoq.com Kontakt: Lutz Hühnken lutz.huehnken@innoq.com @lutzhuehnken INNOQ seit 1.11. auch in Hamburg. Wir suchen Verstärkung für unser Hamburger Team! INNOQ auf der W-JAX: Auf diesem Stockwerk (Obergeschoss), gegenüber von Audi.

Slide 51

Slide 51 text

Noch ein paar Links • http://www.russmiles.com/essais/going-events-first-for- microservices-with-event-storming-and-ddd • http://ziobrando.blogspot.de/2013/11/introducing-event- storming.html • https://leanpub.com/introducing_eventstorming • https://www.lagomframework.com • https://blog.redelastic.com/corporate-arts-crafts-modelling- reactive-systems-with-event-storming-73c6236f5dd7