自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

作為一名程序員,你真正了解CDN技術(shù)嗎?

開發(fā) 項(xiàng)目管理
將時光倒回到幾年前,在那時候我的老家縣城里,如果你從京東APP上購物下單,起碼需要等上個幾天時間,才能將商品送到你的手中。

 

[[282634]]

本文導(dǎo)讀:

  • 物流倉庫配送如何加速
  • 靜態(tài)資源文件部署方式
  • 靜態(tài)資源加速之CDN技術(shù)
  • 解析過程中的名詞解釋
  • 最后的總結(jié)

1、物流倉庫配送如何加速

我們還是從生活中購物的例子來展開。

將時光倒回到幾年前,在那時候我的老家縣城里,如果你從京東APP上購物下單,起碼需要等上個幾天時間,才能將商品送到你的手中。

因?yàn)樗麄兊奈锪鱾}庫中心當(dāng)時并沒有在縣城里來建設(shè),所以一般可能從地市或者省會(看做區(qū)域倉庫)物流倉庫去查找是否有庫存,如果區(qū)域物流倉庫還是沒有庫存,則可能會從北京物流倉庫(看做中心倉庫)發(fā)貨,一旦中心倉庫也無貨,那就只能從廠商進(jìn)貨了(看做源站)。

但是,現(xiàn)在不一樣了,不管你是身在一線城市還是在老家,從京東網(wǎng)站上購物(默認(rèn)以自營商品為主)下單,基本隔天就能收到貨了,快遞小哥送貨效率都是一樣的。

這就是京東強(qiáng)大的物流優(yōu)勢,將物流倉庫擴(kuò)建到離老百姓最近的地方,使得用戶購物體驗(yàn)得到了非常大的提升。

通過這個案例,我們就理解了商品送貨的加速過程。

商品有普通商品,大件商品等,這些商品最開始都是備貨到中心物流倉庫,中心物流倉庫可以認(rèn)為是幾乎是最全的商品倉庫中心。

當(dāng)區(qū)域物流倉庫建設(shè)好之后,就可以將這些商品提前備貨到區(qū)域倉庫,進(jìn)一步提高商品送達(dá)時間。

當(dāng)倉庫在縣城里建設(shè)后,就可以將這些商品提前備貨到縣城倉庫,只要倉庫離你越來越近,你下單后不需要費(fèi)那么大的周折,從區(qū)域或中心倉庫發(fā)貨了,甚至你都可以去當(dāng)?shù)貍}庫某個點(diǎn)上門自提了。

如下圖所示:

 

作為一名程序員,你真正了解CDN技術(shù)嗎?

 

縣城倉庫就是離用戶最近的倉庫,也就是在用戶與中心倉庫之間通過增加多級中間倉庫,就近發(fā)貨,加快送貨速度,提升了用戶體驗(yàn)。

2、靜態(tài)資源文件部署方式

那么,如果在網(wǎng)絡(luò)上,當(dāng)你訪問一個購物商城時,點(diǎn)擊進(jìn)入商品詳情頁,可以看到會有大量圖片以及廣告視頻,這些都屬于靜態(tài)資源,那么這些靜態(tài)資源用戶是如何訪問到的?

最開始,我們考慮部署個 Nginx 集群,每臺機(jī)器上都會存儲這些靜態(tài)資源,可以通過某個服務(wù)將文件上傳到其中一臺機(jī)器,然后 rsync 方式分發(fā)到其他 Nginx 機(jī)器上。對于小的靜態(tài)資源文件這么做沒有問題。

但是,對于圖片、視頻這些資源可能從幾M到幾百M(fèi)不等,是不建議放到 Nginx 集群上的,而且也不建議使用分布式緩存,分布式緩存本身也不建議存儲過大的Key。假設(shè)你的確這么做了,把 Nginx 集群或者分布式緩存都部署在北京機(jī)房,當(dāng)用戶訪問這些資源時,由于要經(jīng)過多個骨干網(wǎng)絡(luò)上的傳輸,會導(dǎo)致網(wǎng)絡(luò)延遲高,給你在視覺上感覺就是圖片無法加載,視頻播放卡頓的現(xiàn)象。

此時,我想你也不會有興趣在繼續(xù)等下去了,對于電商網(wǎng)站來說用戶就此流失了。

通常,我們可以將小的靜態(tài)資源文件使用 Nginx 集群當(dāng)做源站,而對于流媒體音視頻數(shù)據(jù),會使用單獨(dú)的分布式存儲作為源站。所謂源站,即你的靜態(tài)數(shù)據(jù)原始存儲的地方。為了達(dá)到高可用的、高穩(wěn)定性的目的,結(jié)合企業(yè)成本考量,一般要部署成 BGP 多線機(jī)房。

BGP 機(jī)房示意圖如下所示:

 

作為一名程序員,你真正了解CDN技術(shù)嗎?

 

所謂的 BGP,它可以實(shí)現(xiàn)讓網(wǎng)站在各運(yùn)營商線路之間實(shí)現(xiàn)互聯(lián)互通,做到所有互聯(lián)運(yùn)營商的用戶訪問網(wǎng)站都很快,結(jié)合用戶網(wǎng)絡(luò)選擇最優(yōu)質(zhì)的網(wǎng)絡(luò)鏈路。因此,BGP 機(jī)房帶寬的成本更高。

BGP 機(jī)房帶寬成本一般在80~400元/M,所以假設(shè)每 1M 流量按照 100元算,那么 1G 流量就是 10 萬塊的,如果是幾十或者上百 G流量,這個成本可想而知了。

3、靜態(tài)資源加速之 CDN 技術(shù)

在上面的案例中,我們知道了用戶訪問靜態(tài)資源,會直接訪問 BGP 源站,帶寬成本是很昂貴的。一個網(wǎng)站用戶會分布在全國各地,甚至是分布在全球,如何讓用戶更快的訪問這些靜態(tài)資源呢?

我們也可以借鑒物流倉庫的例子來理解,跟物流倉庫類似,當(dāng)然是這些靜態(tài)資源離用戶越近,訪問就越快了。由此,CDN 技術(shù)應(yīng)運(yùn)而生了。

什么是 CDN 技術(shù)?

CDN 的全稱是 (Content Delivery Network/Content Distribution Network),即內(nèi)容分發(fā)網(wǎng)絡(luò)。CDN解決的問題是在網(wǎng)絡(luò)中增加一層CACHE(緩存)層,將源站的資源分發(fā)到距離用戶最近的網(wǎng)絡(luò)"邊緣"節(jié)點(diǎn)上,使用戶就近訪問內(nèi)容,提高網(wǎng)站響應(yīng)速度,避免網(wǎng)絡(luò)擁塞,保證了用戶訪問資源的速度和體驗(yàn)。

增加 CDN 節(jié)點(diǎn)后,如下圖所示:

 

作為一名程序員,你真正了解CDN技術(shù)嗎?

 

CDN 的分發(fā)架構(gòu):

跟物流倉庫做個類比:中心倉庫物流就是相當(dāng)于 CDN 中心節(jié)點(diǎn),區(qū)域物流倉庫相當(dāng)于 CDN 區(qū)域節(jié)點(diǎn),縣城物流倉庫中心就相當(dāng)于 CDN 邊緣節(jié)點(diǎn)。

CDN 分發(fā)架構(gòu)示意圖:

 

作為一名程序員,你真正了解CDN技術(shù)嗎?

 

當(dāng)前 CDN 技術(shù)應(yīng)用是非常普遍的,有實(shí)力的公司,也會自建 CDN,而且有自己的CDN研發(fā)團(tuán)隊(duì)支撐,提供了更加穩(wěn)定可靠的 CDN 服務(wù)。但是大多數(shù)公司,還是會選擇專業(yè)的 CDN 廠商,如果你的服務(wù)部署在云上,可以選擇阿里云、騰訊云提供的 CDN 服務(wù)。此外,還可以選擇老牌的 CDN 廠商,如網(wǎng)宿和藍(lán)汛。

CDN 工作原理

那么用戶是如何訪問到離他最近的 CDN 節(jié)點(diǎn)的呢?

我們還是用一張圖來整體理解下,更加直觀:

 

作為一名程序員,你真正了解CDN技術(shù)嗎?

 

上述這張圖解決了兩個問題:

訪問域名如何映射到 CDN 地址的

如何找到離用戶最近的 CDN 節(jié)點(diǎn)

接下來,我們根據(jù)上面兩個問題,結(jié)合圖示來詳解下這個流程。

1. 訪問域名如何映射到CDN地址

當(dāng)你通過瀏覽器訪問 static.example.com 域名時,假設(shè)這就是個靜態(tài)域名,并且做了 CDN 靜態(tài)資源加速。

1)首先會經(jīng)過本地 DNS 解析器,查看下本機(jī) /etc/hosts 文件是否存在域名對應(yīng)的IP,如果找到,直接使用該 IP 發(fā)起請求。否則,執(zhí)行步驟2)。

2)由于本地 DNS 服務(wù)器解析,如果在本地 DNS 緩存中找到域名對一個IP,則直接用該 IP 訪問。否則,繼續(xù)步驟3)。

3)本地 DNS 服務(wù)器會向根域名服務(wù)器發(fā)起請求,根域名服務(wù)器返回頂級 DNS 域名服務(wù)器地址,讓你去它那里查找。

4)本地 DNS 服務(wù)器會向頂級 DNS 域名服務(wù)器發(fā)起請求,.com 頂級域名服務(wù)器返回權(quán)威 DNS 域名服務(wù)器地址,讓你去它那里查找。

5)本地 DNS 服務(wù)器繼續(xù)向 example.com 權(quán)威 DNS 域名服務(wù)器發(fā)起請求,權(quán)威 DNS 域名服務(wù)器一看這個域名我能解析,發(fā)現(xiàn)是有做過CDN加速域名配置,它會 CNAME 到 static.xxx.example.cdn.com 域名。

到此,其實(shí)我們通過訪問靜態(tài)域名 static.example.com 經(jīng)過一番波折,終于找到了 CDN 域名地址。

如果你不需要找離用戶最近的節(jié)點(diǎn),通過 static.xxx.example.cdn.com 域名就可以找到正確的 IP 地址了。

2. 如何找到離用戶最近的 CDN 節(jié)點(diǎn)

結(jié)合上圖,繼續(xù)解析如果找到距離用戶最近的 CDN 節(jié)點(diǎn)。

1)本地 DNS 服務(wù)器會將 static.xxx.example.cdn.com 會向第一層 GSLB 全局負(fù)載均衡發(fā)起請求,第一層全局負(fù)載均衡會根據(jù)用戶所在運(yùn)營商網(wǎng)絡(luò)分析,比如移動運(yùn)營商,返回 CNAME 到如 static.yd.example.cdn.com 域名地址。

2)本地 DNS 服務(wù)器會繼續(xù)向第二層 GSLB 全局負(fù)載均衡發(fā)起請求,第二層全局負(fù)載均衡依據(jù) DNS 地理位置判斷,返回 SLB CDN 負(fù)載均衡地址。

3)本地 DNS 服務(wù)器從返回的多個 CDN 節(jié)點(diǎn) IP 中,可以通過本地簡單輪詢的方式去選擇一個 CDN IP 訪問。

此時,最終通過 GSLB 全局負(fù)載均衡找到的這些 CDN 節(jié)點(diǎn),就是離用戶最近的 CDN 節(jié)點(diǎn)了。

3.什么是 GSLB?

GSLB(Global Server Load Balance),即全局負(fù)載均衡,它的含義是對于部署在不同地域的服務(wù)器之間做負(fù)載均衡。一方面可以讓流量均衡負(fù)載到它下面的服務(wù)器上,另一方面能根據(jù)地理位置判斷,找到離用戶最近的服務(wù)器。

找到了離用戶最近的 CDN 節(jié)點(diǎn),并不一定能直接從該 CDN 節(jié)點(diǎn)上獲取對應(yīng)的資源,如果資源不存在,會繼續(xù)從上級區(qū)域或中心 CDN 節(jié)點(diǎn)查找,如果都不存在,最終就會回源到源站獲取資源,然后設(shè)置 CDN 緩存失效時間。

一般對于一些小的靜態(tài)資源文件,存儲在源站,由 CDN 節(jié)點(diǎn)主動拉取方式來訪問的。

對于大的音視頻流媒體文件,可以通過 CDN 廠商提供的接口提前將資源寫入到 CDN 某一個節(jié)點(diǎn)上,再由 CDN 內(nèi)部機(jī)制將資源分發(fā)到其他 CDN 節(jié)點(diǎn)上。

但是,即使主動同步資源,也是存在延時的,最終可能會導(dǎo)致回源,而回源帶寬成本又是很大的。所以,我們在使用 CDN 的時候就有必要關(guān)注 CDN 命中率和源站帶寬情況。

4、解析過程中的名詞解釋

CNAME( Canonical Name ):

它可以將一個域名解析到另外一個域名。

舉個例子:

當(dāng)你使用 docs.example.com 去訪問一些資源時,希望通過 docs-xyz.example.com 也能訪問相同的這些資源,你可以在 DNS 解析服務(wù)商添加一條 CNAME 記錄,將 docs-xyz.example.com 指向 docs.example.com,添加后,所有訪問 docs-xyz.example.com 的請求都會被轉(zhuǎn)發(fā)到 docs.example.com 域名。

CNAME 域名:

接入 CDN 時,在 CDN 廠商控制臺添加完加速域名后,會得到一個 CDN 給你分配的 CNAME 域名, 需要在你的 DNS 解析服務(wù)商添加 CNAME 記錄,將自己的加速域名指向這個 CNAME域名,這樣該域名所有的請求才會都將轉(zhuǎn)向 CDN 的節(jié)點(diǎn),達(dá)到加速效果。

DNS (Domain Name System):

域名解析服務(wù)。

將域名解析為網(wǎng)絡(luò)上可識別的IP地址。服務(wù)器之間認(rèn)識的都是IP,但用戶習(xí)慣記憶的都是域名,所以域名與IP地址之間關(guān)系是一對一的。它們之間的轉(zhuǎn)換工作,就稱為域名解析,由專門的解析器來完成域名解析,可參見上述圖中的 DNS 解析過程。

5、最后的總結(jié)

大家可能覺得作為一名工程師,離上述提到的 CDN 技術(shù)很遙遠(yuǎn),忽略 CDN 技術(shù)的重要性,好像都是運(yùn)維干的事情,與我何干。這個想法是錯誤的,咱們的思維不能太過于局限,如果你做一些直播、視頻相關(guān)技術(shù),多多少少肯定能接觸到這塊的技術(shù)。

你有沒有考慮過抖音、快手上的短視頻的整個流程,A城市用戶上傳視頻后,經(jīng)過轉(zhuǎn)碼分發(fā)后,B城市用戶很快就能看到了,視頻播放也是非常流暢,這其中也是得益于 CDN 分發(fā)技術(shù)的應(yīng)用。

本文通過引入物流倉庫的例子與 CDN 技術(shù)做個類比,對于 CDN 分發(fā)架構(gòu)有了感官認(rèn)識。

同時對 CDN 解析工作原理做了進(jìn)一步剖析,大家通過 CDN 工作原理分析的那張圖好好理解一下,里面包含了 DNS 解析的詳細(xì)過程,DNS GSLB 是如何查找離用戶最近節(jié)點(diǎn)的。

CDN 是各大系統(tǒng)的門面,更擅長緩存靜態(tài)數(shù)據(jù)、圖片、流媒體數(shù)據(jù)。CDN 作為一種特殊的緩存,它的命中率和高可用性也是我們需要重點(diǎn)關(guān)注的。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2023-12-05 18:22:12

Go程序員Zig

2011-11-09 13:52:04

程序員

2013-02-22 10:21:06

2015-05-15 10:39:44

Java 冠軍程序員?

2019-01-28 11:54:28

程序員技能溝通

2009-11-04 11:54:33

程序員職業(yè)水準(zhǔn)

2011-04-11 17:41:35

C++程序員

2014-12-26 10:13:41

程序員

2021-06-30 10:48:30

VueReact前端

2015-07-28 10:39:34

程序員知識

2017-09-21 09:44:00

編程程序員軟件開發(fā)

2011-05-03 08:54:36

2012-12-12 09:52:18

程序員

2021-02-21 13:49:48

Java程序員開發(fā)

2010-10-28 13:21:47

2018-02-02 16:41:01

程序員編程Web

2010-12-20 09:26:44

SQL索引

2014-10-10 13:57:17

程序員

2021-03-12 16:17:37

程序員 女性主義兩性 價值觀

2019-11-20 10:12:32

程序員 東漢崗位
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號