Top Banner
Lutz Huehnken @lutzhuehnken Reactive Microservices
47

Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Jan 12, 2017

Download

Software

Lutz Hühnken
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: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Lutz Huehnken@lutzhuehnken

Reactive Microservices

Page 2: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Overview

Page 3: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Overview

Page 4: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

What are those opinions?• Use context bounds as boundaries for services! (Domain

Driven Design) • The event log is the book of record! (Event Sourcing) • Separate the read and write sides! (CQRS) • Microservices, too, need to be elastic and resilient!

(Reactive) • Developer experience matters! (The Lagom development

setup)

Page 5: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Size doesn’t matter (and why it’s called Lagom)

Page 6: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

All this hype about microservices makes me sad. And not about the concept, but about the name. As I wrote before, “micro” in “microservices” means absolutely nothing. What is worse, it confuses everybody. Again and again I see people focusing on “micro” and falling into nanoservices trap. Eugene Kalenkovich

Page 7: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

I call them Uniservices. Roland Kuhn

Page 8: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

The Self-contained System (SCS) approach is an architecture that focuses on a separation of the functionality into many independent systems, making the complete logical system a collaboration of many smaller software systems. http://scs-architecture.org

Page 9: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Goodbye Microservices, Hello Right-sized Services. https://dzone.com/articles/goodbye-microservices-hello-right-sized-services

Page 10: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Right-Sized Service doesn't really roll off the tongue, does it? Being Swedish I would prefer Lagomservice. Björn Antonsson (on a Lightbend internal mailing list)

Page 11: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Lagom (pronounced [ˈlɑ̀ːɡɔm]) is a Swedish word meaning "just the right amount". The Lexin Swedish-English dictionary defines lagom as "enough, sufficient, adequate, just right". https://en.wikipedia.org/wiki/Lagom

Page 12: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

The ideas in Eric Evan’s Domain-Driven Design are very useful to us in finding sensible boundaries for our services. Sam Newman, „Building Microservices“, p. 38

Page 13: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Event Sourcing and CQRS

Page 14: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Lagom Persistence

Lagom Persistence

Event Sourcing

CQRSimplements leads to

Not covered: More Domain Driven Design, NoSQL Databases

Page 15: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

• We implement our aggregate roots as Persistent Entities

• Persistent Entities will receive commands • Triggered by a command, Persistent Entities

will change their state • Example: Add a friend, remove a friend

FriendService

Peter

Bob

Alice

Persistent Entities

Page 16: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

• Lagom allows you to scale out by forming a cluster of nodes

• Nodes can be added and removed dynamically

Node A

Lagom Cluster

Node B

Node C

Node Djoin

Page 17: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

• Lagom allows you to scale out by distributing your Persistent Entities in the cluster

Node A

Lagom Cluster

Node B

Node C

XBobAlice

Z

XY

PaulPeter

Page 18: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

• We have now moved from a CRUD approach to a Memory Image approach

• We keep all* our data in memory!

• See http://martinfowler.com/bliki/MemoryImage.html

(*) or a working set, actors can be passivated and activated as needed

Node A

Lagom Cluster

Node B

Node C

XBobAlice

Z

XY

PaulPeter

Page 19: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

• But how does our data survive a system crash?

• We log all the state changes!

Node A

Lagom Persistence

Node B

Node C

XBobAlice

Z

XY

PaulPeter

Page 20: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Event Sourcing - storing deltas

• Every state change is materialized in an Event

• All events are stored in an Event Log • Current state is constructed by replaying

all events

Page 21: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Event Sourcing - Storing Deltas

UserCreated (Alice)

Friend Added (Bob)

Friend Added (Peter)

Friend Removed(Bob)

Page 22: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Traditional Way

User(Alice)

Friend (Peter)

Friend (Bob)

Page 23: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Event Sourcing - benefits

• No object-relational impedance mismatch • Bullet-proof auditing and historical

tracing • Support future ways of looking at data • Performance and scalability • Testability

Page 24: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016
Page 25: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Persistent Entity

DataStore(e.g.CassandraCluster)

FriendService

YPeter

FriendService

XBobAlice FriendService

YXY

Page 26: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Event Sourcing - Snapshots

1 2 100 101 102 103..

Snapshot

Page 27: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Event Sourcing with Lagom Persistence

• Keep all data in memory! • Optional: Only working set, by using passivation/

activation

• Store all state changes as events • Replay all events of an actor to recreate it

• Optional: Start from snapshot

• Scale out with Lagom Cluster and scalable data store

Page 28: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Read-Side

UserCreated(Alice)

FriendAdded(Bob)

FriendAdded(Peter)

Alice

Bob

Peter

Alice

Bob

X

Y

Page 29: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Read-Side

UserCreated(Alice)

FriendAdded(Bob)

FriendAdded(Peter)

FOLLOWERSuserid followedby

BobAliceBobXBobYPeterAlice

Page 30: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Read side is derived from event log

• Events forwarded to read side to build different representations

• ElasticSearch • SQL, de-normalized • Stream Processor / Analytics • BI • OLAP • …

Page 31: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Read side cont’d

• Read side can be discarded and re-created.

• The „book of record“ is the event log. • Read side can be scaled out by creating

copies - it’s read only.

• Btw, you can get a status for an identified entity on the write side, too.

Page 32: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016
Page 33: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Consistency

FOLLOWERSuserid followedby

BobAliceBobXBobYPeterAlice

DataStore(e.g.CassandraCluster)

Alice1 - Actor

2 - Journal / Event Store

3 - Read Side

Page 34: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Consistency

Alice1 - Actor

• A Persistent Entities defines an Aggregate Root

• Aggregate Root is the Transactional Boundary

• Strong consistency within an Aggregate Root

• Commands are executed sequentially on the latest state

• No limit to scalability

Page 35: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Consistency

DataStore(e.g.CassandraCluster)

2 - Journal / Event Store

• Depending on implementation / configuration

• Popular choice: Cassandra • „Tunable Consistency“ • Proper use of quorum ensures

consistency

Page 36: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Consistency

FOLLOWERSuserid followedby

BobAliceBobXBobYPeterAlice

3 - Read Side

• Will not be updated immediately, but deferred

• Not much different from queries in interactive applications

Page 37: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Event Sourcing with Lagom Persistence revisited

• Keep all data in memory! • Store all state changes as events • Replay all events of an actor to recreate it • Strong consistency for Actor (aggregate)

and Journal • Eventual Consistency for Read Side

Page 38: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

If you really, really don’t want to use Event Sourcing

• Don’t use Lagom Persistence • You can use whatever data store you like • Beware of blocking APIs (JDBC..) • For Cassandra, you can use the

CassandraSession from the Persistence module

Page 39: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Reactive

Page 40: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Reactive

Page 41: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

• Asynchronous I/O

• Asynchronous communication as first class

• WebSocket support

• Reactive Streams support

• Distributed by default

• Built-on Akka Clustering, Sharding, Persistence

Reactive

Page 42: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016
Page 43: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Developer Experience

Page 44: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

• Run all microservices at once

• Embedded Cassandra DB

• Intra-service communication via service locator

• Hot reloading

Development tooling

Page 45: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

• Getting started: lightbend.com/lagom

• Examples: lightbend.com/activator/templates

• Contribute: https://github.com/lagom

• Communicate:

• https://groups.google.com/forum/#!forum/lagom-framework

• https://gitter.im/lagom/lagom

• Lightbend Proof of Concept Program: lightbend.com/company/contact

Try it out

Page 46: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016

Read this book

https://www.lightbend.com/reactive-microservices-architecture

(free, registration required)

Page 47: Lagom at hybris Reactive Software Munich Meetup, April 13, 2016