When designing enterprise application architecture, talking to clients and doing interviews for my group, I sometimes tackle the “scale up vs. scale out” software architectural dilemma.
To set the stage lets define what scale means as well as what scale-up and scale-out mean.
The problem domain:
We have an application that serves about a 100 users (an online video store web site for example). Now, all is dandy and the application is running fast and smoothly. But then our application becomes more popular and more users want to use it at the same time. Now the application needs to serve thousands or even millions of users. The application is becoming sluggish and non-responsive because it runs out of computing power, memory or network bandwidth. There is an irony in this situation because this is what we hoped for (millions of users) and this is the time when we need the application to work at its best, while in reality this is when most applications tend to fail.
The scalability solution:
scalability is a desirable property of a system, a network, or a process, which indicates its ability to handle growing amounts of work in a graceful manner.
There are two kinds of scalability strategies:
Scale up (Scale vertically) means to run the application on a stronger computer.
Scale out (scale horizontally) means to run the application on many regular computers.
If we think of this in terms of a housing problem, these solutions make more sense.
Let’s say we have a family house with five people in it.
After a few years the family grows and is now composed of ten people and there is no more room. What do we do?
Scale up would mean to put everyone in one big building:
Scale out would mean to put these people in several small size houses:
Scale up – pros and cons:
This is a straight forward solution that does not demand a change in the architecture of the software we write. You just run the same application on a stronger computer.
On the other hand, the problem with scale up is that it is a costly and not an infinite solution. Big computers, like houses, cost a lot and there is a physical limitation to the computing power and memory you can have in a single computer.
Scale out – pros and cons:
If planed right, this solution offers infinite scalability, when you need to support more users you just add more low cost computers to your server farms.
On the other hand, this is not a straight forward solution. You need to design, architect, and develop your application to be ready to scale out (this is a topic for another blog I plan to write)
For small scale application scaling up might be cheaper and faster to develop and implement. Having said that, most large scale applications, such as Google, Amazon, and Microsoft, use the scale out solutions in order to handle their scalability challenges.
Bottom line conclusion – if you plan for success do some pre-thinking and additional development to make your application scale out ready.