- Manageable from any machine
- Deployable from any machine
- Be distributed and self healing
- Simple to bootstrap, and fast
- As simple as pushing my code to deploy
- Simple environments (such as staging/qa/production)
- rolling releases
- ANY code, any app
- Scalable, self healing, distributed data stores
- Galera for MySQL
- Hot standby/streaming replicaiton PostgreSQL
- CephFS available to the application
- HTTP/DNS only interfaces to components
Serf:
- Provides initial bootstrapping framework
- Simple discovery
Consul:
- Provides full service discovery
- Health checking
- Cluster communication
Docker:
- Provides isolation
- Repeatable/portable systems
Ceph:
- Provides distributed filesystem
- Available to plugin system for state
Unknown Scheduler:
- Determines which host gets what application container
- based on load/dc/etc
- manages deployments
Unkown Router:
- Routes traffic to the appropriate container
- Takes into account stickiness when performing rolling deployments