Scalability & High Availability
- Scalability means that an application / system can handle greater loads by adapting.
 
- There are two kinds of scalability:
- Vertical Scalability
 
- Horizontal Scalability (= elasticity)
 
 
Vertical Scalability
- Vertical Scalability means increasing the size of the instance. (scale up / down)
 
- For example, your application runs on a t2.micro. Scaling that application vertically means running it on a t2.large.
 
- Vertical scalability is very common for non-distributed systems, such as a database.
 
- RDS, ElasticCache are services that can scale vertically.
 
- There's usually a limit to how much you can vertically scale (hardware limit)
 
Horizontal Scalability
- Horizontal Scalability means increasing the number of instances / systems for your application. (scale out / in)
 
- Horizontal scaling implies distributed systems.
 
- This is very common for web applications / modern applications.
 
- Auto Scaling Group (ASG) & Elastic Load Balancer (ELB).
 
High Availability
- High Availability usually goes hand in hand with horizontal scaling.
 
- High Availability means running your application / system in at least 2 data centers (== Availability Zones(AZ))