AWS in it's physical form is made up of a large number of data centers across the world. These data centers are independent of each other, meaning that if one data center goes down, it will not impact the others.
A data center is essentially a really big build that houses hundreds/thousands of physical servers. In AWS these data centres are referred to as Availability Zones. These Availability Zones are organised into groups, based on geographical proximity, and each of these groups are referred to as regions.
Making use of all the Availability Zones in a region has several advantages:
- low latency - if a AZ is close to an end user.
- fault tolerance
The AWS console is designed to only interact with one region at a time, you can navigate between regions using the console.
Some AWS services are not restricted to a region, instead they operate worldwide, For example, "Edge Locations"
Edge Location - This is an AWS datacenter which is primarily used for caching content, so that it can deliver content to the requester more quickly. E.g. Cloudfront, which is a Content Delivery Network (CDN). These data centers are used for covering parts of the world that are not covered by any AZs. Hence Edge Locations are data centres that are primarily used for caching static content, e.g. html+css files, audio files, video files, ...etc.
scalability - able to add/remove resources to a service as and when needed. e.g. logical volumes are scalable compared to using a simple partition. Scalability has the following advantages:
- Resilient - automatically add more cpu resources when demand increases.
- Cost effective - allocate just enough amount of resources to meet demands.
Using vm's is an example of scalability.
Fault Tolerant (aka failovers, or redundancies) - this means that the your system carries on working even if there is a service failure, e.g. when an AZ goes down. E.g. if one server fails, then there is another server that will take over.
Elasticity - Pretty much means that same thing as scalability, i.e. can automatically scale up and scale down. This means we pay end up paying for only what we need.
Some amazon resources have elasticity built in, e.g. Amazon S3, whereas others are not, e.g. EC2.
Ther are 3 main types of scaling:
- proactive Cycle Scaling: automatically start up and shutdown vms during peak periods, e.g. 9am-5pm mon-fri.
- proactive Event-Based Scaling: Can automatiically scale in anticapation peaks caused by certain events. E.g. black-friday, boxing day, half price sale days.
- Auto-Scaling Based on Demand: scale up based on things like cpu, ram, bandwidth, reaches a certain predefined upper limit, e.g. 80%. This type of scaling has small delay when scaling up/down. I.e. it can take a couple of minutes for new EC2 register and become part of the applicaiton. Hence, end users may experience minor outages, if there is a very sharp peak. Another way to scale is based on jobs in the queue (e.g. queueing jobs in the Jenkins setup)