文章很長,並且持續更新,建議收藏起來,慢慢讀! Java 高併發 發燒友社羣:瘋狂創客圈(總入口) 奉上如下珍貴的學習資源:html
入大廠 、作架構、大力提高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:設計模式面試題 (史上最全、持續更新、吐血推薦) |
1七、分佈式事務面試題 (史上最全、持續更新、吐血推薦) | 一致性協議 (史上最全) |
2九、多線程面試題(史上最全) | 30、HR面經,過五關斬六將後,當心陰溝翻船! |
9.網絡協議面試題(史上最全、持續更新、吐血推薦) | 更多專題, 請參見【 瘋狂創客圈 高併發 總目錄 】 |
SpringCloud 精彩博文 | |
---|---|
nacos 實戰(史上最全) | sentinel (史上最全+入門教程) |
SpringCloud gateway (史上最全) | 更多專題, 請參見【 瘋狂創客圈 高併發 總目錄 】 |
前言:java
CDN 實現了「網絡加速」 的重要技術之一,本文爲你們完全介紹清楚 CDN的核心原理和使用。node
互聯網從邏輯上看是一張大網,但其實是由許多小網絡組成的,這其中就有小網絡「互連互通」的問題,典型的就是各個電信運營商的網絡,好比國內的電信、聯通、移動三你們。
這些小網絡內部的溝通很順暢,但網絡之間卻只有不多的聯通點。若是你在 A 網絡,而網 站在 C 網絡,那麼就必須「跨網」傳輸,和成千上萬的其餘用戶一塊兒去「擠」鏈接點 的「獨木橋」。而帶寬終究是有限的,能搶到多少隻能看你的運氣。web
另外,網絡中還存在許多的路由器、網關,數據每通過一個節點,都要停頓一下,在二層、 三層解析轉發,這也會消耗必定的時間,帶來延遲。面試
最終結果就是,若是僅用現有的 HTTP 傳輸方式,大多數網站都會訪問速度緩慢、用戶體 驗糟糕。數據庫
放到全球來看,物理距離很是大,你在北京,訪問舊金山的網站,要跨越半個地球,地理位置距離遠、運營商網絡、路由轉發的影響就會成倍增長。編程
CDN (全稱 Content Delivery Network),即內容分發網絡。後端
CDN構建在現有網絡基礎之上的智能虛擬網絡,依靠部署在各地的邊緣服務器,經過中心平臺的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,下降網絡擁塞,提升用戶訪問響應速度和命中率。設計模式
CDN 的關鍵技術主要有內容存儲和分發技術,簡單來說,CDN就是根據用戶位置分配最近的資源,因而,用戶在上網的時候不用直接訪問源站,而是訪問離他「最近的」一個 CDN 節點(也叫作「邊緣節點」、edge node),其實就是緩存了源站內容的代理服務器。跨域
全球有這麼多的數據中心,不管在哪裏上網,臨近不遠的地方基本上都有數據中心。是否是能夠在這些數據中內心部署幾臺機器,造成一個緩存的集羣來緩存部分數據,那麼用戶訪問數據的時候,就能夠就近訪問了呢?
固然是能夠的。這些分佈在各個地方的各個數據中心的節點,術語叫「邊緣節點」(edge node)。
因爲邊緣節點數目比較多,可是每一個集羣規模比較小,不可能緩存下來全部東西,於是可能沒法命中, 這樣就會在邊緣節點之上。有區域節點,規模就要更大,緩存的數據會更多,命中的機率也就更大。在區域節點之上是中心節點,規模更大,緩存數據更多。若是還不命中,就只好回源網站訪問了。
這就是CDN的分發系統的架構。CDN系統的緩存,也是一層一層的,能不訪問後端真正的源,就不打擾它。這也是電商網站物流系統的思路,北京局找不到,找華北局,華北局找不到,再找北方局。
1.CDN 的最核心原則是「就近訪問」,若是用戶可以在本地幾十千米的距離以內獲取到數據,那麼時延就基本上變成 0 了。因此 CDN 廠商 投入了大筆資金,在全國、乃至全球的各個大樞紐城市都創建了機房,部署了大量擁有高存儲高帶寬的節點,構建了一個專用網絡。
2.有了這個高速專用網,CDN就要分發源站的內容,利用緩存代理技術,把源站內容逐級緩存到網絡的每個節點上,這樣用戶上網就不用直接訪問源站,而是訪問離他「最近的」一個 CDN 節點,其實就是緩存了源站內容的代理服務器,這樣一來就省去了「長途跋涉」的時間成本,實現了「網絡加速」。
3.那麼,CDN 都能加速什麼樣的「內容」呢? 靜態資源,而不是動態資源。
在 CDN 領域裏,「內容」其實就是 HTTP 協議裏的「靜態資源」,好比超文本、圖片、視頻、應用程序安裝包等等。
名詞解釋:「靜態資源」和「動態資源」: 所謂的「靜態資源」是指數據內容「靜態不變」,任什麼時候候來訪問都是同樣的,好比圖片、音頻。所謂的「動態資源」是指數據內容是「動態變化」的,也就是由後臺服務計算生成的,每次訪問都不同,好比商品的庫存、微博的粉絲數等。
內容分發網絡(Content Delivery Network, CDN)其目的是經過在現有的Internet中增長一層新的網絡架構,將網站的內容發佈到最接近用戶的網絡"邊緣",使用戶能夠就近取得所需的內容,解決Internet網絡擁塞情況,提升用戶訪問網站的響應速度。
從技術上全面解決因爲網絡帶寬小、用戶訪問量大、網點分佈不均等緣由所形成的用戶訪問網站響應速度慢的問題。
一個CDN網絡主要由如下幾部分組成:內容緩存設備、內容分發管理設備、本地負載均衡交換機、GSLB設備和CDN管理系統,其網絡結構以下圖所示:
其中:
內容緩存設備Cache:
用於緩存內容實體和對緩存內容進行組織和管理。當有用戶訪問該客戶內容時,直接由各緩存服務器響應用戶的請求。
內容分發管理設備:
主要負責核心Web服務器內容到CDN網絡內緩存設備的內容推送、刪除、校驗以及內容的管理、同步。
GSLB設備:
則實現CDN全網各緩存節點之間的資源負載均衡,它與各節點的SLB設備保持通訊,蒐集各節點緩存設備的健康狀態、性能、負載等,自動將用戶指引到位於其地理區域中的最近服務器或者引導用戶離開擁擠的網絡和服務器。還能夠經過使用多站點的內容和服務來提升容錯性和可用性,防止因本地網或區域網絡中斷、斷電或天然災害而致使的故障。
不用CDN技術時,使用GSLB設備能夠爲用戶選擇最合適的服務器,但受Web服務器的負荷和傳輸距離等因素的影響,響應速度依然常常不能知足用戶的需求。這一問題的解決方案就是在傳輸網絡上利用緩存技術使得Web服務數據流可以就近訪問。內容分發網絡(CDN)正是這種思想的一個實現,CDN使用GSLB設備將用戶引導到最合適的緩存節點(距離近,負載低),使得用戶在訪問靜態內容時得到更好的體驗。
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實現的關鍵
因爲沒有返回IP地址,因而本地DNS會向負載均衡系統再發送請求 ,則進入到CDN的全局負載均衡系統GSLB 進行智能調度:
看用戶的 IP 地址,查表得知地理位置,找相對最近的邊緣節點
看用戶所在的運營商網絡,找相同網絡的邊緣節點
檢查邊緣節點的負載狀況,找負載較輕的節點
其餘,好比節點的「健康情況」、服務能力、帶寬、響應時間等
結合上面的因素,獲得最合適的邊緣節點,而後把這個節點返回給用戶,用戶就可以就近訪問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地址。
本地DNS服務器緩存這個IP地址,而後將IP返回給客戶端,客戶端去訪問這個邊緣節點,下載資源。 緩存服務器響應用戶請求,將用戶所需內容傳送到用戶終端。若是這臺緩存服務器上並無用戶想要的內容,那麼這臺服務器就要向它的上一級緩存服務器請求內容,直至追溯到網站的源服務器將內容拉到本地。
緩存系統是 CDN的另外一個關鍵組成部分,緩存系統會有選擇地緩存那些最經常使用的那些資源
其中有兩個衡量CDN服務質量的指標:
緩存系統也能夠劃分出層次,分紅一級緩存節點和二級緩存節點。一級緩存配置高一些,直連源站,二級緩存配置低一些,直連用戶
回源的時候二級緩存只找一級緩存,一級緩存沒有才回源站,能夠有效地減小真正的回源
如今的商業 CDN命中率都在 90% 以上,至關於把源站的服務能力放大了 10 倍以上
以騰訊云爲例說明如何部署cdn。
即便是再小的站,也要有一顆成長爲大流量網站的雄心,正所謂「法乎其上,得乎其中」,網站流量要大,就須要有良好的體驗,而打開速度快是用戶體驗最重要的指標(沒有之一),現代人的耐性愈來愈差,若是1秒內還不能打開網站,不少人就直接離開了。
因爲地域的限制,網絡傳輸須要必定時間,對於小網站來講,不可能在各大節點部署服務器。此時,各大廠提供的cdn服務就派上用場了。咱們能夠將靜態文件放到cdn上,用戶訪問網站時,cdn會智能分配最近的節點返回靜態文件,減輕咱們服務器壓力的同時,也大大加快了網站響應速度。並且各大廠每個月都有免費的cdn流量額度,我的網站基本夠用了。
以網站zhiqiexing.com爲例:
www.zhiqiexing.com
提供,code.zhiqiexing.com
提供進入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