引言
由于互聯網的快速發展,信息量和網民數量的快速增長給網站内容服務器和傳輸骨幹網絡帶來了極大的壓力,越來越多的網站使用了内容分發網絡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/