What does "scalability" mean? [closed]

I read many articles comparing programming languages.

There is a word that comes often: scalability. I actually tried to look for a simple and clear explanation, but haven't found anything.

Can you explain what the scalability term means?


Solution 1:

Scalability is the ability of a program to scale. For example, if you can do something on a small database (say less than 1000 records), a program that is highly scalable would work well on a small set as well as working well on a large set (say millions, or billions of records).

Like gap said, it would have a linear growth of resource requirements. Look up Big-O notation for more details about how programs can require more computation the larger the data input gets. Something parabolic like Big-O(x^2) is far less efficient with large x inputs than something linear like Big-O(x).

Solution 2:

Scalability is the trait where a software solution can handle increased loads of work. This can be larger data-sets, higher request rates, combination of size and velocity etc.

When talking about systems scalability, we usually differentiate between

  • "Scale up" - the ability to grow by using stronger hardware
  • "Scale out"- the ability to grow by adding more hardware

A solution that can scale out can usually grow to lager loads in a more cost effective way. An important thing to know here is Amdahl's law that states that the ability to scale out is limited by the sequential part of the software

Solution 3:

Already great answers here, just wanted to add few things here.

Scalability can be achieved in 2 ways:

  1. Vertical - In this way, you add more hardware like more RAM, processor or more nodes. You also introduce load balancer, which will help in routing the incoming calls to various servers based on the routing algorithm used. The application is now able to handle more load as load is being shared across the servers.

  2. Horizontal - In horizontal scaling, you architect/design the application in such a way that it can behave well in case of more parallel traffic. You check how you are managing the memory, sessions , cache & state etc. If you are using the session to maintain the user information, under heavy load single server could be more busy managing the servers, so in this case you can check possibility of going stateless. It can also respond to incoming requests from same user in parallel instead serial replies which happens if sessions are being used.

Solution 4:

My understanding is it means that a linear increase in output requested only demands a linear increase in resources.