如今這個移動網際網路時代,越來越多的人使用手機觀看影片,豐富自己的娛樂生活。
可是,大家在追劇的時候,有沒有想過一個問題——為什麼有時候明明自己的網速很快,但觀看影片時,仍然卡頓?
回答這個問題之前,我們先來做一道算術題。
以之前很火的“延禧攻略”為例,當時曾經在某影片APP實現了1千萬使用者同時線上觀看。
如果大家觀看的是1080p清晰度的影片(理論上需要4Mbps頻寬),那麼,累計需要的流量頻寬是10,000,000×4Mbps=40,000,000Mbps≈40Tbps。
對於優酷、愛奇藝這樣的網際網路影片內容提供商來說,這無疑是非常巨大的流量壓力。
我們普通計算機的網絡卡,是1Gbps的頻寬。如果是伺服器,現在有10Gbps的網絡卡(萬兆網絡卡)。
如果優酷有一臺超級伺服器,那麼,這臺超級伺服器就需要4000塊萬兆網絡卡,而且必須百分之百跑滿速度,才能夠實現這1千萬使用者的流暢觀看。
對於一些實力不夠的服務商,或者突發流量陡增的情況,就會造成擁塞,從而導致卡頓和延時。
有這麼一個說法:當用戶開啟一個頁面,等待超過4秒,他就會關閉這個頁面。也就是說,這個使用者就會流失。
這應該是大家最討厭的符號:
使用者的流失,就意味著金錢的流失。沒有任何一家網際網路服務提供商希望這樣的情況發生。所以,它們必須想方設法讓自己的內容儘快呈現,縮短使用者的等待時間,提升使用者的體驗。
而CDN,就是一項非常有效的縮短時延的技術。
▊ CDN的誕生
上世紀80年代,網際網路技術剛剛走入民用領域。
人們主要透過撥號來訪問網路,頻寬很低,使用者也很少,所以,沒有對骨幹網以及伺服器帶來壓力。
隨著網際網路的爆炸式發展,使用者越來越多,加上寬頻接入網的出現,內容源伺服器和骨幹網路的壓力越來越大,無法及時響應使用者的訪問需求。
1995年,麻省理工學院教授、網際網路的發明者之一,Tim Berners-Lee博士發現,網路擁塞越來越嚴重,將會成為網際網路發展的最大障礙。
Tim Berners-Lee
於是,他提出一個學術難題,希望有人能發明一種全新的、從根本上解決問題的方法,來實現網際網路內容的無擁塞分發。
當時Tim Berners-Lee博士的隔壁,是Tom Leighton教授的辦公室。他是一位麻省理工學院應用數學教授。
Tom Leighton
他被Berners-Lee的挑戰激起了興趣,於是他請研究生Danny C. Lewin和其他幾位頂級研究人員一起破解這個技術難題。
Danny C. Lewin
最終,他們開發了利用數學運演算法則來處理內容的動態路由演算法技術,有效地解決了這個難題。這個技術,就是CDN。
他們還為此專門成立了公司,發揮其商業價值。這個公司,就是後來鼎鼎大名的CDN服務鼻祖——Akamai公司。
▊ CDN的原理
CDN這個技術其實說起來並不複雜。它最初的核心理念,就是將內容快取在終端使用者附近。
內容源不是遠麼?那麼,我們就在靠近使用者的地方,建一個快取伺服器,把遠端的內容,複製一份,放在這裡,不就OK了?
因為這項技術是把內容進行了分發,所以,它的名字就叫做CDN——Content Delivery Network,內容分發網路。
具體來說,CDN就是採用更多的快取伺服器(CDN邊緣節點),布放在使用者訪問相對集中的地區或網路中。當用戶訪問網站時,利用全域性負載技術,將使用者的訪問指向距離最近的快取伺服器上,由快取伺服器響應使用者請求。(有點像電商的本地倉吧?)
大家可能覺得,這個不就是“映象伺服器”嘛?其實不一樣。映象伺服器是源內容伺服器的完整複製。而CDN,是部分內容的快取,智慧程度更高。
確切地說,CDN=更智慧的映象+快取+流量導流。
而且還需要注意的是,CDN並不是只能快取影片內容,它還可以對網站的靜態資源(例如各型別圖片、html、css、js等)進行分發,對移動應用APP的靜態內容(例如安裝包apk檔案、APP內的圖片影片等)進行分發。
我們來舉個例子,看看CDN的具體工作流程。
如果某個使用者想要訪問優酷的影片點播內容,那麼:
具體步驟:
②、本地DNS系統會將域名的解析權交給CDN專用DNS伺服器。
④、使用者向CDN的負載均衡裝置發起內容URL訪問請求。
⑤、CDN負載均衡裝置根據使用者IP地址,以及使用者請求的內容URL,選擇一臺使用者所屬區域的快取伺服器。
⑥、負載均衡裝置告訴使用者這臺快取伺服器的IP地址,讓使用者向所選擇的快取伺服器發起請求。
⑦、使用者向快取伺服器發起請求,快取伺服器響應使用者請求,將使用者所需內容傳送到使用者終端。
⑨、源伺服器返回內容給快取伺服器,快取伺服器發給使用者,並根據使用者自定義的快取策略,判斷要不要把內容快取到快取伺服器上。
▊ CDN的好處
採用CDN技術,最大的好處,就是加速了內容的訪問——使用者與內容之間的物理距離縮短,使用者的等待時間也得以縮短。
而且,分發至不同線路的快取伺服器,也讓跨運營商之間的訪問得以加速。
例如中國移動手機使用者訪問中國電信網路的內容源,可以透過在中國移動架設CDN伺服器,進行加速。效果是非常明顯的。
此外,CDN還有安全方面的好處。內容進行分發後,源伺服器的IP被隱藏,受到攻擊的機率會大幅下降。而且,當某個伺服器故障時,系統會呼叫臨近的健康伺服器進行服務,避免對使用者造成影響。
正因為CDN的好處很多,所以,目前所有主流的網際網路服務提供商,都採用了CDN技術。所有的雲服務提供商,也都提供了CDN服務(價格也不算貴,按流量計費)。
某某雲的CDN服務
▊ CDN的弱點
CDN雖然有很多的優點,但它並不是萬能的。在部分場景下,CDN並不是適用。
首先,CDN適用於靜態的內容,不適用動態的內容。使用者動態的實時互動資料,是難以快取的。例如一些頻繁修改的資料庫表單內容等(大家可能沒想到,直播其實也是可以使用CDN的,感興趣的同學可以搜一下“直播CDN”)。
其次,很多應用提供商和內容服務商,為了保護自身的資料私密,不允許第三方公司CDN快取他們的資料,只允許自家CDN快取自家的資料。這個對使用者體驗會造成一定影響。
第三,建設CDN意味著不菲的資金投入。不管是自己買伺服器搭建CDN,還是租用雲服務提供商的CDN服務,都需要花錢。而且,區域越多,花的錢越多。這些CDN到底有沒有人用,利用率是多少,很難精準預測。也許大部分時間裡,利用率很低,就造成了資源浪費。
▊ CDN和通訊
CDN是從傳統IT行業發展起來的一項服務。但是,對於通訊行業來說,CDN也有非常大的商業價值。
網際網路服務提供商採用CDN,是以儲存換時延。花錢購置CDN伺服器或雲計算服務,以此換取更好的使用者體驗。
通訊運營商也追捧CDN,但它們的目的,是以儲存換頻寬——透過服務“下沉”,減輕上層骨幹網路的流量壓力,避免硬體擴容,降低網路建設成本。
這個很好理解啊,如果大量的業務流量資料在骨幹網跑來跑去,骨幹網肯定吃不消,要拼命擴容。如果這些業務流量資料在底層就被解決了,那麼,骨幹網的頻寬壓力自然就減輕了。不是麼?
很多運營商已經將CDN下沉到地市級,以此減輕壓力,同時可以提升使用者體驗。
講到這裡,廣大通訊汪們是不是想到了什麼?
沒錯,這個和現在非常熱門的移動邊緣計算,有異曲同工之妙。
一直以來,隨著網路能力的不斷提升,內容資源和計算能力都在不斷“往上走”,走到雲計算中心。由一個核心雲計算中心,對所有終端節點提供服務。
結果,人們回過頭來發現,對於非常大的面積區域,非常多的使用者數量,尤其是國家級或世界級的服務,不管你把這個中心設在哪裡,也不管你這個中心的能力有多強大,都無法克服物理距離上的障礙,會導致無法忍受的延時和網路擁塞。
於是乎,人們就開始把雲計算中心進行部分“下沉”,這才有了霧計算、霾計算。甚至人們開始質疑,集中式計算是否會最終被分散式計算所取代?
區塊鏈,就是分散式計算的代表
在筆者看來,不存在誰完全取代誰的問題。不同的場景帶來不同的需求,不同的需求需要不同的網路架構。場景的多樣化是現實存在的,所以,網路架構的靈活化,也是必然的選擇。