引言
由于互联网的快速发展,信息量和网民数量的快速增长给网站内容服务器和传输骨干网络带来了极大的压力,越来越多的网站使用了内容分发网络CDN服务,Web的网络服务压力逐渐从内容服务器和骨干网络转移到贴近用户的“最后一公里”。Web已经从简单单一的服务器提供内容的方式发展为多个不同地理位置的服务器提供内容的方式,本文主要考虑如何测量分析复杂的Web应用服务的CDN业务。
现有的相关论文主要是CDN的相关测量研究与网站服务本身的相关测量研究。文献[1]总结了CDN的两种重定向方式,URL重写与DNS重定向,多数CDN如Akamai等使用的是DNS重定向的方式。文献[2]对三大CDN服务提供商Google、Netflix、Hulu的研究表明,CDN会为用户首选同时固定一个CDN,在后续的过程中就算有更优的CDN服务器也不会做智能的转换。而另一些文献针对网站服务本身做出了测量研究,文献[3]设计了主动测量系统来测量Ajax的特征。文献[4]提出从网页本身的复杂性来考虑对页面加载时间的影响,结果表明,很多网站使用不同的第三方CDN服务来托管自己的内容服务,主要包括图片、CSS、JS等比较大的文件。
然而,上述研究都没有结合CDN服务与网站服务进行测量研究。本文提出了一种发现主流网站使用CDN的简单判别方法并对网站关键域名进行了网络层traceroute测量。后续的测量结果表明,大部分目标网站在不同的地理位置的测量点根据DNS解析为不同地理位置的IP地址,可以认为其确实使用了CDN服务。
测量方法
本文主要测量分析了不同网站使用的CDN服务,模拟用户访问浏览器过程,提取访问网站过程中的关键域名,分析讨论其所属的CDN服务提供商。通过在不同测量地点为期一个月的traceroute跟踪测量分析了网站域名DNS解析的IP地址分布情况。
1.网站服务的CDN服务测量方法
网站服务的CDN服务测量追踪了浏览器访问网站的过程。首先进行目标选取,然后对选取的目标网站进行域名提取,接着对提取到的域名的分析操作、确定其使用的CDN服务。
(1)选取目标节点
由于设备限制,无法测量过多的目标节点,我们选取Alexa.cn网站[5]排名前100的网站作为测量目标。使用python语言的unittest单元测试框[6]以及selenium自动框架[7]中的Webdriver模块自动打开浏览器访问Alexa排名网站,运用python语言的beautiful框架[8]爬取网页内容进行正则分析,提取排名前100的网站。
(2)网站域名提取
由于Web已经从简单单一的服务器提供内容的方式发展为由跨多个管理域的服务器提供不同内容的方式,除了百度主页这种比较简洁的网站,现在很多网站需要200个以上HTTP请求进行数据请求。
为了模拟浏览器行为,我们选择了轻量级的无界面浏览器phantomjs[9]。phantomjs提取的域名虽然与Chrome、Firefox等主流浏览器有所差别,但是由于其开源的特性,可以轻易地获取整个浏览器访问过程,因此通过phantomjs对上述网站进行访问,保存其请求的所有域名。
(3)域名后缀聚类分析
现在大多网站使用了第三方的CDN服务,如蓝汛、网宿、阿里云、腾讯云等。不同的网站可能使用了相同的CDN服务。对上述网站域名进行重定向操作,需要注意的是,网站的域名其实是跟CNAME映射的,而每个CNAME域名可能还与第二个CNAME域名映射,最底层的CNAME域名(图1中的B域名),也就是直接与IP进行映射关系的,通常是CDN服务提供商给网站管理者提供的域名,这样做的好处是CDN服务提供商在更换服务器时,不需要告知CDN用户真实IP地址,只需要将其提供给用户的域名重新映射至新服务器的IP即可,类似一种封装操作,也正是文献[1]中提到的广泛使用的DNS重定向方式,如图1所示。
本文使用phantomjs跟踪网页解析过程,用python脚本跟踪DNS重定向后最后一层的CNAME,同时对域名后缀做计数聚类,对于出现次数大于一次的域名后缀,查找其所有者,最后需要人工判断其所属者、确定其是否为CDN服务。表1所示为通过人工判断后确定为CDN域名后缀的计数情况。
表1中出现次数比较多的域名后缀,已经将其所属CDN服务提供商列举如图2所示。
2.域名解析的IP地址与地理位置的关系
上文给出了判断CDN服务的简单方法,为了确定这些网站是否使用了CDN服务,利用gperf[10]平台中的五个云服务器(云服务器提供商和地理位置分别是阿里云杭州、腾讯云上海、腾讯云广州、西部数码广东中山、西部数码河南郑州),对上述域名的前两位关键域名进行长达一个月(2017年4月18日至5月18日)、间隔5分钟的traceroute测量。
我们以五个云服务器作为测量源点,测量100个目的网站的1~2个关键域名(有些网站仅仅有一个域名)。然而,traceroute返回的目的IP地址非常多样,并不如同一开始设想的只有一个或者几个固定IP地址,不过大部分的IP地址的变动都是最后一位的变动,24位IP地址前缀的个数并不是特别多,说明24位IP地址前缀相对来说比较固定。也有一些例外情况,有些域名的24位IP地址前缀变动也非常大,我们选取的5分钟traceroute间隔,返回的目的IP地址的24位前缀也在不停的变动,观察发现这些域名多使用了腾讯云或者阿里云的服务,可能由于我们的测量节点有三台服务器为阿里云和腾讯云,另外两台也是云服务器,导致上述结果出现。
我们提取了在一个月内每个探针(云服务器)到每个目标域名DNS解析出的IP地址,由于有些节点至某些目的域名解析出的IP地址数量过多,我们将出现100次以上的IP地址进行记录,提取24位IP地址前缀,并查询归属地。结果发现,半数以上的域名解析出的IP地址与云服务器所在的地址比较接近。
测量结果表明,位于沿海的杭州、上海、广州、中山附近的CDN节点丰富,而位于郑州附近的CDN节点较少。Alexa排名前100的网站,其关键域名解析的IP地址与测量点的位置关系十分密切,在大多数情况下都非常靠近测量点。
由此可以推测,距离远的地址同时访问上述网站就近解析出IP地址,因而可能会有不同的访问结果,比如一个可达一个不可达。地理位置相近的测量点解析出的IP地址相同或者相近,更具有分析价值。
结论
本文参考分析了前人对CDN重定向方式的说明,给出了一种快速发现网站所使用的CDN服务的简便可行方法,通过phantomjs浏览器模拟访问网页的过程,对多个网站的域名进行聚类分析,可以很快地得知某个网站使用的CDN服务。持续一个月的测量结果表明,选取的排名前100的网站中半数以上都使用了CDN服务。本文提供的快速发现CDN服务的方法可以很方便地提取出网站所使用的CDN服务,方便后续排查CDN造成的网站服务异常。
(责编:杨洁)
(作者单位为北京邮电大学网络技术研究院)基金项目:NSFC-新疆联合基金资助项目(U1603261);国家CNGI专项(CNGI-12-03-001
参考文献:
[1]KrishnamurthyB,WillsC,ZhangY.Ontheuseandperformanceofcontentdistributionnetworks[C]//2001:169-182.
[2]AdhikariVK,GuoY,HaoF,etal.AtaleofthreeCDNs:AnactivemeasurementstudyofHuluanditsCDNs[C]//ComputerCommunicationsWorkshops.IEEE,2012:7-12.
[3]LeeM,KompellaRR,SinghS.AjaxTracker:activemeasurementsystemforhigh-fidelitycharacterizationofAJAXApplications[C]//UsenixConferenceonWebApplicationDevelopment.USENIXAssociation,2010:2-2.
[4]ButkiewiczM,MadhyasthaHV,SekarV.CharacterizingWebpagecomplexityanditsimpact[J].IEEE/ACMTransactionsonNetworking,2014,22(3):943-956.
[5]Alexahttp://www.alexa.cn/
[6]unittesthttp://docs.python.org/2.7/library/unittest.html
[7]seleniumhttp://www.seleniumhq.org/
[8]beautifulsouphttps://www.crummy/software/BeautifulSoup/bs4/doc/index.zh.html
[9]phantomjshttp://phantomjs.org/
[10]http://gperf.edu.cn/