"你的服务器放在几个可用区?"这个问题经常出现在架构评审里。很多刚上云的人一脸茫然:我买的云服务器不就在那儿跑着吗,还分什么区?直到机房出一次故障、整个区域网络抖一下,才发现把所有机器放在同一个可用区,等于把所有鸡蛋放在一个篮子里。
这篇文章讲清楚可用区(AZ)的概念,跨可用区部署到底能带来什么价值,它会带来多少额外的延迟和流量成本,有哪几种典型的容灾架构,以及跨可用区和跨地域(Region)的区别。最后给出一个成本与收益的权衡框架,帮你决定自己的业务要不要跨 AZ 部署。
一、可用区是什么
一个地域(Region)是一个地理区域,比如华北、华东、华南各是一个地域。每个地域下有多个可用区(Availability Zone,AZ)。
一个可用区通常是一个(或一组)物理机房,拥有独立的电力、制冷、网络设施。同一地域内的多个可用区之间,物理位置相隔一定距离(通常几公里到几十公里),通过低延迟专用网络互联。这个设计的目的就是:一个可用区发生故障(断电、火灾、水淹、网络设备故障),其他可用区不受影响。
所以,可用区是云平台提供的"故障隔离单元"。你可以把可用区理解成"同一个城市里几个独立的机房",它们之间网络延迟低(通常个位数毫秒),但故障互不影响。
地域和可用区的关系是:地域是更大的地理概念,可用区是地域内部的故障隔离单元。一个地域内的多个可用区通过高速网络互联;不同地域之间则隔着上千公里,延迟高、通常需要专门的跨地域网络产品才能打通。
二、跨可用区部署的好处
最核心的好处是容灾与高可用。具体体现在几个方面:
抗单机房故障。 如果一个可用区的机房断电或网络中断,只部署在该可用区的服务会全部不可用。跨可用区部署时,另一个可用区的实例还在运行,服务不中断(前提是做了负载均衡和数据复制)。
提升可用性等级。 单可用区部署的服务,可用性受限于该可用区的稳定性。跨可用区后,即使单个可用区可用性有波动,整体服务的可用性会提升。云平台通常对外承诺的可用性指标也是基于多可用区架构衡量的。
支持滚动维护。 云平台对单个可用区做硬件维护、升级时,跨可用区部署能保证服务不中断——一个区在维护,另一个区继续服务。
就近容灾。 同地域内跨可用区切换的速度快、延迟低,RTO(恢复时间目标)能做到很低,适合对中断敏感的在线业务。
三、代价:延迟、流量费用与复杂度
跨可用区不是免费的,它有明确的成本。理解这些成本才能做理性决策。
网络延迟增加。 同一可用区内的实例通信延迟最低(亚毫秒级到 1 毫秒级);跨可用区通信延迟会增加到几毫秒(同地域内,通常 1 到 3 毫秒,视地域和平台而定,属经验值)。对于绝大多数 Web 业务,这个延迟可以忽略;但对于高频交易、极致低延迟的场景,跨 AZ 通信的额外延迟需要考虑。
跨可用区流量费用。 这是最容易被忽略的成本。多数云平台对同一可用区内的实例间流量免费,但跨可用区的流量计费(进出方向可能都计费)。如果你的应用实例和数据库在不同可用区,每天的通信量很大,流量费会持续累积。这是跨 AZ 架构主要的隐性成本。
架构复杂度上升。 跨可用区意味着要做数据复制(数据库主从、缓存同步、存储复制)、要保证两个区都有容量、要处理"一个区故障时如何切换"的逻辑。运维和测试的复杂度都增加。
容量与配额。 要在每个可用区都预留足够容量,意味着总体资源用量增加。如果两个区都按峰值配置,成本可能接近单区的两倍。
| 维度 | 单可用区 | 跨可用区 |
|---|---|---|
| 抗机房故障 | 否 | 是 |
| 网络延迟 | 最低 | 略高(同地域内,几毫秒) |
| 跨区流量费 | 无 | 计费,需关注 |
| 架构复杂度 | 低 | 高(需数据复制、切换) |
| 资源成本 | 单份 | 通常需要多份容量 |
| 适用场景 | 测试、非核心、单点可容忍 | 核心在线业务、要求高可用 |
四、典型容灾架构
跨可用区部署有几种常见架构,从简单到复杂。
主备(Active-Standby)。一个可用区跑主实例,另一个区跑备实例,平时只有主在服务。主故障时切换到备。优点是成本相对低(备可以配置小一点或按需启动),缺点是备平时闲置,且切换有时间(需要检测故障、提升备、切换流量)。适合对资源成本敏感、能接受短暂中断的场景。
双活(Active-Active)/ 多活。两个可用区都跑服务,负载均衡把流量同时分发到两个区,两边都在处理请求。任一区故障,另一区自动接管全部流量。优点是切换几乎无感(负载均衡健康检查自动摘除故障区)、资源利用率高、能同时利用两区算力。缺点是两个区都要有足够容量,成本较高。这是核心在线业务的主流选择。
同城多活 + 异地灾备。在同一个地域内做双活,同时在另一个地域保留一份灾备。同城双活应对机房级故障,异地灾备应对城市级灾难。这是金融级的高可用架构,成本也最高。
数据层面,跨可用区部署必须解决数据同步问题:
- 数据库:主库在一个区,从库在另一个区,做异步或半同步复制。异步复制延迟低但可能丢少量数据,半同步更安全但延迟略高。
- 缓存:Redis 等做跨 AZ 集群,保证一个区故障时缓存不丢(或至少能快速恢复)。
- 对象存储:主流云的对象存储通常天然多副本、跨可用区,无需额外配置。
- 共享存储:块存储一般绑定单个可用区,跨 AZ 需要做数据复制或用支持多 AZ 的分布式存储。
| 架构 | 资源成本 | 切换速度 | 资源利用率 | 适用 |
|---|---|---|---|---|
| 主备 | 低(备可小配) | 较慢(需检测+提升) | 低(备闲置) | 成本敏感、能容忍短中断 |
| 双活 | 高(双份容量) | 快(自动摘除) | 高 | 核心在线业务 |
| 同城双活+异地灾备 | 最高 | 快(同城)+ 较慢(异地) | 高 | 金融级高可用 |
五、跨可用区 vs 跨地域
这两个概念经常被混淆,需要明确区分。
| 对比项 | 跨可用区(同地域) | 跨地域 |
|---|---|---|
| 物理距离 | 几公里到几十公里 | 数百到数千公里 |
| 网络延迟 | 低(几毫秒) | 高(几十毫秒以上) |
| 网络连通 | 内网天然互通 | 通常需跨地域网络产品 |
| 流量费 | 计费但相对低 | 计费、更高 |
| 抗灾范围 | 抗单机房/单 AZ 故障 | 抗城市级/区域级灾难 |
| 典型用途 | 高可用、负载均衡 | 就近服务、异地灾备 |
简单说:跨可用区解决"高可用",抗的是机房级故障;跨地域解决"异地容灾 + 就近访问",抗的是区域级灾难,同时能降低远端用户访问延迟。
一个理性架构通常是:核心业务同城跨可用区双活(保证高可用),关键数据跨地域备份(保证灾难恢复)。两者不是二选一,而是分层防御。
六、成本分析
跨可用区部署的成本要从几方面算。
固定成本增加。双活架构下,两个区都要按能承载全部流量的容量来配置,相当于算力和存储成本接近翻倍。如果只在主区配置足量、备区配置小容量,成本低但切换时可能扛不住,要权衡。
跨区流量费。统计应用和数据库之间的跨 AZ 通信量。如果每天几十 GB、几百 GB,乘以单价,一个月下来是笔不小的开支。优化办法是把通信密集的组件放在同一可用区(比如应用和它的本地缓存、应用和它的读写库),只把真正需要冗余的跨 AZ 部署。
带宽成本。跨 AZ 复制数据(数据库同步、备份复制)会消耗带宽,量大的话也要计入成本。
运维与人力成本。多 AZ 架构的复杂度更高,需要更专业的运维能力和更多的测试投入。
收益侧,跨 AZ 减少的停机损失往往远超这些成本。一次几小时的机房故障导致的业务中断、用户流失、品牌损失,可能抵得上几年的跨 AZ 成本。所以对核心业务,跨 AZ 是"该花的钱";对非核心业务(内部工具、测试环境),则不必强求。
是否跨 AZ 的判断标准,可以归纳成一张表:
| 业务类型 | 是否跨 AZ | 理由 |
|---|---|---|
| 核心交易/在线业务 | 必须 | 单点故障不可接受 |
| 一般对外 Web 服务 | 建议 | 停机影响用户与营收 |
| 内部管理系统 | 可选 | 停机影响有限,可接受短中断 |
| 测试/开发环境 | 不必 | 成本优先,可用性要求低 |
| 批处理/离线任务 | 可重跑则不必 | 失败可重试,非实时 |
七、实操要点
跨可用区部署落地时,有几个具体做法。
负载均衡跨 AZ 分发。 创建负载均衡时选择多个可用区,让它把流量分发到两个区的实例。健康检查会自动摘除故障区的实例,实现自动切换。
实例均衡分布。 用伸缩组时,配置多个可用区,让实例均匀分布,避免某个区实例过少导致故障时容量不足。伸缩组的"均衡分布策略"就是干这个的。
数据库多可用区。 托管数据库通常支持多可用区部署(主备在不同 AZ,自动故障切换)。自建数据库则要自己配主从复制和故障切换(如用 keepalived + 主从、或 MHA、Orchestrator 等工具)。
验证故障切换。 跨 AZ 的价值只有在真的切换时才能体现。定期做故障演练:手动下线一个区的实例,观察服务是否无感切换。没演练过的架构,真出事时不一定管用。
# 演练前先确认当前实例分布与健康状态(示例思路)
# 查看负载均衡后端实例及其所在可用区、健康状态(各平台命令不同)
# elb show-backends --lb-id lb-xxxx
# 演练:从负载均衡摘除一个区的后端,观察服务可用性
# 观察服务端响应、错误率、延迟,确认另一个区能承接
# 演练选在业务低峰期,并准备好一键恢复手段
常见问题
Q:跨可用区部署会增加多少延迟?
同地域内跨 AZ 的网络延迟通常在 1 到 3 毫秒(经验值,视地域和平台而定)。对绝大多数 Web 应用影响可忽略;对极致低延迟场景需要评估。
Q:跨可用区流量收费吗?
多数平台对同地域内跨可用区流量计费(同可用区内流量通常免费)。具体以所用平台的计费规则为准。跨 AZ 通信量大时,这笔费用需要提前估算。
Q:小网站有必要跨可用区吗?
如果可用性要求不高、成本敏感,单可用区也可以,但要接受机房故障时停机的风险。折中做法是把数据做好异地备份,出现故障时能快速在另一个区重建。
Q:跨可用区就等于高可用了吗?
不等于。跨 AZ 只是提供了基础设施层面的隔离,还需要正确的负载均衡、数据复制、健康检查和故障切换逻辑,才能真正高可用。配了跨 AZ 但数据没同步、切换没验证,照样会挂。
Q:跨可用区和跨地域哪个更重要?
看你要防什么。防机房故障用跨 AZ,防城市级灾难和改善远端访问用跨地域。核心业务通常两者都要,分层次建设。
总结
可用区是同地域内的故障隔离单元,跨可用区部署的核心价值是容灾与高可用。
- 好处:抗单机房故障、提升可用性、支持滚动维护、切换快。
- 代价:略有延迟增加、跨 AZ 流量计费、架构复杂度上升、资源成本通常翻倍。
- 架构上,主备成本低但切换慢、利用率低;双活成本高但切换快、利用率高,核心业务优先双活。
- 跨可用区抗机房故障(高可用),跨地域抗区域灾难并就近服务(异地容灾),两者分层使用。
- 成本要算总账:跨 AZ 的固定和流量成本,对比一次停机的损失,核心业务该花就花,非核心业务可以不强求。
最后一句:跨 AZ 不是"配了就高可用",它需要负载均衡、数据复制、健康检查和故障演练一整套配合。没演练过的跨 AZ,只是心理安慰。
企业QQ咨询




