I believe that it’s important to understand terms. And to understand terms scalability and elasticity in cloud computing context, I did a little research on what is the difference between scalability and elasticity when used in context of cloud computing.
e·las·tic·i·ty: The ability of something to change and adapt; adaptability [Dictionary]
scal·a·ble: Able to be changed in size or scale [Dictionary]
So my first step was to lookup meaning of each word in dictionary and honestly, that did helped me understand the meaning of each word but I was not able to appreciate the use of each word in cloud computing terms. I researched a little more came to a conclusion that
- When we talk about elasticity – it is from cloud platform perspective. By this I mean, it is the characteristic of the “cloud platform” that allows end users to spawn resources in no time. For instance, with a click of a mouse, end users are able to spawn a 10 GIG SQL Azure database. And this characteristic that allows end users to QUICKLY provision resources is what is referred to as elasticity. And alternatively, De-provisioning is “elastic” too. From, a cloud vendor perspective, these means they also should report usage to the end-user and charge end-users for only what they use. It’s important as one of the important characteristic of cloud is that it is supposed to be “Measurable” by end-user
- Scalability: It refers to ability of an “application” (NOT cloud) to handle INCREASED workload. Traditionally, to meet increased workload, hardware was thrown at the problem. But it had it’s own set of limitation that it was not infinitely scalable because hardware could be upgraded to certain limit only. Now in cloud computing era, we can provision as many resources as we need – but it is important to architect the application in a way that embraces “scalability”. So when you deploy an app on a cloud platform, it does NOT “scale” automatically and the app should be architected to embrace scalability – On other hand, you are guaranteed “elasticity” by the cloud vendor.
Let’s take an example.
Suppose I have an app and I wish to deploy it on Windows Azure. Now, it’s my responsibility to architect app to embrace scalability by making my application stateless, etc, etc. Now once I have architected my app to embrace scalability – I deploy it on Windows Azure. And here, Windows Azure gives my app the “elasticity” it may need. That means, I can provision/de-provision resources at my will.
Thus, In cloud computing,
Scalability ≠ Elasticity