Alain's Cloud Design Principles
A collection of my opinions on design for effective Cloud computing. Ranging from DNS and NTP to service-level communications, but yet concise enough to remember (hopefully).
These principles are listed in priority order.
Strengthen your core
- NTP SHOULD be run on bare metal if possible or obtained from high-performance managed services offered within the DC/AZ
- DNS SHOULD be run on bare metal if possible or obtained from high-performance managed services offered within the DC/AZ
Keep your friends close
- Machines MUST use NTP servers on the same subnet or within the same DC/AZ
- Machines MUST use DNS name servers on the same subnet or within the same DC/AZ
- Failure MUST be logged where they occur not on clients
- Machines SHOULD resolve other local machines by name using .local DNS zones
- Machines SHOULD communicate with machines in the same subnet, before DC/AZ, before region, before dedicated WAN, before public
- Machines SHOULD use local (on-instance) storage before network storage in the same DC/AZ, before region, before dedicated WAN, before public
Keep it separated
- Service dependencies MUST be acyclic between different compartments (ex: AWS Prod can depend on JPC Prod for cart, but JPC Prod can't depend back on AWS Prod for cart as well)
- Network ranges MUST be unique (ex: don't reuse 10.0.0.0/24 in multiple AWS accounts)
- Local DNS zones MUST be unique (ex: use aws-us-east-1.prod.alainodea.local for local prod resources in AWS us-east-1 and jpc-us-sw-1.prod.alainodea.local for local prod resources in Joyent Public Cloud)
- Service dependencies SHOULD be within compartments (DCs/AZs, regions, accounts)
Make it luggable
- Services SHOULD have the same local names regardless of location. Use the same local names for equivalent resources in different compartments:
- ex: cart should be cart.aws-us-east-1.prod.alainodea.local in AWS production and cart.jpc-us-sw-1.prod.alainodea.local in Joyent Public Cloud Production
- ex: cart should be car.jpc-us-sw-1.prod.alainodea.local in AWS Production and cart.jpc-us-sw-1.stg.alainodea.local in AWS Staging
Feel free to comment/contribute and remember these are my opinions, not absolute facts.