luckygood logo

新加坡直连线路白天晚上延迟差超30ms到底卡在哪一跳

StrataServer

晚上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:0038-52ms<0.1%8-10跳
工作日 20:00-23:0065-120ms0.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跑两组数据,确认你的线路晚高峰到底卡在第几跳,再决定要不要换。拖一周就是多一周的投诉和流失。

常见问题解答

01 mtr跑出来第7跳突然延迟翻倍,是不是新加坡机房的问题?

大概率不是。第7跳通常落在电信国际出口AS4134那一层,晚高峰排队导致Avg翻倍很正常。看StDev,那跳标准差超15ms,堵点在出口不在机房。

02 电信CN2 GIA和联通AS4837走新加坡回国,晚高峰表现差多少?

实测深圳出发,GIA晚高峰RTT约65ms丢包0.3%以内,AS4837能飙到110ms丢包2%上下。GIA走AS4809独立通道,4837晚高峰跟163共享出口抢带宽。

03 为什么ping值正常但业务端还是感觉卡?TCP层怎么查?

ping走ICMP优先级跟TCP不一样。用tcpdump抓SYN-ACK看三次握手耗时,ss -ti看RTT和cwnd,cwnd长期个位数就是被中间设备限速了。

04 新加坡直连和走日本中转回国,延迟差到底有多大?

物理上新加坡到深圳约2600km,日本东京到深圳约2900km。直连少两跳中转省10-15ms。但日本走NTT到电信peering有时比新加坡163还稳,得看具体AS-PATH。

05 晚高峰丢包2%左右,需要换线路还是调内核参数就行?

先mtr确认丢包集中在哪一跳。丢在出口那两跳,换CN2 GIA才有用,调内核救不了。丢在服务器本地网卡或机房内网,调ring buffer和net.core.rmem_max就够了。