What is the difference between scalability and elasticity?

I've heard many people using both terms interchangeably. However, in my opinion there is difference between them:

SCALABILITY - ability of a software system to process higher amount of workload on its current hardware resources (scale up) or on current and additional hardware resources (scale out) without application service interruption;

ELASTICITY - ability of the hardware layer below (usually cloud infrastructure) to increase or shrink the amount of the physical resources offered by that hardware layer to the software layer above. The increase / decrease is triggered by business rules defined in advance (usually related to application's demands). The increase / decrease happens on the fly without physical service interruption.

Again, scalability is a characteristic of a software architecture related to serving higher amount if workload, where elasticity is a characteristic of the physical layer below, entirely related to hardware budget optimizations.

Have I got the difference between these two non-functional architectural characteristics right? May someone give specific examples, so we could draw more distinctive border between these two terms?


Scalability is the ability of the system to accommodate larger loads just by adding resources either making hardware stronger (scale up) or adding additional nodes (scale out).

Elasticity is the ability to fit the resources needed to cope with loads dynamically usually in relation to scale out. So that when the load increases you scale by adding more resources and when demand wanes you shrink back and remove unneeded resources. Elasticity is mostly important in Cloud environments where you pay-per-use and don't want to pay for resources you do not currently need on the one hand, and want to meet rising demand when needed on the other hand.


_

Scalability: "Increasing" the capacity to meet the "increasing" workload.

Elasticity: "Increasing or reducing" the capacity to meet the "increasing or reducing" workload.


Scalability: In a scaling environment, the available resources may exceed to meet the "future demands".

Elasticity: In the elastic environment, the available resources match the "current demands" as closely as possible.


Scalability: Scalability adapts only to the "workload increase" by "provisioning" the resources in an "incremental" manner.

Elasticity: Elasticity adapts to both the "workload increase" as well as "workload decrease" by "provisioning and deprovisioning" resources in an "autonomic" manner.


Scalability: Increasing workload is served with increasing the power of a single computer resource or with increasing the power by a group of computer resources.

Elasticity: Varying workload is served with dynamic variations in the use of computer resources.


Scalability: Scalability enables a corporate to meet expected demands for services with "long-term, strategic needs".

Elasticity: Elasticity enables a corporate to meet unexpected changes in the demand for services with "short-term, tactical needs".


Scalability: It is "increasing" the capacity to serve an environment where workload is increasing.

This scalability could be "Scaling Up" or "Scaling Out".

(Example:

Scaling Up - increasing the ability of an individual server

Scaling out - increasing the ability by adding multiple servers to the individual server.)

Elasticity: It is the ability to "scale up or scale down" the capacity to serve at will.


Scalability: To use a simile, "scaling up" is an individual increasing her power to meet the increasing demands, and "scaling out" is building a team to meet the increasing demands.

Elasticity: To use a simile, a film actor increasing or reducing her body weight to meet differing needs of the film industry.

_


Usually, when someone says a platform or architectural scales, they mean that hardware costs increase linearly with demand. For example, if one server can handle 50 users, 2 servers can handle 100 users and 10 servers can handle 500 users. If every 1,000 users you get, you need 2x the amount of servers, then it can be said your design does not scale, as you would quickly run out of money as your user count grew.

Elasticity is used to describe how well your architecture can adapt to workload in real time. For example, if you had one user logon every hour to your site, then you'd really only need one server to handle this. However, if all of a sudden, 50,000 users all logged on at once, can your architecture quickly (and possibly automatically) provision new web servers on the fly to handle this load? If so, it could be said that your design is elastic.


Scalability refers to the ability for your resources to increase or decrease in size or quantity.

There's a lot of infrastructures involved to make something like this happen, so it's no easy task.

Many of the services in AWS are scalable by default, which is one of the reasons that AWS is so successful.

Scalability is pretty simple to define, which is why some of the aspects of elasticity are often attributed to it.


Elasticity is the ability for your resources to scale in response to stated criteria, often CloudWatch rules.

This is what happens when a load balancer adds instances whenever a web application gets a lot of traffic.

Scalability is required for elasticity, but not the other way around.

Not all AWS services support elasticity, and even those that do often need to be configured in a certain way.

--

In resume, Scalability gives you the ability to increase or decrease your resources, and elasticity lets those operations happen automatically according to configured rules.