新聞中心
概述
CDN? 的全稱是 Content Delivery Network,即內(nèi)容分發(fā)網(wǎng)絡(luò),基本思路是: 盡可能避開互聯(lián)網(wǎng)上有可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié), 使內(nèi)容傳輸?shù)酶旄€(wěn)定。

為武邑等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及武邑網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站建設(shè)、武邑網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
圖片來源: https://www.researchgate.net/figure/Content-Delivery-Network_fig1_221632001
CDN 技術(shù)原理
CDN? 的 基本原理為反向代理,反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受 Internet? 上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器, 并將從服務(wù)器上得到的結(jié)果返回給 Internet? 上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個節(jié)點服務(wù)器。通過部署更多的反向代理服務(wù)器,來實現(xiàn) 多節(jié)點 CDN 架構(gòu)。
CDN? 主要使用了 負載均衡、動態(tài)路由? 和 內(nèi)容壓縮 來提高其性能和可靠性:
? 分布式存儲: 采用可擴展的系統(tǒng)架構(gòu),利用多節(jié)點、多位置、多種方式存儲數(shù)據(jù)
? 負載均衡: 可以將流量均勻地分配到多個節(jié)點服務(wù)器上,從而避免某些服務(wù)器過度負載而導致響應(yīng)時間延遲
? 動態(tài)路由: 可以根據(jù)網(wǎng)絡(luò)流量和服務(wù)器負載情況來選擇最優(yōu)的路徑和服務(wù)器來響應(yīng)用戶請求
? 內(nèi)容壓縮: 可以將內(nèi)容文件壓縮到更小的體積,以減少網(wǎng)絡(luò)傳輸?shù)臅r間和成本
簡單地理解,CDN 就是客戶端和真實服務(wù)器之間的一層高效的緩存。
傳統(tǒng)網(wǎng)站訪問過程
在說明 CDN? 的技術(shù)優(yōu)勢之前,我們先來看看傳統(tǒng)網(wǎng)站的 HTTP 請求 訪問過程。大部分開發(fā)者應(yīng)該都熟悉 HTTP 協(xié)議基礎(chǔ)流程,下面以請求一個圖片文件來舉例說明。
1.客戶端瀏覽器輸入網(wǎng)址,如 https://www.example.com/logo.png
2.瀏覽器請求 DNS? 服務(wù)器,查詢 https://www.example.com/logo.png? 對應(yīng)的源服務(wù)器 IP 地址
3. DNS 服務(wù)器返回對應(yīng)的 IP 地址
4. 瀏覽器向服務(wù)器發(fā)起 TCP 連接
5. 瀏覽器通過建立的 TCP? 連接發(fā)送 HTTP 請求圖片文件
6. 服務(wù)器向瀏覽器發(fā)送圖片文件
7. 瀏覽器將接收到的圖片文件渲染,完成本次請求
傳統(tǒng)網(wǎng)站訪問過程
如果我們要加入 CDN 的話,是加到哪個步驟呢?
根據(jù)上面描述的步驟不難發(fā)現(xiàn),從第 3 步開始,客戶端瀏覽器就和真實的服務(wù)器開始建立連接了,連接建立完成后,客戶端瀏覽器就直接從服務(wù)器獲取數(shù)據(jù), 這顯然不是我們需要的,因為這樣所有的客戶端都會直接連接服務(wù)器,會嚴重增加服務(wù)器的負載。
我們再來看第 2 步,瀏覽器在訪問真實的服務(wù)器之前,會先通過 DNS? 查詢域名對應(yīng)源服務(wù)器的 IP? 地址,如果 DNS? 返回的是 CDN? 服務(wù)器的 IP? 地址, 那么后面的流程就會變?yōu)? 客戶端瀏覽器就直接從 CDN? 服務(wù)器獲取數(shù)據(jù),接下來的工作就會全部轉(zhuǎn)交給 CDN 了,如何完成這項工作呢?
將域名 www.example.com 的 CNAME 記錄解析到 CDN 服務(wù)商即可,CDN 服務(wù)商的 DNS 服務(wù)器也稱為權(quán)威服務(wù)器 (細節(jié)請看上篇文章: DNS 原理)。
接入 CDN 網(wǎng)站訪問過程
1. 客戶端瀏覽器輸入網(wǎng)址,如 https://www.example.com/logo.png
2. 瀏覽器請求 DNS? 服務(wù)器,查詢 https://www.example.com/logo.png? 對應(yīng)的服務(wù)器 IP 地址
3. 由于域名的 CNAME? 記錄解析到了 CDN? 服務(wù)商,所以這里 DNS? 服務(wù)器會返回 CDN? 服務(wù)商提供的 CDN 節(jié)點服務(wù)器的地址
4. 瀏覽器向 CDN? 節(jié)點服務(wù)器發(fā)起 TCP 連接
5. 瀏覽器通過建立的 TCP? 連接發(fā)送 HTTP 請求圖片文件
6. CDN? 節(jié)點服務(wù)器使用內(nèi)部專用 DNS? 解析出域名對應(yīng)的源服務(wù)器 IP 地址
7. CDN 節(jié)點服務(wù)器向源服務(wù)器發(fā)起TCP連接
8. CDN? 節(jié)點服務(wù)器通過建立的 TCP? 連接發(fā)送 HTTP 請求圖片文件
9. CDN 服節(jié)點務(wù)器接收到圖片文件后,在本地保存一份,作為緩存使用,減少源服務(wù)器的回源流量
10. CDN 節(jié)點服務(wù)器向瀏覽器發(fā)送圖片文件
11. 瀏覽器將接收到的圖片文件渲染,完成本次請求
接入 CDN 網(wǎng)站訪問過程
中央節(jié)點如何選擇提供服務(wù)的 CDN 節(jié)點
一般會綜合考慮以下幾個方面:
- ? 網(wǎng)絡(luò)成本
- ? 流量分布
- ? 源站負載
- ? 地理位置
這里以 地理位置 舉例說明:
- 1. 用戶訪問 CDN? 服務(wù)商的權(quán)威 DNS 服務(wù)器
- 2. DNS? 服務(wù)器獲取用戶的 IP 地址
- 3. 根據(jù)用戶 IP 地址查詢用戶所在地
- 4. 返回離用戶最近的 CDN? 節(jié)點的 IP? 地址,比如用戶離北京近,就返回北京的 CDN? 節(jié)點的 IP 地址
按照地理位置訪問 CDN 節(jié)點過程
如何提高 CDN 緩存命中率
- ? 在流量高峰來臨前,將熱門資源提前預(yù)熱到 CDN 節(jié)點
- ? 合理配置文件緩存過期時間,如將靜態(tài)文件緩存過期時間設(shè)置為 1 個月甚至更久
- ? 消除 URL 中文件名稱后面的參數(shù),如 https://www.example.com/logo.png? 和 https://www.example.com/logo.png?versinotallow=123 應(yīng)該被視作同一個文件處理
- ? 超大文件設(shè)置分片回源策略,如 視頻文件?, APP 安裝包 等
不適合使用 CDN 的場景
- ? 請求客戶端和服務(wù)器物理距離很近,比如同機房、同機架的內(nèi)網(wǎng)服務(wù)
- ? 用戶分布在同一地理區(qū)域,如同城服務(wù)、本地門戶網(wǎng)站
- ? 動態(tài)文件或接口,比如更新很頻繁的文件,使用 CDN 反而會增加響應(yīng)耗時
數(shù)據(jù)如何回源
還是以剛才的 https://www.example.com/logo.png? 為例,CDN 節(jié)點服務(wù)器會先把這張圖片緩存起來,下次有相同的請求到達時,直接返回緩存的圖片,從而減少回源流量。
這里提到的 緩存? 是一個很復(fù)雜的功能,下面是阿里的 HTTP 緩存服務(wù)器,名字叫 Swift。
阿里 - CDN 節(jié)點
圖中是一個 CDN? 節(jié)點,用戶的請求從 LVS?(LVS是一個四層的負載均衡組件)的入口來,先由 LVS? 做一次 4 層的負載均衡, 然后轉(zhuǎn)到一臺 Tengine?(阿里在 Nginx? 的基礎(chǔ)上開發(fā)的服務(wù)器)上,Tengine? 做一致性哈希,選擇一臺 Swift 服務(wù)器去做緩存數(shù)據(jù)回源。
阿里 - Swift 架構(gòu)
首先可以看到,Swift? 是一個多線程的程序,每個線程啟動一個 epoll? 來充分發(fā)揮多核的處理能力,并且盡量減少線程間的上下文切換,一個請求盡量在一個線程處理。除此之外,還能看到 內(nèi)存緩存,SSD 緩存,SATA 緩存。Swift? 有熱點淘汰和提升機制,將熱文件放在內(nèi)存里,次熱文件放在 SSD 上,最后才是 SATA 盤。叔度 (阿里 CDN 負責人) 指出,Tengine? 和 Swift? 是通過 Spdy 協(xié)議 來通信的,從而優(yōu)化 HTTP 的傳輸效率。
小結(jié)
CDN 的原理是: 基于分布式架構(gòu),通過將源服務(wù)器上的內(nèi)容分發(fā)到多個節(jié)點服務(wù)器上,使用戶能夠從最近的服務(wù)器中獲取所需內(nèi)容。這些節(jié)點服務(wù)器被稱為 邊緣服務(wù)器,它們通常位于不同的地理位置,并通過高速互聯(lián)網(wǎng)連接互相交換數(shù)據(jù)。用戶通過接入離他們最近的 邊緣服務(wù)器 來獲取所需的內(nèi)容,從而降低了響應(yīng)時間和延遲,提高了網(wǎng)站的訪問速度。
Reference
- ? 如何自建低成本 CDN ?[1]
- ? 阿里云 - DCDN[2]
- ? 阿里云 - 提高CDN緩存命中率[3]
- ? 騰訊云 - CDN[4]
- ? 騰訊云 - SCDN[5]
- ? 百度百科 - CDN[6]
- ? CDN的原理以及其中的一些技術(shù)[7]
引用鏈接
[1]? 如何自建低成本 CDN ?: ??https://www.v2ex.com/t/877718??
[2]? 阿里云 - DCDN: ??https://www.aliyun.com/product/dcdn?spm=5176.7933777.J_3207526240.59.329a496e4a1hku??
[3]? 阿里云 - 提高CDN緩存命中率: ??https://help.aliyun.com/document_detail/123330.html??
[4]? 騰訊云 - CDN: ??https://cloud.tencent.com/product/cdn??
[5]? 騰訊云 - SCDN: ??https://cloud.tencent.com/product/scdn??
[6]? 百度百科 - CDN: ??https://baike.baidu.com/item/內(nèi)容分發(fā)網(wǎng)絡(luò)/4034265??
[7]? CDN的原理以及其中的一些技術(shù): https://colobu.com/2016/09/23/CDN-introduction/
文章題目:CDN原理入門,你學會了嗎?
網(wǎng)站URL:http://fisionsoft.com.cn/article/dhhjcog.html


咨詢
建站咨詢
