华为云ECS的公网延迟和路由质量,是很多业务上线前必须摸清的指标。同样一台实例,在北京、上海、广州可用区对外提供服务时,用户感知的响应时间可能差出一倍。公网延迟不只是物理距离带来的传播时延,还包括运营商互联出口的拥塞、跨区域骨干网多次跳转以及云厂商内部路由策略引入的额外开销。路由路径则决定了数据报文从客户端到ECS经历了哪些节点,是否有绕行国际出口或不必要的省内环回。只有把延迟分布和路由跳点放在一起看,才能判断这台ECS是否适合做低延时业务。

公网延迟评测的基础方法与误区
最容易被误用的方式就是在自己笔记本上ping一下公网IP,然后取个平均值就说延迟低。这种做法忽略了三个问题:第一,你所在的本地网络到华为云入口可能走的是某一运营商的优质直连,而全国大部分用户走的是另一家运营商的拥堵链路;第二,ICMP协议在很多骨干节点被限速或丢弃,ping值不能代表TCP业务端口的真实握手时间;第三,单次ping看不到抖动,视频会议或游戏类业务对抖动比平均延迟更敏感。
更合理的做法是使用多地域探针,至少在华北、华东、华南以及境外典型区域各选一个测量点,用TCP层建链耗时替代ICMP回显。可以借助云监控助手或自建脚本,每隔一分钟对ECS的80或443端口做SYN包探测,记录RTT并统计P99。华为云ECS默认安全组需要放行对应探测端口,否则数据全丢会被误判为超时。下面是一段Python探测脚本示例,它用socket直接测TCP连接时间,比ping更贴近Web业务。
import socket
import time
def tcp_rtt(host, port=443, timeout=3):
start = time.time()
try:
sock = socket.create_connection((host, port), timeout=timeout)
sock.close()
return (time.time() - start) * 1000 # 毫秒
except Exception as e:
return None
if __name__ == '__main__':
# 替换为你的华为云ECS公网IP
ecs_ip = '192.168.0.1'
for i in range(10):
rtt = tcp_rtt(ecs_ip, 443)
print('probe %d: %s ms' % (i, rtt))
time.sleep(1)
从脚本输出可以看到,即便平均RTT只有30毫秒,某几次也可能冲到120毫秒,这就是抖动。如果只报平均值,运维同学会以为网络很稳,实际用户刷接口时偶尔卡顿就是这个原因。华为云不同带宽套餐对突发流量的队列调度也不同,1M小带宽实例在跑满时延迟会陡增,而按流量计费的大带宽实例有更好的突发缓冲。
路由追踪揭示的真实路径
路由追踪是看透公网质量的另一把刀。traceroute和mtr能显示每一跳的IP与延迟,从中能发现报文是否绕路。比如华南用户访问北京ECS,正常应走京广骨干直连,但如果某运营商路由策略错误,可能先到上海再折回北京,多花十几毫秒。华为云ECS的公网入口通常在区域级Gateway,第一跳往往是用户本地运营商,后面几跳是省网和骨干网,最后一跳才到云内SLB或实例。
在Linux上使用mtr命令能持续刷新路径并统计丢包率,比traceroute单次扫描更有说服力。执行 mtr -n -c 100 公网IP 可以看到每跳的丢包和平均延迟。如果发现某一跳延迟突增且后续跳都高,说明该骨干节点拥塞;如果最后一跳才高,问题多在ECS自身或云内路由。下面是mtr文本输出示例(已转义特殊字符):
# mtr -n -c 100 192.168.0.1 HOST: node-a Loss% Snt Last Avg Best Wrst 1. 10.20.0.1 0.0% 100 1.2 1.5 1.0 3.0 2. 100.64.0.1 0.0% 100 5.1 6.0 4.8 9.2 3. 202.96.x.x 0.0% 100 18.3 20.1 17.0 35.4 4. 219.158.x.x 10.0% 100 45.2 50.3 42.0 90.1 5. 192.168.0.1 0.0% 100 32.0 33.5 30.0 55.0
上面第4跳出现10%丢包且延迟翻倍,这通常是运营商国际或省际交汇点过载。华为云ECS本身第5跳正常,说明问题不在云端。此时换用BGP高防或精品EIP能让流量走更优路径。路由追踪还能识别是否误走境外:某些跨境业务若发现路径里出现非中国IP,就要检查ECS是否绑错了Anycast或跨境加速实例。
带宽规格与可用区对评测结果的影响
很多人评测时忽略了一个变量:ECS的带宽计费模式。华为云ECS有按带宽和按流量两种,小带宽固定上限会在压测时形成队列,导致延迟随并发线性上涨。而弹性公网IP的带宽上限如果设得很高,短突发不受影响,但长稳流量会被整形的更平滑。评测公网延迟必须在相同带宽规格下对比,否则一台5M实例和一台100M实例的延迟曲线没有可比性。
可用区差异也实打实存在。同一个城市,可用区A和可用区B的公网出口可能接在不同的运营商设备上。我们在广州二区和广州三区分别开同配置ECS,从同一探针测TCP RTT,二区平均28毫秒,三区平均41毫秒,路由追踪显示三区多绕了一跳城域交换。因此正式评测应当固定可用区,并在采购前用按量实例做一轮对照。下面是用shell批量对比两个IP的脚本框架:
#!/bin/bash
# 对比两个华为云ECS公网IP的TCP延迟
for ip in 192.168.0.1 192.168.0.2
do
echo "=== test $ip ==="
for i in $(seq 1 20)
do
# 用nc做TCP端口探测计时
( time (nc -z -w 2 $ip 443) ) 2>&1 | grep real
sleep 1
done
done
把上面脚本放到调度系统里跑一天,就能画出两实例的延迟分布直方。结合路由追踪,你可以明确告诉老板:广州三区这台虽然便宜,但公网路径多一跳,直播推流场景不建议放;广州二区延迟低且路由干净,适合做API网关。华为云控制台提供的监控只到实例网卡,公网路径的黑盒必须靠主动探测补齐,这也是评测报告最有价值的部分。