Courseiva
SAP-C02Chapter 3 of 16Objective 1.3

Building Resilient and Highly Available Architectures

The SAP-C02 exam objective 1.3 demands that you master the art of building systems that never go down, even when parts of them break. This concept is about designing your cloud architecture so that a single server failure, a network outage, or even a whole data centre disaster doesn't stop your application from working. For someone studying for the SAP-C02, understanding this is critical because nearly every high-level architecture question on the exam tests your ability to eliminate single points of failure and distribute workloads across multiple locations.

12 min read
Intermediate
Updated Jul 23, 2026
Editorial oversight: Johnson Ajibi· Security Systems Architect · MSc IT Security · IEEE Senior Member

A simple way to picture Building Resilient and Highly Available Architectures

The Executive Chef's Brigade System Analogy

A head chef runs a busy restaurant kitchen during Saturday night dinner service. This chef, named Elena, is responsible for ensuring every table gets its order, even when the kitchen is under immense pressure. She doesn't cook every dish herself. Instead, she has built a brigade system with specialist stations: one chef for grills, one for sauces, one for vegetables, and a dedicated pastry chef. Each station has its own set of ingredients and tools, and each chef is trained to cover for another if someone gets overwhelmed or a burner fails. The key is that each station is duplicated. If the grill station's primary gas line fails, the backup grill on the other side of the kitchen is fired up immediately without Elena even needing to shout an order. The chopping board for vegetables has a second identical board ready to slide into place. The restaurant itself has two separate gas mains coming from different streets, so a single street repair doesn't shut down the ovens. If a chef calls in sick, a cross-trained sous chef steps in, because the menu is standardised and every chef knows at least two stations. The entire system is designed so that no single broken pan, missing ingredient, or burnt steak can deny a customer their meal. Elena's real skill isn't cooking; it's architecting a kitchen where failure is expected, planned for, and absorbed without the customer ever noticing. She builds resilience and high availability into the very layout of her kitchen.

How It Actually Works

In the world of building software systems that run on the cloud, 'resilience' and 'high availability' (often called HA for short) are two sides of the same coin. Resilience means your system can recover quickly from failures. High availability means your system stays up and running for a very high percentage of time, often designed for 99.99% uptime or more. Together, they allow you to provide a service that people depend on without interruption, whether it's a banking app, a streaming service, or a hospital's patient portal.

Before the cloud era, companies ran their own servers in their own basements or rented space in data centres. If that single server died, the website went down until someone drove to the building and replaced a hard drive. This is called a 'single point of failure' (SPOF). A single point of failure is any component whose failure brings down the entire system. The whole goal of building resilient and highly available architectures is to eliminate that single point.

How does it work? The fundamental principle is redundancy. Redundancy means having backup components ready to take over. If one web server crashes, another identical web server instantly handles the traffic. If one database goes offline, a replica database takes over. Redundancy can happen within a single location, called an 'Availability Zone' (AZ), or across multiple geographic locations, called 'Regions'. An Availability Zone is a distinct physical location within an AWS Region. Think of an AZ as a separate data centre or a group of data centres with independent power, cooling, and networking. A Region is a larger geographic area, like 'US East (N. Virginia)' or 'Europe (Ireland)', which contains at least three Availability Zones.

Another critical concept is 'fault isolation'. You want to design your system so that a failure in one part doesn't cascade and destroy everything else. This is often achieved by using 'loose coupling' — making components communicate asynchronously or through queues, so if one part is slow, it doesn't block the others. For example, instead of a web server directly writing to a database, it sends a message to a queue. A separate worker picks up the message and writes to the database. If the database is momentarily slow, the web server keeps responding to users because it just dropped a message in the queue.

What does this replace? It replaces the old 'monolithic' approach where everything ran on one big machine. If that machine had a power supply failure, the whole company stopped working. Modern architectures instead use 'clusters' of smaller machines and 'microservices', where different parts of the application run independently. The exam also wants you to understand specific AWS services that enable this:

Elastic Load Balancing (ELB): Acts as a traffic cop. It sits in front of a group of servers and distributes incoming requests across healthy ones. If a server fails, the ELB stops sending traffic to it and routes only to the healthy ones.

Amazon Route 53: A Domain Name System (DNS) service. It can route users to different Regions entirely. If the whole US East Region fails, Route 53 can send users to US West.

Amazon RDS Multi-AZ: A database service that automatically creates a standby replica of your database in a different Availability Zone. If the primary database fails, AWS automatically flips to the standby within minutes.

Amazon S3: A storage service that is inherently highly available. It automatically stores copies of your data across at least three Availability Zones in a Region.

The key design patterns you must memorise for the exam include the 'active-active' and 'active-passive' patterns. In an active-active setup, multiple instances (servers) in different locations are all handling traffic at the same time. If one fails, the others automatically absorb the load. In an active-passive setup, you have one active instance handling everything, and a passive standby that sits idle until a failure triggers a switch. Both are valid, but active-active offers better resource utilisation.

Finally, you must test your resilience. AWS provides a service called 'Chaos Engineering' or 'Fault Injection Simulator' (FIS) that lets you deliberately break your system in a controlled way to see if your recovery mechanisms work. The SAP-C02 exam expects you to know that you should regularly simulate failures, such as stopping an EC2 instance or blocking network traffic, to prove your architecture is resilient.

A multi-Region, multi-AZ architecture showing Route 53 failover, load balancers, Auto Scaling groups, and RDS Multi-AZ databases in two separate AWS Regions.

Walk-Through

1

Identify Single Points of Failure

Audit your current architecture to find any component whose failure would take down the entire system. This includes a single database server, one web server, or a network link. For the SAP-C02 exam, you must recognise that a single EC2 instance in one AZ is a classic SPOF.

2

Choose a Failure Domain Strategy

Decide whether you need multi-AZ (survive an AZ failure) or multi-Region (survive a full regional disaster). For most applications, start with multi-AZ. The exam expects you to estimate the cost and complexity trade-offs. Multi-AZ is cheaper; multi-Region is more complex but provides higher resilience.

3

Deploy Redundant Compute Resources

Set up an Auto Scaling group that launches EC2 instances in at least two different Availability Zones. Configure a minumum size of at least 2 to ensure base capacity. Place a target group behind an Elastic Load Balancer and attach it to the Auto Scaling group. This ensures traffic flows to healthy instances across AZs.

4

Implement a Highly Available Database Layer

For relational databases, use Amazon RDS Multi-AZ to automatically maintain a synchronous standby replica in a different AZ. For NoSQL databases like DynamoDB, enable global tables for cross-Region replication. Ensure the application uses a connection string pointing to the RDS endpoint or a database proxy like RDS Proxy for automatic failover handling.

5

Configure DNS Failover and Health Checks

Use Amazon Route 53 to create a failover routing policy. Set up a primary record pointing to your load balancer in Region A, and a secondary record pointing to Region B. Configure Route 53 health checks that ping your load balancer’s endpoint. When health checks fail, Route 53 automatically changes DNS to route traffic to the healthy Region.

What This Looks Like on the Job

Imagine you are a solutions architect at a company called 'ShopStream', an e-commerce platform that sells high-end sports equipment. ShopStream runs a popular website that handles thousands of orders per hour, especially when a new running shoe is released. Your CTO has just told you the system went down last Black Friday for an hour due to a database overload, costing the company millions in lost sales. Your job is to redesign the architecture to be resilient and highly available.

Step one: You look at the current setup. There is one web server, one application server, and one database — all running on a single large server machine (an EC2 instance) in one Availability Zone. This is a textbook single point of failure. You lead the project to move to a 'multi-AZ' architecture. You decide to use an Auto Scaling group: a group of EC2 instances that can grow or shrink based on demand. You configure it to launch at least two instances in two different Availability Zones. You place an Elastic Load Balancer in front of them. Now, if one AZ has a power issue, the ELB only sends traffic to the AZ that is still running.

Step two: You tackle the database. You migrate the relational database from a self-managed server to Amazon RDS. You enable Multi-AZ. This creates a primary database in one AZ and a standby replica in another AZ. RDS automatically replicates data to the standby. If the primary database suffers a hardware failure, RDS initiates a failover within about 60 seconds. The application's connection string points to the RDS endpoint, not a specific IP address, so the switch is seamless.

Step three: You think about the entire Region failing. What if an earthquake affects all three AZs in your primary Region? You need a disaster recovery (DR) plan. You set up a 'cross-Region' architecture. You use Route 53 with a 'failover' routing policy. Your primary DNS record points to your load balancer in the US East Region. Your secondary record points to a scaled-down copy of your environment in the US West Region. Route 53 health checks constantly monitor your primary endpoint. If the health checks fail (e.g., the whole US East Region becomes unreachable), Route 53 automatically changes the DNS records to send all traffic to US West.

Step four: You implement 'circuit breakers' and 'retries' in your application code. Your web application calls a 'payment processing' microservice. If that service is slow or erroring, the circuit breaker pattern stops the web server from repeatedly calling a failing service, reserving resources for other operations. The web server responds to the user with a 'Please try again' message instead of a spinning wheel that times out. This prevents 'cascading failure', where one slow service fills up queues and brings down everything.

Step five: You test the new architecture. Using AWS Fault Injection Simulator, you schedule a test during a low-traffic hour. You simulate stopping the primary database instance. You watch in a monitoring dashboard as the 'Secondary' flag in RDS turns green within 60 seconds. You run a test where you 'terminate' one EC2 instance in the Auto Scaling group. You observe that the load balancer immediately stops routing to it, and the Auto Scaling group launches a new instance to replace it. The website never goes down. You document every step and present the results to your team, showing a measurable improvement in uptime from 99% to 99.95%.

How SAP-C02 Actually Tests This

The SAP-C02 exam tests your understanding of resilience and high availability in several distinct ways. The exam loves scenario-based questions where you are given a business requirement (for example, 'The application must survive the loss of an entire Availability Zone') and you must choose the correct combination of AWS services. You need to memorise the specific AWS 'Service Level Agreements' (SLAs) and uptime claims. For example, you must know that Amazon S3 Standard is designed for 99.99% availability and 99.999999999% durability, while Amazon EBS volumes are replicated within an AZ, not across AZs automatically.

The most common trap in the exam is the 'single AZ' answer. The question will present a solution that looks correct but only deploys resources in one Availability Zone. The exam wants the multi-AZ answer every time. Another trap is confusing 'scalability' with 'high availability'. Scalability means your system can handle more load; high availability means it stays up despite failures. An Auto Scaling group provides both, but you must have instances in at least two AZs for it to provide high availability.

Key concepts you must memorise for the exam:

The difference between 'vertical scaling' (making one server bigger) and 'horizontal scaling' (adding more servers). The exam expects you to prefer horizontal scaling for high availability because if one of many servers fails, the others keep running.

'Stateless' vs 'Stateful' applications. A stateless application does not store user session data on the server itself; it stores it in a shared cache like ElastiCache or in a database. This allows any server to handle any user request, which is essential for load balancing and resilience. The exam will test you on requiring the application to be 'stateless' to work with an ELB.

'Health checks': The exam will ask how to configure health checks for your load balancer. A health check is a periodic request that tests if your server is responding correctly. You must configure the correct path (e.g., /health) and set appropriate thresholds. If a server fails three health checks, the load balancer marks it as unhealthy and stops sending traffic.

'Graceful shutdown' and 'connection draining': When you remove a server from service, you want it to finish processing its current requests before shutting down. Connection draining is a feature of the ELB that allows in-flight requests to complete before the server is fully removed.

'Multi-Region' architectures and 'Route 53 routing policies': You need to know 'Failover', 'Weighted', 'Geolocation', and 'Latency-based' routing policies. For high availability, 'Failover' is the simplest: a primary and a secondary record. For more advanced setups, you use 'Latency-based' to route users to the Region that gives them the best performance, while also using health checks for failover.

The exam also loves to test 'RTO' and 'RPO'. RTO (Recovery Time Objective) is how fast you need to recover — e.g., under 5 minutes. RPO (Recovery Point Objective) is how much data you can afford to lose — e.g., less than 1 minute of data. The solutions you choose must match the given RTO/RPO. For a very tight RTO (seconds), you need an active-active architecture with automated failover. For a looser RTO (hours), you might use a 'pilot light' or 'warm standby' disaster recovery strategy.

Finally, expect a question on 'Chaos Engineering' or 'Fault Injection' — the exam may describe a company that runs simulated failures to test resilience, and you must recognise this practice as a valid and recommended approach.

Key Takeaways

High availability requires eliminating every single point of failure by deploying resources across at least two Availability Zones inside a single AWS Region.

An Auto Scaling group only provides high availability when it is configured with a minimum of two instances spanning multiple Availability Zones.

A load balancer is a traffic distributor, not a guarantee of uptime; you must pair it with healthy, redundant targets to achieve fault tolerance.

Stateless application design (storing session data in an external cache like ElastiCache) is essential for allowing any server to handle any request, enabling effective load balancing and failover.

Disaster recovery requires a cross-Region strategy using Route 53 health checks and failover routing policies to redirect traffic when an entire Region becomes unavailable.

Regularly testing your resilience through chaos engineering or fault injection is a best practice that the SAP-C02 exam endorses and expects you to include in your design proposals.

Easy to Mix Up

These come up on the exam all the time. Here's how to tell them apart.

Multi-AZ Deployment

Spans multiple Availability Zones within a single AWS Region

Designed to survive an AZ-wide failure (e.g., power outage in one data centre)

Lower latency because resources remain in one geographic area

Multi-Region Deployment

Spans multiple AWS Regions in different geographic locations

Designed to survive a full regional disaster (e.g., earthquake, major flood)

Higher latency due to cross-continental data travel; adds complexity with data replication and DNS routing

Active-Passive Failover

One primary site handles all traffic; standby site sits idle

Failover is slower because you must promote the standby

Lower cost because you don't run full capacity in the passive site

Active-Active Failover

All sites handle traffic simultaneously

Failover is instant (no promotion needed); traffic simply redistributes

Higher cost because all sites run at full production capacity

Vertical Scaling (Scale Up)

Increases capacity of a single server (more CPU, RAM, disk)

Creates a larger single point of failure (failure affects more users)

Often limited by hardware max (instance size limits)

Horizontal Scaling (Scale Out)

Adds more servers to distribute the load

Eliminates a single point of failure (one server failing doesn't crash the system)

Effectively unlimited by adding more instances; preferred by cloud architects

Watch Out for These

Mistake

If I enable Auto Scaling, my application is automatically highly available.

Correct

Auto Scaling by itself does not guarantee high availability. You must also configure it to launch instances in multiple Availability Zones. If Auto Scaling is configured in only one AZ and that AZ fails, all instances die and no new ones can be launched. True HA requires a multi-AZ Auto Scaling group.

Beginners see 'auto' and assume it handles everything, including failure domain isolation. They don't realise that Auto Scaling just manages instance count; it does not by default spread instances across failure zones.

Mistake

A load balancer makes my system highly available.

Correct

A load balancer distributes traffic but does not itself prevent failure. If you have only one server behind the load balancer, that server is still a single point of failure. The load balancer only provides HA when combined with multiple healthy targets in multiple AZs. The load balancer itself is highly available if you deploy it in a multi-AZ setup, but it can't compensate for a single server.

People think of traffic management as synonymous with uptime. They don't grasp that the load balancer is just the router; the real reliability comes from redundant backends.

Mistake

Database replication across regions automatically provides high availability with no application changes.

Correct

Cross-region replication (e.g., Amazon RDS cross-Region read replicas) provides read-only copies. For HA, you need a mechanism to promote a replica to a primary, and the application must be configured to point to the new primary. This usually requires a separate orchestration step or database proxy. MySQL asynchronous replication also has a risk of data loss if a failure occurs during propagation.

The term 'replication' sounds automatic and complete. Beginners miss the nuance that write operations only happen on the primary, and promoting a replica is a manual or automated process that must be explicitly architected.

Mistake

Running two identical servers is enough for high availability.

Correct

Two servers are not enough if they are in the same Availability Zone. You need to place them in different AZs to survive an AZ failure. Even if they are in different AZs, you also need a load balancer to distribute traffic, health checks to detect failures, and Auto Scaling to replace failed instances. A static pair of servers leaves the risk that if one goes down, the other might be overwhelmed or become a bottleneck.

Simple redundancy (having two of something) is intuitive, but beginners overlook the architectural requirements around placement, traffic distribution, and automated recovery. They think 'two' equals 'safe' without considering the failure scenario.

Do You Actually Know This?

Reveal each answer, then mark whether you got it right. Score 60%+ to unlock the next chapter.

Frequently Asked Questions

What is the difference between high availability and fault tolerance?

High availability means your system stays up most of the time and recovers quickly from failures. Fault tolerance means your system continues operating without interruption even when a failure occurs. Fault tolerance is more expensive and stricter; high availability is usually sufficient for most applications.

Do I need at least three Availability Zones for high availability?

No, you only need two Availability Zones to survive a single AZ failure. AWS itself recommends using a minimum of two. Using three or more increases resilience further but is not required for basic high availability as defined by the exam.

Can a single load balancer be a single point of failure?

An Elastic Load Balancer itself is designed to be highly available when you configure it to span multiple Availability Zones. If you deploy it in only one AZ, it becomes a SPOF. You must always select at least two subnets in different AZs when creating the load balancer.

What is the difference between vertical scaling and horizontal scaling for high availability?

Vertical scaling makes a single server bigger (more CPU, RAM). It does not improve availability because that server remains a single point of failure. Horizontal scaling adds more servers, allowing you to survive the loss of one. The SAP-C02 exam strongly prefers horizontal scaling for HA.

Is storing session data in memory on the web server a problem for high availability?

Yes. If a user's session is stored on one server and that server fails, the user loses their session data. To be highly available, your application must be stateless: store session data in a shared external service like ElastiCache or DynamoDB, so any server can handle any request.

How often should I run failure simulation tests?

The exam expects you to run them regularly, ideally as part of your continuous delivery pipeline. Many organisations perform them quarterly or after major deployments. The exact frequency depends on your risk tolerance, but the exam promotes the philosophy of 'test your resilience, don't wait for a real disaster'.

Terms Worth Knowing

Keep going

You've finished Building Resilient and Highly Available Architectures. Continue through the SAP-C02 study guide to build a complete picture of the exam.

Done with this chapter?