November 23, 2018

In Cloud Computing, What is the Difference Between Scalability and Elasticity

In Cloud Computing, we often hear the terms 'Scalability' and 'Elasticity' being thrown around, often being used interchangeably. Recently, I was listening to an online course describing Cloud Computing concepts, and the way these two terms are described got me thinking about the differences.

So far, there is no general consensus on how to draw the line. I have seen explanations which put Scalability as adding resources while Elasticity as adding AND removing resources. I have also seen descriptions that says Scalability is to be able to scale an instance's resources, while Elasticity is to be able to add/remove additional instances.

I am of the opinion that demarcating the differences purely from the perspective of resource adding and removing is too simplified and a little ambiguous, while the latter view of instance resource vs new instances is really still talking about Scalability (Vertical Scaling vs Horizontal Scaling - explained at the end of this article).

Wikipedia defines Elasticity as "the degree to which a system is able to adapt to workload changes by provisioning and de-provisioning resources in an autonomic manner, such that at each point in time the available resources match the current demand as closely as possible", which in turn refers to an article by Nikolas Roman Herbst et al.

The article also has a definition for Scalability which is "the ability of the system to sustain increasing workloads by making use of additional resources." while Wikipedia's page for Scalability refers to it as "the capability of a system, network, or process to handle a growing amount of work, or its potential to be enlarged to accommodate that growth." which in turn refers to another article by André B. Bondi.

I think these definitions captures the differences between of Scalability vs Elasticity better and I will try to summarize with some additional views of my own.

In essence, I will propose that Elasticity in Cloud Computing context is a broader resource provisioning concept which encapsulates Scalability. If you throw in other concepts like 'On-Demand', 'Real-Time', 'Optimal', 'Agile', you get a more comprehensive definition of Elasticity.

Diagram showing components of Cloud Elasticity including Scalability, On-demand, Real-time, Optimal, Agile
Components of Cloud Elasticity

On-Demand: I can get the resources I need anytime and anywhere I want them.
Real-Time: I can get the resources I need immediately.
Optimal: I use only the amount of resources that I need, not more and not less.
Agile: I am able to respond to granular fluctuating business demands by varying my resource usage levels.

Here, I debated with myself a little, and decided to leave out 'Automation', which is the concept of provisioning the resources automatically via preset rules or predefined scenarios, without human intervention. This is because I think automation vs manual work is not an inherent function of Elasticity, it is just how the resources are provisioned. A system can still be elastic even if it requires a lot of human effort to achieve the On-Demand, Real-Time, Optimal, Agile aspects of resource provisioning. It is just very, very inefficient in terms of human labour. By using Cloud Computing, you get features that the infrastructure provides, including Automation, which facilitates better Elasticity.

What do you think? Are there other Elasticity concepts that I had not considered? Let me know in the comments.

Vertical Scaling vs Horizontal Scaling
In Cloud Computing, we can generally think about resource scaling in two forms: Vertical and Horizontal.

Vertical Scaling: This is also known as scale-up/scale-down by adding/removing an instance's resource allocation (CPU, Memory etc…)

Horizontal Scaling: This is also known as scale-in/scale-out by adding/removing cloud instances within a cluster.





No comments:

Post a Comment