Slide 1

Slide 1 text

When Microservices met Event Sourcing Vinicius Gomes

Slide 2

Slide 2 text

Vinicius Gomes ! Software developer at ThoughtWorks ! vvgomes.com/blog ! twitter.com/vvgomes

Slide 3

Slide 3 text

Agenda ! The Traditional Approach ! Introduction to Event Sourcing ! Command Query Responsibility Segregation ! Implementing the "Event Sourced Microservices" Architecture

Slide 4

Slide 4 text

The Traditional Approach

Slide 5

Slide 5 text

Example: Online Restaurant

Slide 6

Slide 6 text

Online Restaurant

Slide 7

Slide 7 text

Online Restaurant ! Open an order

Slide 8

Slide 8 text

Online Restaurant ! Add Menu Item

Slide 9

Slide 9 text

Benefits ! Simple ! HTTP ! Technology agnostic

Slide 10

Slide 10 text

Challenges ! Coupling

Slide 11

Slide 11 text

Challenges ! Coupling ! Resilience

Slide 12

Slide 12 text

Challenges ! Coupling ! Resilience ! Response time

Slide 13

Slide 13 text

Challenges ! Coupling ! Resilience ! Response time ! User intent POST /orders/8659a0d6/items/ “Add item to order”

Slide 14

Slide 14 text

Challenges ! Coupling ! Resilience ! Response time ! User intent ! Current / mutable state

Slide 15

Slide 15 text

Event Sourcing

Slide 16

Slide 16 text

Domain Events ! Model the past ! Immutable ! Immortal

Slide 17

Slide 17 text

Event Store ! Append only ! Sequential ! History

Slide 18

Slide 18 text

Aggregates ! Applying events

Slide 19

Slide 19 text

Aggregates ! Applying events

Slide 20

Slide 20 text

Aggregates ! Applying events

Slide 21

Slide 21 text

Aggregates ! Applying events

Slide 22

Slide 22 text

Aggregates ! Applying events

Slide 23

Slide 23 text

Aggregates ! Applying events

Slide 24

Slide 24 text

Aggregates ! Applying events

Slide 25

Slide 25 text

Commands ! Represent user intent ! Cause new events

Slide 26

Slide 26 text

Commands ! Commands are more meaningful than HTTP methods POST /orders/8659a0d6/items/ AddItemToOrderCommand as opposed to

Slide 27

Slide 27 text

Commands How do clients send commands?

Slide 28

Slide 28 text

Commands ! A collection resource that accepts multiple commands POST /orders/8659a0d6/commands/

Slide 29

Slide 29 text

Commands ! Command URI POST /orders/8659a0d6/orderItems/commands/add

Slide 30

Slide 30 text

Commands

Slide 31

Slide 31 text

Commands

Slide 32

Slide 32 text

Commands Queries?

Slide 33

Slide 33 text

Queries ! Event Store is not good for queries ! Most applications ! A few writes ! A lot of reads

Slide 34

Slide 34 text

Command Query Responsibility Segregation

Slide 35

Slide 35 text

CQRS

Slide 36

Slide 36 text

CQRS

Slide 37

Slide 37 text

CQRS ! Command Model ! Commands definitions ! Events definitions ! The aggregate ! Aggregate repository ! Write only API ! Query Model ! Event listeners ! Query entities ! Repositories ! Read only API

Slide 38

Slide 38 text

Sample Implementation

Slide 39

Slide 39 text

Example: Online Restaurant

Slide 40

Slide 40 text

Example: Online Restaurant

Slide 41

Slide 41 text

Example: Online Restaurant

Slide 42

Slide 42 text

Example: Online Restaurant

Slide 43

Slide 43 text

Technologies ! Java 8 ! Spring Boot ! Axon Framework ! Spring Data REST ! RabbitMQ

Slide 44

Slide 44 text

Conclusions

Slide 45

Slide 45 text

Microservices + Event Sourcing ! Benefits

Slide 46

Slide 46 text

Microservices + Event Sourcing ! Benefits ! History based queries

Slide 47

Slide 47 text

Microservices + Event Sourcing ! Benefits ! History based queries ! Audit log by design

Slide 48

Slide 48 text

Microservices + Event Sourcing ! Benefits ! History based queries ! Audit log by design ! Immutability

Slide 49

Slide 49 text

Microservices + Event Sourcing ! Benefits ! History based queries ! Audit log by design ! Immutability ! User intent

Slide 50

Slide 50 text

Microservices + Event Sourcing ! Benefits ! History based queries ! Audit log by design ! Immutability ! User intent ! Decoupling

Slide 51

Slide 51 text

Microservices + Event Sourcing ! Benefits ! History based queries ! Audit log by design ! Immutability ! User intent ! Decoupling ! Resilience

Slide 52

Slide 52 text

Microservices + Event Sourcing ! Benefits ! History based queries ! Audit log by design ! Immutability ! User intent ! Decoupling ! Resilience ! Challenges

Slide 53

Slide 53 text

Microservices + Event Sourcing ! Benefits ! History based queries ! Audit log by design ! Immutability ! User intent ! Decoupling ! Resilience ! Challenges ! Complexity ! Snapshots

Slide 54

Slide 54 text

Microservices + Event Sourcing ! Benefits ! History based queries ! Audit log by design ! Immutability ! User intent ! Decoupling ! Resilience ! Challenges ! Complexity ! Snapshots ! Upcasting

Slide 55

Slide 55 text

Microservices + Event Sourcing ! Benefits ! History based queries ! Audit log by design ! Immutability ! User intent ! Decoupling ! Resilience ! Challenges ! Complexity ! Snapshots ! Upcasting ! Race conditions

Slide 56

Slide 56 text

Microservices + Event Sourcing ! Benefits ! History based queries ! Audit log by design ! Immutability ! User intent ! Decoupling ! Resilience ! Challenges ! Complexity ! Snapshots ! Upcasting ! Race conditions ! Event contracts

Slide 57

Slide 57 text

Microservices + Event Sourcing ! Benefits ! History based queries ! Audit log by design ! Immutability ! User intent ! Decoupling ! Resilience ! Challenges ! Complexity ! Snapshots ! Upcasting ! Race conditions ! Event contracts ! Eventual consistency

Slide 58

Slide 58 text

When Microservices met Event Sourcing Vinicius Gomes