Aspects of Deployment
if security, reliability, and usability are core features of infrastructure, few tools or processes are better suited to provide them than an excellent deployment pipeline
(cost vs speed tradeoffs!)
good deployment is:
- instrumented
- quick
- knowably safe
- immutable
so, how do you get there?
we’ll propose a specific FSM to follow, and then explore the parts. at a high level, there are three aspects:
- writing
- building
- deploying
yay.
Writing
steps:
- write
- test
- review
- merge
aspects:
- mono/micro repos: solving library dependency management or solving tangled large builds
- mono/micro services: solving inspectability and tracing or solving high commiter density and complexity
Building
steps:
- build
- test
- store build
aspects:
- shipping containers
- HA image storage
- rsync?
- AMIs
- build speed
Deploying
steps:
- deploy build
- switch version
- monitor new version
- accept / revert
aspects:
- push vs pull
- graceful restarts: socket sharing, local haproxy, default to local but go elsewhere
- deployment strategies: blue-green,c anary, iterative (by az, by region, by server, by pod, …)
- integration with routing
- rsync
- rollbacks
- synchronizing state with software: containers again, yay
- non-deployment changes: e.g. updates to routing table, feature flags, dark launches, etc
conclusion
some innovations, like serverless are trying to change the flow