Scalability is measured in terms of throughput based on some variable. For example, number of requests/second with X users. The simplest way to describe scalability is:
A measure of efficiency as load increases.
The first thing you need to understand in designing for scalability is what measurement is most important for your application? There are several ways of measuring efficiency which is a key component of scalability:
- Concurrent requests per second
- Average response time per request
- Number of records processed per second/minute
There are more efficiency measurements that can be used, but these are common for web based systems or batch processing systems.
The next aspect of scalability is measuring what happens to your efficiency as load is increased. Common ways for load to increase are:
- More users hitting the server (i.e. more web traffic)
- More data in the database (i.e. queries take longer, or processing takes longer)
- Hard drive failure in a RAID (storage performance/reliability is affected)
- Network saturation
The goal for a scalable application is to either maintain or improve efficiency as we deal with the load problem. In short, if the response time is taking too long, can we add another server to distribute the load evenly? This approach reduces the amount of work for one server to do, and keeps the servers operating in that "sweet spot" for efficiency.
You're application will need to be designed specifically to scale. That means you have to be careful with session data, routing requests to the right server, reducing bottlenecks that limit the ability for the application to scale.