原文地址 緩存是分散式系統中的重要組件,主要解決高併發,大數據場景下,熱點數據訪問的性能問題。提供高性能的數據快速訪問。 本文是緩存在分散式應用第一篇文章,介紹緩存的原理,緩存的分類,緩存的設計,CDN緩存(原理,架構參考和技術實踐),反向代理緩存(原理,Squid架構實踐和常用代理緩存之間的比較) ...
緩存是分散式系統中的重要組件,主要解決高併發,大數據場景下,熱點數據訪問的性能問題。提供高性能的數據快速訪問。
本文是緩存在分散式應用第一篇文章,介紹緩存的原理,緩存的分類,緩存的設計,CDN緩存(原理,架構參考和技術實踐),反向代理緩存(原理,Squid架構實踐和常用代理緩存之間的比較)。本文主要是自己的學習總結和網路文章摘錄,供學習之用。
本次分享大綱
- 緩存概述
- CDN緩存
- 反向代理緩存
- 分散式緩存
- 本地緩存
- 緩存架構示例
- 參考資料
- 分享總結
一、緩存概述
緩存是分散式系統中的重要組件,主要解決高併發,大數據場景下,熱點數據訪問的性能問題。提供高性能的數據快速訪問。
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分鐘內沒有訪問的數據;
- 同步機制
- 實時寫入;(推)
- 非同步刷新;(推拉)
二、CDN緩存
CDN主要解決將數據緩存到離用戶最近的位置,一般緩存靜態資源文件(頁面,腳本,圖片,視頻,文件等)。國內網路異常複雜,跨運營商的網路訪問會很慢。為瞭解決跨運營商或各地用戶訪問問題,可以在重要的城市,部署CDN應用。使用戶就近獲取所需內容,降低網路擁塞,提高用戶訪問響應速度和命中率。
2.1CND原理
CDN的基本原理是廣泛採用各種緩存伺服器,將這些緩存伺服器分佈到用戶訪問相對集中的地區或網路中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工作正常的緩存伺服器上,由緩存伺服器直接響應用戶請求。
(1) 未部署CDN應用前
網路請求路徑:
請求:本機網路(區域網)——》運營商網路——》應用伺服器機房
響應:應用伺服器機房——》運營商網路——》本機網路(區域網)
在不考慮複雜網路的情況下,從請求到響應需要經過3個節點,6個步驟完成一次用戶訪問操作。
(2) 部署CDN應用後
網路路徑:
請求:本機網路(區域網)——》運營商網路
響應:運營商網路——》本機網路(區域網)
在不考慮複雜網路的情況下,從請求到響應需要經過2個節點,2個步驟完成一次用戶訪問操作。
與不部署CDN服務相比,減少了1個節點,4個步驟的訪問。極大的提高的系統的響應速度。
2.2 CDN優缺點
(1)優點(摘自百度百科)
1、本地Cache加速:提升訪問速度,尤其含有大量圖片和靜態頁面站點;
2、鏡像服務:消除了不同運營商之間互聯的瓶頸造成的影響,實現了跨運營商的網路加速,保證不同網路中的用戶都能得到良好的訪問質量;
3、遠程加速:遠程訪問用戶根據DNS負載均衡技術智能自動選擇Cache伺服器,選擇最快的Cache伺服器,加快遠程訪問的速度;
4、帶寬優化:自動生成伺服器的遠程Mirror(鏡像)cache伺服器,遠程用戶訪問時從cache伺服器上讀取數據,減少遠程訪問的帶寬、分擔網路流量、減輕原站點WEB伺服器負載等功能。
5、集群抗攻擊:廣泛分佈的CDN節點加上節點之間的智能冗餘機制,可以有效地預防黑客入侵以及降低各種D.D.o.S攻擊對網站的影響,同時保證較好的服務質量。
(2)缺點
1.動態資源緩存,需要註意實時性;
解決:主要緩存靜態資源,動態資源建立多級緩存或準實時同步;
2.如何保證數據的一致性和實時性需要權衡考慮;
解決:
- 設置緩存失效時間(1個小時,最終一致性);
- 數據版本號;
2.3CND架構參考
摘自《雲宙視頻CDN系統》
2.4 CND技術實踐
目前,中小型互聯網公司,綜合成本考慮,一般租用第三方CDN服務,大型互聯網公司,採用自建或第三方結合的方式。比如淘寶剛開始使用第三方的,當流量很大後,第三方公司無法支撐其CDN流量,淘寶最後採用自建CDN的方式實現。
淘寶CDN,如下圖(來自網路):
三、反向代理緩存
反向代理是指在網站伺服器機房部署代理伺服器,實現負載均衡,數據緩存,安全控制等功能。
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,一般作為反向代理使用,可以實現簡單的緩存。