在搭建高可用架构时,把ECS实例分散部署到多个可用区是最常见的容灾手段。但不少人对跨可用区之后的网络性能心存疑虑:延迟会不会翻倍?带宽会不会被限制?数据库主从同步放在跨可用区是否可行?这些问题光靠官方文档的描述很难有直观感受,本文通过实际压测数据来回答。

跨可用区网络的基本概念
华为云的可用区(AZ,Availability Zone)是指同一区域内电力和网络互相独立的物理数据中心。同一个区域内的多个可用区之间通过低时延光缆互联,物理上隔离故障域,逻辑上又保持内网互通。这意味着两台不同可用区的ECS实例,不需要公网IP、不需要EIP,直接通过内网私有地址就能互相访问。
需要澄清一个常见误解:跨可用区通信走的不是公网,而是区域内部的骨干光纤网络。因此它的延迟和带宽表现,通常远好于跨区域或者走公网的场景,但相比同可用区内同宿主机或同机架的通信,物理距离更长,经过的转发设备更多,延迟会略高一些。理解了这一点,就明白跨可用区网络性能的优化空间主要在于架构部署和协议参数两个层面,而不是纠结线路本身。
测试环境与压测方法
本次测试选用华东-上海一区域的ECS实例,规格为c7.xlarge.2(4vCPU、8GB内存),镜像使用CentOS 7.9,分别在两个不同可用区各创建一台,确保两者位于同一VPC和同一安全组内,这样内网流量不会被安全组规则拦截。测试工具采用主流的iperf3测吞吐、ping和hping3测延迟抖动。
测试前先关闭防火墙并确认安全组放行相关端口,测试命令如下:
# 在服务端(AZ1)启动iperf3服务,默认监听5201端口 iperf3 -s # 在客户端(AZ2)测试TCP带宽,持续60秒,单线程 iperf3 -c 192.168.0.10 -t 60 # 多线程并发测试,8个并行流模拟高并发场景 iperf3 -c 192.168.0.10 -t 60 -P 8 # 测试UDP小包性能,观察丢包率 iperf3 -c 192.168.0.10 -u -b 500M -t 60 # 延迟测试,每0.2秒发一个包,共500个 ping -i 0.2 -c 500 192.168.0.10
为了保证数据可靠,每组测试都执行三次取平均值,同时观察vmstat和sar的输出,确认CPU没有成为瓶颈。如果压测时CPU已经跑满,得到的带宽数据就不能反映网络的真实能力,这一点在高性能网卡场景尤其重要,必要时可以开启多队列网卡并把中断打散到不同CPU上。
实测结果与数据分析
从实测数据来看,同可用区内两台实例的ping延迟大约在0.1毫秒左右,而跨可用区的延迟在1毫秒到2毫秒之间浮动,具体数值取决于两个可用区之间的物理距离和当时的链路负载。抖动方面,跨可用区偶尔会出现零点几毫秒的波动,丢包率在正常时段基本为0,高峰期可能略有个位数丢包,但TCP会自动重传,对上层业务影响很小。
带宽方面,单线程TCP测试两者都能跑满实例规格对应的内网带宽上限,说明跨可用区链路本身并没有额外的带宽限制,瓶颈通常在实例规格而不是线路。多线程并发时吞吐曲线稳定,没有出现明显的速率塌陷。简单整理成下表:
| 测试项 | 同可用区 | 跨可用区 |
|---|---|---|
| 平均延迟 | 约0.1ms | 约1-2ms |
| 抖动 | 极小 | 零点几ms |
| TCP带宽 | 跑满规格上限 | 跑满规格上限 |
| UDP丢包率 | 约0% | 接近0% |
这样的数据对绝大多数业务意味着什么?对于Web服务、API调用、缓存访问这类请求响应型业务,1毫秒级的额外延迟几乎无感;对于数据库主从复制、Redis跨AZ哨兵部署,也完全在可接受范围内;只有对延迟极度敏感的场景,比如高频交易的撮合链路,才需要认真评估跨可用区带来的这1毫秒成本。
延迟优化与部署建议
第一个建议是合理规划可用区分布。如果业务的可用性要求是防止单机房故障,那么跨AZ部署是值得的;如果只是普通应用,把有频繁内网调用关系的服务放在同一个可用区,可以把延迟压到最低,再通过负载均衡把流量分发到不同AZ的入口。也就是说,入口跨AZ,内部调用尽量同AZ,是兼顾容灾和性能的常见折中方案。
第二个层面是协议参数调优。跨可用区延迟增大后,TCP的窗口参数会影响单连接吞吐,可以适当调大缓冲区:
# 临时调大TCP读写缓冲区,单位字节 sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216 sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216" sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
调优后可以再次用iperf3验证单线程吞吐是否有提升。对于数据库同步这类长连接大流量场景,还建议开启网卡多队列、合理设置MTU。如果VPC内没有特殊需求,可以尝试使用支持巨帧的配置,更大的MTU能减少包处理次数,降低CPU占用,但要注意链路上所有设备必须支持相同MTU,否则会出现分片或丢包。
最后一点是监控层面的建议。跨可用区链路虽然稳定,但建议对关键链路配置持续的延迟拨测,华为云的云监控服务或者自建脚本都可以实现。一旦发现延迟或丢包异常升高,能够快速定位是链路问题还是实例负载问题,避免排查时的盲目扩容。
总结
综合实测结果,华为云ECS跨可用区网络在带宽上与同可用区没有区别,延迟增加约1毫秒左右,对绝大多数业务场景不构成瓶颈。设计高可用架构时,可以放心采用跨可用区部署来提升容灾能力,同时通过入口跨AZ、内部调用同AZ的布局策略,以及TCP缓冲区等参数调优,把跨可用区的性能开销控制在最小范围内。