大型網站架構系列:緩存在分佈式系統中的應用(一)

緩存是分佈式系統中的重要組件,主要解決高併發,大數據場景下,熱點數據訪問的性能問題。提供高性能的數據快速訪問。css

本文是緩存在分佈式應用第一篇文章,介紹緩存的原理,緩存的分類,緩存的設計,CDN緩存(原理,架構參考和技術實踐),反向代理緩存(原理,Squid架構實踐和經常使用代理緩存之間的比較)。本文主要是本身的學習總結和網絡文章摘錄,供學習之用。前端

本次分享大綱

  1. 緩存概述
  2. CDN緩存
  3. 反向代理緩存
  4. 分佈式緩存
  5. 本地緩存
  6. 緩存架構示例
  7. 參考資料
  8. 分享總結

1、緩存概述

緩存是分佈式系統中的重要組件,主要解決高併發,大數據場景下,熱點數據訪問的性能問題。提供高性能的數據快速訪問。nginx

1.1緩存的原理

(1)       將數據寫入/讀取速度更快的存儲(設備);後端

(2)       將數據緩存到離應用最近的位置;緩存

(3)       將數據緩存到離用戶最近的位置。安全

1.2緩存分類

在分佈式系統中,緩存的應用很是普遍,從部署角度有如下幾個方面的緩存應用。服務器

(1)       CDN緩存;網絡

(2)       反向代理緩存;架構

(3)       分佈式Cache;併發

(4)       本地應用緩存;

1.3緩存媒介

經常使用中間件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等;

緩存的內容:文件,數據,對象;

緩存的介質:CPU,內存(本地,分佈式),磁盤(本地,分佈式)

1.3緩存設計

緩存設計須要解決如下幾個問題:

(1)       緩存什麼?

哪些數據須要緩存:1.熱點數據;2.靜態資源;

(2)       緩存的位置?

CDN,反向代理,分佈式緩存服務器,本機(內存,硬盤)

(3)       如何緩存的問題?

  • 過時策略

1.固定時間:好比指定緩存的時間是30分鐘;

2.相對時間:好比最近10分鐘內沒有訪問的數據;

  • 同步機制
  1. 實時寫入;(推)
  2. 異步刷新;(推拉)

2、CDN緩存

CDN主要解決將數據緩存到離用戶最近的位置,通常緩存靜態資源文件(頁面,腳本,圖片,視頻,文件等)。國內網絡異常複雜,跨運營商的網絡訪問會很慢。爲了解決跨運營商或各地用戶訪問問題,能夠在重要的城市,部署CDN應用。使用戶就近獲取所需內容,下降網絡擁塞,提升用戶訪問響應速度和命中率。

2.1CND原理

CDN的基本原理是普遍採用各類緩存服務器,將這些緩存服務器分佈到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工做正常的緩存服務器上,由緩存服務器直接響應用戶請求。

(1)       未部署CDN應用前

 

網絡請求路徑:

請求:本機網絡(局域網)——》運營商網絡——》應用服務器機房

響應:應用服務器機房——》運營商網絡——》本機網絡(局域網)

在不考慮複雜網絡的狀況下,從請求到響應須要通過3個節點,6個步驟完成一次用戶訪問操做。

(2)       部署CDN應用後


網絡路徑:

請求:本機網絡(局域網)——》運營商網絡

響應:運營商網絡——》本機網絡(局域網)

在不考慮複雜網絡的狀況下,從請求到響應須要通過2個節點,2個步驟完成一次用戶訪問操做。

與不部署CDN服務相比,減小了1個節點,4個步驟的訪問。極大的提升的系統的響應速度。

2.2 CDN優缺點

(1)優勢(摘自百度百科)

一、本地Cache加速:提高訪問速度,尤爲含有大量圖片和靜態頁面站點;

二、鏡像服務:消除了不一樣運營商之間互聯的瓶頸形成的影響,實現了跨運營商的網絡加速,保證不一樣網絡中的用戶都能獲得良好的訪問質量;

三、遠程加速:遠程訪問用戶根據DNS負載均衡技術智能自動選擇Cache服務器,選擇最快的Cache服務器,加快遠程訪問的速度;

四、帶寬優化:自動生成服務器的遠程Mirror(鏡像)cache服務器,遠程用戶訪問時從cache服務器上讀取數據,減小遠程訪問的帶寬、分擔網絡流量、減輕原站點WEB服務器負載等功能。

五、集羣抗攻擊:普遍分佈的CDN節點加上節點之間的智能冗餘機制,能夠有效地預防黑客入侵以及下降各類D.D.o.S攻擊對網站的影響,同時保證較好的服務質量。

(2)缺點

1.動態資源緩存,須要注意實時性;

解決:主要緩存靜態資源,動態資源創建多級緩存或準實時同步;

 

2.如何保證數據的一致性和實時性須要權衡考慮;

解決:

  1. 設置緩存失效時間(1個小時,最終一致性);
  2. 數據版本號;

2.3CND架構參考

摘自《雲宙視頻CDN系統》

  

2.4 CND技術實踐

         目前,中小型互聯網公司,綜合成本考慮,通常租用第三方CDN服務,大型互聯網公司,採用自建或第三方結合的方式。好比淘寶剛開始使用第三方的,當流量很大後,第三方公司沒法支撐其CDN流量,淘寶最後採用自建CDN的方式實現。

淘寶CDN,以下圖(來自網絡):

 

3、反向代理緩存

反向代理是指在網站服務器機房部署代理服務器,實現負載均衡,數據緩存,安全控制等功能。

3.1緩存原理

反向代理位於應用服務器機房,處理全部對WEB服務器的請求。若是用戶請求的頁面在代理服務器上有緩衝的話,代理服務器直接將緩衝內容發送給用戶。若是沒有緩衝則先向WEB服務器發出請求,取回數據,本地緩存後再發送給用戶。經過下降向WEB服務器的請求數,從而下降了WEB服務器的負載。

 

         反向代理通常緩存靜態資源,動態資源轉發到應用服務器處理。經常使用的緩存應用服務器有Varnish,Ngnix,Squid。

3.2 Squid示例

Squid 反向代理通常只緩存靜態資源,動態程序默認不緩存。根據從 WEB 服務器返回的 HTTP 頭標記來緩衝靜態頁面。有四個最重要 HTTP 頭標記:

Last-Modified: 告訴反向代理頁面什麼時間被修改

Expires: 告訴反向代理頁面什麼時間應該從緩衝區中刪除

Cache-Control: 告訴反向代理頁面是否應該被緩衝

Pragma: 用來包含實現特定的指令,最經常使用的是 Pragma:no-cache

 

Squid 反向代理加速網站實例

(1)       經過DNS的輪詢技術,將客戶端的請求分發給其中一臺 Squid 反向代理服務器處理;

(2)       若是這臺 Squid 緩存了用戶的請求資源,則將請求的資源直接返回給用戶;

(3)       不然這臺 Squid 將沒有緩存的請求根據配置的規則發送給鄰居 Squid 和後臺的 WEB 服務器處理;

(4)       這樣既減輕後臺 WEB 服務器的負載,又提升整個網站的性能和安全性。

 

3.2 代理緩存比較

經常使用的代理緩存有Varnish,Squid,Ngnix,簡單比較以下:

(1)       varnish和squid是專業的cache服務,nginx須要第三方模塊支持;

(2)       Varnish採用內存型緩存,避免了頻繁在內存、磁盤中交換文件,性能比Squid高;

(3)       Varnish因爲是內存cache,因此對小文件如css,js,小圖片啥的支持很棒,後端的持久化緩存能夠採用的是Squid或ATS;

(4)       Squid功能全而大,適合於各類靜態的文件緩存,通常會在前端掛一個HAProxy或nginx作負載均衡跑多個實例;

(5)       Nginx採用第三方模塊ncache作的緩衝,性能基本達到varnish,通常做爲反向代理使用,能夠實現簡單的緩存。

相關文章
相關標籤/搜索