網絡應用(3):CDN與P2P的概念
我前面說了流量的概念,流量是使用網絡時經常要考慮的一個因素--如何才能更快的使用流量,如何才能節省流量使用的成本,對於這樣的問題,你可能要了解一下什麽是cdn,什麽是p2p。
(1)cdn是什麽
cdn是一個基於已有的internet網絡而進行擴展的網絡系統,叫作內容分發網絡,content delivery network。
搭建cdn網絡的思路,是在網絡邊緣,也就是接入網絡的設備(用戶)的地方,增加服務結點,再通過各種策略,把用戶劃分到不同的cdn結點,並讓用戶能在最短的時間獲取到數據。
為什麽可以更快拿到數據?我可以更簡單地解釋:在沒有cdn之前,你需要到經過一個很曲折的小路去看電影,而有了cdn後,cdn直接把電影緩存過來了,而且,cdn就在你面前,你直接看電影就好了,這個道理,跟“就近救援”或“就近配送”是一個道理。所以,cdn的根本就是緩存(而它跟源服務間是高速公路,數據很快就傳過來),讓用戶就近取數據,而不是走長長的小路去取數據--極端一點,每個用戶都配一臺緩存服務器。
cdn的基本意圖,是讓用戶更快更穩地取得數據。cdn最基本的作用是加速,但隨著時代的發展,cdn提供的服務已經遠不僅加速的功能,還有預緩存、支持https等諸多功能。
為了提升服務體驗,以及其它考慮,很多公司都接入了cdn,或自建cdn。
cdn服務商有很少,比如阿裏雲cdn、百度、騰訊、七牛、網宿等。
這時,不可避免要考慮一個問題,cdn的使用,是占用帶寬的(當然,不使用cdn而使用緩存服務器,也一樣占用帶寬),而這個帶寬的使用,相當使用了運營商修建的道路,是要給錢的。一般來說,按帶寬的使用來計費(具體可能按月的帶寬峰值,也可能按實際使用來分攤到月,等等。),而在某些場景,比如直播、視頻播放等,在客戶端從cdn或緩存服務器獲取數據時,服務器占用了很大的帶寬。
加一個題外話,怎麽從流量換算出帶寬?一般來說,很容易統計到文件下載(或被試聽)的次數,根據文件的大小與一天的下載的次數,就可以算出一天產生的流量,比如小程的服務器的一個語音文件是250kB,如果一天有100次播放,那一天的流量就是(250*100)=25000kB。再把流量分攤到每一秒,就是帶寬(bps):25000*1024*8/(24*60*60)=204800000/86400=2370bps,也就是一天占用的帶寬是2.3k左右。這是一天的帶寬,一般來說,一個月內會產生峰值(比如活動日或周末等),這時的帶寬可能是正常的幾倍,比如3倍,那就是6.9k。然後,根據這個6.9k來計算要給多少錢(先問一下運營商或cdn服務商,1m帶寬要多少錢)。
那麽,有沒有辦法,減少服務器帶寬的占用,從而節省費用的開銷呢?
(2)p2p是什麽
p2p,peer to peer,是點到點的數據交換的網絡技術。
對比cdn跟p2p的網絡結構,很容易看出它們的差別。對於cdn,客戶端之間的數據交換,需要經過cdn服務器來轉發,因此,服務器帶寬成本是一個問題(如上所述)。對於p2p,客戶端之間可以直接交換數據而不經cdn服務器,所以理論上可以大幅節省帶寬成本。註意,客戶端間直接交換數據,會使用用戶的流量,但一般是在wifi或帶寬網絡下才使用流量,而帶寬網絡一般是以帶寬或速度來收費的,也就是這時使用多少流量並不需要用戶來買單。
所以,如果為了節省cdn的帶寬成本,p2p是一個可以考慮的技術。
一個簡單的p2p應用的結構圖是這樣的:
網絡應用(3):CDN與P2P的概念