開發與維運

阿里雲CDN加速原理

什麼是阿里雲CDN

阿里雲內容分發網絡(Content Delivery Network,簡稱CDN)是建立並覆蓋在承載網之上,由分佈在不同區域的邊緣節點服務器群組成的分佈式網絡。阿里雲CDN分擔源站壓力,避免網絡擁塞,確保在不同區域、不同場景下加速網站內容的分發,提高資源訪問速度。點擊文檔三分鐘瞭解阿里雲CDN

CDN加速前

使用CDN加速前,用戶側發起的請求通過用戶側DNS遞歸到網站DNS解析以後,最終用戶側直接請求網站服務器。這裡可能會造成以下幾種情況:

  1. 中心服務器負載過高,因為所有客戶端發起的請求都會請求到服務器上
  2. 終端用戶內容獲取延時高,比如服務器在北京,而用戶在廣州
  3. 服務穩定性差
    image.png

CDN加速後

CDN通過在現有網絡中增加一層新的緩存節點,將源站的資源發佈到最接近用戶的網絡節點,使得客戶端在請求時直接訪問到就近的CDN節點並命中該資源,減少回源情況,提高網站訪問速度。CDN緩存節點可分為L1節點(一級節點)和L2節點(二級節點),請求的流程是:客戶端-->CDN_L1-->CDN_L2-->源站。CDN的L1節點分佈在全國各省市,L2節點分佈在幾個大區下,可以把L2節點理解為匯聚式節點,簡單架構如下圖所示。
image.png

CDN節點緩存策略如下:
1.客戶端向CDN節點發起連接請求,當L1節點有緩存資源時,會命中該資源,直接將數據返回給客戶端。當L1節點無緩存資源時,會向L2節點請求對應資源,如果L2節點有緩存資源,則將資源同步到L1節點,並返回給用戶;如果L2節點無緩存資源,則直接回客戶源站獲取資源,並按照配置的緩存策略進行緩存。
2.為了方便理解,再舉一個簡單例子,假設有杭州移動節點L1-hz和寧波移動節點L1-nb兩個L1節點,這兩個L1節點都回源到同一個L2這個節點,源站在北京。這幾個CDN節點初始的時候都沒有用戶的緩存資源。當ABC三個用戶依次請求同一個圖片的時候,過程如下:

  • 杭州移動用戶A被CDN調度到杭州移動L1-hz節點,L1-hz由於沒有緩存,則回源到L2,L2由於也沒有緩存,則回源到北京源站,請求到數據以後再返回給L1-hz,L1再返回給用戶A。
  • 用戶A請求完以後,L1-hz和L2節點都有了緩存資源。此時杭州移動用戶B也開始訪問這個圖片,用戶B也被分配到了L1-hz節點,由於L1-hz已經有這個圖片的緩存了,因此不需要再去回源了,而是直接返回緩存給用戶B。
  • 寧波移動用戶C此時也訪問了同一個圖片,用戶C被分配到了寧波移動節點L1-nb,由於L1-nb還沒有緩存,就會回源到L2,而L2已經有緩存,因此L2會直接返回緩存數據給L1-nb,然後L1-nb再返回給用戶B。此過程存在L1-nb向L2回源的過程,而L2不需要再去回源到源站了。
  • 通過CDN加速,杭州用戶A和B可以直接從杭州節點讀取緩存數據,寧波用戶C可以直接從寧波節點讀取數據,不需要每一次都去請求北京服務器了,提高了用戶側的訪問速度,降低了服務器壓力。

CDN工作原理

通過以下案例,可以進一步瞭解CDN的工作原理。
假設加速域名為www.a.com, 接入CDN網絡,開始使用加速服務後,當終端用戶(北京)發起HTTP請求時,處理流程如下圖所示。

image.png

1.當終端用戶(北京)向www.a.com 下的某資源發起請求時,首先向LDNS(本地DNS)發起域名解析請求。
2.LDNS檢查緩存中是否有www.a.com 的IP地址記錄。如果有,則直接返回給終端用戶;如果沒有,則向授權DNS查詢。
3.當授權DNS解析www.a.com 時,返回域名CNAME www.a.tbcdn.com 對應IP地址。
4.域名解析請求發送至阿里雲DNS調度系統,併為請求分配最佳節點IP地址。
5.LDNS獲取DNS返回的解析IP地址。
6.用戶獲取解析IP地址。
7.用戶向獲取的IP地址發起對該資源的訪問請求。

  • 如果該IP地址對應的節點已緩存該資源,則會將數據直接返回給用戶,例如,圖中步驟7和8,請求結束。
  • 如果該IP地址對應的節點未緩存該資源,則節點向源站發起對該資源的請求。獲取資源後,結合用戶自定義配置的緩存策略,將資源緩存至節點,例如,圖中的北京節點,並返回給用戶,請求結束。配置緩存策略的操作方法,請參見緩存配置。

特別注意
CDN調度系統分配節點的時候,是根據客戶端的LocalDNS來分配節點的,而不是根據客戶端IP來分配節點的。因此,如果客戶端LocalDNS設置不正確的話會導致無法分配調度到最優的節點。

什麼資源可以被加速

在HTTP請求的資源,請求可以分為靜態請求和動態請求。
靜態請求
靜態請求是指在不同請求中訪問到的數據都相同的靜態文件。例如:圖片、視頻、網站中的文件(html、css、js)、軟件安裝包、apk文件、壓縮包文件等。

CDN加速的本質是緩存加速,將您服務器上存儲的靜態內容緩存在阿里雲CDN節點上,當您訪問這些靜態內容時,無需訪問服務器源站,就近訪問阿里雲CDN節點即可獲取相同內容,從而達到加速的效果,同時減輕服務器源站的壓力。

動態請求
動態請求是指在不同請求中訪問到的數據不相同的動態內容。例如:網站中的文件(asp、jsp、php、perl、cgi)、API接口、數據庫交互請求等。

當客戶端訪問這些動態內容時,每次都需要訪問用戶的服務器,由服務器動態生成實時的數據並返回給客戶端。因此CDN的緩存加速不適用於加速動態內容,CDN無法緩存實時變化的動態內容。對於動態內容請求,CDN節點只能轉發回源站服務器,沒有加速效果。

如果用戶的網站或App應用有較多動態內容,例如需要對各種API接口進行加速,則需要使用阿里雲全站加速產品。全站加速能同時加速動態和靜態內容,加速方式如下:

  • 靜態內容使用CDN加速。
  • 動態內容通過阿里雲的路由優化、傳輸優化等動態加速技術以最快的速度訪問您的服務器源站獲取數據。從而達到全站加速的效果。

CDN的緩存策略

靜態內容可以在CDN上緩存多久,這個是根據CDN的緩存策略的。如果用戶沒有主動到CDN上配置過期時間,則會遵循CDN的默認緩存策略。CDN的默認緩存時間比較短,最大不超過3600秒,因此很容易緩存過期。因為網站開發及其相關技術人員更清楚自身網站的業務邏輯、靜態和動態因素,所以建議用戶通過控制檯按照文件類型和目錄設置緩存時間。

用戶可以登錄阿里雲CDN控制檯配置緩存過期時間,針對靜態資源配置指定目錄和文件後綴名的緩存過期時間和優先級,資源過期後,自動從CDN節點刪除。

更多

CDN應用場景

Leave a Reply

Your email address will not be published. Required fields are marked *