晚上9点,业务群又炸了。客服说用户反馈页面加载慢,后台一看,新加坡机房的ping值从白天的42ms直接干到了95ms。你重启了nginx,没用。换了DNS,还是没用。因为压根不是服务器的事——是回国那条路在晚高峰被挤爆了。
新加坡到中国大陆的物理距离摆在那,光纤跑一圈最快也得35ms上下。白天国际出口空闲,你的包顺着新加坡直连线路8到10跳就能落地。但一到晚上8点,几千万人同时刷视频、拉数据,电信国际出口的带宽池子直接见底。你的包被塞进QoS队列的末尾干等,RTT一下子多出40到60ms,太正常了。
白天晚上延迟差到底从哪来的
很多人一看到延迟飙高就怀疑机房在搞鬼(不是)。实际上晚高峰延迟跳变,90%的情况跟机房本身没关系。真正在作妖的是中间那几跳:
- 电信国际出口(AS4134)晚高峰利用率能到85%以上,包到了这儿就开始排队,BGP路由表里下一跳的AS-PATH没变,但实际转发延迟已经翻倍了
- 部分线路在晚高峰会走ECMP等价多路径,白天走的那条捷径晚上被分流到另一条绕远的路上,跳数从9跳到13跳,每多一跳多3到5ms
- 运营商骨干网内部的QoS策略,晚高峰给视频流量加了权重,你这种小流量HTTP包优先级被往后排(对,就是这么现实)
想确认到底卡在哪一跳,别光ping,得用MTR(My Traceroute)跑采样。白天一次、晚高峰一次,对比着看:
# 晚高峰 20:00-23:00 跑100次采样
mtr -r -c 100 -n --report-wide 203.0.113.10 | tee sg_night_$(date +%H%M).log
白天 10:00-16:00 再跑一次
mtr -r -c 100 -n --report-wide 203.0.113.10 | tee sg_day_$(date +%H%M).log
对比两份log,重点看第7-10跳的Avg和StDev
diff sg_day_*.log sg_night_*.log
StDev(标准差)超过15ms的那一跳,就是排队最狠的位置。别只盯着末尾那跳的总数看,中间哪一跳突然多了20ms,那才是真正堵你的地方。
三个时段实测数据摆这儿
以下数据来自深圳电信、上海联通两个测试点,目标IP为新加坡Equinix SG1机房内的CN2 GIA回程段,连续跑了两周取的均值:
| 时段 | 平均RTT | 丢包率 | 路由跳数 | 出口拥堵概率 |
|---|---|---|---|---|
| 工作日 10:00-16:00 | 38-52ms | <0.1% | 8-10跳 | 低 |
| 工作日 20:00-23:00 | 65-120ms | 0.5-2.5% | 11-15跳 | 高 |
| 周末及节假日全天 | 45-70ms | <0.3% | 9-12跳 | 中 |
(深圳电信走CN2 GIA回程的话,晚高峰RTT能压在65ms左右;要是走普通163骨干,直接奔着120ms去了。这中间的落差,就是线路等级带来的。普通线路晚高峰从50ms飙到200ms的事,圈里见得太多了。)
这几种情况别碰直连线路
不是所有业务都适合上新加坡直连回国,以下情况硬上纯属烧钱:
- 用户全在东南亚本地(新马泰印尼),根本不需要回国路由,买个本地BGP多线就够了,直连回国的带宽费白交
- 做实时交易、量化跑单这类对延迟要求在5ms以内的业务——新加坡到大陆物理距离3000多公里,光速跑一圈也得35ms起步,这个没法用线路等级来弥补
- 日UV不到500的小站或者内部测试环境,共享主机或者轻量VPS完全够用,直连线路的月租够你买三台轻量了
- 业务需要大陆ICP备案合规的,新加坡服务器解决不了这个问题,该备案还是得备案,跟线路没关系
如果你的业务确实是面向大陆用户、晚高峰流量占比超过40%,那选线路的时候盯紧两个东西:一是回程是不是真CN2 GIA(AS4809),二是服务商有没有在晚高峰做过实际的MTR采样报告。像StrataServer这类主打新加坡回国线路的服务商,会在交付时提供三网晚高峰的mtr日志,拿到手自己对着跳数验一遍,比听销售吹半天管用。
作者简介
贺鸣川,前深圳某跨境SaaS公司NOC运维,干了8年新加坡到大陆网络通路维护,经手过3次电信国际出口大规模拥堵的应急切换。现在自由职业,给几家做东南亚市场的公司当兼职技术外脑,日常就是对着mtr日志和BGP路由表找堵点。
线路选错了,晚高峰每天卡3个小时,用户投诉堆到客服扛不住。先拿mtr跑两组数据,确认你的线路晚高峰到底卡在第几跳,再决定要不要换。拖一周就是多一周的投诉和流失。