Designing systems that can scale to very large sizes can be a challenge. If you are wondering what I mean by large, here are some requirements such a system might need to meet: 

  • millions of users
  • millions of connecting/connected systems
  • 24/7/365 operation
  • dynamic provisioning of new resources and tasks
  • high sustained throughput
  • bursty loading
  • contract-driven service level agreements (SLAs)
  • customer-specific data separation and security requirements
  • customer data mobility and distribution across geographic boundaries
  • disaster failover

I'll save some typing time and point you over to Wikipedia for more details. :)

There are some standard engineering strategies we can use to accommodate these requirements. This slide deck is one I put together to talk about these issues with some folks.