Designing an application for high availability in Azure is not simply a matter of deploying multiple virtual machines.
A workload can have several instances and still fail when an entire part of the underlying infrastructure becomes unavailable.
Azure Availability Zones are designed to reduce this risk by placing workloads across physically separate locations within an Azure region. If one zone experiences an infrastructure failure, workloads in another zone can continue operating.
That sounds simple, but a practical architecture question remains:
How many Availability Zones should an application use?
For some workloads, two zones may provide an acceptable balance between resilience, cost, and operational complexity. For other workloads, three zones can provide a significantly stronger failure model.
The answer depends on the application's availability requirements, Azure service support, workload architecture, recovery objectives, and the failure scenarios the organization wants to tolerate.
This article explains how to evaluate two-zone and three-zone architectures and when each approach makes sense.
What Are Azure Availability Zones?
An Azure region can contain multiple physically separate Availability Zones.
Each zone is designed to have independent:
Power
Cooling
Networking
Physical infrastructure
A simplified architecture looks like this:
Azure Region
|
+-- Availability Zone 1
| |
| +-- Application instances
|
+-- Availability Zone 2
| |
| +-- Application instances
|
+-- Availability Zone 3
|
+-- Application instances
The purpose is to prevent a localized infrastructure failure from taking down the entire application.
Availability Zones are different from simply creating multiple virtual machines in the same zone.
Same Zone Versus Multiple Zones
Consider this architecture:
Azure Region
|
Availability Zone 1
|
+----------+----------+
| | |
VM1 VM2 VM3
There are multiple application instances, but they share the same zone.
If that zone becomes unavailable, all three instances can become unavailable together.
A zone-redundant design looks different:
Azure Region
|
+--------------+--------------+
| | |
Zone 1 Zone 2 Zone 3
| | |
VM1 VM2 VM3
Now the application has geographic separation within the region.
Why Two Zones Can Be Enough
A two-zone architecture can provide meaningful resilience for many workloads.
For example:
Load Balancer
|
+---------+---------+
| |
Zone 1 Zone 2
| |
App VM App VM
If Zone 1 becomes unavailable:
Zone 1
X
|
v
Zone 2
|
v
Application continues
This can be sufficient when the application can tolerate losing half of its compute capacity.
Two zones may be a reasonable choice when:
The workload is relatively small.
Cost is an important constraint.
The application can tolerate reduced capacity during a zone failure.
The Azure services used by the application support the required two-zone design.
The business availability requirement does not justify the additional redundancy.
The application can scale remaining capacity quickly.
The Capacity Problem With Two Zones
The main weakness of a two-zone design becomes obvious when one zone fails.
Suppose an application requires:
100 units of capacity
and distributes capacity equally:
Zone 1 = 50
Zone 2 = 50
If Zone 1 fails:
Available capacity = 50
Required capacity = 100
The application is now operating at 50% of its normal capacity.
If the remaining zone cannot scale quickly enough, users may experience:
Increased latency
Request failures
Queue growth
Timeouts
Reduced throughput
Therefore, simply distributing workloads across two zones does not guarantee that the application can maintain full performance after a zone failure.
Three Zones Provide More Failure Tolerance
A three-zone design provides another placement option:
Load Balancer
|
+---------------+---------------+
| | |
Zone 1 Zone 2 Zone 3
| | |
App App App
If one zone fails:
Zone 1
X
Zone 2 Zone 3
| |
App App
Two zones remain available.
This can make capacity planning easier because the application does not lose half of its infrastructure.
For example, if capacity is distributed evenly:
Zone 1 = 34
Zone 2 = 33
Zone 3 = 33
After losing Zone 1:
Remaining = 66
The workload still loses approximately one-third of its capacity rather than one-half.
Three Zones Do Not Automatically Mean Higher Availability
It is tempting to assume:
3 zones > 2 zones
therefore:
3 zones = better architecture
That conclusion is incomplete.
An application can still fail even when compute resources span three zones.
For example:
Zone 1 ----+
Zone 2 ----+---- Single Database
Zone 3 ----+
If the database becomes unavailable, the application can still fail.
Other shared dependencies can create the same problem:
Zone 1 ----+
Zone 2 ----+---- Single External Dependency
Zone 3 ----+
True zone resilience requires examining the entire dependency chain.
The Dependency Chain
A useful architecture model is:
Internet
|
v
DNS
|
v
Load Balancer
|
v
Application
|
+---- Database
|
+---- Cache
|
+---- Storage
|
+---- Messaging
|
+---- External APIs
For each dependency, ask:
Can this component survive the loss of one Availability Zone?
If the answer is no, the application may still have a single-zone failure point.
Database Resilience
The database is often the most important dependency to evaluate.
Consider:
Zone 1 Zone 2 Zone 3
| | |
+-------------+-------------+
|
Database
Even if the application tier spans three zones, the database architecture may determine the actual availability of the entire system.
Database services should therefore be evaluated separately for:
Zone redundancy
Replication
Failover behavior
Recovery time
Recovery point
Supported Azure region architecture
Do not assume that a zone-distributed application automatically has a zone-resilient data layer.
Stateless Applications Are Easier to Distribute
Stateless applications are generally easier to spread across zones.
For example:
Load Balancer
|
+---- Zone 1 → App
|
+---- Zone 2 → App
|
+---- Zone 3 → App
Any healthy instance can process a request.
Stateful applications are more complicated.
If session state exists only on one server:
User
|
v
Zone 1
|
Session State
a zone failure can cause the user's session to disappear.
A more resilient architecture externalizes state:
Application Instances
|
v
Shared State Store
|
+---- Zone 1
+---- Zone 2
+---- Zone 3
The specific state service must itself have an appropriate resilience design.
Load Balancing Matters
A zone-resilient application needs traffic distribution that can continue operating when a zone becomes unavailable.
Conceptually:
Load Balancer
/ | \
/ | \
Zone 1 Zone 2 Zone 3
If Zone 2 fails:
Load Balancer
/ \
/ \
Zone 1 Zone 3
Traffic should stop being sent to unhealthy instances.
Health probes are therefore an important part of the architecture.
Capacity Planning for Zone Failure
Capacity planning should not be based only on normal traffic.
Calculate capacity under failure conditions.
Suppose:
Normal traffic = 10,000 requests/second
Three zones handle:
Zone 1 = 3,333
Zone 2 = 3,333
Zone 3 = 3,334
If Zone 1 fails:
Join the conversation! Your thoughts help the community grow.