Building flexible and scalable applications Using CQRS and Axon - - PowerPoint PPT Presentation

building flexible and scalable applications
SMART_READER_LITE
LIVE PREVIEW

Building flexible and scalable applications Using CQRS and Axon - - PowerPoint PPT Presentation

Building flexible and scalable applications Using CQRS and Axon Framework Allard Buijze abu@trifork.com @allardbz Allard Buijze CTO of Trifork Amsterdam ~ 15 years of web development experience Strong believer in DDD and CQRS


slide-1
SLIDE 1

Building flexible and scalable applications

Allard Buijze – abu@trifork.com – @allardbz

Using CQRS and Axon Framework

slide-2
SLIDE 2

Allard Buijze

CTO of Trifork Amsterdam ~ 15 years of web development experience Strong believer in DDD and CQRS Developer and initiator of Axon Framework

Java Framework for scalability and performance www.axonframework.org

slide-3
SLIDE 3

Layered architecture

Domain ¡Model ¡ User ¡Interface ¡ Service ¡Layer ¡ Data ¡Access ¡Layer ¡

slide-4
SLIDE 4

Evolution of a Domain Model

slide-5
SLIDE 5

Evolution of a Domain Model

slide-6
SLIDE 6

A matter of perspective

Source: ¡h;ps://en.wikipedia.org/wiki/Ambiguous_image ¡

slide-7
SLIDE 7

A matter of perspective

slide-8
SLIDE 8

Evolution of a Domain Model

slide-9
SLIDE 9

Big ball of “Mud”

Source: ¡h;p://www.sabisabi.com/images/DungBeetle-­‑on-­‑dung.JPG ¡

slide-10
SLIDE 10

Microservice Architecture

Source: ¡h;p://marInfowler.com/arIcles/microservices.html ¡

slide-11
SLIDE 11

Microservices vs Monoliths

Almost ¡ all ¡ the ¡ cases ¡ where ¡ I've ¡ heard ¡ of ¡ a ¡ system ¡ that ¡ was ¡ built ¡ as ¡ a ¡ microservice ¡ system ¡ from ¡ scratch, ¡it ¡has ¡ended ¡up ¡in ¡serious ¡trouble. ¡ Almost ¡ all ¡ the ¡ successful ¡ microservice ¡ stories ¡ have ¡ started ¡ with ¡ a ¡ monolith ¡ that ¡ got ¡ too ¡ big ¡ and ¡ was ¡ broken ¡up ¡

MarIn ¡Fowler ¡

Source: ¡h;p://marInfowler.com/bliki/MonolithFirst.html ¡

slide-12
SLIDE 12

Desired evolution

slide-13
SLIDE 13

Axon Framework

“CQRS Framework” for Java

Open source (Apache 2 License)

Simplify CQRS based applications

Building blocks common in CQRS-based architectures

More information: www.AxonFramework.org

slide-14
SLIDE 14

Axon Framework – Core Principles

Message oriented

Events Commands

Location transparency

Separate infastructure from business logic

Customizable

Configure to match your infrastructure, not vice versa

slide-15
SLIDE 15

CQRS

slide-16
SLIDE 16

CQRS Based Architecture

Command ¡model ¡ ProjecIons ¡

slide-17
SLIDE 17

CQRS Based Architecture

Command ¡model ¡ ProjecIons ¡

T: ¡1 ¡mln ¡/ ¡s ¡ Resp: ¡< ¡10 ¡ms ¡ T: ¡Thr. ¡20 ¡/ ¡s ¡ Resp: ¡< ¡100 ¡ms ¡ T: ¡10 ¡mln ¡/ ¡s ¡

  • Resp. ¡< ¡100 ¡ms ¡

T: ¡1 ¡/ ¡s ¡

  • Resp. ¡< ¡10 ¡ms ¡
slide-18
SLIDE 18

Synchronizing models

Command ¡model ¡ ProjecIons ¡

Ev Events

slide-19
SLIDE 19

How about....

Consistency ¡

slide-20
SLIDE 20

How about....

Code ¡duplicaIon ¡

slide-21
SLIDE 21

How about....

I ¡can’t ¡see ¡what ¡side-­‑effects ¡a ¡ change ¡will ¡have ¡

slide-22
SLIDE 22

CQRS Based Architecture

slide-23
SLIDE 23

Separate infrastructure from business logic

A ¡ D ¡ B ¡ E ¡ C ¡

slide-24
SLIDE 24

Spring configuration - Simple

slide-25
SLIDE 25

Separate infrastructure from business logic

A ¡ D ¡ B ¡ E ¡ C ¡

slide-26
SLIDE 26

Separate infrastructure from business logic

A ¡ D ¡ B ¡ E ¡ C ¡

slide-27
SLIDE 27

Spring configuration – Distributed Events

slide-28
SLIDE 28

Separate infrastructure from business logic

A ¡ D ¡ B ¡ E ¡ C ¡

slide-29
SLIDE 29

Separate infrastructure from business logic

A ¡ D ¡ B ¡ E ¡ C ¡

slide-30
SLIDE 30

Spring configuration – Distributed Commands

slide-31
SLIDE 31

CQRS Based Architecture

slide-32
SLIDE 32

Axon – Command Bus API

commandBus.dispatch(commandMessage, ¡new ¡VoidCallback() ¡{ ¡ ¡ ¡ ¡ ¡@Override ¡ ¡ ¡ ¡ ¡public ¡void ¡onSuccess() ¡{ ¡... ¡} ¡ ¡ ¡ ¡ ¡ ¡@Override ¡ ¡ ¡ ¡ ¡public ¡void ¡onFailure(Throwable ¡cause) ¡{ ¡... ¡} ¡ }); ¡

@CommandHandler ¡ public ¡void ¡handle(CreateToDoItemCommand ¡command) ¡{ ¡ ¡ ¡ ¡ ¡// ¡handle ¡command ¡ } ¡

slide-33
SLIDE 33

Axon – Event Bus API

@EventHandler ¡ public ¡void ¡onEvent(ToDoItemCompletedEvent ¡event) ¡ { ¡ ¡ ¡ ¡ ¡// ¡handle ¡event ¡ } ¡ eventBus.publish(asEventMessage(new ¡ToDoItemCompletedEvent(“todo1”))); ¡

slide-34
SLIDE 34

CQRS Based Architecture

interface ¡AggregateRoot ¡ abstract ¡class ¡AbstractAggregateRoot ¡ ¡ interface ¡EventSourcedAggregateRoot ¡ abstract ¡class ¡AbstractAnnotatedAggregateRoot ¡

slide-35
SLIDE 35

The power of ubiquitous events

Polling ¡ Cache ¡evicIon ¡ Systems ¡integraIon ¡ ReacIve ¡ Push ¡ Real-­‑Ime ¡ LocaIon ¡transparency ¡ Event ¡Sourcing ¡

slide-36
SLIDE 36

Event Sourcing

slide-37
SLIDE 37

Event Sourcing

ID ¡ OrderID ¡ Product ¡ Count ¡ 1 ¡ 1 ¡ Deluxe ¡Chair ¡ 1 ¡ 2 ¡ 1 ¡ ... ¡ ... ¡

vs ¡

OrderItems ¡

Seq# ¡ Event ¡ 0 ¡ OrderCreatedEvent ¡ 1 ¡ ItemAddedEvent ¡(2x ¡Deluxe ¡Chair ¡-­‑ ¡€ ¡399) ¡ 2 ¡ ItemRemovedEvent ¡(1x ¡Deluxe ¡Chair ¡-­‑ ¡€ ¡399) ¡ 3 ¡ OrderConfirmed ¡ 4 ¡ OrderCancelledByUserEvent ¡ 5 ¡ ReturnShipmentReceived ¡ ID ¡ Status ¡ 1 ¡ Return ¡shipment ¡rcvd ¡

Orders ¡

slide-38
SLIDE 38

Event Sourcing

Pros

Audit trail Reconstruct query model(s) Management reports since day 1 Data analysis

Cons

Maintain history (upcasters) Ever-growing

slide-39
SLIDE 39

CQRS Based Architecture

interface ¡EventStore ¡ ¡ class ¡JpaEventStore ¡ class ¡JdbcEventStore ¡ class ¡MongoEventStore ¡

slide-40
SLIDE 40

Axon – Event Sourcing

Make ¡decisions ¡ Apply ¡state ¡

slide-41
SLIDE 41

Event Sourcing - Testing

Given-when-then fixtures

Given some past events When I apply a new Command Expect these new Events

fixture.given(new GameStartedEvent(…), new CallMadeEvent(…), new TurnChangedEvent(…)) .when( new MakeCallCommand(…)) .expectEvents( new CallMadeEvent(…), new TurnChangedEvent(…)); ¡

slide-42
SLIDE 42

Getting started...

Download: axonframework.org/download

  • r: maven central repository

Code: github.com/AxonFramework Help: axonframework@googlegroups.com

  • r: @axonframework
slide-43
SLIDE 43

Axon Framework – Some cases

Finance

Process automation in a top 50 bank Trading engine for ETF (index trackers) trading Pension fund calculations at a large bank On-line payment processing

Gaming

On-line bridge platform (bridgebig.com) On-line casino (casumo.com)

Healthcare

Electronic Medical Record for the Geriatric Healthcare Tracking and Tracing of equipment for dental implants

Aviation

Optimizing aircraft movement at several large airports

slide-44
SLIDE 44

More information

www.axonframework.org

Allard Buijze <abu@trifork.com> @allardbz / @axonframework

slide-45
SLIDE 45