designing for rapid release - goto blog – goto...

53
DESIGNING FOR RAPID RELEASE Sam Newman ThoughtWorks Tuesday, 2 October 12

Upload: leminh

Post on 21-Jun-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

DESIGNING FOR RAPID RELEASESam NewmanThoughtWorks

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

We’re hiring...

Not Him

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012Tuesday, 2 October 12

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

We’re hiring...

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Why is rapid release important?

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

What criteria influence design?

Scaling

Durability

Performance

TechnologyGeographical

Compliance

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

What about making it easy to release?

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Make it quick to make a change

Make it quick to deploy the change

Reduce the risk of releasing

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

MusikShopv1

MusikShopv2

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

v23 v9 v14v2v1

MusikShop

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

The Same Change...

...resulting in very different deployments

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

...

Each release is a rollback point

and a data gathering point

and a release process practiced often is more likely to work and to be efficient

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Small, Incremental Releases FTW!

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

So how do we design our systems to allow

for small changes?

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

MusikShop

RekomendLib

Invoice Creation

String Utils

...

Small units - easier to reason about

Fast CI turnaround cycles

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

MusikShop v1

RekomendLib v134

Change to a statically linked library = new deployment of the application

MusikShop v2

RekomendLib v200

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

MusikShop v1

Rekomender v124

Rekomender v200

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

MusikShop v1

Rekomender v124

Rekomender v200

Smoke Test

Showcase

Blue/Green Deployments

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

What can stop blue/green deployments?

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

MusikShop v1 MusikShop v2

Avoid stateful services

User

State

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Expensive Hardware!

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Manual Circuit Breaker

MusikShop v1

Rekomender v124

Rekomender v200 Smoke Test

www.MusikShop

Take That

Queens Of The Stone Age

Snoop Dogg

We Rekomend ‘The Brakes’!We Can’t Rekomend

Right Now!

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Async Behaviour

MusikShop v1

Rekomender v124

Rekomender v200

www.MusikShop

Take That

Queens Of The Stone Age

Snoop Dogg

We Rekomend ‘The Brakes’!Waiting...

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Things to watch for...

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

The Trifle

Musik Web

Persistence

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

The Spider

CD Ordering System

Whitemail System Data Wharehouse

3rd Party SupplierFinance SystemDumb System 4

Dumb System 1 Dumb System 2

Dumb System 3

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

“A set of capabilities on an endpoint”

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Add to cart

Checkout

View Latest Releases

Search

Listen To Previews

Shopping Cart Catalog

Music Library

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Model Services Based On Your Business

Domain

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

MusikShop

v1

Reko.v9

Reko.v10

MusikShop

v1

MusikShop

v2

Reko.v10

InternalChange Expansion Interface

Change

Reko.v10

MusikShop

v1

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Rekomender V9

v1

MusikShop

v2

iOS App

Consider maintaining multiple service endpoints

Non-breaking expansion is to be preferred - but if you can’t...

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Service B

Service A

Shared Lib v1

Shared Lib v1

Shared Lib v2

Beware of shared serialization protocols

WSDL-bindingJAXB

Java Serialization

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

RFC 761

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Postel’s Law:“Be conservative in what you do, be liberal in

what you expect“

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

MusikShop Rekomender

Consumer Driven Contracts

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

DATABASES!

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

DATA IS COOL

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

DATABASES ARE EVIL

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

RekomenderMusikShop

DB Schema

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

RekomenderMusikShop

Schema Schema

DB Instance

Each service owns its own data

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

RekomenderMusikShop

RDMS RDMSRiak

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Riak

Rekomender

RDBMS

Release 1: Dual Write

Release 2: Read from Riak

Release 3: Retire RDMS

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

MusikShop

Rekomender AceSuggest

Dark Launching!

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Decompose Your Systems

Model Your Domain

Get Interfaces Right

Seperate Deployment From Release

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Questions?

Tuesday, 2 October 12

@samnewmanGOTO: Aarhus 2012

Thanks!

@samnewman

We’re hiring!

Tuesday, 2 October 12