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

  1. NTP SHOULD be run on bare metal if possible or obtained from high-performance managed services offered within the DC/AZ
  2. 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

  1. Machines MUST use NTP servers on the same subnet or within the same DC/AZ
  2. Machines MUST use DNS name servers on the same subnet or within the same DC/AZ
  3. Failure MUST be logged where they occur not on clients
  4. Machines SHOULD resolve other local machines by name using .local DNS zones
  5. Machines SHOULD communicate with machines in the same subnet, before DC/AZ, before region, before dedicated WAN, before public
  6. 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

  1. 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)
  2. Network ranges MUST be unique (ex: don't reuse 10.0.0.0/24 in multiple AWS accounts)
  3. 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)
  4. Service dependencies SHOULD be within compartments (DCs/AZs, regions, accounts)

Make it luggable

  1. Services SHOULD have the same local names regardless of location. Use the same local names for equivalent resources in different compartments:
    1. 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
    2. 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.