Thursday, March 13, 2014

Architecture Tenets

Over my career working in the online / distributed software arena, I have honed in on the following architecture tenets that I tried to deploy in any internet scale architecture problem.

Separation of Concerns
Build autonomous, decoupled services - SOA

  • Define Clear contracts (Semantic, SLA)
  • Define Explicit boundaries
  • Backward & Forward Compatibility
  • Versioning
Design to Scale Out
Don’t rely purely on Moore’s law. Systems should be decoupled and/or partitioned to scale out

  • No Single Choke points
  • Partitioning should be Fine grained
  • Be able to run on Commodity Hardware
  • Designed for GEO readiness
Design for Change
Changes are the norm not the exception

  • Design applications to be modular and extensible
  • Design components to be flexible and configurable
Simplicity
Complicated designs fail in complicated and expensive ways

  • Simplified Operability (Instrumentation/Monitoring/Tools)
  • Simplified Debugging (Root Cause Analysis) 
  • Simplified Ramp up 
  • Diagnostic Capabilities
Design for Failure
Failures are the norm not the exception

  • No Single Point of Failure 
  • Services should be resilient (Run in the wild) 
  • Graceful Degradation of services 
  • Deployments should be automatable 
  • Ability to roll back releases

1 comment:

Eugene said...

A good set of architecture principles to follow. Thanks for the post!