这一周我干了一件让同事觉得我疯了的事——从三个不同机房各租了一台物理机,自己写脚本做了整整五天的压测,起因是上个月游戏用户突然涌入了一批香港和广东的玩家,原本跑在东京机房的服务器开始出现间歇性的跳ping和丢包,群里骂声一片,老板让我找方案,我第一个想到的就是香港物理机——毕竟地理位置摆在那里,离大陆近,理论上延迟最低。
但做我们这行的都知道,“近”不等于“好”,也不等于“便宜”,我干脆自己当一回小白鼠,把香港、新加坡、日本(东京)三台同样配置的物理机拉出来溜溜,机器配置统一:E5-2680v4,64G内存,1TB NVMe SSD,100Mbps独享带宽(香港那台选了CN2 GIA线路,贵了近一倍),价格方面:东京本地机房折合人民币约650元/月,新加坡约780元/月,香港物理机(带CN2)直接跳到1580元/月——光看价格就想把香港那台退了。
先测网络延迟,我用三台机器的iperf3互打,同时从一台位于上海阿里云ECS的测试机(模拟中国玩家)向三台机器发起ICMP ping,测试时间选在晚上8点(中国大陆晚高峰),连续跑72小时取平均值,结果是——香港物理机平均延迟28ms,最大抖动在±5ms以内;新加坡平均延迟78ms,抖动范围±15ms,偶尔跳到110ms;东京机器表现最差,平均延迟112ms,抖动超过±20ms,下午三点反而比晚高峰更慢,怀疑是国际海底光缆拥堵。
看到这个数据,我心凉了半截:香港确实快,但新加坡和东京也并非不能用,尤其对于非实时同步的RPG游戏,80ms以内的延迟其实能接受,不过游戏里还有帧同步的格斗玩法,那28ms和78ms就是天上地下的区别。

香港物理机实测,延迟低但价格高,做游戏后端到底值不值?
接着测丢包,上海测试机向三台机器连续发送100万个64字节ICMP包,香港丢包率0.02%,几乎可以忽略;新加坡丢包率0.17%,偶尔出现连续丢3个包的情况;东京丢包率高达0.89%,晚高峰时段甚至超过2%,做格斗游戏直接没法用,我怀疑东京那台走的是普通NTT线路,没有走BGP优化,去查机房路由表,发现香港那台切了CN2,所有去程都经过广州直连,回程也是AS4809,果然钱没白花。
但带宽才是真正的照妖镜,三台都是标称100Mbps独享,我用iperf3从上海测试机分别打满每个机器的上传和下载,香港物理机实测下载速度能跑到98Mbps,上传95Mbps,稳定得像教科书,新加坡下载92Mbps,上传85Mbps,但晚高峰时会降到70Mbps左右,东京机器最离谱,下载峰值只有78Mbps,上传不到60Mbps,怀疑是共享机房的带宽超售,而且对国际流量做了限速,我找了机房客服扯皮,对方承认“国际带宽为尽力服务”,说白了就是你要加钱买独立国际带宽,得再花300元/月。
之后跑应用层测试,我部署了一个简单的UDP回合制战斗服务器,模拟100个客户端同时连接,每个客户端每秒发送10个数据包,香港物理机能轻松扛住,CPU占用率不到40%,内存稳定在20G左右,新加坡那台CPU占用率稍高,但也能跑满,东京物理机在第300秒左右出现明显的收包缓存积压,CPU飙到75%,游戏内开始出现卡顿——不是对手太强,是服务器处理不过来。
再说一个容易被忽略的点:BGP互联质量,我写了个脚本统计三台机器跟中国大陆三大运营商(电信、联通、移动)的互联情况,香港物理机对电信延迟稳定在30ms以内,联通35ms,移动40ms,非常均衡,新加坡对电信最好(55ms),但联通用户经常绕路美国,延迟飙升到150ms+,东京机器更惨,移动用户几乎全程绕路新加坡,丢包率3%起步,所以如果你的用户里有大量联通或移动玩家,香港是唯一没有明显短板的选项。
价格呢?香港物理机1580元/月,相当于东京的2.4倍,新加坡的2倍,但你要考虑的是:在东京那台机器上达到同样的服务质量,需要额外购买国际BGP优化、增加带宽、甚至做多节点冗余,我算了一笔账:东京机器650元+300元优化国际带宽+100元额外购买直连线路(如果有的话),总价1050元,仍然比香港便宜500元,但延迟还是追不上香港,新加坡机器如果搭配CDN做静态资源加速,勉强能覆盖大陆用户,不过动态请求还是绕不开78ms的硬延迟。
最后的结论,说人话就是:如果你做的游戏主要面向中国大陆玩家,尤其是广东、福建、江浙沪这种对延迟敏感的地区,香港物理机是“买个省心”,贵是贵,但28ms的延迟和0.02%的丢包率,你拿其他任何机房都很难做到,除非你肯砸钱上多线BGP并且忍受复杂的网络配置,如果你的玩家基数很小,或者游戏类型对延迟不那么敏感(比如卡牌、放置类),那新加坡物理机配个CDN就足够,把省下的1000元预算拿去多买两台机器做负载均衡更划算,至于东京物理机——在日本本地用挺好,面向大陆用户就是给自己找麻烦。
我最后留了一台香港物理机专门处理格斗对战服,把日常逻辑服和数据库丢回了东京和新加坡,老板看到测试报告后没再催我,只是说了一句:“你下次直接说结论,别自己买三台机器折腾。”但我觉得,做技术的不折腾数据,到最后折腾的就是用户,值了。
发表评论