上次的数据评估的文章发表之后,有些人来找我要原始数据,也有人问我说数据对比看着也还好吧,看着没错多少嘛。我的解释是,这个只能算是采样数据,等于拿着可以 ping 通的数据去看整体的数据的情况,并不代表只错误标注了这些 IP。而且比如 IPv4 数据整体错 1 %,看着不多,但是放大到即使是按照 36 亿左右的公网 IP 去计算,具体到错误的 IP 数量上也很多了。而且我一直是强调错两次的概念。
也有人问我,你这个监测点的是香港的,有没有拿北上广的数据来做个评估呢?
也行。所以我百忙之中又抽了一点时间做了这个事情。
测试数据情况如下:
原始数据取自我们在上海专门用于延迟监测用途的节点数据,监测数据跨度大概是在 8 天左右,原始数据一共 110688930 个。只保留 10.4ms 以下的数据,过滤后的结果是 4613367 个。
根据我们的经验,我们认为从上海节点为中心点,RTT 延迟为 10.4ms 以内的 IP,理论上也应该只会包括上海、江苏、浙江、安徽等三省一市的数据(延迟超过 10.4ms 就有可能到达山东省的网络了),而凡是不属于这三省一市的 IP 的标注,都要根据情况进行判定,但占比应该是越小越好,而且更别说非中国的 IP 标注了。再次重复,监测点有自身的监测周期,所以有一定量的小数量看似错误的标注,其中也包括一些骨干网络的 IP 或者国内 ANYCAST 的情况,不一定算是真的错误。
跑完的结果如下:
同行 MXXXXXX 的数据情况,执行耗时 4200 秒左右:
中国/上海 => 1504759
中国/ => 1181781
中国/浙江省 => 889675
中国/江苏省 => 821865
中国/北京市 => 63319
中国/安徽 => 56234
中国/广东 => 55084
美国/ => 8147
中国/山东省 => 6647
中国/河南 => 3159
中国/四川省 => 2807
中国/福建省 => 2611
中国/吉林 => 2235
中国/重庆 => 2193
中国/天津市 => 2181
中国/辽宁 => 1788
中国/江西 => 1733
中国/湖南 => 1543
中国/河北省 => 1323
中国/湖北省 => 1144
中国/山西 => 541
中国/陕西 => 491
中国/新疆 => 483
美国/加州 => 470
澳大利亚/ => 405
美国/德克萨斯州 => 193
中国/黑龙江省 => 163
中国/内蒙古自治区 => 141
中国/云南 => 89
中国/广西壮族自治区 => 65
越南/胡志明市 => 59
中国/贵州 => 32
德国/ => 2
新加坡/ => 2
日本/ => 2
中国/宁夏回族自治区 => 1
另一个同行 IP2XXXXXXXX 的数据情况,执行耗时 65 秒(内存缓存模式)左右:
中国/Shanghai => 1640305
中国/Jiangsu => 1108735
中国/Zhejiang => 999015
中国/Beijing => 676860
中国/Anhui => 84394
中国/Guangdong => 64466
中国/Guangxi => 7670
美国/Virginia => 3924
中国/Hainan => 2490
中国/Jiangxi => 2039
中国/Fujian => 2026
中国/Hebei => 1787
美国/Arizona => 1674
中国/Hunan => 1671
中国/Heilongjiang => 1388
中国/Yunnan => 1366
中国/Xinjiang => 1311
美国/Connecticut => 1278
中国/Shanxi => 1259
中国/Sichuan => 1256
中国/Shandong => 1057
中国/Hubei => 1024
中国/Shaanxi => 917
美国/California => 812
中国/Gansu => 767
中国/Henan => 684
英国/Wales => 609
中国/Ningxia => 536
中国/Liaoning => 410
澳大利亚/Victoria => 404
中国/Jilin => 341
中国/Tianjin => 284
中国/Nei Mongol => 140
中国/Guizhou => 108
中国/Chongqing => 105
日本/Tokyo => 86
中国/Qinghai => 53
中国/Xizang => 23
德国/Thuringen => 20
中国/- => 14
美国/Illinois => 13
新加坡/Singapore => 12
美国/Washington => 11
中国/Hong Kong => 8
美国/Michigan => 7
美国/New York => 3
美国/- => 2
美国/Indiana => 1
美国/Texas => 1
美国/New Hampshire => 1
接着是我们 IPIP 的数据情况,执行耗时 35 秒左右(内存缓存模式):
中国/上海 => 2322864
中国/江苏 => 1178884
中国/浙江 => 1016310
中国/安徽 => 84347
其它/其它 => 9632
中国/中国 => 1171
中国/北京 => 36
中国/广东 => 14
中国/江西 => 10
中国/山东 => 9
中国/重庆 => 9
中国/陕西 => 8
中国/湖南 => 8
中国/四川 => 7
中国/福建 => 7
中国/天津 => 6
中国/河北 => 5
中国/黑龙江 => 5
中国/内蒙古 => 4
中国/湖北 => 4
中国/山西 => 4
中国/宁夏 => 3
中国/广西 => 3
中国/云南 => 3
中国/香港 => 2
美国/加利福尼亚州 => 2
中国/辽宁 => 2
中国/吉林 => 2
中国/河南 => 2
中国/贵州 => 2
日本/东京都 => 1
中国/甘肃 => 1
备注:其中的“其它”以及“中国”数据为实际标注为 ANYCAST (也就是大家常看到的域名标注,也有一部分是在国内做 ANYCAST 用途,这种我们会标注成中国)以及各种骨干网络的情况。有经验的朋友会知道,有些骨干网的 IP,对 ping 包会有看着比较异常的返回,我们并没有针对性过滤掉,还是放在这里让大家看吧。当然,这个“中国”里的部分数据还是可以再努力一下做得更好的。
纯真就不跑了。按我朋友的话说,这是玩具。
一个比较直观的结论:同样的数据源,MXXXXXX 有 118 万只能标注到中国,而 IP2XXXXXXXX 有 67 万标注到了明显错误的 北京,而相比之下我们的质量是最好的。
至于数据错误带来的影响嘛,还是重复一句话,冤假错案,是加倍的错误,冤枉了好人,放过了坏人。我想在这里也同样适用。
还是要说,这只是一个以上海监测点数据为中心的例子,也许看着比例不大,但是一定要明白,这只是拿一部分采样数据做的评估,到底总体上有多少数据是标注错的,您可以自行考虑这个问题。
而且比如数据里如果把江苏标注成了浙江,把安徽标注成了上海,或者城市级上面有错误,从这个评估数据上是看不出来的。这个就留给大家自己看吧。
反正今年有已经回流的客户和正在回流的客户。:)
另外,各位也别忘记考虑数据库读取的性能问题,上次文章,有个客户看完了跟我说,不光是数据准不准的问题,光二进制数据格式的性能问题就值得选我们,不然这个后面隐形成本太多了,相比之下你得多耗费多少计算资源呢?如果按年计算的话,确实挺可怕的。
我要请他吃饭,可以一起聊聊 TCO 话题了!
欢迎有价值的探讨,有兴趣的请留言给我。
统一说明:
1、三个 IP 数据库都是最新版本。两个同行的都是官方代码。
2、国内其它同行我们没有数据,我把文章预览和过滤后的原始数据给了一个在他公司内部一直在推动采购我们数据的朋友,让他自己去做评估,他看完对比结果之后跟我说,他觉得他更有理由去推动公司换用我们的数据了。对这个有兴趣做对比的可以找我索取原始数据自行对比。另外有我朋友圈的可能错过了我在 9 号凌晨发的朋友圈,欢迎看我说的实锤。
3、执行时间由 PHP 在 WINDOWS10 命令行下执行,版本 8.1.0 RC6,CPU 为 Intel Xeon W-10855M。
BTW:发表之前看了一下,和上篇文章正好凑巧间隔一个月。