3. Observed problems:
• Support nightmare
• Failed / inconsistent deployments
• New applications extremely costly to
deploy
4. Solution:
• Application infrastructure contract
• Defined interface for infrastructure to
interact with your application:
• How to launch
• How to query health
• Any application which complies gets
continuous deployment - free
6. Predictable
• Deployment is model driven
• Store desired state in ‘cmdb’
• Audit live servers, adjust reality to conform
to desired state
• State machine - easy to test!
7. Safe
• Each possible step in a deployment is a
state transition
• Sample live state after each transition - if
model doesn’t match reality, stop!
• Mcollective agent - flexible per-user + fact
based permissions for free
9. Participation?
• Need to be able to cleanly remove
instances from load balancer
• Make load balancer health check do 2
things:
• Check app = healthy
• Check participation = true
• Tatin - tiny REST service to drop state into
13. Multiple instances
• Discover all instances
• Work out next transition for each instance
• Each transition has a weight
• Sort by weight - take highest weighted
• Repeat until no transitions left
14. Simple example
Desired Actual Desired Actual
App Action Weight
version version part part
Disable
host1 5 4 Y Y 1
part
Disable
host2 5 4 Y Y 1
part
15. Simple example
Desired Actual Desired Actual
App Action Weight
version version part part
host1 5 4 Y N Upgrade 2
Disable
host2 5 4 Y Y 1
part
16. Simple example
Desired Actual Desired Actual
App Action Weight
version version part part
Enable
host1 5 5 Y N 3
part
Disable
host2 5 4 Y Y 1
part
17. Simple example
Desired Actual Desired Actual
App Action Weight
version version part part
host1 5 5 Y Y None 0
Disable
host2 5 4 Y Y 1
part
18. Simple example
Desired Actual Desired Actual
App Action Weight
version version part part
host1 5 5 Y Y None 0
Disable
host2 5 4 Y N 1
part
19. Simple example
Desired Actual Desired Actual
App Action Weight
version version part part
host1 5 5 Y Y None 0
host2 5 4 Y N Upgrade 2
20. Simple example
Desired Actual Desired Actual
App Action Weight
version version part part
host1 5 5 Y Y None 0
host2 5 5 Y Y None 0
21. A/B groups
• Can run A/B groups of the same app with
different versions
• Can upgrade non-participating group, test,
then swap participation.
• Same model just works
22. Status
• Orc, deployapp + contract test harness
open source
• Docs still very lacking.
• You need to plug in your own repository
module (and your own launcher for non jar
apps)
24. Code
• The ideas here are way more important
than the code
• Development sponsored by TIM Group
• Yes, of course we are hiring :)
• https://github.com/youdevise/orc