为什么香港CDN会比美国CDN慢

CDN,也就是内容分发服务,可以为你的网站在某个位置建立一个分站,其内容与你的原始站点相同。同时,这些分站还能保存你原有的一些静态资源,如JS、CSS、图片,让你的网站访问更快。有时CDN还能优化某两地之间的网络状况。

比方说,我的网站在B地,我(以及我的访客)在A地,从A地到B地的宽带需要经过C地,但是C地的宽带质量不好。这时,我Ping我的网站,就会出现不同程度的丢包,一旦数据包丢失,客户端只能等待一段时间,见服务器无响应,再次发包,会导致网站打开速度变慢。而此时,我使用了D地的CDN,此时CDN就会绕过宽带不好的C地,丢包率明显降低,就可以提高网站的速度。

A---->C(X)-->B 这种走法就会丢包
|            |
+---->D------+ 这样绕过C地就能明显加速

但是有时CDN会适得其反,比如原先访问网站经过D,开启CDN后经过C,就会导致减速。再举个极端的例子,比如我的网站在美国东海岸,我在西海岸,此时我的CDN却偏偏让我从东海岸、亚洲、欧洲、西海岸这样绕一圈,就会导致减速。所以,选择CDN,不能只看CDN位置,还要看CDN到你原始网站和到你的路径。之前我的博客使用安全宝CDN的时候,分配到美国洛杉矶的ChinaCache节点,毕竟是中国人选的机房,速度非常给力(在美国服务器中),ping 一下子从250ms降到150ms。但是后来,我放弃安全宝DNS,将DNS解析商换成DNSPod,并重新做了CNAME解析,这时安全宝就给我分配了香港新世界节点。从理论上来说,距离近了,速度也会快。但是我反而觉得速度变慢了。以前我按刷新,Chrome的小圆圈转1/8圈就能开始加载,现在却要转上1/2圈,甚至有转个3圈停不下来的。我马上就觉得我遇到了适得其反的那种情况。

为了确定我的猜想,最好的方法就是Tracert路由追踪。Tracert可以跟踪你的数据包一路上的所有节点,从而帮助你判断你的数据包的传输情况。但是我手头上没有香港节点的VPS之类的东西,所以我就用了WebKaka。

WebKaka可以给你的网站提供测速服务,还可以在线ping和tracert。我现在暂时给国外的用户解析了Incapsula CDN(国内还是安全宝),Incapsula CDN根据我估计有美国西海岸、美国东海岸、以色列(?)3个节点,所以我在WebKaka里对应选择了美国加州HE、洛杉矶BN和香港新世界,向我的源站IP发起Tracert。不一会儿,Tracert完成。

路由起z:71 ms    平均响应时间: 43 ms

路由起点:香港新世界            路由终点:美国            节点上限:30个
节点    IP地址    DNS名称    位置    响应时间
1    59.188.196.193        香港 新世界电讯    0 ms
2    58.64.160.241        香港 新世界电讯数据中心    4 ms
3    113.10.230.177        香港 新世界电信    0 ms
4    113.10.229.97    irb8.10g-tc1.wpc.nwtgigalink.com    香港 新世界电信    5 ms
5    113.10.229.178    ae2.10g-pp1.wpc.nwtgigalink.com    香港 新世界电信    1 ms
6    195.22.223.145    ge0-5-2-2.hongkong1.hok.seabone.net    意大利    3 ms
7    195.22.223.163    xe-11-0-1.singapore2.sin.seabone.net    意大利    32 ms
8    195.22.218.232    te0-14-1-0.palermo17.pal.seabone.net    意大利    435 ms
9    195.22.196.100    pos0-2-0-0.milano50.mil.seabone.net    意大利    457 ms
10    195.22.211.114    xe-2-1-1.franco31.fra.seabone.net    意大利    441 ms
11    213.248.68.189    ffm-b12-link.telia.net    瑞典 Teliasonera电信公司    481 ms
12    213.155.135.14    ffm-bb2-link.telia.net    英国 Teliasonera公司    480 ms
13    213.155.135.59    ash-bb4-link.telia.net    英国 Teliasonera公司    479 ms
14    213.155.132.179    cha-b1-link.telia.net    英国 Teliasonera公司    490 ms
15    213.248.68.138    giglinx-ic-156088-cha-b1.c.telia.net    瑞典 Teliasonera电信公司    490 ms
16    Request TimeOut             *
17    208.69.231.10    ashv1.main-hosting.com    美国    513 ms
18    31.170.166.141    31-170-166-141.main-hosting.com    美国    478 ms
总共响应时间:4789 ms    最长响应时间:513 ms    平均响应时间: 266 ms

路由起点:美国洛杉矶BN            路由终点:美国            节点上限:30个
节点    IP地址    DNS名称    位置    响应时间
1    184.82.255.233    184-82-255-233.static.hostnoc.net    美国 BurstNET网络公司    2 ms
2    64.120.246.77    ec0-60.gwy02.laca02.hostnoc.net    美国 BurstNET网络公司    0 ms
3    64.120.243.137    xe0-02.gwy01.laca02.hostnoc.net    美国 BurstNET网络公司    0 ms
4    38.104.83.53    te0-0-0-10.ccr22.lax04.atlas.cogentco.com    美国 华盛顿哥伦比亚特区Cogent通信公司    0 ms
5    154.54.88.18    te0-0-0-4.ccr22.lax01.atlas.cogentco.com    美国 华盛顿哥伦比亚特区Cogent通信公司    1 ms
6    154.54.5.193    te0-0-0-5.ccr22.iah01.atlas.cogentco.com    美国 华盛顿哥伦比亚特区Cogent通信公司    37 ms
7    154.54.7.237    te0-1-0-6.ccr22.atl01.atlas.cogentco.com    美国 华盛顿哥伦比亚特区Cogent通信公司    52 ms
8    154.54.6.122    te0-6-0-1.ccr21.atl04.atlas.cogentco.com    美国 华盛顿哥伦比亚特区Cogent通信公司    51 ms
9    38.122.47.6        美国 华盛顿哥伦比亚特区Cogent通信公司    55 ms
10    Request TimeOut             *
11    Request TimeOut             *
12    Request TimeOut             *
13    75.131.187.34    75-131-187-34.static.gwnt.ga.charter.com    美国 密苏里州圣路易斯市Charter通信公司    57 ms
14    Request TimeOut             *
15    Request TimeOut             *
16    208.69.231.10    ashv1.main-hosting.com    美国    138 ms
17    31.170.166.141    31-170-166-141.main-hosting.com    美国    62 ms
USBN:Trace completed
总共响应时间:455 ms    最长响应时间:138 ms    平均响应时间: 26 ms

所以我们可以看到,美国的两个节点都从美国本土走了过去,但是香港的数据包却从欧洲绕了一圈。众所周知,美国的网络情况最好,所以相应的美国节点也最快。

现在由于怕Incapsula反应过于激烈,我对国外用户解析就是Incapsula原始解析,而国内用户则被我手动指定到了美国西海岸节点。原先的速度就又回来了,HOHO~