Designing for High Availability
Get introduced to the principles and patterns developers need to build resilient applications on AWS.
We'll cover the following...
High availability (HA) refers to systems that remain operational and accessible, even when parts of the infrastructure fail. In AWS, this principle is central to how services are designed and consumed. For developers, HA means applications continue running smoothly without interruption, even in the face of hardware failures, network issues, or unexpected demand spikes.
A common misconception is that simply deploying an application on AWS guarantees high availability. AWS provides the building blocks, but developers must architect for resilience. For example:
Running a single EC2 instance in one Availability Zone (AZ) might work, but it creates a single point of failure.
By contrast, deploying across multiple AZs or even multiple Regions, combined with services like Elastic Load Balancing and Auto Scaling, allows applications to recover automatically if one component fails.
Global infrastructure
AWS is built on a global infrastructure comprising Regions and Availability Zones. A region is a physical location with multiple, isolated data centers called AZs. Each AZ is a fully isolated partition of the AWS infrastructure, but it is connected with low-latency networking.
Architecting across Availability Zones
One of the most critical practices when designing for HA is AZ diversification. Services like Amazon EC2 Auto Scaling, Amazon RDS Multi-AZ, and Elastic Load Balancing make it easier to distribute resources.
For example, deploying a web tier across EC2 instances in two AZs and using an Application Load Balancer (ALB) to distribute requests ensures that even if one AZ goes down, our application remains online. While serverless and abstracted from infrastructure, AWS Lambda also benefits from multi-AZ redundancy automatically handled by AWS. To further improve availability, developers can combine Lambda with services like SQS and EventBridge for decoupled, fault-tolerant ...