# Terminology

* High Availability and Scalability concept go hand-in-hand, depending on the context.

## [Scalability](https://en.wikipedia.org/wiki/Scalability)

* Application can handle greater loads by adapting.
* There are two types of scalability.
  * Horizontal _(elasticity)_
  * Vertical

### Vertical scalability

* Increase the size of resource in a single node.
* Typically this means increase memory, addition of storage and CPUs.
* Useful for non-distributed systems.
* Hardware limitation restricts the amount of scalability.

### Horizontal scalability

* AKA Scale-out/Scale-in depending on increase/decrease in the number of instances.
* Increase the number of instances/systems for your application.
* Useful for distributed system.
* Achieved using Auto Scaling group and load balancer.

## [High Availability](https://en.wikipedia.org/wiki/High_availability)

* System that aims to ensure an agreed level of operational performance, usually uptime, for a higher than normal period.
* This is achieved by having system run at atleast two data centers meaning Availability Zone.
* Horizontal scaling leads to active high availability.
* Achieved using **Auto Scaling Group** and **Load balancer** with multi-AZ enabled.

## [Load Balancing](https://en.wikipedia.org/wiki/Load_balancing_\(computing\))

* The process of distributing a set of tasks over a set of resources, with the aim of making their overall processing more efficient.
* Load balancing can optimize the response time and avoid unevenly overloading some compute nodes while other compute nodes are left idle.

## References

* [Scalability and High Availability](https://docs.aws.amazon.com/whitepapers/latest/real-time-communication-on-aws/high-availability-and-scalability-on-aws.html)
