我们总是要花大把的精力和资金,用来看看墙外的世界。

前几天被墙得厉害,各种梯子又不稳定,于是想搞一个私人的VPS服务器翻墙,结果照样被墙得厉害。 主要原因是服务器不稳定,老是丢包。 其实一般的VPS服务商,都有多台架设在不同地区的服务器,关键在于要选择一个稳定、速度快的服务器。 于是萌生了写一个脚本,去找遍历测试这些服务器地址,再根据测试结果的分析,选择比较稳定的服务器。

之前尝试了两家服务商VultrDigital Ocean(我提供的是推广链接,你和我都能获得一定金额的抵用券)。 Vultr是看中它有个日本的服务器,结果绑定PayPal后才注意到,其他的服务器都是1000G流量,只有这个日本服务器,只有寒碜的200G。 这么一搞,还不如多买几个VPN呢。 于是又想尝试 Digital Ocean 在新加坡的服务器。 但是只过了几个小时的快乐日子,服务器就丢包丢得厉害。 终于下定决心,花了一个下午的时间,写了个小型工程Ping it,用来找出比较稳定可靠的服务器。

在我的Mac Mini 上,是利用Jenkins的Job来周期性的触发一个Shell script,遍历一个host列表, 对每个host做10次ping测试,结果输出到文件中,再利用开启CGI支持的Apache服务器,启动一个Python脚本来分析处理测试数据。

这样,我就可以从网页访问我的本地服务器,获取测试结果了。

这里我给出一个结果的示例,是分析Vultr, Digital Ocean 和 Linode 的各个服务器稳定性的, 并加入了 国内的 www.baidu.com 和 国外未被墙的 www.bing.com 作参照, 每隔15分钟做一次测试,跑了一天的结果:

                            host   loss      avg  stddev  graph
                   www.baidu.com,  1.3%,    9.75,   8.77, .........11]
      speedtest.tokyo.linode.com,  0.5%,  111.95,  17.37, ..........12]
            wa-us-ping.vultr.com,  0.4%,  183.79,  38.19, ..................20]
        sjo-ca-us-ping.vultr.com,  0.7%,  200.32,  32.20, ...................21]
        lax-ca-us-ping.vultr.com,  0.5%,  196.68,  39.36, ....................22]
                    www.bing.com,  2.2%,  101.86,  23.76, .......................25]
           fra-de-ping.vultr.com,  0.3%,  302.49,  46.00, .........................27]
           par-fr-ping.vultr.com,  0.4%,  300.88,  43.94, .........................27]
           hnd-jp-ping.vultr.com,  2.8%,  113.55,  23.62, ...........................29]
            il-us-ping.vultr.com,  0.8%,  259.62,  50.83, ............................30]
            fl-us-ping.vultr.com,  0.9%,  314.02,  43.82, ............................30]
 speedtest-ams1.digitalocean.com,  0.7%,  380.15,  45.29, ..............................32]
            ga-us-ping.vultr.com,  1.3%,  254.32,  50.66, ...............................33]
           ams-nl-ping.vultr.com,  0.9%,  352.69,  47.50, ...............................33]
            tx-us-ping.vultr.com,  1.4%,  320.91,  48.17, ..................................36]
           syd-au-ping.vultr.com,  1.8%,  267.23,  49.46, ..................................36]
 speedtest-ams3.digitalocean.com,  1.0%,  404.54,  49.01, ...................................37]
 speedtest-ams2.digitalocean.com,  1.3%,  394.39,  46.45, ...................................37]
 speedtest-sgp1.digitalocean.com,  3.2%,  189.75,  33.13, ....................................38]
    speedtest.fremont.linode.com,  2.2%,  268.84,  51.42, .....................................39]
    speedtest.atlanta.linode.com,  2.2%,  330.81,  49.75, ........................................
     speedtest.dallas.linode.com,  3.9%,  279.52,  47.68, ........................................
           lon-gb-ping.vultr.com,  5.0%,  387.17,  49.08, ........................................
 speedtest-nyc2.digitalocean.com,  6.1%,  326.61,  46.17, ........................................
 speedtest-sfo1.digitalocean.com,  7.0%,  281.11,  40.97, ........................................
     speedtest.newark.linode.com,  6.5%,  334.33,  47.29, ........................................
 speedtest-nyc1.digitalocean.com,  7.4%,  346.15,  47.42, ........................................
 speedtest-nyc3.digitalocean.com,  7.5%,  333.10,  57.91, ........................................
     speedtest.london.linode.com,  9.0%,  458.54,  46.11, ........................................
 speedtest-lon1.digitalocean.com, 19.9%,  382.57,  47.13, ........................................
            nj-us-ping.vultr.com, 20.9%,  281.61,  55.03, ........................................

表格分别展示了丢包率(loss)、平均Ping值(avg)、标准差(stddev), 最后的那些增长的数字,是一个柱形图表(得分图),直观的展示所属网站的性能,其数字,是按照某个规则,根据前面的各种数据打出的分数,数值越小,说明效果越好。 由于篇幅限制,我删除了排名靠后的几个服务器的得分图。 得分是由以下函数计算:

def pkg_score(pkg):
    loss = pkg['loss'] / 30.0
    delay = pkg['avg'] / 500.0
    std = pkg['stddev'] / 70.0
    score = (loss * 10 + delay + std) / 5
    return score

其中,loss是丢包率,一般在30%以上就非常严重了,delay是ping值,在500以上非常严重,std是标准差,在70以上非常严重, 而丢包率影响最大,故最后计算分数时,给了它一个非常大的权重。

从测试结果可以看到,国内访问baidu的速度当然没的说,不然它怎么会成为“最大的ping测试目标”提供商呢。 另外我发现,Bing搜索的ping测试稳定性,并不是最好的,如果Ping搜索访问还算流畅,那么与它差不多的,甚至比它好的几个服务器,应该都是不错的选择。

最后想说的一点是,除百度外排名第一的,是一个Linode在日本的服务器。 Linode服务器的价格,比其他服务器贵上一倍,但从这个粗略的结果来看,它的价格,还是合理的。。