Read this knowledge nugget if you want to learn about horizontal scalability. Just like vertical scalability it is a term that is more or less clear. There are – however – different interpretations around…
Scalability is a non-functional requirement and refers to a system’s ability to cope with growing loads with stable performance, increasing its performance under the same load or both by simply replicating the system’s components. Be it now hardware or software.
The term scalability is divided into:
- Vertical Scalability (sometimes also called Scaling Up), and
- Horizontal Scalability (sometimes also called Scaling Out).
This entry deals with Horizontal Scalability. Again, there are two wide-spread interpretations of the term Horizontal Scalability.
The benefit of Horizontal Scalability is that it also increases the availability of an Architecture. The downside of a horizontally scaling application is that it will typically require a cluster. A cluster needs more hardware (such as servers, load balancing infrastructure, etc.), often more software and more administration effort.
Interpretation 1 is the one I have encountered more frequently.
Interpretation 1 defines horizontal scalability as the ability to increase a system’s capacity or its performance by replicating a system (including hardware or a virtualized platform) until the capacity requirement is fulfilled.
This is a scenario that is also very common with virtualized platforms as it can be achieved by simply cloning a particular instance of an existing instance.
Interpretation 2 can sometimes be found as well. In particular before virtualized platforms became widely used infrastructure. The following architecture is sometimes tagged as horizontally scalable and sometimes as vertically scalable. It is a matter of definition. Just make sure you have a clear understanding when using the term.
What this scenario means in essence is that a hardware platform has sufficient capacity to host more than one instance of an application. The application is replicated on the same hardware until the capacity requirements are met.
Personally, I view this already as Horizontal Scalability because the system’s ability to cope with increasing load is improved by replicating a system’s component (independent of the hardware requirements).
Generally speaking it is a matter of definition and not as important how it is defined as long as everyone uses the same definition of terminology while working on one project.
In the section References I have added a particularly valuable article on performance by Danny Cohen. He goes into a lot of detail on different aspects around performance and the definitions of its terminology, including scalability.
[Coh2010] Cohen, D. 2010, “What do you mean by “Performance”?”, Persistent Storage for a Random Thought Generator [online] available at http://dannycohen.info/2010/04/02/what-do-you-mean-by-performance/
[Pic2010a] Pichler, M. 2010, “Architectural Pattern: Clustering for Single-Tier Network-Centric J2EE Software Applications”, A Practical Guide to Software Architecture [online] available at https://applicationarchitecture.wordpress.com/
[Pic2010] Pichler, M. 2010, “Knowledge Nugget: What is Vertical Scalability (Scale Up)?”, A Practical Guide to Software Architecture [online] available at https://applicationarchitecture.wordpress.com/
Copyright © 2010 Michael Pichler