Orchestration of Microservices
bernd.ruecker@camunda.com
With thoughts from http://flowing.io
@berndruecker | @martinschimak
Orchestration? Microservices?
AT&T
Assume you want
to build a Dash
button
pay receive
shipment
place
order
I want to have
one item!
I am happy!
How to build?
Disclaimer: I do not advertise microservices!
But assume you [want | have] to use microservices
– what to do then?
Microservices
• Independent components
• Independent deployments
• Decoupling between components
• Dedicated teams to fight conways law
• Autonomy of technology decisions
• Avoid horizontal team boundaries
• New DevOps paradigms
Microservice
Microservice
Microservice
Monolith
A
B
C
A
B
C
Event driven microservices
Microservice Microservice Microservice
A B C
Communication via events
Microservice Microservice
A C
Event
event name
payload
no receipient
Communication via Events
Microservice Microservice
A C
Event
Does not
know
about C
Does not
know
about A
It is not SOA and
not about a
central ESB.
http://apsblog.burtongroup.com/2009/01/soa-is-dead-long-live-services.html
It is not SOA
Service Service
A C
ESB
„smart endpoints
and dumb pipes”
Value proposition: fight conway, keep agility and ease changes
Microservice Microservice
A C
Conways Law
Organisation
Software System
https://www.flickr.com/photos/12567713@N00/310639290
Yeah.
Business Capabilities
Bounded
Contexts
=
Microservices
Order
placed
Shop Payment Shipping
Business
Outputs /
Domain
Events
Inventory
Payment
received
Goods
fetched
Goods
shipped
Eventflow
Order
placed
Payment
received
Goods
fetched
Goods
shipped
InventoryPayment ShippingShop
Let‘s zoom in the payment context
Payment
Order
placed
Payment
received
Let‘s zoom in the payment context
Payment
Order
placed
Payment
received
The payment context
has to listen to
„order placed“ event
De-coupling?
Payment
Order
placed
Service
fullfilled
…
Whenever a new client requires
payment, the payment context
has to be touched
The payment context has to know
all possible events that trigger a
payment
Subscription
confirmed
Event command transformation
Payment
Retrieve
payment
Order
placed Transformation
Command
Something has to happen
in the future
1 recipient
Event
Something has happend
in the past
0..n recipients
Order context
Payment
Retrieve
payment
Order
placed Order
Event vs. command
Payment
Retrieve
payment
Order
placed Order
decide where to
do the coupling
Vaughn Vernon
„Process Managers
transform Events into
Commands“
At IDDD Workshop February 2017
Some things in live might be slow
Payment
Retrieve
payment
Order
placed Order
Payment
retrieved
Long running flows
require persistent state
In microservice architectures everything
leaving the service boundary is
potentially long running
Saga
The classical Saga pattern example
book
hotel
book
car
book
flight
cancel
hotel
cancel
car
1. 2. 3.
5.6.
4. In case of
failure trigger
compensations
book
trip
How to
implement?
Process Manager
Process Manager
• Do event command transformation
• Handle state for long running flows
Reactive actor with Akka
https://github.com/VaughnVernon/ReactiveMessagingPatterns_ActorModel/blob/master/src
/co/vaughnvernon/reactiveenterprise/processmanager/ProcessManager.scala#L91
State in entity
Routing slip
http://vasters.com/archive/Sagas.html
State machine
http://camunda.org/
Logic remains in normal code
Tools provide persistent state, visibility, …
+
Process Manager
• Do event command transformation
• Handle state for long running flows
• Implement the flow as 1st class citizen
of domain logic
Martin Fowler
Event notification is nice because it implies a low level of
coupling, and is pretty simple to set up. It can become
problematic, however, if there really is a logical flow
that runs over various event notifications. The
problem is that it can be hard to see such a flow as it's
not explicit in any program text. Often the only way to
figure out this flow is from monitoring a live system.
This can make it hard to debug and modify such a flow.
The danger is that it's very easy to make nicely
decoupled systems with event notification, without
realizing that you're losing sight of that larger-scale
flow, and thus set yourself up for trouble in future years
https://martinfowler.com/articles/201701-event-driven.html
It is about visbility
Payment
Retrieve
payment
Order
placed Order
It is about ubiquitous language!
Ubiquitous Language
Software
Experts
Domain
Experts
It is about changability
New business requirements
Order
placed
Payment
received
Goods
fetched
Goods
shipped
InventoryPayment ShippingShop
VIP customers can order with
invoice (and pay later)
New business requirements
Order
placed
Payment
received
Goods
fetched
Goods
shipped
InventoryPayment ShippingShop
VIP customers can order with
invoice (and pay later)
If VIP
customer
If not VIP
customer
Order
billed
Billing
If VIP
customer
Adjusted flow
It helps you as a developer!
Error and timeout handling
Handling complex scenarios
Compensation
The power of graphics
Graphics
Code
http://vasters.com/archive/Sagas.html
Smells like
„BPM“?
The 7 sins of workflow
3
2
4
6
5
7
1
http://blog.bernd-ruecker.com/
The 7 sins of workflow
Zero-code suites
Homegrown
engine
No engine Wrong engine Wrong usage
4
6
5
7
http://blog.bernd-ruecker.com/
Death by properties panel
Script:
Please enter your complex code here.
(Without IDE support of course!)
BPM Suites
By the way, we introduce an own
development approach, IDE, version
control, user management, reporting, …
Zero code & developers
We have a lot of
problems!
It totally sucks!
I hate BPM!
Bernd Rücker
Consultant & Evangelist
> 10+ years workflow
http://bernd-ruecker.com/
bernd.ruecker@camunda.com
Co-founder Camunda
http://camunda.org/
Define flows programatically or graphically
Define flows programatically or graphically
Todo…
Productive development and testing
Developer
friendly
Do it yourself? Actor
Entity
Routing Slip
© Picture from http://www.windtraveler.net/2010_06_01_archive.html
Think about subsequent requirements
Monitoring &
Operations
Visibility
Versioning
Time &
Timeouts
Domain Logic
The 7 sins of workflow
Zero-code suites
Homegrown
engine
Granularity
bloopers
BPM monolith Stakeholders
habitat violation
Over engineering
No engine Wrong engine Wrong usage
http://blog.bernd-ruecker.com/
4 5
7
The end-to-end process?
You are not forced to violate the bounded context!
Order Feedback
Inventory
Payment
Payment
Local flows in the bounded contexts
Order
Lightweight and embeddable engine
Engine must be
• easy to use
• developer friendly
also in the scope of multiple
scopes/aggregates/services
• technically
• license model
Payment
Order
engine
engine
…
Inventory
Shipping
…
engine
Slides are nice –
but what about code?
Sure:
http://github.com/flowing/
Demo architecture
InventoryPaymentOrder Shipping
H2
Shop Monitor
Camunda
Webapp
on Tomcat
for demo in single Java VM for simplicity
http://flowing.io/
Code online:
https://github.com/flowing
Slides online:
http://bernd-ruecker.com
Feedback:
http://bernd-ruecker.com/feedback
With thoughts from http://flowing.io
@berndruecker | @martinschimak
Thank you!

JAX 2017 talk: Orchestration of microservices