天天看點

CDN緩存系統與varnish反向加速器簡介1.CDN簡介2.Varnish介紹

文章目錄

  • 1.CDN簡介
    • 1.1 什麼是cdn?
    • 1.2 cdn的基本原理?
    • 1.3 cdn的功能?
  • 2.Varnish介紹
    • 2.1 什麼是varnish?
    • 2.2Varnish的配置語言VCL
    • 2.3Varnish與Squid服務的差別

1.CDN簡介

1.1 什麼是cdn?

(1)CDN是建構在現有網絡基礎之上的智能虛拟網絡,依靠部署在各地的邊緣伺服器,通過中心伺服器平台的負載均衡、内容分發、排程等功能子產品,使使用者就近擷取所需内容,降低網絡擁塞,提高使用者通路響應速度和命中率。CDN的關鍵技術主要有内容存儲和分發技術。是一款高性能且開源的反向代理伺服器和HTTP加速器,可以有效降低web伺服器的負載,提升通路速度。

(2)CDN=Content Delivery Network,即 内容 分發 網絡

内容

指儲存在CDN節點上的被分發和通路的動靜态資料内容,比如JS、CSS、圖檔和靜态頁面等靜态資源!

注:(用戶端擷取資源途徑)

使用者一般從主站擷取動态内容後,再從CDN節點下載下傳相應的靜态資料

分發

就是如何讓上面提到的資料内容(資源),快速的部署在這個網絡中,進而快速為使用者服務。

目的:通過排程讓使用者通路最近的資源!

網絡

1)是部署于全球(國)的一大堆伺服器—>叢集

2)這些伺服器基于目前網際網路的基礎架構在其上層再構成一個網絡,這個網絡專為資源分發而生

1.2 cdn的基本原理?

(1)CDN的基本原理是廣泛采用各種緩存伺服器,将這些緩存伺服器分布到使用者通路相對集中的地區或網絡中,在使用者通路網站時,利用全局負載技術将使用者的通路指向距離最近的工作正常的緩存伺服器上,由緩存伺服器直接響應使用者請求

(2)内容分發網絡(CDN)是一個經政策性部署的整體系統,包括分布式存儲、負載均衡、網絡請求的重定向和内容管理4個要件,而内容管理和全局的網絡流量管理是CDN的核心所在。通過使用者就近性和伺服器負載的判斷,CDN確定内容以一種極為高效的方式為使用者的請求提供服務。

總的來說,内容服務基于緩存伺服器,也稱作代理緩存,它位于網絡的邊緣,距使用者僅有"一跳"之遙。同時,代理緩存是内容提供商源伺服器(通常位于CDN服務提供商的資料中心)的一個透明鏡像。這樣的架構使得CDN服務提供商能夠代表他們客戶,即内容供應商,向最終使用者提供盡可能好的體驗,而這些使用者是不能容忍請求響應時間有任何延遲的

(3)通過在網絡各處放置節點伺服器所構成的在現有的網際網路基礎之上的一層智能虛拟網絡,CDN系統能夠實時地根據網絡流量和各節點的連接配接、負載狀況以及到使用者的距離和響應時間等綜合資訊将使用者的請求重新導向離使用者最近的服務節點上。 其目的是使使用者可就近取得所需内容,解決 Internet網絡擁擠的狀況,提高使用者通路網站的響應速度。

cdn的技術原理?

CDN是一種組合技術,其中包括源站、緩存伺服器、智能DNS、用戶端等幾個重要部分。

源站

源站指釋出内容的原始站點。添加、删除和更改網站的檔案,都是在源站上進行的;另外緩存伺服器所抓取的對象也全部來自于源站。

緩存伺服器

緩存伺服器是直接提供給使用者通路的站點資源,有一台或數台伺服器組成;當使用者發起通路時,他的通路請求被智能DNS定位到離他較近的緩存伺服器。如果使用者所請求的内容剛好在緩存裡面,則直接把内容返還給使用者;如果通路所需的内容沒有被緩存,則緩存伺服器向鄰近的緩存伺服器或直接向源站抓取内容,然後再返還給使用者。

智能DNS

智能DNS是整個CDN技術的核心,它主要根據使用者的來源,将其通路請求指向離使用者比較近的緩存伺服器,如把廣州電信的使用者請求指向到廣州電信IDC機房中的緩存伺服器。通過智能DNS解析,讓使用者通路同服務商下的伺服器,消除國内南北網絡互相通路慢的問題,達到加速作用。智能DNS的出現,颠覆了傳統的一個域名對應一個鏡像的做法,讓使用者更加便捷的去通路網站。

用戶端

用戶端或稱使用者端即發起通路的普通使用者,一般的通路方式是浏覽器。這裡就不再做詳細說明。

1.3 cdn的功能?

(1)節省骨幹網帶寬,減少帶寬需求量; (2)提供伺服器端加速,解決由于使用者通路量大造成的伺服器過載問題; (3)服務商能使用Web

Cache技術在本地緩存使用者通路過的Web頁面和對象,實作相同對象的通路無須占用主幹的出口帶寬,并提高使用者通路網際網路頁面的相應時間的需求;

(4)能克服網站分布不均的問題,并且能降低網站自身建設和維護成本; (5)降低“通信風暴”的影響,提高網絡通路的穩定性。

2.Varnish介紹

由于目前實驗的環境下沒有CDN的網絡環境,是以這裡用相應的軟體來進行模拟,目前比較流行的就是varnish。想要更快速了解varnish就需要先了解cdn。

2.1 什麼是varnish?

學習指南

Varnish是一個反向HTTP代理,有時稱為HTTP加速器或web加速器。(官網解釋)

(1)Varnish将檔案或檔案片段存儲在記憶體中,使它們能夠快速被提供。

(2)Varnish本質上是一個鍵/值存儲,它通常使用URL作為鍵。

(3)Varnish是為現代硬體、現代作業系統和現代工作負載而設計的。

Varnish工作原理簡介

web伺服器典型的處理過程,要經過一系列的步驟來處理接收到的每個請求。有可能需要啟動一個程序來處理請求,有可能需要從磁盤上載入檔案,或者啟動内部線程來編譯執行一些腳本。在執行腳本的過程中,還會進行很多别的動作,比如進行資料庫查詢,讀取檔案等等。client有很多請求是重複的,但web伺服器無法記住曾經作出的響應,還會重複上面複雜的處理過程。當成百上千個請求并發通路時,伺服器的負載會很快上升,出現系統資源不夠的情況。 當把Varnish部署上之後,web請求的處理過程會有一些變化。client的請求将首先被Varnish接受。Varnish将分析接收的請求,并将其轉發到後端的web伺服器上。後端的web伺服器對請求進行正常的處理,并将依次将處理結果傳回給Varnish。Varnish的核心功能是能将後端web伺服器傳回的結果緩存起來,如果發現後續有相同的請求,Varnish不會把這個請求轉發到web伺服器,而是傳回緩存中的結果。這将有效的降低web伺服器的負載,提升響應速度,并且每秒可以響應更多的請求。Varnish速度很快的另一個主要原因是其緩存全部都是放在記憶體裡的,這比放在磁盤上要快的多。諸如此類的優化措施使得Varnish的相應速度超乎想象。但考慮到實際的系統中記憶體一般是有限的,是以需要手工配置一下緩存的空間限額,同時避免緩存重複的内容。

2.2Varnish的配置語言VCL

Varnish的所有配置都是通過VCL(varnish configure language)來配置的。它是一種基于“域”(domain specific)的簡單程式設計語言,它支援有限的算術運算和邏輯運算操作、允許使用正規表達式進行字元串比對、允許使用者使用set自定義變量、支援if判斷語句,也有内置的函數和變量等。使用VCL編寫的緩存政策通常儲存至.vcl檔案中,其需要編譯成二進制的格式後才能由varnish調用。事實上,整個緩存政策就是由幾個特定的子例程如vcl_recv、vcl_fetch等組成,它們分别在不同的位置(或時間)執行,如果沒有事先為某個位置自定義子例程,varnish将會執行預設定義的代碼,這些代碼就是default.vcl中被注釋的代碼。

VCL政策在啟用前,會由management程序将其轉換為C代碼,而後再由gcc編譯器将C代碼編譯成二進制程式。編譯完成後,management負責将其連接配接至varnish執行個體,即child程序。正是由于編譯工作在child程序之外完成,它避免了裝載錯誤格式VCL的風險。是以,varnish修改配置的開銷非常小,其可以同時保有幾份尚在引用的舊版本配置,也能夠讓新的配置即刻生效。編譯後的舊版本配置通常在varnish重新開機時才會被丢棄,如果需要手動清理,則可以使用varnishadm的vcl.discard指令完成。

2.3Varnish與Squid服務的差別

Varnish與Squid的對比:

Squid是一個高性能的代理緩存伺服器,它和varnish之間有諸多的異同點,這裡分析如下:

下面是他們之間的相同點:

(1)都是一個反向代理伺服器,

(2)都是開源軟體,

下面是它們的不同點,也是Varnish的優點:

(1)Varnish的穩定性很高,兩者在完成相同負荷的工作時,Squid伺服器發生故障的幾率要高于Varnish,因為使用Squid要經常重新開機。

(2)Varnish通路速度更快,Varnish采用了“Visual Page Cache”技術,所有緩存資料都直接從記憶體讀取,而squid是從硬碟讀取,因而Varnish在通路速度方面會更快。

(3)Varnish可以支援更多的并發連接配接,因為Varnish的TCP連接配接釋放要比Squid快。因而在高并發連接配接情況下可以支援更多TCP連接配接。

(4)Varnish可以通過管理端口,使用正規表達式批量的清除部分緩存,而Squid是做不到的。

當然,與傳統的Squid相比,Varnish也是有缺點的,列舉如下:

(a)varnish在高并發狀态下CPU、IO、記憶體等資源開銷都高于Squid。

(b)varnish程序一旦Hang、Crash或者重新開機,緩存資料都會從記憶體中完全釋放,此時所有請求都會發送到後端伺服器,在高并發情況下,會給後端伺服器造成很大壓力。

繼續閱讀