隨著基礎設施的升級,我們從文字時代演進到讀圖時代,又從讀圖時代演進到微視訊時代。人們 對媒體載體的實時性,互動性的要求越來越高。今年是 Live 時代的元年,直播 App 如雨後春筍,像極了幾年前的千團大戰、O2O 大戰、P2P 金融大戰,成為網際網路的又一場戰役。
為什麼要有內容分發網路,內容分發網路的由來
網際網路起源於美國軍方的一個內部網路,Tim Berners-Lee 是網際網路發明者之一,他很早就預見到在不久的將來網路擁塞將成為網際網路發展的最大障礙,於是他提出了一個學術難題,要發明一種全新的、從根本上解決問題的 方法來實現網際網路內容的無擁塞分發,這項學術難題最終催生出一種革新性的網際網路服務– CDN 。當時 Berners-Lee 博士隔壁是 Tom Leighton 教授的辦公室,一位麻省理工學院應用數學教授,他被 Berners-Lee 的挑戰激起了興趣。Letghton 最終解決了這個難題並開始自己的商業計劃,成立了 Akamai 公司,成為世界上第一家 CDN 公司。
內容分發網路的架構
下圖是一個典型的 CDN 系統的三級部署示意圖,節點是 CDN 系統中的最基本部署單元,分為三級部署,中心節點、區域節點和邊緣節點,最上面一級是中心節點,中間一級是區域節點,邊緣節點地理位置分散,為使用者提供就近的內容訪問服務。
CDN 節點主要分成兩大類,骨幹節點和 POP 節點,骨幹節點又分為中心節點和區域節點:
骨幹節點
中心節點
區域節點
POP節點
邊緣節點
邏輯上來講,骨幹節點主要負責內容分發和邊緣節點未命中時進行回源,POP 節點主要負責提供給使用者就近的內容訪問服務。但如果 CDN 網路規模較大,邊緣節點直接向中心節點回源會給中間層的核心裝置造成的壓力過大,在物理上引入區域節點,負責一個地理區域的管理,儲存部分熱點資料。
內容分發網路的種類
網頁加速:網頁是比較早出現的網際網路資訊載體,也是 CDN 支援的最早的一種加速服務,開始主要是對靜態網頁、圖片等等進行加速,發展到現在也可以對動態內容進行加速。
視訊點播加速:隨著基礎網路的提升,單純的圖片和文字已經沒辦法滿足大家的物流需求,於是湧現了大 量的視訊網站,CDN 應對這種需求開發了針對流媒體視訊的加速網路,做出的技術改變,主要是改變原有 PULL 模型為 PUSH 模型,縮短了使用者訪問時間,避免視訊流媒體的冷啟動,也降低了對樹形網路拓撲結構中的根節點的壓力(骨幹節點)。
檔案傳輸加速:主要支援了很多常見的檔案下載協議,如 FTP、HTTP、P2P 等,同時像七牛這種雲端儲存廠商會支援層次更高的物件儲存服務,CDN 也內建在其中,對使用者無感知加速。
應用協議加速:推出了 HTTPS 加速,HTTP 網頁壓縮加速等,進一步縮短了使用者訪問時間,降低了源站的資源使用壓力。
直播加速:隨著 Live 時代的到來,直播成為當前 CDN 廠商的又一個主要的戰場,那麼 Live 時代 CDN 需要支援什麼樣的服務呢?
1. 流媒體協議的支援,包括 RTMP , HLS ,HTTP-FLV 等;
2. 首屏秒開,從使用者點選到播放控制在秒級以內;
3. 1~3 延遲控制,從推流端到播放端,延遲控制在 1~3 秒之間;
4. 全球全網智慧路由,可以利用整個 CDN 網路內的所有節點為某一單一使用者服務,不受地域限制。隨著全球一體化程序不斷推進,跨區域、跨國家、跨洲的直播正變為常態,很可能主播在歐美,而使用者在亞洲;
5. 天級別的節點按需增加,中國公司出海已成大勢,CDN 需要更多的海外節點,如今比拼的更多的是海外節點可以快速部署,從提出節點增加需求到節點入網提供服務,需要達到一天之內,對 CDN 運維和規劃提出非常高的要求。原有的月級別規劃和入網滿足不了先進的要求。
內容分發網路的鏈路路由
CDN 基於樹狀網路拓撲結構,每一層都有 GSLB (Global Server Load Balancing) 用於同一層內的多個 CDN 節點負載均衡,這樣有什麼好處呢?
前面提到的眾多 CDN 的應用場景中,網頁加速、視訊加速、檔案傳輸加速,都是同時依賴 GSLB 和 Cache 系統的,Cache 系統是整個 CDN 系統中的成本所在,設計樹形結構可以最大化的節省 Cache 系統的資本投入。因為只有中心節點需要保持機會所有的 Cache 副本,先下逐級的減少,到了邊緣節點只需要少量的熱點 Cache 就可以命中大部分 CDN 訪問請求,這樣極大的降低了 CDN 網路的成本,也符合當是 CDN 使用者的需求,可謂雙贏。當是到了 Live 時代,直播業務是流式業務,很少涉及到 Cache 系統,基本都是播完就可以釋放掉儲存資源,即使因為政策原因有儲存的需求也都是冷儲存,對於儲存的投入相對非常低廉,而且不要求儲存在所有節點中,只要保 證資料可回溯,可用即可。
我們看看樹狀網路拓撲,使用者的鏈路選擇數量是有限的,如下圖,使用者在某一個區域內可選擇的鏈路數是:2 * 6 = 12
使用者在某一區域內,則 GSLB (通常在邊緣節點這一層是 Smart DNS)會把使用者路由到該區域內的某個邊緣節點,上一層又會路由到某個區域節點(這裡的 GSLB 通常是內部的負載均衡器),最後又回溯到中心節點,中心節點會連結源站。
這裡的假設是:
1. 使用者能訪問的最快節點一定是該區域內的邊緣節點,如果該區域沒有邊緣節點則最快的一定是邏輯相鄰的區域內的邊緣節點。
2. 邊緣節點能訪問的最快節點一定是該區域內的區域節點,一定不會是其他區域的節點。
3. 區域節點到中心節點一定是最快的,這個鏈路的速度和頻寬都是最優的。
但實際真的如此麼?引入瞭如此多的假設真的正確麼?
實際上就算理論上我們可以證明以上假設有效,但是節點規劃和區域配置大都依賴於人的 設計和規劃,我們知道人多是不靠譜的,而且就算當時區域規劃正確,誰能保證這些靜態的網路規劃不會因為鋪設了一條光纖或者因為某些 IDC 壓力過大而發生了改變呢?所以我們可以跳出樹狀網路拓撲結構的桎梏,探索新的適合直播加速的網路拓撲結構。
為了擺脫有限的鏈路路由線路限制,啟用整理網路的能力,我們可以把上述的節點變成網狀網路拓撲結構:
我們看到一旦我們把網路結構改成了網狀結構,則使用者的可選擇鏈路變為:無向圖的指定兩點間的所有路徑,學過圖論的同學都知道,數量驚人。
系統可以通過智慧路由選擇任何一個最快的鏈路而不用依賴於系統部署時過時的人工規 劃,無論是某些鏈路間增加了光纖或者某個 IDC 壓力過大都可以實時的反映到整理網路中,幫助使用者實時推倒出最優鏈路。這時我們可以去掉前面的一些假設,通過機器而不是人類來時實時規劃網路的鏈路路由, 這種實時大規模的計算任務天生就不是人類的強項,我們應該交給更適合的物種。
內容分發網路的擴容
前面提到中國公司的出海已成大勢,CDN 海外節點的需求越來越大,遇到這種情況需要 CDN 廠商在新的區域部署新的骨幹網和邊緣節點,需要做詳細的網路規劃。時代發生變化,原來 CDN 使用者都是企業級使用者,本身業務線的迭代週期較長,有較長時間的規劃,留給 CDN 廠商的時間也比較多。而網際網路公司講究的是速度,雙週迭代已成常態,這裡面涉及到成本和響應速度的矛盾,如果提前部署節點可以更好的為這些網際網路公司服 務,但是有較高的成本壓力,反之則無法響應這些快速發展的網際網路公司。
理想情況是,使用者提出需求,CDN 廠商內部評估,當天給出反饋,當天部署,客戶當天就可以測試新區域的新節點。怎麼解決?
答案是基於網狀拓撲結構的對等網路,在網狀拓撲結構中每個節點都是 Peer ,邏輯上每個節點提供的服務對等,不需要按區域設計複雜的網路拓撲結構,節點上線後不需要複雜的開局過程,直接上線註冊節點資訊,就可以對使用者提供服務 了,結合虛擬化技術前後時間理論上可以控制在一天之內。
迴歸本質:LiveNet
我們知道最早的網際網路就是網狀拓撲結構,後來才慢慢加入了骨幹網來解決各種各樣的問題,我們是時候該回歸本質,擁抱下一代 Live 分發網路:LiveNet 。總結前面的討論,我們發現 Live 時代我們需要的內容分發網路是:
1. 對 Cache 的要求沒有以前那麼高
2. 對實時性的要求非常高
3. 對節點運維的要求高,要更智慧,儘量減少人工干預
4. 對擴容這種運維事件響應度要求非常高
要做到如上幾點,我們需要:
1. 去中心化,網狀拓撲
2. 全球全網排程
3.節點無狀態,節點對等
4.智慧運維
以上這些就是 LiveNet 設計時候的斟酌,讓運維更自動化,系統執行高度自治,依賴機器計算而不是人工判斷,下面分別介紹一下。
去中心,網狀拓撲:網狀拓撲結構是設計的根本和基礎,只有看清了我們對 Cache 需求的降低,網狀拓撲結構才更有優勢。
全球全網排程:基於全球一張網,不在受限於區域網路排程,將排程的範圍從區域網路擴充套件到全球,全網內的節點都可以響應使用者的請求,參與鏈路路由,不再先由人工假設選定一部分節點進行路由,去掉人工干預,讓整個系統更智慧。
節點無狀態,節點對等:LiveNet 節點無狀態和節點對等都方便了運維,去掉了區域概念後的全球一張網讓整個拓撲結構變的異常複雜,如果各個節點間有先後依賴關係,勢必讓運維成為噩夢,需要 專有的服務編排系統,同時也給擴容帶來困難,需要運維人員設計複雜的擴容方案,需要預演多次才敢在複雜的網路拓撲中擴容。當時如果節點本身對等且無狀態, 則運維和擴容都變的容易很多。
但整個系統在執行過程中還是會一些狀態和資料需要保持,比如某些 Live 內容需要落地回放的需求,這些通過久經考驗的七牛雲端儲存來儲存。
智慧運維:智慧運維建立在以上的「網狀拓撲結構的對等網路」的基礎上會變的容易的多。可以方便的下線有問題的節點而不影響整個 LiveNet 網路,可以方便快速的上線新節點,提升系統容量。通過節點的資料分析可以更好的瞭解整個網路的整體狀態。
下面列舉部分 LiveNet 採用的智慧運維方案,讓內容分發網路再次升級,以符合 Live 時代的要求。
1. 監控節點健康狀況,實時下線有問題的節點
2. Failover 機制,保證服務一直可用
3. 快速擴容
LiveNet VS P2P
最後我們和 P2P 網路做一個對比:
我們發現 P2P 方案,節點的可控性和鏈路的穩定性上還有很大提升空間,比較適合在實時性要求不高的場景使用、適合長尾需求,在 Live 的場景下面多是對實時性要求比較高的重度使用者,無法忍受頻繁的 FailOver 和節點質量參差不齊帶來的網路抖動,但是如果是檔案分發就比較適合用這種混合方案,可以有效降低 CDN 廠商成本,利用共享經濟提高資源利用率。