程序員每天提及的無數(shù)詞當(dāng)中,有一個(gè)是「CDN」,Ta的中文名是「內(nèi)容分發(fā)網(wǎng)絡(luò)」,讀中文是令人蒙逼的,英文名是Content Delivery Network。
CDN有啥用呢?它主要用來解決什么問題呢?它的原理大概是怎么樣的呢?
我們先拆解下這三個(gè)名詞。
CDN專注于「內(nèi)容」,也就是CDN的C所代表的Content,專注于靜態(tài)資源的分發(fā)和訪問,比如一張圖片,一個(gè)文本文件,一個(gè)視頻,一個(gè)css,一個(gè)JS等等,任何以文件形式存儲(chǔ)的,為了提高在互聯(lián)網(wǎng)上的訪問速度和質(zhì)量,都可以將這個(gè)資源部署在CDN這個(gè)網(wǎng)絡(luò)上。
CDN動(dòng)作是「分發(fā)」,也就是如何讓剛才提到的那些「內(nèi)容」快速的部署在這個(gè)網(wǎng)絡(luò)中,從而快速為用戶服務(wù),其實(shí)還有一層更重要的含義是用戶的快速訪問與就近接入,分發(fā)的目的是為了用戶更好的體驗(yàn)。
CDN落定于「網(wǎng)絡(luò)」,是部署于全國(guó)或者全世界的一大堆服務(wù)器,這些服務(wù)器基于當(dāng)前互聯(lián)網(wǎng)的基礎(chǔ)架構(gòu)在其上層再構(gòu)成一個(gè)網(wǎng)絡(luò),這個(gè)網(wǎng)絡(luò)專為資源分發(fā)而生。
解釋清楚了這三個(gè)詞,我們可以推導(dǎo)出CDN的作用是:CDN廠商構(gòu)建了一個(gè)基于互聯(lián)網(wǎng)數(shù)量巨大的服務(wù)器,專注于內(nèi)容和資源分發(fā),方便用戶快速訪問,提升用戶體驗(yàn)的一個(gè)內(nèi)容網(wǎng)絡(luò)。
為什么CDN專注于提供這項(xiàng)服務(wù)有不錯(cuò)的市場(chǎng)呢?或者說沒有CDN網(wǎng)絡(luò),會(huì)發(fā)生什么呢?
首先要說的是應(yīng)用服務(wù)器和資源服務(wù)器應(yīng)該解耦,也就是應(yīng)用服務(wù)器只處理邏輯,而資源服務(wù)器存放內(nèi)容或者叫資源。術(shù)業(yè)有專攻,如果混在一起,會(huì)拖慢應(yīng)用服務(wù)器的速度,如果沒有CDN來專門處理資源,那所有的資源部署可能會(huì)離用戶很遠(yuǎn),保證不了體驗(yàn),專業(yè)的CDN服務(wù)商專注于這里,并且規(guī)模也讓成本不斷下降,就像許多公司周邊產(chǎn)品都是外包出去,自己也可以做,只不過專門生產(chǎn)禮品的公司會(huì)更有效率、更專業(yè)、價(jià)格也更低、不耗費(fèi)自己公司的人力資源。
假設(shè)你在創(chuàng)業(yè),那如果你只租用了一臺(tái)服務(wù)器,并把資源也放在這個(gè)服務(wù)器上,那和把資源放在CDN上對(duì)于全國(guó)用戶的體驗(yàn)會(huì)差很遠(yuǎn),假設(shè)服務(wù)器在北京,那廣東的用戶要走更長(zhǎng)的路,而且還處理不了跨運(yùn)營(yíng)商訪問等等一系列問題。
那CDN的原理是什么呢?為什么用戶可以接入離他最近的服務(wù)器呢?這個(gè)問題以前敘述過,主要是利用了DNS來判斷用戶位置,再返回給用戶最近的機(jī)房的服務(wù)器的資源地址。
肯德基的總部在美國(guó),可是你家樓下也有一家肯德基,并且漢堡包是一模一樣的,這就是CDN(這個(gè)比喻來自知乎,覺得非常的恰當(dāng))??系禄渴鹆撕芏鄠€(gè)CDN在世界各地提供服務(wù),用戶都是找到最近的店,這個(gè)計(jì)算過程就是剛才講的「就近接入」。
在一個(gè)商圈有兩家肯德基,有一家組織活動(dòng),雞腿隨便吃,所以顧客全部涌到這家店,已經(jīng)水泄不通,另一家店則門可羅雀。這個(gè)時(shí)候CDN的調(diào)度功能就要發(fā)揮作用了,另一家店也發(fā)布了一個(gè)消息說,買一個(gè)漢堡,打五折。這個(gè)時(shí)候,在第一家店搶不上雞腿的顧客,馬上跑去了第二家店,這個(gè)時(shí)候兩個(gè)店的流量處于均衡狀態(tài)。這就是CDN的調(diào)度。
美國(guó)肯德基總部研發(fā)了一個(gè)新菜,叫「回鍋肉漢堡」,這個(gè)時(shí)候總部要把這個(gè)「內(nèi)容」向全世界分發(fā),讓每一個(gè)分店,都能開始賣回鍋肉漢堡,好讓新老產(chǎn)品能夠并駕齊驅(qū),這個(gè)就是內(nèi)容分發(fā)網(wǎng)絡(luò)的「分發(fā)」。這個(gè)時(shí)候你要吃回鍋肉漢堡的時(shí)候,直接去你家樓下就可以了。
總結(jié)一下,CDN是一種資源的分布式存放和備份的方法。