CDN加速靜態文件訪問

来源:https://www.cnblogs.com/haizai/archive/2019/06/27/11098186.html
-Advertisement-
Play Games

CDN加速靜態文件訪問 全局調度 緩存技術 內容分發 帶寬優化 CDN是Content Delivery Network的縮寫,意思是內容分髮網絡。CDN的作用是把用戶需要的內容分發到離用戶近的地方,這樣可以使用戶 能夠就近獲取所需內容。 整個CDN系統(如圖1-1所示)分為CDN源站和CDN節點, ...


CDN加速靜態文件訪問

 

	CDN是Content Delivery Network的縮寫,意思是內容分髮網絡。CDN的作用是把用戶需要的內容分發到離用戶近的地方,這樣可以使用戶
	能夠就近獲取所需內容。	
	整個CDN系統(如圖1-1所示)分為CDN源站和CDN節點,CDN源站提供CDN節點使用的數據源頭,而CDN節點則部署在距離最終用戶比較
	近的地方,加速用戶對站點的訪問。
	CDN其實就是一種網路緩存技術,能夠把一些相對穩定的資源放到距離最終用戶較近的機房,一方面可以節省整個廣域網的帶寬消耗,另外
	一方面可以提升用戶的訪問速度,改進用戶體驗。我們一般把一些相對靜態的文件(例如圖片、視頻、JS腳本、一些頁面框架)放在CDN中。

圖1-1
在這裡插入圖片描述
我們通過瀏覽器訪問一個網站的過程大致如圖1-2所示。
圖1-2
在這裡插入圖片描述
(1)用戶向瀏覽器提交要訪問的功能變數名稱。
(2)瀏覽器對功能變數名稱進行解析,得到功能變數名稱對應的IP地址。
(3)瀏覽器向所得的IP地址發送請求。
(4)瀏覽器根據返回的數據顯示網頁的內容。

而在有了CDN以後,用戶通過瀏覽器訪問網站的過程會產生一些變化。如圖1-3

圖1-3
在這裡插入圖片描述
(1)用戶向瀏覽器提交要訪問的功能變數名稱。
(2)瀏覽器對功能變數名稱進行解析,由於CDN對功能變數名稱解析過程進行了調整,所以得到的是該功能變數名稱對應的CNAME記錄。
(3)對CNAME再次進行解析,得到實際IP地址。在這次的解析中,會使用全局負載均衡DNS解析,也就是我們需要返回
具體IP地址,需要根據地理位置信息以及所在的ISP來確定返回的結果,這個過程才能讓身處不同地域、連接不同接入商的
用戶得到最適合自己訪問的CDN地址,才能做到就近訪問,從而提升速度。
(4)得到實際的IP地址以後,向伺服器發出訪問請求。
(5)CDN會根據請求的內容是否在本地緩存進行不同處理:
1)如果存在,則直接返回結果。
2)如果不存在,則CDN請求源站,獲取內容,然後再返回結果。

通過這個流程,我們可以看到CDN中的幾個關鍵技術。

全局調度

全局調度是完成用戶就近訪問的第一步,我們需要根據用戶地域、接入運營商以及CDN機房的負載情況去調度。前面兩個調度因素需要一個
儘可能精準的IP地址庫,這是正確調用的前提(誤識別的IP地址到地理位置的對應可能會把東北的用戶調度到華南的站點去),當然,做到
100%的精確是不現實的。IP地址庫的維護是一個持續和變化的過程,並且調度的策略隨著CDN機房的增加也會變化。例如,我們不可能在
所有城市都設置CDN機房,假設剛開始河南整個省份沒有CDN機房,可能河南靠北的城市使用天津的CDN,同時河南靠南的城市使用湖北
的CDN會比較好,而如果後來在鄭州市建設了CDN機房的話,那麼原來的調度策略就會修改了。CDN的負載也是調度中的一個影響因素,
舉例來說,如果一個CDN機房舉例你的位置比較近,但是它的負載已經很高,響應很慢,那麼你的請求送到距離稍遠的CDN機房反而會更快。

緩存技術

	從上面的流程中我們看到,如果用戶請求的內容不在CDN中的話,CDN會回到源站去載入內容,然後返回給用戶。所以,如果CDN機房的請求
命中率不高的話,那麼起到的加速效果也是相對有限的。
	要提升命中率,就需要CDN機房中有儘可能全面的數據,這要求CDN機房的緩存容量要足夠大,我們可以使用“內容+SSD+機械硬碟”的混合存
儲方式來提升整體的緩存容量,並且我們做好冷熱數據的交換,在提升命中率時也儘量降低緩存的響應時間。
	此外,當CDN的Cache沒有命中要回源載入數據時,合併同樣數據的請求也是一個很重要的優化,這樣可以減少重覆的請求,降低源站的壓力。
	最後,新增、變更數據後的CDN預載入也是一個提升命中率的辦法。也就是在沒有請求進來時,CDN主動去載入數據,做好準備。當然這個主
動載入一般也需要源站有一個通知過來。

內容分發

	這裡提到的內容分發主要是對內容全部在CDN上不用回源的數據的管理和分發,例如一些靜態頁面等。具體做法是在內容管理系統中進行編輯
修改後,通過分發系統分發到各個CDN的節點上。分發的效率以及對分發文件一致性、正確性的校驗是需要關註的點。

帶寬優化

	CDN提供了內容加速,很多請求和流量都壓到了CDN上,那麼如何能夠比較有效地節省帶寬會是一個很重要的事情,因為這直接關係到流量
成本。優化的思路是只返回必要的數據、用更好的壓縮演算法等。

在CDN的應用中,從傳統意義上來講,主要是把用戶需要訪問的內容放到離用戶近的地方。可以發現大部分流量是從源站到CDN機房的流量,我們也可以利用CDN機房距離目標用戶近的地點,讓一些上傳的工作從CDN接入,然後再從CDN傳到源站
,這一方面可以提升用戶的上傳速度,另一方面也很好地利用了從CDN機房到源站的上行帶寬。

參考書籍 :大型網站系統與Java中間件實踐


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 記錄對象的一些實用使用方法及屬性 // Object.assign() 多個對象合併 key相同則後面的覆蓋前面的 const target = { a: 1, b: 2 }; const source = { b: 4, c: 5 }; const returnedTarget = Object. ...
  • 1.Javascript是什麼?可以做什麼? 1) JavaScript是一種基於對象和事件驅動的解釋性腳本語言, 它具有與Java和C語言類似的語法。 2) JavaScript可直接嵌入HTML頁面。由客戶端的瀏覽器解釋執行代碼,不進行預編譯。 3) 所有現代的html頁面都使用Javascri ...
  • ...
  • 現在越來越多的項目就算是一個管理後端也偏向於使用前後端分離的部署方式去做,為了順應時代的潮流,一前後端分離就產生了跨域問題,所以許多同學把跨域和前後端分離項目聯繫在了一起,其實跨域產生的原因並不是前後端分離導致的,那我們一起來看一下,希望可以靠這一篇文章解答大家所有的跨域問題 一、跨域產生的條件 使 ...
  • 背景介紹 上篇介紹了利用Nginx反向代理實現負載均衡,本文詳細講述Nginx下的幾種負載均衡策略。 輪詢 輪詢,顧名思義,就是輪流請求,基於上篇文章的介紹,我們將負載均衡策略聚焦於 文件的 。 在瀏覽器中對 連續發出請求,根據nginx請求日誌可以看出web02與web03訪問的次數是相同的。 加 ...
  • 1、簡介 SOA(Service Oriented Architecture)“面向服務的架構”:他是一種設計方法,其中包含多個服務, 服務之間通過相互依賴最終提供一系列的功能。一個服務 通常以獨立的形式存在與操作系統進程中。各個服務之間 通過網路調用。 2、和微服務對比 微服務架構其實和 SOA ...
  • MTDDL 美團分散式數據訪問中間件(轉) "原文地址:MTDDL——美團點評分散式數據訪問層中間件" 因原文文字和圖顯示有問題,故整理於此,僅供參考。 業界方案 | 組件 | 簡介 | | : : | : | | Atlas | Qihoo 360開發維護的一個基於MySQL協議的數據中間層項目。 ...
  • 適配器主要用於介面的轉換或者將介面不相容的類對象組合在一起形成對外統一介面,是一種結構性模式,其本質是是一個中間件,適用於類及其對象。本文希望通過簡單的介紹和分析,能讓讀者對適配器模式有一個簡單直觀的認識和感知。 1.目的 對現有的類的介面進行轉換以符合新的需求。 2.動機 通過轉換或者組合,間接復 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...