文章很長,建議收藏起來,慢慢讀! Java 高並發 發燒友社群:瘋狂創客圈 奉上以下珍貴的學習資源:
-
免費贈送 經典圖書:《Java高並發核心編程(卷1)》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
-
免費贈送 經典圖書:《Java高並發核心編程(卷2)》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
-
免費贈送 經典圖書:《Netty Zookeeper Redis 高並發實戰》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
-
免費贈送 經典圖書:《SpringCloud Nginx高並發核心編程》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
-
免費贈送 資源寶庫: Java 必備 百度網盤資源大合集 價值>10000元 加尼恩領取
推薦:入大廠 、做架構、大力提升Java 內功 的 精彩博文
入大廠 、做架構、大力提升Java 內功 必備的精彩博文 | 2021 秋招漲薪1W + 必備的精彩博文 |
---|---|
1:Redis 分布式鎖 (圖解-秒懂-史上最全) | 2:Zookeeper 分布式鎖 (圖解-秒懂-史上最全) |
3: Redis與MySQL雙寫一致性如何保證? (面試必備) | 4: 面試必備:秒殺超賣 解決方案 (史上最全) |
5:面試必備之:Reactor模式 | 6: 10分鍾看懂, Java NIO 底層原理 |
7:TCP/IP(圖解+秒懂+史上最全) | 8:Feign原理 (圖解) |
9:DNS圖解(秒懂 + 史上最全 + 高薪必備) | 10:CDN圖解(秒懂 + 史上最全 + 高薪必備) |
10: 分布式事務( 圖解 + 史上最全 + 吐血推薦 ) |
Java 面試題 30個專題 , 史上最全 , 面試必刷 | 阿里、京東、美團... 隨意挑、橫着走!!! |
---|---|
1: JVM面試題(史上最強、持續更新、吐血推薦) | 2:Java基礎面試題(史上最全、持續更新、吐血推薦 |
3:架構設計面試題 (史上最全、持續更新、吐血推薦) | 4:設計模式面試題 (史上最全、持續更新、吐血推薦) |
17、分布式事務面試題 (史上最全、持續更新、吐血推薦) | 一致性協議 (史上最全) |
29、多線程面試題(史上最全) | 30、HR面經,過五關斬六將后,小心陰溝翻船! |
9.網絡協議面試題(史上最全、持續更新、吐血推薦) | 更多專題, 請參見【 瘋狂創客圈 高並發 總目錄 】 |
SpringCloud 精彩博文 | |
---|---|
nacos 實戰(史上最全) | sentinel (史上最全+入門教程) |
SpringCloud gateway (史上最全) | 更多專題, 請參見【 瘋狂創客圈 高並發 總目錄 】 |
前言:
CDN 實現了“網絡加速” 的重要技術之一,本文為大家徹底介紹清楚 CDN的核心原理和使用。
為什么要有網絡加速
互聯網從邏輯上看是一張大網,但實際上是由許多小網絡組成的,這其中就有小網絡“互連互通”的問題,典型的就是各個電信運營商的網絡,比如國內的電信、聯通、移動三大家。
這些小網絡內部的溝通很順暢,但網絡之間卻只有很少的聯通點。如果你在 A 網絡,而網 站在 C 網絡,那么就必須“跨網”傳輸,和成千上萬的其他用戶一起去“擠”連接點 的“獨木橋”。而帶寬終究是有限的,能搶到多少只能看你的運氣。
另外,網絡中還存在許多的路由器、網關,數據每經過一個節點,都要停頓一下,在二層、 三層解析轉發,這也會消耗一定的時間,帶來延遲。
最終結果就是,如果僅用現有的 HTTP 傳輸方式,大多數網站都會訪問速度緩慢、用戶體 驗糟糕。
放到全球來看,物理距離非常大,你在北京,訪問舊金山的網站,要跨越半個地球,地理位置距離遠、運營商網絡、路由轉發的影響就會成倍增加。
什么是CDN?
CDN (全稱 Content Delivery Network),即內容分發網絡。
CDN構建在現有網絡基礎之上的智能虛擬網絡,依靠部署在各地的邊緣服務器,通過中心平台的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,降低網絡擁塞,提高用戶訪問響應速度和命中率。
CDN 的關鍵技術主要有內容存儲和分發技術,簡單來講,CDN就是根據用戶位置分配最近的資源,於是,用戶在上網的時候不用直接訪問源站,而是訪問離他“最近的”一個 CDN 節點(也叫做“邊緣節點”、edge node),其實就是緩存了源站內容的代理服務器。
CDN的分發系統架構
全球有這么多的數據中心,無論在哪里上網,臨近不遠的地方基本上都有數據中心。是不是可以在這些數據中心里部署幾台機器,形成一個緩存的集群來緩存部分數據,那么用戶訪問數據的時候,就可以就近訪問了呢?
當然是可以的。這些分布在各個地方的各個數據中心的節點,術語叫“邊緣節點”(edge node)。
由於邊緣節點數目比較多,但是每個集群規模比較小,不可能緩存下來所有東西,因而可能無法命中, 這樣就會在邊緣節點之上。有區域節點,規模就要更大,緩存的數據會更多,命中的概率也就更大。在區域節點之上是中心節點,規模更大,緩存數據更多。如果還不命中,就只好回源網站訪問了。
這就是CDN的分發系統的架構。CDN系統的緩存,也是一層一層的,能不訪問后端真正的源,就不打擾它。這也是電商網站物流系統的思路,北京局找不到,找華北局,華北局找不到,再找北方局。
CDN的特點
1.CDN 的最核心原則是“就近訪問”,如果用戶能夠在本地幾十公里的距離之內獲取到數據,那么時延就基本上變成 0 了。所以 CDN 廠商 投入了大筆資金,在全國、乃至全球的各個大樞紐城市都建立了機房,部署了大量擁有高存儲高帶寬的節點,構建了一個專用網絡。
2.有了這個高速專用網,CDN就要分發源站的內容,利用緩存代理技術,把源站內容逐級緩存到網絡的每一個節點上,這樣用戶上網就不用直接訪問源站,而是訪問離他“最近的”一個 CDN 節點,其實就是緩存了源站內容的代理服務器,這樣一來就省去了“長途跋涉”的時間成本,實現了“網絡加速”。
3.那么,CDN 都能加速什么樣的“內容”呢? 靜態資源,而不是動態資源。
在 CDN 領域里,“內容”其實就是 HTTP 協議里的“靜態資源”,比如超文本、圖片、視頻、應用程序安裝包等等。
名詞解釋:“靜態資源”和“動態資源”: 所謂的“靜態資源”是指數據內容“靜態不變”,任何時候來訪問都是一樣的,比如圖片、音頻。所謂的“動態資源”是指數據內容是“動態變化”的,也就是由后台服務計算生成的,每次訪問都不一樣,比如商品的庫存、微博的粉絲數等。
CDN的原理
內容分發網絡(Content Delivery Network, CDN)其目的是通過在現有的Internet中增加一層新的網絡架構,將網站的內容發布到最接近用戶的網絡"邊緣",使用戶可以就近取得所需的內容,解決Internet網絡擁塞狀況,提高用戶訪問網站的響應速度。
從技術上全面解決由於網絡帶寬小、用戶訪問量大、網點分布不均等原因所造成的用戶訪問網站響應速度慢的問題。
CDN網絡的組成
一個CDN網絡主要由以下幾部分組成:內容緩存設備、內容分發管理設備、本地負載均衡交換機、GSLB設備和CDN管理系統,其網絡結構如下圖所示:
其中:
內容緩存設備Cache:
用於緩存內容實體和對緩存內容進行組織和管理。當有用戶訪問該客戶內容時,直接由各緩存服務器響應用戶的請求。
內容分發管理設備:
主要負責核心Web服務器內容到CDN網絡內緩存設備的內容推送、刪除、校驗以及內容的管理、同步。
GSLB設備:
則實現CDN全網各緩存節點之間的資源負載均衡,它與各節點的SLB設備保持通信,搜集各節點緩存設備的健康狀態、性能、負載等,自動將用戶指引到位於其地理區域中的最近服務器或者引導用戶離開擁擠的網絡和服務器。還可以通過使用多站點的內容和服務來提高容錯性和可用性,防止因本地網或區域網絡中斷、斷電或自然災害而導致的故障。
不用CDN技術時,使用GSLB設備可以為用戶選擇最合適的服務器,但受Web服務器的負荷和傳輸距離等因素的影響,響應速度依然經常不能滿足用戶的需求。這一問題的解決方案就是在傳輸網絡上利用緩存技術使得Web服務數據流能夠就近訪問。內容分發網絡(CDN)正是這種思想的一個實現,CDN使用GSLB設備將用戶引導到最合適的緩存節點(距離近,負載低),使得用戶在訪問靜態內容時獲得更好的體驗。
CDN管理系統:
實現對全網設備的管理,對系統的配置。它不僅能對系統中的各個設備進行實時監控,對各種故障產生相應的告警,還能實時觀測到系統中總的流量以及各節點的流量,並保存在系統的數據庫中,作為統計分析的基礎數據,並對日志文件進行管理、報告,作為計費的基礎數據。
CDN工作流程
CDN網絡結合了GSLB與緩存技術,其工作流程如下圖所示:
用戶訪問某個站點的內容時,若該站點使用了CDN網絡,則在用戶會在域名解析時獲得CDN網絡GSLB設備的IP地址。GSLB設備根據其預設的選擇策略(如,地理區域、用戶時間等)為用戶選擇最合適的內容緩存節點,並且使用某種方式(如,基於DNS、基於HTTP重定向、基於IP欺騙的方式等)導引用戶訪問所選的內容緩存節點。
用戶繼續向緩存節點發出請求,若緩存中包含請求的內容,則直接返回給用戶,否則從核心Web服務器中獲取該內容,緩存后返回給用戶。這樣當用戶再次訪問相同內容或其他用戶訪問相同內容時,可以直接從緩存中讀取,提高了效率。
在沒有應用CDN時,我們使用域名訪問某一個站點時的路徑為
用戶提交域名→瀏覽器對域名進行解釋→DNS 解析得到目的主機的IP地址→根據IP地址訪問發出請求→得到請求數據並回復
應用CDN后,DNS 返回的不再是 IP 地址,而是一個CNAME(Canonical Name ) 別名記錄,指向 CDN的全局負載均衡 GSLB, GSLB實際上在域名解析的過程中承擔了中間人(或者說代理)的角色,這是CDN實現的關鍵
CDN的全局負載均衡 GSLB
由於沒有返回IP地址,於是本地DNS會向負載均衡系統再發送請求 ,則進入到CDN的全局負載均衡系統GSLB 進行智能調度:
-
看用戶的 IP 地址,查表得知地理位置,找相對最近的邊緣節點
-
看用戶所在的運營商網絡,找相同網絡的邊緣節點
-
檢查邊緣節點的負載情況,找負載較輕的節點
-
其他,比如節點的“健康狀況”、服務能力、帶寬、響應時間等
結合上面的因素,得到最合適的邊緣節點,然后把這個節點返回給用戶,用戶就能夠就近訪問CDN的緩存代理
整體流程如下圖:
圖解:CDN工作流程的一個示例
還記得我們講過的基於DNS的全局負載均衡嗎? 如果不了解,請參閱下文:
這個負載均衡主要用來選擇一個就近的同樣運營商的服務器進行訪問。你會發現,CDN分發網絡也是一個分布在多個區域、多個運營商的分布式系統,也可以用相同的思路選擇最合適的邊緣節點。
下圖,是CDN工作流程的一個示例:
在沒有CDN的情況下,用戶向瀏覽器輸入www.web.com
這個域名,客戶端訪問本地DNS服務器的時候,如果本地DNS服務器有緩存,則返回網站的地址;如果沒有,遞歸查詢到網站的權威DNS服務器,這個權威DNS服務器是負責web.com的,它會返回網站的IP地址。
本地DNS服務器緩存下IP 地址,將IP地址返回,然后客戶端直接訪問這個IP地址,就訪問到了這個網站。
然而有了 CDN之后,情況發生了變化。
在web.com這個權威DNS服務器上,會設置一個CNAME別名,指向另外一個域名www.web.cdn.com
,返回給本地DNS服務器。
當本地DNS服務器拿到這個新的域名時,需要繼續解析這個新的域名。這個時候,再訪問的就不是 web.com 的權威DNS服務器了,而是web.cdn.com的權威DNS服務器,這是CDN自己的權威 DNS 服務器。在這個服務器上,還是會設置一個CNAME,指向另外一個域名,也即CDN網絡的全局負載均衡器。
接下來,本地DNS服務器去請求CDN的全局負載均衡器解析域名,全局負載均衡器會為用戶選擇一台合適的緩存服務器提供服務,選擇的依據包括:
- 根據用戶IP地址,判斷哪一台服務器距用戶最近;
- 用戶所處的運營商;
- 根據用戶所請求的URL中攜帶的內容名稱,判斷哪一台服務器上有用戶所需的內容;
- 查詢各個服務器當前的負載情況,判斷哪一台服務器尚有服務能力。
基於以上這些條件,進行綜合分析之后,全局負載均衡器會返回一台緩存服務器的IP地址。
本地DNS服務器緩存這個IP地址,然后將IP返回給客戶端,客戶端去訪問這個邊緣節點,下載資源。 緩存服務器響應用戶請求,將用戶所需內容傳送到用戶終端。如果這台緩存服務器上並沒有用戶想要的內容,那么這台服務器就要向它的上一級緩存服務器請求內容,直至追溯到網站的源服務器將內容拉到本地。
緩存代理
緩存系統是 CDN的另一個關鍵組成部分,緩存系統會有選擇地緩存那些最常用的那些資源
其中有兩個衡量CDN服務質量的指標:
- 回源率:緩存里沒有,必須用代理的方式回源站取,回源次數與所有訪問次數之比
緩存系統也可以划分出層次,分成一級緩存節點和二級緩存節點。一級緩存配置高一些,直連源站,二級緩存配置低一些,直連用戶
回源的時候二級緩存只找一級緩存,一級緩存沒有才回源站,可以有效地減少真正的回源
- 命中率:用戶訪問的資源恰好在緩存系統里,可以直接返回給用戶,命中次數與所有訪問次數之比
現在的商業 CDN命中率都在 90% 以上,相當於把源站的服務能力放大了 10 倍以上
騰訊雲cdn加速操作實戰
以騰訊雲為例說明如何部署cdn。
即使是再小的站,也要有一顆成長為大流量網站的雄心,正所謂“法乎其上,得乎其中”,網站流量要大,就需要有良好的體驗,而打開速度快是用戶體驗最重要的指標(沒有之一),現代人的耐性越來越差,如果1秒內還不能打開網站,很多人就直接離開了。
由於地域的限制,網絡傳輸需要一定時間,對於小網站來說,不可能在各大節點部署服務器。此時,各大廠提供的cdn服務就派上用場了。我們可以將靜態文件放到cdn上,用戶訪問網站時,cdn會智能分配最近的節點返回靜態文件,減輕我們服務器壓力的同時,也大大加快了網站響應速度。而且各大廠每月都有免費的cdn流量額度,個人網站基本夠用了。
靜態與動態內容用不同的域名區分
以網站zhiqiexing.com為例:
- 動態內容由主域名
www.zhiqiexing.com
提供, - 而靜態內容為
code.zhiqiexing.com
提供 - 動態內容實時從服務器獲取數據,靜態內容就可以存放到cdn,實時更新即可
cdn配置
進入cdn控制台,按指引添加域名,提交后會分配一個cdn加速域名,必須將我們的域名用cname解析到分配的cdn域名,提交后部署大概五分鍾即可
由於是不同的域名,可能會出現跨域問題,需要在cdn配置中將我們的域名加入到允許的列表
在緩存配置中可以設置緩存時間
需要手動刷新時,可以指定url進行刷新
參考文獻
https://blog.csdn.net/weixin_44475093/article/details/117095143
https://blog.csdn.net/HZ___ZH/article/details/114660370
https://blog.csdn.net/weixin_44475093/article/details/117095143
https://blog.csdn.net/HZ___ZH/article/details/114660370
https://juejin.cn/post/6844903890706661389#heading-5
https://blog.csdn.net/lxx309707872/article/details/109078783
https://www.jianshu.com/p/ba104e941490
https://blog.csdn.net/aha_jasper/article/details/105575484
https://blog.csdn.net/weixin_44475093/article/details/117095143