CDN,內(nèi)容分發(fā)網(wǎng)絡(luò),是大多數(shù)互聯(lián)網(wǎng)業(yè)務(wù)里必不可少的部分,但大多數(shù)互聯(lián)網(wǎng)從業(yè)人員不是特別清楚CDN究竟是什么,以及它可以為我們做哪些事情。
我們還是從之前介紹的《不同的人看到的直播為什么不一樣?》這篇文章切入,講講CDN是什么。
從直播說起
還記得這個(gè)圖吧,直播的主播通過自己的手機(jī)把“視頻圖”發(fā)給了觀眾,觀眾收到后,在APP里把每個(gè)圖顯示出來,形成了視頻?,F(xiàn)實(shí)的情況是,一個(gè)主播不可能只為一個(gè)觀眾服務(wù),可能有很多個(gè)觀眾需要觀看,如果是3個(gè)觀眾,那么就會(huì)是這樣了:
圖里的方式是主播把相同的數(shù)據(jù)同時(shí)傳給3個(gè)不同的觀眾,這當(dāng)然是非常愚蠢的方式,同樣的數(shù)據(jù)被傳了3次,主播端的瓶頸非常明顯,比如有1000個(gè)觀眾同時(shí)觀看的時(shí)候,主播端根本無法承擔(dān)這么多的數(shù)據(jù)傳輸。
第一臺服務(wù)器出現(xiàn)了
所以呢,很容易想到的方法是,主播把數(shù)據(jù)傳給一個(gè)中間服務(wù)器,由服務(wù)器充當(dāng)把數(shù)據(jù)發(fā)給不同用戶的角色,也就是這樣(圖片1-6我們先用“數(shù)據(jù)”代替了):
這樣的話,就用了性能強(qiáng)大的服務(wù)器來代替了主播傳輸數(shù)據(jù)的工作,給服務(wù)器提出的要求是:
第一,能夠接收來自主播的傳輸數(shù)據(jù);第二,能夠把數(shù)據(jù)下發(fā)到觀眾APP.于是,服務(wù)器這時(shí)候便被定義了兩個(gè)身份,第一,推流節(jié)點(diǎn)(接收來自主播端的上行推流);第二,分發(fā)節(jié)點(diǎn)(把視頻流分發(fā)給不同的觀眾)。這就是簡單的推流和分發(fā)概念。
由于服務(wù)器的強(qiáng)大能力,它不甘心只把數(shù)據(jù)接收過來再分發(fā)下去,而是要干更多的事情。比如說,給主播的臉上做個(gè)特效、給直播畫面上加上公司的logo水印、或者是擔(dān)心有主播直播違(hao)禁(kan)的畫面,在服務(wù)器上做個(gè)鑒黃等等吧。這時(shí)候,服務(wù)器的定義有發(fā)生了改變,它被稱為了“流媒體處理中心”。
觀眾數(shù)進(jìn)一步增大會(huì)怎樣?
服務(wù)器也是有瓶頸的,例如,通常服務(wù)器的網(wǎng)卡是1G的,一路直播視頻的帶寬需求是1M左右,不考慮別的因素,一臺服務(wù)器的網(wǎng)卡最多可以同時(shí)分發(fā)1000路直播就達(dá)到瓶頸了。那么,如果有3000個(gè)觀眾觀看的時(shí)候,怎么辦?
當(dāng)然,我們可以放3個(gè)服務(wù)器嘛,每個(gè)服務(wù)器分發(fā)1000路,總共就3000路了。于是就變成了這樣:
又發(fā)現(xiàn)問題了,主播又要向服務(wù)器1、2、3分別發(fā)送3份數(shù)據(jù)了,按照之前的思路,我們可以這么來優(yōu)化:在服務(wù)器1、2、3之前,放一個(gè)服務(wù)器-0,它的作用是接收主播推流,再把數(shù)據(jù)交給服務(wù)器1、2、3.由于服務(wù)器1、2、3給1000名觀眾分發(fā)的數(shù)據(jù)都是一樣的,所以呢,他們就把數(shù)據(jù)在自己服務(wù)器上存儲了一份。
概念:負(fù)載均衡、CDN緩存、回源、就近原則
在這樣的架構(gòu)下,會(huì)延伸出這樣的幾個(gè)概念:
當(dāng)觀眾人數(shù)不太多的時(shí)候,例如總共只有1000人,那么是選擇讓某一臺服務(wù)器服務(wù)這1000人,還是3臺服務(wù)器分擔(dān)1000人,還是2臺?機(jī)器也會(huì)有新舊之分,老機(jī)器只能抗800數(shù)量,那要怎么來分配呢?等等問題。這里就需要有一個(gè)策略來做資源的分配。這個(gè)策略叫做:負(fù)載均衡。
因?yàn)橛^眾看到的數(shù)據(jù)都是一樣的,所以呢,數(shù)據(jù)會(huì)在服務(wù)器1、2、3上都存儲一份。這個(gè)概念叫做:CDN緩存。
當(dāng)分配到服務(wù)器1的第一個(gè)觀眾進(jìn)入時(shí),服務(wù)器1是沒有存儲數(shù)據(jù)的,它會(huì)向服務(wù)器-0獲取數(shù)據(jù),這個(gè)過程叫做:回源;相應(yīng)的,服務(wù)器-0被稱為:源站;觀眾請求的數(shù)據(jù)如果由CDN緩存提供,叫做緩存命中,所有用戶請求的緩存命中比例叫做緩存命中率,它是衡量CDN質(zhì)量的關(guān)鍵指標(biāo)。