Scaling
In short: Scaling means extending a system so that it can handle more load (users, data, requests).
In more detail: With a popular website the number of visitors grows. A system is scalable if its performance can be adapted to demand with manageable effort, up as well as down again.
In Depth
Two ways
- Vertical (scale up): a stronger machine with more processor, RAM, faster storage. Simple, but limited and a single point of failure.
- Horizontal (scale out): more machines side by side across which the load is distributed (load balancing). Almost unlimited, but the application must be built for it, for example without local state.
Other means
- Caching: store frequent answers temporarily.
- Database: replication (read copies) and sharding (splitting data).
- Asynchronous processing: tasks in queues.
- Automatic (auto-scaling): in the cloud instances start and stop according to load.
Limits
Bottlenecks shift: when the server is fast, the database or network becomes the bottleneck (bandwidth). Scaling costs money and should be justified by measurements (KPI).
See also: system architecture, redundancy, instance