233
DEPLOYING AND OPERATING MICROSERVICES Sam Newman ThoughtWorks London 2015 1

Deploying & operating microservices

Embed Size (px)

Citation preview

DEPLOYING AND OPERATING MICROSERVICESSam Newman ThoughtWorks London 2015

1

@samnewman#thoughtworks

Sam Newman

Building MicroservicesDESIGNING 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 AService A

v123

@samnewman#thoughtworks

Single Repo

ONE BUILD PER SERVICE, SINGLE REPO

Version Control CI Tool

/Service A

/Service B

/Service C

Service AService 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 AService 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 AService 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 AService 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 AService 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 AService 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-effectsLower host-management overhead

VS

@samnewman#thoughtworks 21

Host

Service

Host

Service Service

Service Service

Much Easier To Reason About

Easier To Provision

Fewer Side-effectsCheaper!

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-effectsCheaper!

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

VMWareAWS

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

ClientServer or client load balancing

@samnewman#thoughtworks

HORIZONTAL DUPLICATION - LOAD BALANCING

Load Balancing

ClientServer or client load balancing

Distribution algorithms can vary

@samnewman#thoughtworks

HORIZONTAL DUPLICATION - LOAD BALANCING

Load Balancing

ClientServer 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 Servicecreate

@samnewman#thoughtworks

HORIZONTAL DUPLICATION - COMPETING CONSUMERS

Customer Servicecreate

customer created

@samnewman#thoughtworks

HORIZONTAL DUPLICATION - COMPETING CONSUMERS

Customer Servicecreate

customer created

@samnewman#thoughtworks

HORIZONTAL DUPLICATION - COMPETING CONSUMERS

Customer Servicecreate

customer created

@samnewman#thoughtworks

HORIZONTAL DUPLICATION - COMPETING CONSUMERS

Customer Servicecreate

customer created

Requires shared state

@samnewman#thoughtworks

HORIZONTAL DUPLICATION - COMPETING CONSUMERS

Customer Servicecreate

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 PoolBulkhead

Downstream Connections

@samnewman#thoughtworks

Strangler App

Legacy App Legacy App Legacy App

Fix Timeouts

Thread Pool Thread PoolThread PoolBulkhead

Downstream Connections

@samnewman#thoughtworks

Strangler App

Legacy App Legacy App Legacy App

Fix Timeouts

Thread Pool Thread PoolThread PoolBulkhead

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 TimeResponse Time

Response Time

AGGREGATE METRICS

@samnewman#thoughtworks

Response TimeResponse Time

Response Time

AGGREGATE METRICS

@samnewman#thoughtworks

Response TimeResponse 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: 123CORRELATION 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 MicroservicesDESIGNING FINE-GRAINED SYSTEMS

http://buildingmicroservices.com/

AUTHD

@samnewman#thoughtworks

http://lanyrd.com/profile/samnewman/

Sam Newman @samnewman

THANKS!