DEPLOYING AND
OPERATING
MICROSERVICES
Sam Newman
ThoughtWorks London 2015
1
@samnewman#thoughtworks
Sam Newman
Building
Microservices
DESIGNING FINE-GRAINED SYSTEMS
@samnewman#thoughtworks
Accounts
Returns
Invoicing
Shipping
Inventory
Customer
Service
@samnewman#thoughtworks
Accounts
Returns
Invoicing
Shipping
Inventory
Customer
Service
Small Autonomous services
that work together, modelled
around a business domain
@samnewman#thoughtworks
Independently
Releasable
@samnewman#thoughtworks
Building
@samnewman#thoughtworks
Building
Deploying
@samnewman#thoughtworks
Building
Deploying
Managing
@samnewman#thoughtworks
Building
@samnewman#thoughtworks
Hands up if you’re doing Continuous Integration!
@samnewman#thoughtworks
Hands up if you’re doing Continuous Integration!
Now keep them up if…
@samnewman#thoughtworks
You check in to mainline at least once per day
@samnewman#thoughtworks
You have a suite of tests to validate your changes
@samnewman#thoughtworks
When the build is broken, it is your
team’s #1 priority to fix it
@samnewman#thoughtworks
Single Repo
ONE GIANT BUILD
Version Control
/Service A
/Service B
/Service C
@samnewman#thoughtworks
Single Repo
ONE GIANT BUILD
Version Control
/Service A
/Service B
/Service C
CI Tool
Monolithic
Build
@samnewman#thoughtworks
Single Repo
ONE GIANT BUILD
Version Control
/Service A
/Service B
/Service C
CI Tool
Monolithic
Build
Service B
v123
Service A
v123
Service C
v123
@samnewman#thoughtworks
Single Repo
ONE GIANT BUILD
Version Control
/Service A
/Service B
/Service C
CI Tool
Monolithic
Build
Service B
v123
Service A
v123
Service C
v123
One checkin = lots of services built
@samnewman#thoughtworks
Single Repo
ONE GIANT BUILD
Version Control
/Service A
/Service B
/Service C
CI Tool
Monolithic
Build
Service B
v123
Service A
v123
Service C
v123
One checkin = lots of services built
Can’t independently release in a safe manner
@samnewman#thoughtworks
Single Repo
ONE BUILD PER SERVICE, SINGLE REPO
Version Control
CI Tool
/Service A
/Service B
/Service C
@samnewman#thoughtworks
Single Repo
ONE BUILD PER SERVICE, SINGLE REPO
Version Control
CI Tool
/Service A
/Service B
/Service C
Service A
@samnewman#thoughtworks
Single Repo
ONE BUILD PER SERVICE, SINGLE REPO
Version Control
CI Tool
/Service A
/Service B
/Service C
Service A
Service A
v123
@samnewman#thoughtworks
Single Repo
ONE BUILD PER SERVICE, SINGLE REPO
Version Control
CI Tool
/Service A
/Service B
/Service C
Service A
Service A
v123
Service B
@samnewman#thoughtworks
Single Repo
ONE BUILD PER SERVICE, SINGLE REPO
Version Control
CI Tool
/Service A
/Service B
/Service C
Service A
Service A
v123
Service B
v456
Service B
@samnewman#thoughtworks
Single Repo
ONE BUILD PER SERVICE, SINGLE REPO
Version Control
CI Tool
/Service A
/Service B
/Service C
Service A
Service A
v123
Service B
v456
Service B
Service C
@samnewman#thoughtworks
Single Repo
ONE BUILD PER SERVICE, SINGLE REPO
Version Control
CI Tool
/Service A
/Service B
/Service C
Service A
Service A
v123
Service B
v456
Service C
v789
Service B
Service C
@samnewman#thoughtworks
Single Repo
ONE BUILD PER SERVICE, SINGLE REPO
Version Control
CI Tool
/Service A
/Service B
/Service C
Service A
Service A
v123
Service B
v456
Service C
v789
Can build & release independently
Service B
Service C
@samnewman#thoughtworks
Single Repo
ONE BUILD PER SERVICE, SINGLE REPO
Version Control
CI Tool
/Service A
/Service B
/Service C
Service A
Service A
v123
Service B
v456
Service C
v789
Can build & release independently
Can encourage making cross-repo changes
Service B
Service C
@samnewman#thoughtworks
ONE BUILD & REPO PER SERVICE
Version Control CI Tool
Service A
Service B
v123
Service A
v123
Service C
v123
Service B
Service C
/Service A
/Service B
/Service C
@samnewman#thoughtworks
ONE BUILD & REPO PER SERVICE
Version Control CI Tool
Service A
Service B
v123
Service A
v123
Service C
v123
Can build & release independently
Service B
Service C
/Service A
/Service B
/Service C
@samnewman#thoughtworks
ONE BUILD & REPO PER SERVICE
Version Control CI Tool
Service A
Service B
v123
Service A
v123
Service C
v123
Can build & release independently
Firmer separation, but developer workflow can suffer
Service B
Service C
/Service A
/Service B
/Service C
@samnewman#thoughtworks
Customer Service
@samnewman#thoughtworks
Customer Service
S/M TestsBuild Large Tests
@samnewman#thoughtworks
Customer Service
S/M TestsBuild Large Tests
@samnewman#thoughtworks
Customer Service
S/M TestsBuild Large Tests
@samnewman#thoughtworks
S/M TestsBuild Large Tests UAT ProdLarge Tests
Artifacts should be built once, and moved through
environments
@samnewman#thoughtworks
S/M TestsBuild Large Tests UAT ProdLarge Tests
Artifacts should be built once, and moved through
environments
@samnewman#thoughtworks
S/M TestsBuild Large Tests UAT ProdLarge Tests
Artifacts should be built once, and moved through
environments
@samnewman#thoughtworks
S/M TestsBuild Large Tests UAT ProdLarge Tests
More Production Like
Artifacts should be built once, and moved through
environments
@samnewman#thoughtworks
S/M TestsBuild Large Tests UAT ProdLarge Tests
Faster Feedback
More Production Like
Artifacts should be built once, and moved through
environments
@samnewman#thoughtworks
SO, ARTIFACTS….
@samnewman#thoughtworks
SO, ARTIFACTS….
▫︎Bundles-o-stuff
@samnewman#thoughtworks
SO, ARTIFACTS….
▫︎Bundles-o-stuff
▫︎Tech-stack specific
@samnewman#thoughtworks
SO, ARTIFACTS….
▫︎Bundles-o-stuff
▫︎Tech-stack specific
▫︎OS-specific
@samnewman#thoughtworks
SO, ARTIFACTS….
▫︎Bundles-o-stuff
▫︎Tech-stack specific
▫︎OS-specific
▫︎Custom Images
@samnewman#thoughtworks
SO, ARTIFACTS….
▫︎Bundles-o-stuff
▫︎Tech-stack specific
▫︎OS-specific
▫︎Custom Images
▫︎Containers
@samnewman#thoughtworks
Deploying
@samnewman#thoughtworks 18
Host
Service
Which is best?
@samnewman#thoughtworks 18
Host
Service
Host
Service Service
Service Service
VS
Which is best?
@samnewman#thoughtworks
Application Containers
OSGI
Actor-based Systems
@samnewman#thoughtworks
Host
Service Service
Service Service
Application Containers
OSGI
Actor-based Systems
@samnewman#thoughtworks
Host
Service
Linux Containers/Docker
Custom Images
@samnewman#thoughtworks 21
@samnewman#thoughtworks 21
Host
Service
@samnewman#thoughtworks 21
Host
Service
Host
Service Service
Service Service
VS
@samnewman#thoughtworks 21
Host
Service
Host
Service Service
Service Service
Much Easier To Reason About
VS
@samnewman#thoughtworks 21
Host
Service
Host
Service Service
Service Service
Much Easier To Reason About
Easier To Provision
VS
@samnewman#thoughtworks 21
Host
Service
Host
Service Service
Service Service
Much Easier To Reason About
Easier To Provision
Fewer Side-effects
VS
@samnewman#thoughtworks 21
Host
Service
Host
Service Service
Service Service
Much Easier To Reason About
Easier To Provision
Fewer Side-effects
Lower host-management overhead
VS
@samnewman#thoughtworks 21
Host
Service
Host
Service Service
Service Service
Much Easier To Reason About
Easier To Provision
Fewer Side-effects
Cheaper!
Lower host-management overhead
VS
@samnewman#thoughtworks 21
Host
Service
Host
Service Service
Service Service
Much Easier To Reason About
Easier To Provision
Fewer Side-effects
Cheaper!
Lower host-management overhead
VS
Enforces Interdependence
@samnewman#thoughtworks
Reducing Host
Management Overhead?
@samnewman#thoughtworks
API-driven Host
Provisioning
@samnewman#thoughtworks
VMWare
Virtualisation Platforms
@samnewman#thoughtworks
VMWare
AWS
Digital Ocean
Virtualisation Platforms
@samnewman#thoughtworks
Step 0:
Provision Host
@samnewman#thoughtworks
Step 0:
Provision Host
Step 1:
Configure Host
@samnewman#thoughtworks
Step 0:
Provision Host
Step 2:
Install Service
Step 1:
Configure Host
@samnewman#thoughtworks
Step 0:
Provision Host
Step 2:
Install Service
Step 1:
Configure Host
@samnewman#thoughtworks
@samnewman#thoughtworks
Ansible
Puppet
Chef
@samnewman#thoughtworks
Ansible
Puppet
Chef
@samnewman#thoughtworks
Ansible
Puppet
Chef
AWS
@samnewman#thoughtworks
Ansible
Puppet
Chef
AWS
Digital Ocean
@samnewman#thoughtworks
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
@samnewman#thoughtworks
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
@samnewman#thoughtworks
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
@samnewman#thoughtworks
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
Immutable Servers
@samnewman#thoughtworks
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
Immutable Servers
Fast Spin-up
@samnewman#thoughtworks
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
Immutable Servers
Fast Spin-up
Provider Agnostic
@samnewman#thoughtworks
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
Immutable Servers
Fast Spin-up
Provider Agnostic
Feedback Can Suffer
@samnewman#thoughtworks
Ansible
Puppet
Chef
AWS
Digital Ocean
OpenStack
VMWare
Vagrant
Immutable Servers
Fast Spin-up
Provider Agnostic
Feedback Can Suffer
Cycle Time
@samnewman#thoughtworks
Immutable Servers
@samnewman#thoughtworks
Cost?
@samnewman#thoughtworks
Machine
Base OS
Hypervisor
VM
OS
Apps
VM
OS
Apps
VM
OS
Apps
@samnewman#thoughtworks
Machine
Base OS
Hypervisor
VM
OS
Apps
VM
OS
Apps
VM
OS
Apps
Expensive!
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
DOCKER
@samnewman#thoughtworks
DOCKER
Machine
@samnewman#thoughtworks
DOCKER
Machine
Base OS
@samnewman#thoughtworks
DOCKER
Machine
Base OS
Docker
@samnewman#thoughtworks
DOCKER
Machine
Base OS
Docker
Apps
@samnewman#thoughtworks
DOCKER
Machine
Base OS
Docker
Apps Apps
@samnewman#thoughtworks
DOCKER
Machine
Base OS
Docker
Apps Apps Apps
@samnewman#thoughtworks
DOCKER
Machine
Base OS
Docker
Apps Apps Apps
Docker Image Registry
@samnewman#thoughtworks
DOCKER
Machine
Base OS
Docker
Apps Apps Apps
Docker Image Registry
@samnewman#thoughtworks
DOCKER
Machine
Base OS
Docker
Apps Apps Apps
Docker Image Registry
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
Semi-permanent Servers
@samnewman#thoughtworks
Semi-permanent Servers
Image-based Deployments
@samnewman#thoughtworks
Semi-permanent Servers
Image-based Deployments
Docker
@samnewman#thoughtworks
S/M TestsBuild Large Tests UAT Prod
@samnewman#thoughtworks
S/M TestsBuild Large Tests UAT Prod
DB
Machine CI Node
Large Tests Environment
Large Tests
@samnewman#thoughtworks
S/M TestsBuild Large Tests UAT Prod
DB
MachineMachine
@samnewman#thoughtworks
S/M TestsBuild Large Tests UAT Prod
Master
DB
Machine
Production Environment
Machine Machine Machine
Slave
DB
@samnewman#thoughtworks
ENVIRONMENTS
@samnewman#thoughtworks
ENVIRONMENTS
▫︎Artifact remains the same…
@samnewman#thoughtworks
ENVIRONMENTS
▫︎Artifact remains the same…
▫︎But the environment differs
@samnewman#thoughtworks
ENVIRONMENTS
▫︎Artifact remains the same…
▫︎But the environment differs
▫︎How can we handle this?
@samnewman#thoughtworks
Environment Definition
@samnewman#thoughtworks
http://www.fig.sh/
@samnewman#thoughtworks
https://www.terraform.io/
@samnewman#thoughtworks
Operating
@samnewman#thoughtworks
Shop
How Do We Find Things?
??? Inventory
@samnewman#thoughtworks
HARDCODE IP!
Shop Inventory
inventory: 10.2.4.52
@samnewman#thoughtworks
DNS
Shop Inventory
inventory: inventory.mycompany.com
DNS Service
@samnewman#thoughtworks
DNS
Shop Inventory
inventory: inventory.mycompany.com
DNS Service
@samnewman#thoughtworks
DNS
Shop Inventory
inventory: inventory.mycompany.com
DNS Service
Configuring DNS?
@samnewman#thoughtworks
DNS
Shop Inventory
inventory: inventory.mycompany.com
DNS Service
Configuring DNS?
DNS propagation time?
@samnewman#thoughtworks
SERVICE DISCOVERY TOOL
Shop
Service
Discovery
@samnewman#thoughtworks
SERVICE DISCOVERY TOOL
Shop Inventory
Service
Discovery
@samnewman#thoughtworks
SERVICE DISCOVERY TOOL
Shop Inventory
Service
Discovery
I’m here!
@samnewman#thoughtworks
SERVICE DISCOVERY TOOL
Shop Inventory
Service
Discovery
inventory:
10.1.1.10
I’m here!
@samnewman#thoughtworks
SERVICE DISCOVERY TOOL
Shop Inventory
Service
Discovery
inventory:
10.1.1.10
I’m here!
@samnewman#thoughtworks
SERVICE DISCOVERY TOOL
Shop
Service
Discovery
inventory:
10.1.1.10
I’m here!
@samnewman#thoughtworks
SERVICE DISCOVERY TOOL
Shop
Service
Discovery
inventory:
10.1.1.10
Inventory
I’m here!
@samnewman#thoughtworks
SERVICE DISCOVERY TOOL
Shop
Service
Discovery
Inventory
inventory:
10.1.1.25
I’m here!
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
DNS SRV
@samnewman#thoughtworks
DNS SRV REST API
@samnewman#thoughtworks
@samnewman#thoughtworks
Service Discovery
@samnewman#thoughtworks
Service Discovery Configuration
@samnewman#thoughtworks
Service Discovery Configuration
Watches
@samnewman#thoughtworks
Service Discovery Configuration
Consul-templateWatches
@samnewman#thoughtworks
Beware of writing your own service discovery system
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
Horizontal Duplication
@samnewman#thoughtworks
Horizontal Duplication
Data Partitioning
@samnewman#thoughtworks
Horizontal Duplication
Data Partitioning
Functional Decomposition
@samnewman#thoughtworks
Functional decomposition = splitting microservices!
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - LOAD BALANCING
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - LOAD BALANCING
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - LOAD BALANCING
Client
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - LOAD BALANCING
Load Balancing
Client
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - LOAD BALANCING
Load Balancing
Client
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - LOAD BALANCING
Load Balancing
Client
Server or client load balancing
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - LOAD BALANCING
Load Balancing
Client
Server or client load balancing
Distribution algorithms can vary
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - LOAD BALANCING
Load Balancing
Client
Server or client load balancing
Distribution algorithms can vary
Software or
hardware based
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - COMPETING CONSUMERS
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - COMPETING CONSUMERS
Customer
Service
create
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - COMPETING CONSUMERS
Customer
Service
create
customer created
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - COMPETING CONSUMERS
Customer
Service
create
customer created
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - COMPETING CONSUMERS
Customer
Service
create
customer created
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - COMPETING CONSUMERS
Customer
Service
create
customer created
Requires shared state
@samnewman#thoughtworks
HORIZONTAL DUPLICATION - COMPETING CONSUMERS
Customer
Service
create
customer created
Requires shared state
Lots of variations on this
‘scatter gather’ approach
@samnewman#thoughtworks
DATA PARTITIONING - SHARDING BY KEY
Customer Service Nodes
@samnewman#thoughtworks
DATA PARTITIONING - SHARDING BY KEY
Customer Service Nodes
A-E
@samnewman#thoughtworks
DATA PARTITIONING - SHARDING BY KEY
Customer Service Nodes
A-E F-M
@samnewman#thoughtworks
DATA PARTITIONING - SHARDING BY KEY
Customer Service Nodes
A-E F-M N-R
@samnewman#thoughtworks
DATA PARTITIONING - SHARDING BY KEY
Customer Service Nodes
A-E F-M N-R S-Z
@samnewman#thoughtworks
DATA PARTITIONING - SHARDING BY KEY
Customer Service Nodes
A-E F-M N-R S-Z
Load Balancing
Client
@samnewman#thoughtworks
DATA PARTITIONING - SHARDING BY KEY
Customer Service Nodes
A-E F-M N-R S-Z
Load Balancing
Client
@samnewman#thoughtworks
DATA PARTITIONING - SHARDING BY KEY
Customer Service Nodes
A-E F-M N-R S-Z
Getting shard keys right is key
- rebalancing is painful!
Load Balancing
Client
@samnewman#thoughtworks
DATA PARTITIONING - SHARDING BY KEY
Customer Service Nodes
A-E F-M N-R S-Z
Getting shard keys right is key
- rebalancing is painful!
Can combine with other
scaling (e.g. load balancing)
Load Balancing
Client
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
AVOID THE DISTRIBUTED SINGLE POINT OF FAILURE!
@samnewman#thoughtworks
Strangler App
@samnewman#thoughtworks
Strangler App
Legacy App
Legacy AppLegacy App
@samnewman#thoughtworks
Strangler App
Legacy App
Legacy App
Requests
Legacy App
@samnewman#thoughtworks
Strangler App
Legacy App
Legacy App
Requests
Legacy App
@samnewman#thoughtworks
Strangler App
Legacy App
Legacy App
Requests
Legacy App
@samnewman#thoughtworks
Strangler App
Legacy App
Legacy App
Requests
Legacy App
30 - 60 Concurrent Requests
@samnewman#thoughtworks
Strangler App
Legacy App
Legacy App
Requests
Legacy App
30 - 60 Concurrent Requests
> 800 Concurrent Requests
@samnewman#thoughtworks
Strangler App
Legacy App
Legacy App
Requests
Legacy App
30 - 60 Concurrent Requests
> 800 Concurrent Requests
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Thread Pool
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Thread Pool
Failing…slowly!
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Thread Pool
Failing…slowly!
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Thread Pool
Failing…slowly!
Thread-pool
exhausted
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Thread Pool
Failing…slowly!
Thread-pool
exhausted
No requests to other
downstream apps
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Thread Pool
Failing…slowly!
Thread-pool
exhausted
No requests to other
downstream apps
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Thread Pool
Failing…slowly!
Thread-pool
exhausted
Requests
Building Up
No requests to other
downstream apps
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Thread Pool
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Fix Timeouts
Thread Pool
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Fix Timeouts
Thread Pool
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Fix Timeouts
Thread Pool Thread PoolThread Pool
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Fix Timeouts
Thread Pool Thread PoolThread Pool
Bulkhead
Downstream
Connections
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Fix Timeouts
Thread Pool Thread PoolThread Pool
Bulkhead
Downstream
Connections
@samnewman#thoughtworks
Strangler App
Legacy App Legacy App Legacy App
Fix Timeouts
Thread Pool Thread PoolThread Pool
Bulkhead
Downstream
Connections
Circuit Breakers
@samnewman#thoughtworks
@samnewman#thoughtworks
http://www.flickr.com/photos/kalexanderson/5421517469/
@samnewman#thoughtworks
http://www.flickr.com/photos/kalexanderson/5421517469/
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
???
@samnewman#thoughtworks
You have to get *much*
better at monitoring
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
You are not a badass if you
use an SSH Multiplexer
@samnewman#thoughtworks
@samnewman#thoughtworks
@samnewman#thoughtworks
AGGREGATE METRICS
@samnewman#thoughtworks
Response Time
Response Time
Response Time
AGGREGATE METRICS
@samnewman#thoughtworks
Response Time
Response Time
Response Time
AGGREGATE METRICS
@samnewman#thoughtworks
Response Time
Response Time
Response Time
AGGREGATE METRICS
@samnewman#thoughtworks
HEALTH CHECK PAGES
@samnewman#thoughtworks
HEALTH CHECK PAGES
@samnewman#thoughtworks
SYNTHETIC TRANSACTIONS
@samnewman#thoughtworks
SYNTHETIC TRANSACTIONS
@samnewman#thoughtworks
SYNTHETIC TRANSACTIONS
@samnewman#thoughtworkshttps://www.flickr.com/photos/yercombe/9033732392/
@samnewman#thoughtworks
CORRELATION IDS
@samnewman#thoughtworks
CORRELATION IDS
@samnewman#thoughtworks
CORRELATION IDS
@samnewman#thoughtworks
ID: 123
CORRELATION IDS
@samnewman#thoughtworks
ID: 123
ID: 123
ID: 123
CORRELATION IDS
@samnewman#thoughtworks
Building
@samnewman#thoughtworks
Building
Deploying
@samnewman#thoughtworks
Building
Deploying
Managing
@samnewman#thoughtworks
Sam Newman
Building
Microservices
DESIGNING FINE-GRAINED SYSTEMS
http://buildingmicroservices.com/
AUTHD
@samnewman#thoughtworks
http://lanyrd.com/profile/samnewman/
Sam Newman
@samnewman
THANKS!

Deploying & operating microservices