the hard problems of continuous deployment

36
The Hard Problems of Continuous Deployment Timothy Fitz (.com)

Upload: timothy-fitz

Post on 05-Jul-2015

1.895 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: The Hard Problems of Continuous Deployment

The Hard Problems of Continuous Deployment

Timothy Fitz (.com)

Page 2: The Hard Problems of Continuous Deployment

“Continuous deployment involves deploying early and often, so as to

avoid the pitfalls of "deployment hell". The practice aims to reduce timely rework and thus

reduce cost and development time.”

Page 3: The Hard Problems of Continuous Deployment

“Our highest priority is to satisfythe customer through earlyand continuous delivery of

valuable software.”- Principles behind the Agile Manifesto (2001)

Page 4: The Hard Problems of Continuous Deployment

The Hard Problems(The ones I’m going to cover)

• Data

• Mobile

• Scale

Page 5: The Hard Problems of Continuous Deployment

Data makes CD harder

• Updating data is slow

• Moving data is slow

• Schemas live outside code deploy process

• Rollbacks are often hard or impossible

Page 6: The Hard Problems of Continuous Deployment

Schema rev. N, N+1 compatible

• Add the column in production• Push the code that writes to that column• Optionally, run a data migration to populate

the existing rows with data• Push the code that reads from that column.

Page 7: The Hard Problems of Continuous Deployment

Apply only cheap changes

• Only apply changes that are cheap enough to not affect live traffic

• More complex changes split into tiny steps:

– Create new table

– Write to both

– Cut over eventually

– Drop old table

Page 8: The Hard Problems of Continuous Deployment

Apply change to standby

• Run two DB instances

• Apply change to standby

• Failover if successfully applied

• Might run 3rd db instance for availability

Page 9: The Hard Problems of Continuous Deployment

Blue/Green Deploy

• Run two copies of entire cluster

• All databases are replicated

• Lets you test, update and rollback both code and schema in one step

Page 10: The Hard Problems of Continuous Deployment

Schemaless NoSQL

• “Schemaless” really means schema is in your source code

– Which is great! We can CD schema changes

Page 11: The Hard Problems of Continuous Deployment

Schemaless-style SQL

• Benefits of existing SQL databases while still being pseudoschemaless

• (thing_id, key, value) table

• (guid, blob) table

Page 12: The Hard Problems of Continuous Deployment

Recap

• Apply only cheap changes

• Apply changes to standby

• Blue/Green Deploy

• Schemaless NoSQL

• Schemaless-style SQL

Page 13: The Hard Problems of Continuous Deployment

Mobile

• Users must opt-in to every update

• iOS submissions take a week to be approved

• Luckily, lots of tools aimed at the space

Page 14: The Hard Problems of Continuous Deployment

Remember the basics

• CI server / automated tests are critical

• Can’t fallback on production alarms / rollback

• Hosted options: http://cisimple.com

Page 15: The Hard Problems of Continuous Deployment

Data-drive everything

• Build your views / content from data files

• Ping server for updates

• Hosted: http://appgrok.com/

– Lets you deploy txt, png and xib dynamically!

Page 16: The Hard Problems of Continuous Deployment

99% HTML

• Entire app is a single UIWebView

• Glue native code to allow access to APIs

• Clutch.io is awesome (and FOSS now)

– Live reloading for local dev

– Streamlined deploys

– https://github.com/clutchio

Page 17: The Hard Problems of Continuous Deployment

Hybrid HTML/Native

• Core app is native

• Sections can be replaced by HTML

– i.e. Facebook stream entries fallback to HTML

• Infrequently used sections are 100% HTML

Page 18: The Hard Problems of Continuous Deployment

Recap

• Remember the basics

• Data-drive everything

• 99% HTML

• Hybrid HTML/Native

Page 19: The Hard Problems of Continuous Deployment

Scalability

• Maintaining availability, performance and happiness

• As a function of # of people

• As a function of # of tests

Page 20: The Hard Problems of Continuous Deployment

Availability

• The build must always be green

• Set a “green SLA”

– 99% green

– Never red for > 15m

• Measure, track and report on these numbers

Page 21: The Hard Problems of Continuous Deployment

Performance

• Measure (intent to) commit to time of deploy

– Goal: < 5 minutes

• Measure local development test loop

– Goal: < 2s

Page 22: The Hard Problems of Continuous Deployment

Happiness

• CI/CD System is a product

• Software Engineers are the customer

• Keep your customer happy!

Page 23: The Hard Problems of Continuous Deployment

Testing Pyramid

Page 24: The Hard Problems of Continuous Deployment

How do you make tests fast?

• Tests can exercise large amounts of code without being slow

• Minimize system calls (no I/O, no disk)

• Minimize test data size

• Make sure all systems are cheap to instantiate/teardown

• No external state makes tests more reliable

Page 25: The Hard Problems of Continuous Deployment

Run Tests in Parallel

• Multiprocess

• Multimachine

• Multi-VM

• Instant multi-VM: http://circleci.com

Page 26: The Hard Problems of Continuous Deployment

Hardware Scale

• CI Cluster will get huge

– Function of cumulative engineering man-months

– Rule of thumb: 10% of your cluster size

• You will need a CI/CD DevOps person

– CI cluster monitoring / alerting

– Configuration Management critical

Page 27: The Hard Problems of Continuous Deployment

Scale testing infrastructure recap

• Write the right kind of tests

• Make those tests as fast as possible

• Run those tests in parallel

Page 28: The Hard Problems of Continuous Deployment

People / Roles

• Sheriff

– Designated reverter / problem troubleshooter

– Common pattern (IMVU, Chromium, Firefox)

• CD “Product Owner”

– Held accountable for SLA / Performance

– Manage infrastructure backlog

Page 29: The Hard Problems of Continuous Deployment

Single trunk

• Do this until it doesn’t work for you

• Gets painful in the 16 – 32 developer range

• Faster commit->deploy reduces the pain

– But effort becomes prohibitive

Page 30: The Hard Problems of Continuous Deployment

“Try” pipeline

• Conceptually, a second tree that “doesn’t matter” but still gets tested for feedback

• Buildbot implements a patch-pushing version

• Takes a significant amount of pressure off of trunk builds

Page 31: The Hard Problems of Continuous Deployment

CI Server takes active role

• Server automatically reverts red commits

• Server merges green commits to trunk

Page 32: The Hard Problems of Continuous Deployment

Feature branches

• All incremental development happens on branches, branches land when feature is “ready”

• If “feature” is kept small, can be 2-3 per engineer per week on average

• Less continuous, but scales much better

– Feature branches tested before merge

Page 33: The Hard Problems of Continuous Deployment

Merge tree

• Tree per team / feature

• Trees merged into trunk daily (if green)

• Scale up via tree of trees (of trees…)

• Again, less continuous

Page 34: The Hard Problems of Continuous Deployment

Federation

• Each team gets their own deploy pipeline

• Requires SOA / component architecture

• Each team can set their own CD pace

• “Enterprise Ready”

Page 35: The Hard Problems of Continuous Deployment

Recap

• Single trunk + Try pipeline / Autorevert

• Feature Branches

• Merge Tree

• Federation

Page 36: The Hard Problems of Continuous Deployment

Questions?

Timothy Fitz (.com)