日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CDN:静态资源如何加速?

發(fā)布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CDN:静态资源如何加速? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

CDN:靜態(tài)資源如何加速?

  • 靜態(tài)資源加速的考慮點
  • CDN 的關鍵技術
  • 總結

現(xiàn)在,我們應該對包括本地 緩存、分布式緩存等緩存組件的適用場景和使用技巧有了一定了解了。結合我們前面學過的客戶端高可用方案,我們會將單個緩存節(jié)點擴展為高可用的緩存集群,現(xiàn)在,我們的系統(tǒng)架構演變成了下面這樣:

在這個架構中我們使用分布式緩存對動態(tài)請求數(shù)據(jù)的讀取做了加速,但是在我們的系統(tǒng)中存在著大量的靜態(tài)資源請求:

  • 對于移動 APP 來說,這些靜態(tài)資源主要是圖片、視頻和流媒體信息。
  • 對于 Web 網站來說,則包括了 JavaScript 文件,CSS 文件,靜態(tài) HTML 文件等等。

具體到電商系統(tǒng)來說,商品的圖片,介紹商品使用方法的視頻等等靜態(tài)資源,現(xiàn)在都放在了 Nginx 等 Web 服務器上,它們的讀請求量極大,并且對訪問速度的要求很高,并且占據(jù)了很高的帶寬,這時會出現(xiàn)訪問速度慢,帶寬被占滿影響動態(tài)請求的問題,那么我們就需要考慮如何針對這些靜態(tài)資源進行讀加速了

靜態(tài)資源加速的考慮點

我可能會有疑問:“是否也可以使用分布式緩存來解決這個問題呢?”答案是否定的。一般來說,圖片和視頻的大小會在幾兆到幾百兆之間不等,如果我們的應用服務器和分布式緩存都部署在北京的機房里,這時一個杭州的用戶要訪問緩存中的一個視頻,那這個視頻文件就需要從北京傳輸?shù)胶贾?#xff0c;期間會經過多個公網骨干網絡,延遲很高,會讓用戶感覺視頻打開很慢,嚴重影響到用戶的使用體驗。

所以,靜態(tài)資源訪問的關鍵點是就近訪問,即北京用戶訪問北京的數(shù)據(jù),杭州用戶訪問杭州 的數(shù)據(jù),這樣才可以達到性能的最優(yōu)。

當然我們不可能在各個地方都部署服務器,這樣成本太高了,而且當靜態(tài)資源發(fā)生變化,需要更新所有的靜態(tài)資源服務器,這顯然是不現(xiàn)實的。而且,單個視頻和圖片等靜態(tài)資源很大,并且訪問量又極高,如果使用業(yè)務服務器和分布式緩存來承擔這些流量,無論是對于內網還是外網的帶寬都會是很大的考驗。

所以我們考慮在業(yè)務服務器的上層,增加一層特殊的緩存,用來承擔絕大部分對于靜態(tài)資源 的訪問,這一層特殊緩存的節(jié)點需要遍布在全國各地,這樣可以讓用戶選擇最近的節(jié)點訪問。緩存的命中率也需要一定的保證,盡量減少訪問資源存儲源站的請求數(shù)量(回源請 求)。這一層緩存就是我們這節(jié)課的重點:CDN

CDN 的關鍵技術

CDN(Content Delivery Network/Content Distribution Network,內容分發(fā)網絡)。 簡單來說,CDN 就是將靜態(tài)的資源分發(fā)到,位于多個地理位置機房中的服務器上,因此它 能很好地解決數(shù)據(jù)就近訪問的問題,也就加快了靜態(tài)資源的訪問速度。

在大中型公司里面,CDN 的應用非常的普遍,大公司為了提供更穩(wěn)定的 CDN 服務會選擇 自建 CDN,而大部分公司基于成本的考慮還是會選擇專業(yè)的 CDN 廠商,網宿、阿里云、 騰訊云、藍汛等等,其中網宿和藍汛是老牌的 CDN 廠商,阿里云和騰訊云是云廠商提供的 服務,如果服務部署在云上可以選擇相應云廠商的 CDN 服務,這些 CDN 廠商都是現(xiàn)今行業(yè)內比較主流的。

對于 CDN 來說,我們可能已經從運維的口中聽說過,并且也了解了它的作用。但是當讓我們來配置 CDN 或者是排查 CDN 方面的問題時,就有可能因為不了解它的原理而束手無策 了。

所以,我們來了解一下,要搭建一個 CDN 系統(tǒng)需要考慮哪兩點:

  • 如何將用戶的請求映射到 CDN 節(jié)點上;
  • 如何根據(jù)用戶的地理位置信息選擇到比較近的節(jié)點;

下面我們就具體了解一下 CDN 系統(tǒng)是如何實現(xiàn)加速用戶對于靜態(tài)資源的請求的。

  • 如何讓用戶的請求到達 CDN 節(jié)點
    首先,我們考慮一下如何讓用戶的請求到達 CDN 節(jié)點,你可能會覺得,這很簡單啊,只需要告訴用戶 CDN 節(jié)點的 IP 地址,然后請求這個 IP 地址上面部署的 CDN 服務就可以了 啊。但是這樣會有一個問題:就是我們使用的是第三方廠商的 CDN 服務,CDN 廠商會給 我們一個 CDN 的節(jié)點 IP,比如說這個 IP 地址是“111.202.34.130”,那么我們的電商系 統(tǒng)中的圖片的地址很可能是這樣的:“http://111.202.34.130/1.jpg”, 這個地址是要存儲在數(shù)據(jù)庫中的。

    那么如果這個節(jié)點 IP 發(fā)生了變更怎么辦?或者我們如果更改了 CDN 廠商怎么辦?是不是 要修改所有的商品的 url 域名呢?這就是一個比較大的工作量了。所以,我們要做的事情是 將第三方廠商提供的 IP 隱藏起來,給到用戶的最好是一個本公司域名的子域名。

    那么如何做到這一點呢?這就需要依靠 DNS 來幫我們解決域名映射的問題了。

    DNS(Domain Name System,域名系統(tǒng))實際上就是一個存儲域名和 IP 地址對應關系 的分布式數(shù)據(jù)庫。而域名解析的結果一般有兩種,一種叫做“A 記錄”,返回的是域名對應 的 IP 地址;另一種是“CNAME 記錄”,返回的是另一個域名,也就是說當前域名的解析 要跳轉到另一個域名的解析上,實際上 www.baidu.com 域名的解析結果就是一個 CNAME 記錄,域名的解析被跳轉到 www.a.shifen.com 上了,我們正是利用 CNAME 記 錄來解決域名映射問題的,具體是怎么解決的呢?我們舉個例子

    比如我們公司的一級域名叫做 example.com,那么你可以給你的圖片服務的域名定義 為“img.example.com”,然后將這個域名的解析結果的 CNAME 配置到 CDN 提供的域 名上,比如 uclound 可能會提供一個域名是“80f21f91.cdn.ucloud.com.cn”這個域名。 這樣你的電商系統(tǒng)使用的圖片地址可以是“http://img.example.com/1.jpg”。

    用戶在請求這個地址時,DNS 服務器會將域名解析到 80f21f91.cdn.ucloud.com.cn 域名 上,然后再將這個域名解析為 CDN 的節(jié)點 IP,這樣就可以得到 CDN 上面的資源數(shù)據(jù)了。

    不過,這里面有一個問題:因為域名解析過程是分級的,每一級有專門的域名服務器承擔解 析的職責,所以,域名的解析過程有可能需要跨越公網做多次 DNS 查詢,在性能上是比較差的。


    從“ 域名分級解析示意圖”中你可以看出 DNS 分為很多種,有根 DNS,頂級 DNS 等等。除此之外還有兩種 DNS 需要特別留意:一種是 Local DNS,它是由你的運營商提供的 DNS,一般域名解析的第一站會到這里;另一種是權威 DNS,它的含義是自身數(shù)據(jù)庫中存 儲了這個域名對應關系的 DNS。

  • 如何找到離用戶最近的 CDN 節(jié)點

    GSLB(Global Server Load Balance,全局負載均衡),它的含義是對于部署在不同地域的服務器之間做負載均衡,下面可能管理了很多的本地負載均衡組件。它有兩方面的作用:

    一方面,它是一種負載均衡服務器,負載均衡,顧名思義嘛,指的是讓流量平均分配使得下面管理的服務器的負載更平均;

    另一方面,它還需要保證流量流經的服務器與流量源頭在地緣上是比較接近的。

    GSLB 可以通過多種策略,來保證返回的 CDN 節(jié)點和用戶盡量保證在同一地緣區(qū)域,比如說可以將用戶的 IP 地址按照地理位置劃分為若干的區(qū)域,然后將 CDN 節(jié)點對應到一個區(qū) 域上,然后根據(jù)用戶所在區(qū)域來返回合適的節(jié)點;也可以通過發(fā)送數(shù)據(jù)包測量 RTT 的方式來決定返回哪一個節(jié)點。

    有了 GSLB 之后,節(jié)點的解析過程變成了下圖中的樣子:

    當然,是否能夠從 CDN 節(jié)點上獲取到資源還取決于 CDN 的同步延時。一般,我們會通過 CDN 廠商的接口將靜態(tài)的資源寫入到某一個 CDN 節(jié)點上,再由 CDN 內部的同步機制將 資源分散同步到每個 CDN 節(jié)點,即使 CDN 內部網絡經過了優(yōu)化,這個同步的過程是有延時的,一旦我們無法從選定的 CDN 節(jié)點上獲取到數(shù)據(jù),我們就不得不從源站獲取數(shù)據(jù),而 用戶網絡到源站的網絡可能會跨越多個主干網,這樣不僅性能上有損耗,也會消耗源站的帶寬,帶來更高的研發(fā)成本。所以,我們在使用 CDN 的時候需要關注 CDN 的命中率和源站 的帶寬情況。

  • 總結

    我們了解了 CDN 對靜態(tài)資源進行加速的原理和使用的核心技術,這里你需 要了解的重點有以下幾點:

    • DNS 技術是 CDN 實現(xiàn)中使用的核心技術,可以將用戶的請求映射到 CDN 節(jié)點上;
    • DNS 解析結果需要做本地緩存,降低 DNS 解析過程的響應時間;
    • GSLB 可以給用戶返回一個離著他更近的節(jié)點,加快靜態(tài)資源的訪問速度。

    作為一個服務端開發(fā)人員,我們可能會忽略 CDN 的重要性,對于偶爾出現(xiàn)的 CDN 問題嗤之以鼻,覺得這個不是我們應該關心的內容,這種想法是錯的。

    CDN 是我們系統(tǒng)的門面,其緩存的靜態(tài)數(shù)據(jù),如圖片和視頻數(shù)據(jù)的請求量很可能是接口請 求數(shù)據(jù)的幾倍甚至更高,一旦發(fā)生故障,對于整體系統(tǒng)的影響是巨大的。另外 CDN 的帶寬 歷來是我們研發(fā)成本的大頭,尤其是目前處于小視頻和直播風口上,大量的小視頻和直播研發(fā)團隊都在絞盡腦汁地減少 CDN 的成本。由此看出,CDN 是我們整體系統(tǒng)至關重要的組 成部分,而它作為一種特殊的緩存,其命中率和可用性也是我們服務端開發(fā)人員需要重點關注的指標。

    總結

    以上是生活随笔為你收集整理的CDN:静态资源如何加速?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。