1. 程式人生 > >網路應用(3):CDN與P2P的概念

網路應用(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應用的結構圖是這樣的:


相關推薦

網路應用3CDNP2P概念

我前面說了流量的概念,流量是使用網路時經常要考慮的一個因素--如何才能更快的使用流量,如何才能節省流量使用的成本,對於這樣的問題,你可能要了解一下什麼是cdn,什麼是p2p。 (1)cdn是什麼 cdn是一個基於已有的internet網路而進行擴充套件的網路系統,叫作內容分發網路,content delive

網絡應用3CDNP2P概念

公司 等等 語音 轉發 獲取數據 服務 live 及其 直播 我前面說了流量的概念,流量是使用網絡時經常要考慮的一個因素--如何才能更快的使用流量,如何才能節省流量使用的成本,對於這樣的問題,你可能要了解一下什麽是cdn,什麽是p2p。 (1)cdn是什麽 cdn是一個基於

網路應用2流量位元速率等 | 流量、頻寬、速度、位元速率

架設網路,按規定,需要拿到工信部頒發的營業執照。我們使用的網路,由運營商提供。運營商指的是網路運營商(提供網際網路服務的組織,也叫ISP),包括:移動、電信、網通、鐵通、長城、天威、教育網、廣電、方正,等等。 現在,運營商提供網路,是收費的,收費的理由,主要還是運營商提供了通道(基站建議等),就相當收路費。那

卷積神經網路簡單的應用目的資料

目的構建一個卷積神經網路對性別以及美麗程度(beautiful or handsome)進行識別。資料準備模型中採用的資料來自百度搜索資料,為了效率可採用爬蟲(大家可以在以下相關程式碼上進行更改):http://blog.sina.com.cn/s/blog_13927ddb50102w2m1.html,下圖

網路應用6http報文結構curl的使用

http是一個協議,協議就是約定、規定,先不管為什麼這麼約定有什麼高深的東西,為了解決具體問題,我們先要能使用協議,理解協議中對我們有用的那部分資料,是的,我們不是研究生,更不是純研究,所有的研究都要由具體的問題來驅動。 那這裡的具體問題是什麼?就是看懂http的請求跟回覆啊,就像寫某某申請一樣,你不理申請最

網路應用8http的封裝使用

之前講過http的協議,怎麼約定請求或響應的行、頭、體,也介紹怎麼使用curl來完成http的請求。這一次,再接再厲,換一個角度換一些角色,再次說http的封裝與使用。反正目的只有一個:加深對http協議的理解。 (1)tcp的實現 說http的實現,非講tcp不可(為什麼?後面會解釋),而之前講tcp協議的

C++網路程式設計實戰專案--Sinetlib網路3——事件迴圈跨執行緒呼叫

上一篇文章講了Reactor模式的關鍵結構I/O複用和事件分發,現在我們來關注一下它們的使用。 事件迴圈 我們已經實現了一個Epoller類來實現I/O複用,具體的使用方法就是Epoller::Poll()函式等待事件的發生,該函式有一個超時時間,超過這個時間即

新手學python3yield序列化

1 Yield生成器        Yield是我在其他語言中沒有見過的一個屬性,算是python的一大特色,用好之後可以使程式碼更簡潔。考慮一個簡單的例子,檔案的遍歷。要遍歷一個目錄下的所有檔案需要遞迴的操作。如果我們只是單純的列印檔名,我們可以在遞迴的過程中完成,每當發

Why Java Sucks and C# Rocks3AttributeAnnotation

上一篇文章裡我談了Java和C#語言中對於基礎型別的不同態度,我認為C#把基礎型別視做物件的做法比Java更有“萬物皆物件”的理念,使用起來也更為方便。此外,C#擁有一個Java 1.4所不存在的特性,即Attribute(自定義特性),而在之後的Java 5.0中也增加了類似的功能,這便是Annotatio

[Python]網路爬蟲OpenerHandler

在開始後面的內容之前,先來解釋一下urllib2中的兩個個方法:info and geturl  urlopen返回的應答物件response(或者HTTPError例項)有兩個很有用的方法info()和geturl() 1.geturl(): geturl()返回獲

小朋友學C++3物件

(一)類與物件 類是由我們根據客觀事物抽象而成,形成一類事物,然後用類去定義物件,形成這類事物的具體個體。 比如小狗是一個類,你家的“旺財”則是小狗一個具體的物件。 (二)屬性與方法 一般把類的資料成員稱為類的屬性,把類的函式成員稱為方法。 比如小

網路應用1抓包獲取APP的重要資訊 | charles

小白:何為抓包? 小程:就是截獲網路上收發的資料包。 小白:網路上那麼多資料包,怎麼知道哪些是有用的? 小程:只截獲目標app的資料包就縮小了範圍,但即便是縮小了範圍,也需要進一步分析與排查。 小白:在垃圾堆裡找壞人的行動時間與地點嗎?這是使徒行者2的橋段啊,你有沒有看過? "抓

網絡應用2流量碼率等 | 流量、帶寬、速度、碼率

相對 鐵通 yun 質量 基礎概念 來看 語音 無線 人在 架設網絡,按規定,需要拿到工信部頒發的營業執照。我們使用的網絡,由運營商提供。運營商指的是網絡運營商(提供互聯網服務的組織,也叫ISP),包括:移動、電信、網通、鐵通、長城、天威、教育網、廣電、方正,等等。 現在,

網路應用4塊的概念 | Range

分塊來處理,也算是自然的想法,就是化整為零。而於對於檔案的下載同樣使用這個道理,既可整體下載,也可分塊下載。 小程這裡以http協議為例,來看一下塊的概念與使用。 http的range http1.0請求與返回檔案都是整體,不支援“只拿一部分資料”,伺服器也不支援斷點續傳(因為不支援從某個點開始拿部分資料),

Matplotlib資料視覺化3文字

  在一幅圖表中,文字、座標軸和影象的是資訊傳遞的核心,對著三者的設定是作圖這最為關心的內容,在上一篇部落格中雖然列舉了一些設定方法,但沒有進行深入介紹,本文以圍繞如何對文字和座標軸進行設定展開(對影象的設定在後續介紹到各種圖繪製時介紹)。 這裡所說的文字是指在使用matplot

python應用3啟用整合開發工具pycharm

之前寫了個python程式給自己用,寫程式碼時用的是macvim(vim的一種),macvim是個編輯工具,由於我已經設定過對python等各種語言的支援特性,所以什麼縮排、對齊、高亮之類的表現都有,寫起程式碼來非常舒服。可是,不是人人都用這個古老的vim工具的,而如果在普通的記事本上寫程式碼,那又是非常痛苦

Redis專題3鎖的基本概念到Redis分散式鎖實現

拓展閱讀:Redis閒談(1):構建知識圖譜 Redis專題(2):Redis資料結構底層探祕 近來,分散式的問題被廣泛提及,比如分散式事務、分散式框架、ZooKeeper、SpringCloud等等。本文先回顧鎖的概念,再介紹分散式鎖,以及如何用Redis來實現分散式鎖。 一、鎖的基本瞭解 首先,回顧一下我

iOS應用架構談3網路層設計方案

前言 網路層在一個App中也是一個不可缺少的部分,工程師們在網路層能夠發揮的空間也比較大。另外,蘋果對網路請求部分已經做了很好的封裝,業界的AFNetworking也被廣泛使用。其它的ASIHttpRequest,MKNetworkKit啥的其實也都還不錯,但前者已經棄坑,後者

卷積神經網路簡單的應用模型構建訓練

模型構建文中採用了Tensorflow框架進行模型的構建,這裡簡單介紹下Tensorflow的安裝(在Anaconda上安裝):⑴Anaconda安裝:https://www.anaconda.com/download/,選擇支援py36的版本;⑵直接在命令列中安裝Tenso

Linux同步相互排斥應用基礎概念

使用 line 關系 並發執行 來看 文章 必須 生產者 而且 【版權聲明:尊重原創,轉載請保留出處:blog.csdn.net/shallnet 或 .../gentleliu,文章僅供學習交流,請勿用於商業用途】 當操作系統進入多道批處理