Read this knowledge nugget if you want to learn more about vertical scalability. It is a term that is more or less clear. From time to time you can – however – find different interpretations of it…
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 often divided into:
- Vertical Scalability (sometimes also called Scaling Up), and
- Horizontal Scalability (sometimes also called Scaling Out).
This entry deals with vertical scalability. Again, there are two wide-spread interpretations of the term Vertical Scalability.
The benefit of Vertical Scalability is that the capacity of a platform can be increased by simply adding more hardware (memory, CPUs, etc.). This removes the need for additional infrastructure – such as clustering or load balancing – as it is needed by horizontally scaling applications. The downside of vertical scaling is that – if you have a single instance of an application – it only increases the system’s capacity but not the availability.
Interpretation 1 is the one I have encountered more frequently.
Interpretation 1 defines vertical scalability as the ability to increase a system’s capacity or its performance by simply adding hardware. This could mean getting a larger server, adding more memory, adding more processing power, or other means of improving hardware.
Interpretation 2 I have encountered less frequently but see every once in a while. Therefore it is always important to ask how Vertical Scalability is meant whenever it is mentioned.
This means in essence that the hardware platform may have enough resources available to be able to accommodate for additional load. Scalability is addressed by replicating the software system.
Personally, I view this as Horizontal Scalability because the systems ability to cope with increasing load is increased by replicating the application (independent of needing more hardware). The argument used for Horizontal Scalability is sometimes that it requires more hardware.
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.
Naturally, both approaches can be mixed to scale vertically if you follow the definition of Interpretation 2. Using it the right way you may be able to combine large portions of the advantages of both approaches.
In the section References I have added a very thorough article on performance by Danny Cohen. It makes for a nice read on the subway. 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/
[Pic2010b] Pichler, M. 2010, “Knowledge Nugget: What is Horizontal Scalability (Scale Out)?”, A Practical Guide to Software Architecture [online] available at https://applicationarchitecture.wordpress.com/
Copyright © 2010 Michael Pichler