Top Banner
Event Sourcing in einer Microservice-Architektur Ein Erfahrungsbericht aus der Werkhalle Michael Omann Senacor Technologies AG
123

Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

May 29, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Event Sourcing in einer Microservice-Architektur

Ein Erfahrungsbericht aus der Werkhalle

Michael Omann Senacor Technologies AG

Page 2: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Event Sourcing in einer

Microservice-Architektur

Michael Omann

Page 3: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Michael Omann Architect bei Senacor

Softwareentwickler!

- Retail Banking,- Commercial Banking,- Investment Banking- Banking, Banking, Banking,…

Meine Branchen und Kunden:

ERP

No to NoSQL!

Page 4: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

eCommerce Payment Solution

Page 5: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

eCommerce Payment Solution?

Web Shop

Sockenkäufer

Server

checkout

Page 6: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Händler

Käufer

Banken

Vermittler

Email Notifications

Mobile TAN

SMS TAN

Photo TAN

Payments

Data Mining

Reporting

Fraud Prevention

Security

Authorization

Ticketsystem

Analysis

Dispute

Anforderungen

Audit

Business Intelligence

B2B

B2EOnline Shops

PSP

Big Data

Checkout Funnel

Mobile Commerce

Payment Gateway

Page 7: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Stammdatenverwaltung

Händler

Käufer

Banken

Vermittler

Email Notifications

Mobile TAN

SMS TAN

Photo TAN

Payments

Data Mining

Reporting

Fraud Prevention

Security

Authorization

Ticketsystem

Analysis

Dispute

Audit

Business Intelligence

B2B

B2EOnline Shops

PSP

Big Data

Checkout Funnel

Mobile Commerce

Payment Gateway

Page 8: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Zahlungssicherheit

Händler

Käufer

Banken

Vermittler

Email Notifications

Mobile TAN

SMS TAN

Photo TAN

Payments

Data Mining

Reporting

Fraud Prevention

Security

Authorization

Ticketsystem

Analysis

Dispute

Audit

Business Intelligence

B2B

B2EOnline Shops

PSP

Big Data

Checkout Funnel

Mobile Commerce

Payment Gateway

Page 9: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Notifications

Händler

Käufer

Banken

Vermittler

Email Notifications

Mobile TAN

SMS TAN

Photo TAN

Payments

Data Mining

Reporting

Fraud Prevention

Security

Authorization

Ticketsystem

Analysis

Dispute

Audit

Business Intelligence

B2B

B2EOnline Shops

PSP

Big Data

Checkout Funnel

Mobile Commerce

Payment Gateway

Page 10: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Business Intelligence

Händler

Käufer

Banken

Vermittler

Email Notifications

Mobile TAN

SMS TAN

Photo TAN

Payments

Data Mining

Reporting

Fraud Prevention

Security

Authorization

Ticketsystem

Analysis

Dispute

Audit

Business Intelligence

B2B

B2EOnline Shops

PSP

Big Data

Checkout Funnel

Mobile Commerce

Payment Gateway

Page 11: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Microservice-Architektur

Account

Bank

Merchant

Checkout SMS

Email

Browser

iOS

android Payments Fraud

ServerClient

Spring Boot

Page 12: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account

Stammdatenverwaltung

Bank

Merchant

Customer

BankPortal

MerchantPortal

Page 13: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account

Stammdatenverwaltung

Bank

Merchant

HTTP 200 Ok

Customer

BankPortal

MerchantPortal

HTTP GET /accounts/12345

Page 14: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account

Stammdatenverwaltung

Bank

Merchant

Customer

BankPortal

MerchantPortal

HTTP 200 Ok

HTTP PUT /banks/555/IBAN/DE98…

HTTP 200 Ok

HTTP GET /accounts/12345

Page 15: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account

Stammdatenverwaltung

Bank

Merchant

HTTP GET /accounts/12345

HTTP 200 Ok

HTTP PUT /banks/555/IBAN/DE98…

Customer

BankPortal

MerchantPortal

HTTP 200 Ok

HTTP POST /merchants/232/shops

HTTP 201 Created

Page 16: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account

Stammdatenverwaltung

Bank

Merchant

HTTP GET /accounts/12345

HTTP 200 Ok

HTTP PUT /banks/555/IBAN/DE98…

Customer

BankPortal

MerchantPortal

HTTP 503 Service Unavailable

HTTP POST /merchants/232/shops

HTTP 201 Created

Page 17: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

ZahlungsinitierungWeb Shop

Sockenkäufer

Server

checkout

Service B

Service C

Service D

Service A

Page 18: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Zahlungsinitierung

Page 19: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Zahlungsinitierung

HTTP

Käuferdaten

Page 20: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Zahlungsinitierung

HTTP

Käuferdaten Händlerdaten

HTTP

Page 21: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Zahlungsinitierung

HTTP

Käuferdaten Händlerdaten

HTTP

Bankdaten

HTTP

Page 22: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Zahlungsinitierung

HTTP

Käuferdaten Händlerdaten

HTTP

Bankdaten

HTTP

Authorization

Fraud

External Services

Payments

Microservices

Page 23: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Zahlungsinitierung

HTTP

Käuferdaten Händlerdaten

HTTP

Bankdaten

HTTP

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

Microservices

Page 24: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Zahlungsinitierung

HTTP

Käuferdaten Händlerdaten

HTTP

Bankdaten

HTTP

Authorization

Fraud

External Services

Payments

JVM JVM JVM

JVM

CheckoutHTTP 200 Ok

Microservices

Page 25: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Zahlungsinitierung

HTTP

Käuferdaten Händlerdaten

HTTP

Bankdaten

HTTP

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

Microservices

Page 26: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account Merchant Bank

WebShop

POST /checkouts Checkout

Zahlungsinitierung

HTTP

Käuferdaten Händlerdaten

HTTP

Bankdaten

HTTP

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

Microservices

Page 27: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Service2Service Kommunikation

Merchant

Checkout

Page 28: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Service2Service Kommunikation

Merchant

Checkout

HTTP GET /merchants/{id}

Page 29: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Service2Service Kommunikation

Merchant

Checkout

HTTP GET /merchants/{id} HTTP GET /merchants/{id}/shops/{shop-id}

Page 30: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Service2Service Kommunikation

Merchant

Checkout

HTTP GET /merchants/{id} HTTP GET /merchants/{id}/shops/{shop-id} HTTP GET /merchants/{id}/account

Page 31: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Service2Service Kommunikation

Merchant

Checkout

HTTP GET /merchants/{id} HTTP GET /merchants/{id}/shops/{shop-id} HTTP GET /merchants/{id}/account

Latenz

Page 32: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Service2Service Kommunikation

Merchant

Checkout

HTTP GET /merchants/{id} HTTP GET /merchants/{id}/shops/{shop-id} HTTP GET /merchants/{id}/account

Latenz

Timeouts?Http 5xx?

Page 33: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Service2Service Kommunikation

Merchant

Checkout

HTTP GET /merchants/{id} HTTP GET /merchants/{id}/shops/{shop-id} HTTP GET /merchants/{id}/account

Latenz

Timeouts?Http 5xx?

Resiliency

Page 34: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Service2Service Kommunikation

Merchant

Checkout

HTTP GET /merchants/{id} HTTP GET /merchants/{id}/shops/{shop-id} HTTP GET /merchants/{id}/account

HTTP GET /merchants/{id}/checkout-information Views

Page 35: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Service2Service Kommunikation

Merchant

Checkout

HTTP GET /merchants/{id} HTTP GET /merchants/{id}/shops/{shop-id} HTTP GET /merchants/{id}/account

HTTP GET /merchants/{id}/checkout-information Views

Service-spezifischeURL-Endpoints

Page 36: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

POST /checkouts Checkout

Zahlungsinitierung

Käuferdaten Händlerdaten Bankdaten

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

Microservices

Page 37: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Tests?

HTTP

Käuferdaten Händlerdaten

HTTP

Bankdaten

HTTP

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

Microservices

Page 38: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

HTTP

Käuferdaten Händlerdaten

HTTP

Bankdaten

HTTP

Authorization

Fraud

External Services

Payments

HTTP 5xx Internal Server Error

Tests?

Microservices

Page 39: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Fail!

service-e2e-test

Page 40: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

Checkout

low availabilitylow traffic

high availabilityhigh traffic

Verfügbarkeit

Page 41: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

Checkout

high availability high traffic

high availabilityhigh traffic

Verfügbarkeit

Page 42: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

:-(

HTTP

Käuferdaten Händlerdaten

HTTP

Bankdaten

HTTP

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

Page 43: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Event Sourcing

Page 44: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Event Streams

PhoneNumberAdded

AddressUpdated

AccountLimit

Updated

reduce

Account Events Event Store

Page 45: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

PhoneNumberAdded

AddressUpdated

AccountLimit

Updated

reduce

Current State

“Account” : { “id: “0123456789” “name: “Mike” “lastName: “Magic”

“limit” : 2000 “address: {…} “phoneNumber: “+49 126 555 555 …

}

Account Events Event Store

Page 46: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

PhoneNumberAdded

AddressUpdated

AccountLimit

Updated

reduce“Account” : { “id: “0123456789” “name: “Mike” “lastName: “Magic”

“limit” : 2000 “address: {…} “phoneNumber: “+49 126 555 555 …

}

Account Events Event Store

Current State

Page 47: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Event Store

Current State

Page 48: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Event Store

Current State

“Account” : {

“limit” : “high” “mobile: “+49 126 555 555”

}

Page 49: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Event Store

Current State

id limit age333 2000 25368 1500 34

Page 50: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Event Store

Current State

“Germany” : {

“totalAccounts” : 120.000 “combinedLimit: “302.340.500”

} “Austria” : {

… }

Page 51: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Event Sourcing?

HTTP

Käuferdaten Händlerdaten

HTTP

Bankdaten

HTTP

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

Microservices

Page 52: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Event Sourcing

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

Account Events Bank Events

Shop Events

optimierte Read ModelsMicroservices

Page 53: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Event Sourcing

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

Account Events Bank Events

Shop Events

optimierte Read ModelsMicroservices

Page 54: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Implementierung?

Page 55: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write ServicePUT /accounts/333/limit

Read Service A

AccountDBEvent Store

Read Service B Read Service C

UpdateLimit Id: 333 newLimit: 2000

command

“Standardansatz”

Page 56: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write ServicePUT /accounts/333/limit

Read Service A

AccountDBEvent Store

Read Service B Read Service C

check/validate

CommandHandler

“Standardansatz”

Event handleCommand(UpdateLimit cmd, Account account) { if (account.isLocked) throw new IllegalStateException("Account locked"); if (cmd.getLimit() > MAX_LIMIT) throw new UnsupportedOperationException("Limit exceeded") ... ... ... return new LimitUpdated(cmd.getId(), cmd.getLimit(), account.getLimit()); }

Page 57: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write ServicePUT /accounts/333/limit

Read Service A

AccountDBEvent Store

Read Service B Read Service C

LimitUpdated Id: 333 newLimit: 2000 oldLimit: 1000

Event

Account<<save>>

“Standardansatz”

Page 58: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write ServicePUT /accounts/333/limit

Read Service A

AccountDBEvent Store

Read Service B Read Service C

EventHandler

“Standardansatz”

void handleEvent(LimitUpdated evt, AccountQueryModel account) { account.setLimit(evt.getNewLimit());}

Page 59: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServiceWrite ServicePUT /accounts/333/limit

AccountDBEvent Store

Page 60: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePUT /accounts/333/limit

AccountDBEvent Store

UpdateLimit Id: 333 newLimit: 2000

command

Write Service

Page 61: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServiceWrite ServicePUT /accounts/333/limit

AccountDBEvent Storecheck/validate

1. Command ändert Account State + =>

Page 62: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write Service

2. Ableitung eines Events

3. Speichern in AccountDB

4. Speichern in Event Store

Write ServicePUT /accounts/333/limit

AccountDBEvent StoreLimitUpdated

Id: 333 newLimit: 2000 oldLimit: 1000

Event

1. Command ändert Account State

diff( , ) =>

Page 63: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write Service

AccountDBEvent Store

Event

Account

PUT /accounts/333/limit

symmetrisch?

Verteilte Transaktion!

Write Service

+ =>

Read Service

+ =>

Page 64: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Commands vs Events

UpdateLimit Id: 333 newLimit: 2000

LimitUpdated Id: 333 newLimit: 2000 oldLimit: 1000

Was möchte der Client?Wie interagiert der Client mit dem Server?

Welche Zustandsänderung(en) wurde(n) durch den Command ausgelöst?

Page 65: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Commands vs Events

LockAccount Id: 333

LimitChanged Id: 333 newLimit: 0 oldLimit: 1000

VIPStatusRevoked Id: 333

StatusChanged Id: 333 oldStatus: active newStatus: locked

+ =>

Page 66: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write Service

AccountDBEvent Store

Event

Account

PUT /accounts/333/limit

symmetrisch?

Write Service

+ =>

Read Service

+ =>

Page 67: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

+ => :-(

Commands dürfen keine Zustandsänderung bewirken!

Page 68: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

+ => :-(

Events leiten sich aus Commands + Current State ab

:-)+ =>

Page 69: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

+ => :-(

Events ändern den Zustand

+ => :-)+ => :-)

Page 70: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePUT /accounts/333/limit

AccountDBEvent Store

UpdateLimit Id: 333 newLimit: 2000

command

Write Service

Page 71: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServiceWrite ServicePUT /accounts/333/limit

AccountDBEvent Storecheck/validate

Page 72: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServiceWrite ServicePUT /accounts/333/limit

AccountDBEvent StoreLimitUpdated

Id: 333 newLimit: 2000 oldLimit: 1000

Event

1. Event aus Command angeleitet + =>

2. Speichern in Event Store

3. Publishen der Events zur AccountDB

4. Events ändern Current State + =>

Page 73: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServiceWrite Service

AccountDB

Event Store

Event

Account

PUT /accounts/12345/limit

AccountDB als ‘Projection’ der Events

Keine verteilten Transaktionen

Page 74: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServiceWrite Service

AccountDB

Event Store

Event

Account

PUT /accounts/12345/limit

Race Condition!

AccountDB als ‘Projection’ der Events

Keine verteilten Transaktionen

Page 75: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

AccountDBEvent Storecheck/validate

Race Condition

“Account” : { “id: “0123456789” “balance” : 700 “currency: EUR

}

2x

PurchaseItem Id: 333 amount: 500 currency: EUR

PurchaseItem Id: 333 amount: 700 currency: EUR

Page 76: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

“Account” : { “id: “0123456789” “balance” : -500 “currency: EUR

}

“Account” : { “id: “0123456789” “balance” : 700 “currency: EUR

}

Write ServiceAccountDB

Event Store

ItemPurchased Id: 333 amount: 500 currency: EUR

POST /accounts/12345/transactions

ItemPurchased Id: 333 amount: 700 currency: EUR

Race Condition

2x

PurchaseItem Id: 333 amount: 500 currency: EUR

Page 77: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

Event Storecheck/validate

Eventual Consistency

Race Condition

2x

Page 78: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

Event Storecheck/validate

Validierung gegen out-of-date Account

Eventual Consistency

Race Condition

2x

Page 79: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

Event Storecheck/validate

Current State nicht für Plausibilisierung verwenden

Race Condition

2x

AccountDB Optimierung für lesenden Zugriff

Page 80: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write Service

Event Store

Read - Write

GET /*

PUT/POST/DELETE /*

für lesenden Zugriff optimiert

Page 81: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

AccountDBEvent Store

Write Service 3

2x

Page 82: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

AccountDBEvent Storecheck/validate

Write Service 3

2x

1. Erzeugung des current state aus Events =>

Page 83: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

AccountDBEvent Storecheck/validate

Write Service 3

2x

1. Erzeugung des current state aus Events =>

Page 84: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

AccountDBEvent Storecheck/validate

Write Service 3

2x

1. Erzeugung des current state aus Events =>

Page 85: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

AccountDBEvent Storecheck/validate

Write Service 3

2x

1. Erzeugung des current state aus Events =>

Page 86: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

AccountDBEvent Storecheck/validate

Write Service 3

2x

1. Erzeugung des current state aus Events =>

2. Sequenzielles Validieren/Plausibilisieren

Page 87: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

AccountDBEvent Storecheck/validate

Write Service 3

2x

1. Erzeugung des current state aus Events =>

2. Sequenzielles Validieren/Plausibilisieren

400 Bad Request

Page 88: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Event Sourcing im Cluster?

Page 89: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

Event Store

Cluster

AccountDB

Node 1

Node 22x

Page 90: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

Event Store

Cluster

Erzeugung des current state aus Events =>

Validierung auf unterschiedlichen Knoten im Cluster

AccountDB

2xNode 1

Node 2

Page 91: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write ServicePOST /accounts/12345/transactions

AccountDB

Event Store

Cluster

“Account” : { “id: “0123456789” “balance” : -500 “currency: EUR

}

2xNode 1

Node 2

Page 92: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Cluster Sharding

Page 93: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write Service

Event Store

Cluster Sharding

AccountDB

004

001

003

006005

002

009

007

008

011010

312

997

995

995

999998

996

Shard 1 Shard 2 Shard n

……..

Page 94: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write Service

Event Store

Cluster Sharding mit Akka

AccountDB

Page 95: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write Service

Event Store

AccountDB

ShardRegion (Actor)

Cluster Sharding mit Akka

Page 96: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write Service

Event Store

AccountDB

ShardRegion (Actor)

POST /accounts/12345/transactions

2x

ShardCoordinator (Actor, ClusterSingleton)

PersistentActor

Cluster Sharding mit Akka

Page 97: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

:-(

HTTP

Käuferdaten Händlerdaten

HTTP

Bankdaten

HTTP

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

Page 98: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Stammdaten Eventsourced

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

Page 99: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts Checkout

Event Publishing?

Authorization

Fraud

External Services

Payments

HTTP 200 Ok

??? ???

Page 100: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write Service

Read Service A

AccountDBEvent Store

Read Service B

Pub-Sub mit Bus

Page 101: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write Service

Read Service A

AccountDBEvent Store

Read Service B Read Service C

Pub-Sub mit Bus

Page 102: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write Service

Read Service A

AccountDBEvent Store

Read Service B Read Service C

Pub-Sub mit Bus

:-(

Page 103: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write Service

Read Service A

AccountDBEvent Store

Read Service B Read Service C

:-(

Pub-Sub mit Bus

Enterprise DB2

MongoDB

Page 104: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write Service

Read Service A

AccountDBEvent Store

Read Service B Read Service C

:-(

Pub-Sub mit Bus

Enterprise DB2

:-(

MongoDB

Page 105: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write Service

Read Service A

AccountDBEvent Store

Read Service B Read Service C

:-( :-(

Pub-Sub mit Bus

Cluster?

Page 106: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write Service

Read Service A

AccountDBEvent Store

Read Service B Read Service C

:-( :-(

Pub-Sub mit Bus

Tests?

Page 107: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Bus

Write Service

Read Service A

AccountDBEvent Store

Read Service B Read Service C

:-( :-(

Pub-Sub mit Bus

Debugging?

Page 108: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Queues!

Page 109: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Write Service

Read Service A

AccountDBEvent Store

Read Service B Read Service C

Point2Point mit Queues

Page 110: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Read Service A

Account Events

Read Service B Read Service C

Point2Point mit Queues

Händler Events

Bank Events

Page 111: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Read Service A

Account Events

Read Service B Read Service C

:-o

Händler Events

Bank Events

Page 112: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Read Service A

Account Events

Read Service B Read Service C

:-o

Händler Events

Bank Events

Operations?

Page 113: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Poll???

Page 114: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Polling mit Akka

Read Service A Read Service B Read Service C

Write Service

AccountDBEvent Store

Page 115: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Polling mit Akka

Read Service A Read Service B Read Service C

Write Service

AccountDBEvent Store

Cluster Singleton (Actor)

Page 116: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Polling mit Akka

Read Service A Read Service B Read Service C

Write Service

AccountDBEvent Store

Cluster Singleton (Actor)Poll

Poll

Poll

Page 117: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts CheckoutAuthorization

Fraud

External Services

Payments

HTTP 200 Ok

Page 118: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

WebShop

POST /checkouts CheckoutAuthorization

Fraud

External Services

Payments

HTTP 200 Ok

Poll Poll Poll

Poll for the win

Page 119: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

Auditlog

Audit

Page 120: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Account BankMerchant

Business Intelligence

Audit BI

Page 121: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Danke!

Michael Omann [email protected]

Page 122: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Fragen?

Michael Omann [email protected]

Page 123: Event Sourcing in einer Microservice-ArchitekturEvent Sourcing in einer Microservice-Architektur ... Event Sourcing in einer Microservice-Architektur Michael Omann. Michael Omann Architect

Danke!

Michael Omann [email protected]