再快一點?動態內容如何加速

菜農曰發表於2023-01-03

未來已來,只是不均衡地分佈在當下

大家好,我是菜農,歡迎來到我的頻道。

近年來 Web 3 的概念在程式設計師的小圈子也幾乎是人盡皆知了。功能再強,噱頭再足,但是如果訪問速度沒有跟上,一起都是浮雲。哪怕拿現在已經成熟的 Web 2.0來說,內容也相當豐富,動態網頁、個性化內容、電子交易資料等。但是內容逐漸豐富,人們的訪問速度卻逐漸變慢,使用體驗也會隨之下降。因此對於動態內容的加速也尤為重要,而這篇,我們將瞭解有幾種加速方式可以實際改善我們使用體驗。

經典的 MVC 架構分為了三層,分別是:

  1. 表現層

表現層是 Web 系統與外部系統的互動介面,這層負責接收使用者端的 HTTP 內容訪問請求,從檔案系統中讀取靜態檔案提供給使用者,需要時向中間的應用邏輯層發起請求。

  1. 業務邏輯層

業務邏輯層是 Web 系統的核心層,負責處理所有業務邏輯和動態內容的生成。內容的動態生成通常涉及個性化內容處理、資料處理等工作,因此需要與前端的表現層、後端的資料訪問層通訊。

  1. 資料訪問層

資料訪問層位於系統的後端,負責管理Web系統的主要資訊和資料儲存,通常由資料庫伺服器和儲存裝置組成。

那麼在我們已有認知的加速處理方案中,位當其先的要數 CDN 處理了。

CDN 認知

對於CDN 這個名詞,大家大可以望文生義:Content Distribute Network,也就是 內容分發網路。CDN 的工作很純粹:將內容從源站傳遞到使用者端。

什麼是網際網路

說到 CDN 的認知,我們就需要先認知什麼是 網際網路,網際網路這個詞對於程式設計師乃至大部分使用者來說已經是印著腦子裡的東西了。但是我們常說的網際網路,是指廣義上的網際網路,,由兩層組成:一層是以 TCP/IP 為代表的網路層(四層協議);另一層是以全球資訊網 WWW 為代表的應用層(七層協議)。目前普遍存在的一個認識誤區也就是家好難過個網際網路和全球資訊網混為一談。

  • TCP/IP 為代表的網路層

可理解為 狹義的網際網路。實際上是廣義網際網路的下層,是網路的基礎,這一層的主要作用是透過計算機之間的互聯,將各種資訊的資料包文以極低的成本進行傳輸,俗稱 管道

網際網路的設計理念是:網路是中立和無控制的,任何人都沒有決定權;網路是與應用無關的,它的任務就是如何更好地將資料包進行端到端的傳輸。
  • 全球資訊網WWW 為代表的應用層

可理解為 廣義的網際網路。這一層包括很多種型別的流量和應用,所有SP(Service Provider 服務提供商)提供的都是這些使用者看得見、摸得著的應用。

兩者的區別:以鐵路為例子的話,*網際網路是鐵路軌道和訊號系統,全球資訊網則是在鐵路上執行的列車之一。

影響網際網路傳輸的4個因素
  1. "第一公里"。指的是全球資訊網流量向使用者傳送的第一個出口,是網址伺服器接入網際網路的鏈路所能提供的頻寬。
  2. "最後一公里"。指的是全球資訊網流量向使用者傳送的最後一段接入鏈路,即使用者接入頻寬。
  3. 對等互聯關口。這裡的對等互聯是指不同基礎運營商之間的互聯互通,一般兩個運營商之間只有兩三個互聯互通點,那麼可以想象這兩三個點上會產生多麼大的流量。
  4. 長途骨幹傳輸。首先是長距離傳輸時延問題,是從網路伺服器到使用者之間要經過網路所在IDC、骨幹網、使用者所在都會網路、使用者所在接入網等,距離非常遙遠,不可避免會帶來較長的傳輸時延。
CDN 工作過程

有了CDN之後會極大地簡化網站的系統維護工作量,網站維護人員只需將網站內容注入CDN的系統,透過CDN部署在各個物理位置的伺服器進行全網分發,就可以實現跨運營商、跨地域的使用者覆蓋。由於CDN將內容推送到網路邊緣,大量的使用者訪問被分散到網路邊緣,就不再對網站出口、互聯互通點的資源擠佔,也不再需要跨越長距離IP路由了。

  1. 當使用者點選網站頁面上的內容URL,經過本地DNS系統解析,DNS系統會最終將域名的解析器交給CNAME指向的CDN專用DNS伺服器
  2. CDN的DNS伺服器將CDN的全域性負載均衡裝置IP地址返回使用者
  3. 使用者向CDN的全域性負載均衡裝置發起內容URL訪問請求
  4. CDN全域性負載均衡裝置根據使用者IP地址,以及使用者請求的內容URL,選擇一臺使用者所屬區域的區域負載均衡裝置,告使用者這臺裝置發起請求
  5. 區域負載均衡裝置會為使用者選擇一臺合適的快取伺服器提供服務,選擇的依據包括:根據使用者IP地址,判斷哪一臺伺服器距使用者最近;根據使用者所請求的URL中攜帶的內容名稱,判斷哪一臺伺服器上有使用者所需的內容;查詢各個伺服器當前的負載均衡情況,判斷哪一臺伺服器具備服務能力。基於以上這些條件的綜合分析之後,區域負載均衡裝置會向全域性負載均衡裝置返回一臺快取伺服器的IP地址
  6. 全域性負載均衡裝置把伺服器的IP地址返回給使用者
  7. 使用者向快取伺服器發起請求,快取伺服器響應使用者請求,將使用者所需內容傳送到使用者終端。如果這臺快取伺服器上並沒有使用者想要的內容,而區域均衡裝置依然把它分配給使用者,那麼這臺伺服器就要向它的上一級快取伺服器請求內容,直至追溯到網站的源伺服器將內容拉到本地

DNS 伺服器根據使用者 IP 地址,將域名解析成相應節點的快取伺服器 IP 地址,實現使用者就近訪問。使用 CDN 服務的網站,只需將其域名解析權交給 CDN 的 GSLB 裝置,將需要分發的內容注入 CDN,就可以實現內容加速了

說到這裡文章當然不可能就高一段落了,否則也太水了,我們近而深究下為什麼 CDN 可以實現加速?究其原因還是逃脫不了 快取定理

CDN 複製機制

Web 網站藉助 CDN 技術能夠獲得更好的擴充套件性和高效能,關於這一優點已經是無可爭議的事實了。那麼其核心就在於 CDN 採用的快取(Caching)和複製(Replication)機制。其中快取是將最近經常被訪問的原伺服器擁有的內容複製到邊緣伺服器上,可被視為具有特定策略的複製。

CDN 的複製機制是指將源 Web 系統邏輯架構的各個層次的相應部分複製到邊緣伺服器上,以實現緩解源系統的處理壓力 ,主要表現在 Web 傳統的三層模型中:

  1. Web 系統表現層的複製。透過複製,邊緣伺服器能夠負責靜態內容的管理和提供,該方法在傳統CDN中被廣為使用,邊緣伺服器又被稱為代理伺服器,透過反向代理加速靜態檔案的交付。
  2. Web 系統業務邏輯層的複製。透過複製,CDN被用於改進動態生成內容的交付效能,該方法又被稱為邊緣計算,即將應用程式和業務元件直接在 CDN 的邊緣伺服器中計算,從而直接在靠近使用者的地方生成動態 Web 內容。
  3. Web系統資料訪問層的複製。透過複製,CDN 邊緣伺服器能夠具備動態內容和掌握內容生產資料的能力,而源伺服器只負責管理基礎架構和存放資料的主版本。
  4. Web系統使用者檔案的複製。透過複製,CDN 邊緣伺服器能夠掌控用於生成使用者定製化內容的資料。(在 web2.0 時代使用者對個性化需求的不斷增強,使用者的資料越來越受到業界的關注,利用大資料能力產品的智慧價值日益增高,因此衍生出單獨的一層)

軟體加速技術

上面說到了 CDN 的複製機制能夠有效提升動態內容的訪問速度。

1、邊緣計算能力

邊緣計算用於將應用程式、資料和計算能力(服務)從網路中的少量集中點推送到網路的邏輯邊緣位置。邊緣計算複製並分發在多個分散式網路中的Web伺服器中儲存的資訊片段。這一層複製能力直接將業務處理邏輯和資料層的訪問能力也複製到了各個邊緣節點上,進而利用邊緣計算平臺提供分發服務的同時減少從企業讀取資料的次數和讀取資料的大小,降低系統的響應延遲。

2、資料複製能力

在邊緣計算能力分佈後,源站提供的資料儲存仍然還是單一一個,因此邊緣伺服器上的應用邏輯只能共享集中化的系統資料庫。在這種情況下,對於那些瓶頸在後端資料訪問層而不是業務邏輯層的 Web 應用,還是難以解決系統的擴充套件性和效能問題。因此就需要考慮用 CDN 對應用資料進行復制和管理,利用邊緣伺服器代替源站 Web 系統的後臺資料訪問層中的資料庫系統。

我們通常的處理方式是將業務邏輯層處理過/查詢過的資料進行邊緣伺服器的複製,這種查詢結果的快取技術影響效能的關鍵在於快取的命中率。為了使得應用邏輯查詢的結果能夠高頻率地被後續查詢請求所命中,我們就需要提高以及最佳化查詢匹配引擎。

在資料快取層面最常面臨的問題也是 快取一致性 的問題,不過目前存在多種演算法以解決分散式快取的問題,這裡就不再進行贅述。

硬體加速技術

我們在軟體層面利用 CDN 以及複製計算能力為加速做出了不小的努力。但有一點不容忽視,那就是網路。

應用加速網路(Application Delivery Networking,ADN),利用網路最佳化和加速裝置,確保客戶業務應用能夠快速、安全、可靠地交付給使用者。應用加速網路實際上是傳統的網路負載均衡的升級和擴充套件,綜合使用了負載平衡、TCP 最佳化管理、連結管理、SSL VPN、壓縮最佳化、智慧網路地址轉換、高階路由、智慧埠映象等各種技術。

廣域網加速技術
如何能夠讓廣域網像區域網一樣工作

我們都知道廣域網的傳輸範圍大於區域網,而都會網路又大於廣域網。當然我們這裡不做過多的擴充套件延伸,我們只討論廣域網的問題。

衡量廣域網傳輸效能和質量的主要指標是頻寬時延。跟區域網相比,廣域網的頻寬更低,時延更大,而這也是很多小夥伴家裡寬頻測試的常見誤區,頻寬大不一定網速就快,時延是個很重要的影響因素。

傳輸時延是由多方面的原因造成的:

  1. 物理距離帶來一定的時延。資料在光纖中傳輸,途徑多個路由裝置和交換裝置,源和目的裝置之間的物理距離越長,其傳輸所需的時間也越長。
  2. TCP 協議的工作機制也帶來一些延遲。

那麼要進行廣域網加速,就需要從以上幾個問題入手:

網路頻寬不足問題

  1. 加大IT投入,對頻寬進行擴容和升級
  2. 減少跨越廣域網的資料傳輸量

這裡主要涉及的技術就是資料壓縮和快取技術。其次,針對廣域網時延問題,目前最常用的辦法是在廣域網的兩端成對部署裝置,透過對TCP協議進行最佳化,實現整個傳輸過程的最佳化。最後,應用協議也存在低效的問題,一般是從應用層最佳化本身來做,即針對應用協議進行傳輸的改進,比如採用透過預測客戶行為做一些資料包的提前傳送等技術,同時快取的應用也是一個手段。

TCP協議最佳化

  1. 減少傳輸資料包的數量,目前很多協議框架都會自行進行拆包重組
  2. 自適應擁塞視窗,基於網路時延等特徵自動調整視窗大小,可以在給定使用者網路條件下實現最高頻寬傳輸
  3. 有限制地快速重傳,設定被重發的資料包比其他資料包傳輸優先順序高,從而使等待重傳資料包的應用得到快速響應,減少應用程式等待時間
  4. 連線池,網路加速裝置維護一個預先建立好的 TCP 連線池

好了,以上便是本篇的所有內容,如果覺得對你有幫助的小夥伴不妨點個關注做個伴,便是對小菜最大的支援。不要空談,不要貪懶,和小菜一起做個吹著牛X做架構的程式猿吧~ 我們們下文再見!

今天的你多努力一點,明天的你就能少說一句求人的話!

我是小菜,一個和你一起變強的男人。 ?

微信公眾號已開啟,菜農曰,沒關注的同學們記得關注哦!

相關文章