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.