• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>

    姚偉斌:阿里云CDN技術(shù)演變之路

    2015-03-02 11:29:53   作者:   來(lái)源:CTI論壇   評論:0  點(diǎn)擊:


      2015年1月31日,阿里云課堂第六期在北京開(kāi)課,“大型互聯(lián)網(wǎng)應用架構之存儲與分發(fā)”主題分享在眾多朋友的期待下精彩上演,現場(chǎng)觀(guān)眾再次爆滿(mǎn)。本次活動(dòng)中,姚偉斌(花名:文景)和李文兆兩位講師為大家獻上了精彩演講,并在OpenSpace環(huán)節與觀(guān)眾展開(kāi)討論,積極互動(dòng)。應廣大用戶(hù)要求,我們將云課堂講師現場(chǎng)分享內容全文整理出來(lái),供大家參考。阿里云課堂會(huì )繼續在全國各地陸續開(kāi)課,歡迎大家繼續支持!

      以下為講師姚偉斌(花名:文景)的分享內容:

      我前面會(huì )講一下CDN的用途,也會(huì )講一些CDN產(chǎn)品,在后面我會(huì )講CDN的架構和設計。

      一、CDN的用途

      目前,CDN主要是分幾個(gè)方向發(fā)展,比如靜態(tài)內容的分發(fā)、視頻流媒體的分發(fā)、動(dòng)態(tài)資源的加速、源站保護等,其中最基本的是用來(lái)做靜態(tài)內容分發(fā)。阿里CDN現在最大的用途是用作淘寶所有圖片的分發(fā)。視頻流媒體的分發(fā)功能使用,發(fā)展速度也非常之快。CDN一些特色功能的應用,如動(dòng)態(tài)資源的加速,還有SSL的接入、SPDY的接入等。CDN還有一個(gè)功能是源站保護,它可以通過(guò)各種安全防御,實(shí)現源站流量的減少。

      二、CDN的加速原理

      CDN最大的特色在于加速。那么,CDN是如何實(shí)現各種“加速”,發(fā)揮“加速”功用呢?如下圖所示,CDN有很多節點(diǎn),通過(guò)域名實(shí)現就近接入。當用戶(hù)發(fā)起一個(gè)請求后,CDN會(huì )回源取,然后把文件就近緩存在那個(gè)節點(diǎn)的服務(wù)器上。假設北京的用戶(hù)到北京節點(diǎn)只需4毫秒,后面寫(xiě)了一個(gè)90%的請求其實(shí)都直接命中到了服務(wù)器,那么還有10%的流量回到了二級cache節點(diǎn)。而二級cache節點(diǎn)也是同樣的緩存服務(wù)器,假設它的命中率也是90%,那么最終只有1%的流量到源站。如果純粹回到源站可能需88毫秒,而通過(guò)訪(fǎng)問(wèn)CDN就會(huì )大大縮短時(shí)間,甚至4毫秒就可以讓用戶(hù)拿到一個(gè)文件。這是CDN實(shí)現加速的基本原理。

      三、阿里CDN分布

      CDN加速的載體在于節點(diǎn),阿里CDN節點(diǎn)分布可謂星羅棋布,如下圖所示。阿里CDN服務(wù)器原先主要用于淘寶圖片的分發(fā),在全國32省(市、區)均有服務(wù)器,有200多個(gè)節點(diǎn),在一線(xiàn)城市運營(yíng)商均有機房,甚至在外國也有30余個(gè)節點(diǎn)分布,以提供國外用戶(hù)的加速服務(wù)。

      四、阿里CDN應用

      這兩天,我去拜訪(fǎng)了一些客戶(hù)。他們把我們的CDN與業(yè)界其他一些比較有名的商業(yè)CDN進(jìn)行比較統計,得出的結論是:我們CDN的平均延遲大概能有10%到20%的下降。

      阿里從2008年開(kāi)始,就著(zhù)手自建CDN。不知不覺(jué)我們已成為世界上最大的圖片CDN。這可能跟中國的網(wǎng)上購物習慣有關(guān)--  一個(gè)商品需要幾十張圖片進(jìn)行介紹。這使得我們圖片CDN可能跟某些視頻CDN流量有的一拼。從2014年3月起,阿里CDN正式開(kāi)啟商業(yè)化運營(yíng)模式。商業(yè)化運營(yíng)對阿里云CDN的需求,跟圖片CDN區別是非常大的,這對于我們有很多的挑戰。原來(lái)的圖片CDN,對于我們來(lái)說(shuō),主要是每年大促期間帶來(lái)的壓力,至少到2012年,我們CDN唯一任務(wù)就是為了“雙十一”。那時(shí),我們會(huì )做很多預案以應對瘋狂的流量。下面這一張是CDN的流量圖,就可以看到我們2009到2012年,我們整個(gè)水位是非常滿(mǎn)的。這對于我們CDN來(lái)說(shuō),主要的挑戰在于:做到良好的均衡性。比如這個(gè)節點(diǎn)要把流量定量切到另外一個(gè)節點(diǎn),我們做了很多的工作。另外,我們在節點(diǎn)內對軟件穩定性和性能等方面也做很多優(yōu)化。比如說(shuō)現在一個(gè)節點(diǎn)能服務(wù)40G,但是有時(shí)候節點(diǎn)面對突然涌過(guò)來(lái)的大流量時(shí),你甚至來(lái)不及調度。這就要求你的軟件至少需要扛過(guò)大于40G的能力。每年我們會(huì )做5次以上的壓測。在跑滿(mǎn)40G的情況下面,連續跑一個(gè)星期,檢驗以保障我們CDN節點(diǎn)不會(huì )掛掉,能夠繼續提供比較可靠的服務(wù)。這對于軟件的可靠性方面,壓力也是非常大的。

      從去年開(kāi)始,我們整個(gè)團隊的開(kāi)發(fā)方向就轉向做對外服務(wù)。從2013年開(kāi)始,我們CDN的服務(wù)能力已經(jīng)遠超我們自用的能力。就像我們一些PE所說(shuō),我們CDN團隊基本上可以坐在那里喝著(zhù)茶看著(zhù)雙十一的流量就可以了。

      現在阿里CDN的目標是:做到能夠快速、安全、易用,能幫用戶(hù)減少成本。

      下面是CDN的一些關(guān)鍵組件:

    • IP庫
    • 調度系統
    • 緩存系統
    • 刷新系統
    • 日志系統

      CDN需要知道用戶(hù)從哪里來(lái),才能調度, IP數據庫我們已經(jīng)做了好幾年。如果你們想去查一下某個(gè)IP是從哪里來(lái)的,ip.taobao.com這個(gè)外部的接口可以用。為了提高準確性,我們還會(huì )拿淘寶的收貨IP做對比,查是否這個(gè)IP是屬于這個(gè)地區的。現在在市一級的準確率能做到96%左右。ECS用戶(hù)應該可以免費調用我們IP庫的接口。

      現在CDN有兩個(gè)維度可以進(jìn)行調度。一是地域的概念,比如說(shuō)你去瀏覽器里面輸一個(gè)www.taobao.com,域名查詢(xún)請求會(huì )提交到運營(yíng)商本地的DNS服務(wù)器,DNS服務(wù)器有一個(gè)迭代查詢(xún)的過(guò)程,最后到了調度中心。調度服務(wù)器會(huì )根據源IP。比如你是北京電信的DNS的IP,就將你調度到北京電信的機房去。二是CDN是有高可用性的,調度中心在不停的監控所有節點(diǎn)的健康狀況,一旦發(fā)現這個(gè)節點(diǎn)有問(wèn)題,會(huì )將用戶(hù)切換到另外一個(gè)節點(diǎn)。

      上圖是CDN節點(diǎn)的緩存系統,LVS是4層的代理,Tengine主要進(jìn)行并進(jìn)行負載均衡,swift是一個(gè)高效的緩存服務(wù)器,作靜態(tài)文件的緩存用。Tengine和Swift進(jìn)行一致性hash,可以提高命中率。其他還有一些控制機器,做刷新和配置這些功能。

      上圖是Swift的緩存架構淘汰邏輯。現在我們能做到內存、SSD、SATA三級緩存、可以適應各種尺寸的文件。我們的服務(wù)器既能做圖片的緩存,也能做視頻大文件緩存,熱對象會(huì )自動(dòng)上升到內存,冷對象會(huì )被淘汰到SATA。為了提高IO性能,我們沒(méi)有使用文件系統,直接使用整個(gè)裸磁盤(pán)。在裸盤(pán)上,我們實(shí)現了Squid的COSS文件系統。COSS文件系統中都是一個(gè)Stripe進(jìn)行IO寫(xiě)操作。我們使用8M一個(gè)Stripe,新來(lái)的文件就append在Stripe里面,每次都是8M的寫(xiě),這樣就可以提高IOPS。當Stripe滿(mǎn)以后,寫(xiě)SSD時(shí),看原有的內容是否熱的,如果是熱點(diǎn),就放到內存。如果是冷的,就淘汰到內存。

      去年阿里CDN開(kāi)始對外應用以后,用戶(hù)增加非常迅速。原來(lái)以配制文件的形式管理的配置系統,已經(jīng)不能滿(mǎn)足業(yè)務(wù)需求。于是,我們開(kāi)發(fā)了一個(gè)加載配制模塊,它是lazy的。它的局部性效果非常明顯,雖然我們線(xiàn)上有幾萬(wàn)個(gè)域名,但在一個(gè)節點(diǎn)上,我們發(fā)現也就一兩千個(gè)域名在服務(wù),所以按需加載的方式較好。另外我們也做了很多優(yōu)化,10萬(wàn)域名只占500兆內存,非常高效。同時(shí),我們也能做到全網(wǎng)分鐘級別配置分發(fā),總體來(lái)說(shuō),我們的配制可以做到高可靠、可運維。

      有時(shí),CDN上的緩存文件更新了,我要把它刪掉。刷新需要全網(wǎng)分發(fā),而全網(wǎng)的每一臺機器,每一個(gè)cache節點(diǎn)全部要刷,因為我不知道文件存在哪里,都是廣播的,而現在,我們按調度頻道來(lái)刷,就能減少一定量的刷新。另外,我們增加了合并功能。比如,現在有100個(gè)URL過(guò)來(lái)刷新,可以合并為一次提交到Cache服務(wù)器,從而減少刷新的QPS。此外,Swift支持正則和目錄刷新,只需提交一個(gè)請求就可以刷很多內容。現在從統計數據上看,全球節點(diǎn)99%以上能做到1分鐘的刷新。

      目前,我們阿里內部已經(jīng)實(shí)現了海量日志搜集與分析系統。原來(lái)我們也是用syslog來(lái)搜集日志,在40G跑滿(mǎn)時(shí),syslog丟包非常嚴重。特別是在對外商用以后,日志需要計費,對可靠性要求非常高,所以后來(lái)就開(kāi)發(fā)了一個(gè)傳輸日志和實(shí)時(shí)分析系統。同時(shí),內部也做了一些優(yōu)化,比如合并功能,多條日志合并后再發(fā)到日志服務(wù)器上,使用LZO進(jìn)行流式壓縮,最終收集到中心。現在我們可以做到產(chǎn)生的日志10分鐘傳到OSS上以供下載。這個(gè)速度在業(yè)界來(lái)說(shuō)是非常快的。現在,我們整個(gè)CDN的量級大概每天有幾百T的訪(fǎng)問(wèn)日志,最終都會(huì )導入到阿里云ODPS上進(jìn)行大數據分析,比如用戶(hù)行為分析。

      阿里CDN針對TCP協(xié)議棧的做了優(yōu)化,比如說(shuō)我們做了基于時(shí)間序的丟包發(fā)現機制,TCP的包是有序號的,我們按照序號來(lái)查看,如果發(fā)現高序號的TCP的ACK,但是低的沒(méi)有發(fā)過(guò)來(lái)。我們會(huì )以更快的一個(gè)重傳機制來(lái)確保我們低序丟失的包能夠快速發(fā)過(guò)來(lái)。結合自適應的初始窗口等單邊優(yōu)化措施,最終我們將小對象的平均RT降低20%以上。

      這個(gè)功能是頁(yè)面內容優(yōu)化,就是按照前端優(yōu)化準則進(jìn)行自動(dòng)化的內容調整。比如說(shuō)減少頁(yè)面中請求的數量。我們會(huì )做一些靜態(tài)資源文件合并。還有就是盡可能減少頁(yè)面大小,我們會(huì )主動(dòng)刪除頁(yè)面空白符,還有一個(gè)智能Gzip,通過(guò)主動(dòng)發(fā)起JS異步請求,進(jìn)行探測,即使沒(méi)有Accept-Encoding頭也會(huì )主動(dòng)做壓縮。CDN這邊也在跟前端的同學(xué)一起來(lái)做,比如做一個(gè)UA的數據庫,去保存每一個(gè)User Agent對應的分辨率,不同的分辨率選擇不同尺寸的圖片。

      CDN其實(shí)不僅僅是靜態(tài)內容的HTTP加速,還可以做TCP協(xié)議的加速。如上圖所示案例顯示,我們最近發(fā)現臺灣用戶(hù)訪(fǎng)問(wèn)淘寶頁(yè)面非常慢,特別是從國內到國外這個(gè)鏈路是比較差的。我們在臺灣有節點(diǎn),香港有節點(diǎn),上海有節點(diǎn),臺灣到上海延時(shí)有200毫秒,臺灣到香港是20毫秒,香港到上海60毫秒。我們發(fā)現,從臺灣、香港再回來(lái)反倒更短,所以做了CDN之間的路由優(yōu)化,對TCP連接進(jìn)行加速。這個(gè)圖最終會(huì )有很多節點(diǎn),就是一個(gè)有向圖,我們在每一個(gè)CDN節點(diǎn)上做相互節點(diǎn)之間的網(wǎng)絡(luò )探測,檢測整個(gè)網(wǎng)絡(luò )的丟包率和延時(shí),構建出一個(gè)有權值的表格,然后我們去計算最短路徑。

      流媒體這個(gè)業(yè)務(wù)跟圖片有很大的區別。圖片的文件大小只有30到50K,但是視頻的平均文件大小可能會(huì )到500K到2M。首先,流媒體對于CDN節點(diǎn)的流量沖擊會(huì )非常大,基于傳統的DNS調度有緩存時(shí)間,一般有5到10分鐘的延時(shí),甚至有一些節點(diǎn)都調不走。我們這邊就設計了一個(gè)中心式的,基于HTTP協(xié)議的調度方法。當請求某個(gè)URL的時(shí)候,CDN根據節點(diǎn)的負載會(huì )直接返回資源或者302重定向,作精確調度。幾乎就沒(méi)有延時(shí)時(shí)間,甚至可以在每個(gè)節點(diǎn)的機器間相互調度。

      最近阿里云這邊在做無(wú)線(xiàn)加速的產(chǎn)品,我們現在使用了HTTP DNS。無(wú)線(xiàn)APP有自己的客戶(hù)端,HTTP DNS集成在A(yíng)PP SDK中,當APP啟動(dòng)時(shí)會(huì )發(fā)起一個(gè)定期異步的請求,去中心請求域名解析,然后把IP保存下來(lái)。當下次發(fā)起真實(shí)請求時(shí),可以直接去請求了。所以HTTP DNS可以節省域名解析的時(shí)延,也可以避免國內的一些運營(yíng)商作的域名劫持。

      另外一個(gè)就是做了SPDY的優(yōu)化,多路優(yōu)化有什么好處呢,一個(gè)是復用連接,減少連接數,提高頁(yè)面打開(kāi)的速度,就手機淘寶這邊的經(jīng)驗來(lái)看,做SPDY鏈路復用最終是能有20%到30%加載頁(yè)面時(shí)間的降低。

      最后一個(gè)是安全功能,現在CDN提供了4、7層的DDoS安全防御和WAF,可以使用戶(hù)免于攻擊,并提供一站式解決方案。CDN可以提供源站保護功能,靜態(tài)資源CDN可以緩存,最終落到源站的流量都會(huì )合并,流量是非常小的。現在安全服務(wù)是不額外收費的。

      這是7層攻擊的一個(gè)案例,經(jīng)常有一些用戶(hù)說(shuō),你們怎么防攻擊的流量算我錢(qián),實(shí)際上防攻擊不是免費的。這是我昨天截的圖,這是7層的攻擊,突然間針對原來(lái)那個(gè)小站有15萬(wàn)QPS的攻擊流量,它的響應大小是15KB。可以看到只要打開(kāi)安全功能,CDN已經(jīng)擋了99%以上的攻擊,并保證它的正常服務(wù),幫用戶(hù)節省了17Gbps的流量費用。

    相關(guān)熱詞搜索: 阿里云 CDN

    上一篇:京東機密:智能機器人原來(lái)是蘿莉

    下一篇:最后一頁(yè)

    分享到: 收藏

    專(zhuān)題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 柳州市| 武威市| 双牌县| 深州市| 嘉荫县| 鹤壁市| 思南县| 祁连县| 商丘市| 会同县| 吉木萨尔县| 阿合奇县| 安顺市| 宁晋县| 兴安县| 安徽省| 乃东县| 满洲里市| 伊吾县| 姜堰市| 自治县| 呼图壁县| 娱乐| 吉林省| 九江县| 嘉祥县| 双流县| 拉萨市| 延长县| 石屏县| 湟中县| 安乡县| 胶州市| 房产| 岚皋县| 石棉县| 丰都县| 广宗县| 茶陵县| 永定县| 宜川县| http://444 http://444 http://444 http://444 http://444 http://444