分布式緩存系統


分布式緩存

分布式緩存是為了解決 數據庫服務器 和 Web服務器 之間的瓶頸,如果一個網站流量很大這個瓶頸將會非常明顯,每次數據庫查詢耗費的時間將不容樂觀。對於更新速度不是很快的站點,可以采用靜態化來避免過多的數據查詢,可使用Freemaker或Velocity來實現頁面靜態化。對於更新數據以秒級的站點,靜態化也不會太理想,可通過分布式緩存系統來解決,如Redis、MemCache、SSDB等。

分布式緩存系統出現的原因

  1. 互聯網或電商應用系統中,業務需求復雜,必須對整個業務系統進行垂直拆分,以保證各個業務模塊清晰並對外提供服務。
  2. 用戶群體廣泛就必然存在高並發的問題,如果將引用系統部署在單節點服務器上,勢必會對單服務器造成巨大的訪問壓力,因此需要將系統部署到不同的節點上,同時也要將不同的數據分散到不同的節點上。
  3. 互聯網時代大數據為王,人類正從IT時代走向DT時代,因為數據量大所以要對數據進行分布式處理。

 

分布式緩存特性

高性能:當傳統數據庫面臨大規模數據訪問時,磁盤I/O往往成為性能瓶頸,從而導致過高的響應延遲,能夠將高速內存作為數據對象的存儲介質,數據以key/value形式存儲,理想情況下可以獲得DRAM級的讀寫性能;

動態擴展性:支持彈性擴展,通過動態增加或減少節點應對變化的數據訪問負載,提供可預測的性能與擴展性;同時最大限度地提高資源利用率;

高可用性:可用性包含數據可用性與服務可用性兩方面.基於冗余機制實現高可用性,無單點失效,支持故障的自動發現,透明地實施故障切換,不會因服務器故障而導致緩存服務中斷或數據丟失.動態擴展時自動均衡數據分區,同時保障緩存服務持續可用;

易用性:提供單一的數據與管理視圖,API接口簡單,,且與拓撲結構無關,動態擴展或失效恢復時無需人工配置,自動選取備份節點,多數緩存系統提供了圖形化的管理控制台,便於統一維護。

分布式緩存優點

1,提升數據讀取速度

2,提升系統擴展能力

3,降低存儲成本

分布式緩存應用場景

1,用來緩存Web頁面的內容片段,包括HTML、CSS和圖片等,多應用於社交網站等;

2,緩存系統作為ORM框架的二級緩存對外提供服務,減輕數據庫的負載壓力,加速應用訪問;

3,緩存包括Session會話狀態及應用橫向擴展時的狀態數據等;,

4,並行處理,涉及大量中間計算結果需要共享;

5,分布式緩存提供了針對事件流的連續查詢(continuousquery)處理技術,滿足實時性需

6,分布式緩存為事務型應用提供高吞吐率、低延時的解決方案,支持高並發事務請求處理,多應用於鐵路、金融服務和電信等領域。

 

 

數據存儲方案

提到數據就不得不說數據庫,目前主流的數據存儲方案分為兩個方向:

 

 

 

 
數據存儲方案
  • 關系型數據庫
    如Oracle、MySQL、DB2、MSSQL...
  • 非關系型數據庫
    如MongoDB、HBase、Redis、LevelDB、CouchDB...
 

 

 

關系型與非關系型數據庫之間的異同點

在Web開發中,經常要重復從數據庫中獲取相同的數據,這種重復的操作極大地增加了數據庫的負載。緩存是解決這種問題最好的辦法。

Redis就是一個高性能的、分布式的內存對象緩存系統,用於在動態應用中減少數據庫負載,提升訪問速度。

 
 
分布式緩存系統

在用戶第一次發送請求時,從關系型數據庫RDBMS中獲取數據並返回,同時將該數據保存到分布式緩存系統中。當用戶再次發送請求時,直接從分布式緩存系統中獲取,以提高性能。這里使用Redis做集群的主從策略來實現高可用架構。

分布式緩存產品

實際開發中經常使用的分布式緩存系統主要有Redis、MemCache、SSDB,這三者都是KV存儲方案,各有優缺,但Redis相比較而言實用性更加廣泛。由於Redis特點突出,支持多種數據類型,如String、Hash、Set、List、StoredSet,並且有高可用的解決方案和集群方案,支持水平擴容。也就解決了大部分企業的需求,而MemCache、SSDB相對來說,解決方案並不算那么完善。

Redis與MemCache的區別

  • 線程操作

Redis使用單核而Memcache使用多核,也就是說,Redis屬於單線程操作,MemCache屬於多線程操作。在多個用戶同時請求時,Redis是處理完一個請求以后再去處理下一個請求。而MemCache可以同時處理多個請求。

  • 數據結構

Redis不僅支持簡單的KV類型的數據,同時提供List、Set、Hash等數據結構的存儲。

  • 數據安全性

Redis和MemCache都是將數據存儲在內存中,都屬於內存數據庫。但是MemCache服務宕機或重啟后數據是不可恢復的,而Redis服務宕機或重啟后可以恢復。因此Redis可以做持久化,它會將內存數據定期同步到磁盤中。

Redis提供兩種持久化策略,默認支持的是RDB持久化以及需要手工開啟的AOF持久化。而MemCache僅僅是將數據存儲在內存中。

  • 數據備份

Redis支持數據備份,需開啟master-slave主從策略。

  • 過期策略

MemCache在set時就指定了過期時間,而Redis可以通過expire設置Key的過期時間。

  • 內存回收

MemCache有內存回收機制,當程序中為它設置的內存大小,一旦存儲的數據超過時,它會去自動回收,也就是釋放,不然會出現內存溢出的情況。這是因為MemCache的數據都是存儲在內存中的。而Redis不會出現這種情況,因為Redis可以將數據持久化到磁盤上。

Redis和SSDB的區別

SSDB是基於Google性能極高的LevelDB作為存儲引擎去架構的,特性與Redis基本一致,而且可以和Redis完美整合。SSDB完全可以替換Redis,它與Redis的API兼容並支持Redis的客戶端,也就是說,在redis-cli上的所有操作在SSDB中同樣適用。由於SSDB該性能的寫特性,所以很多時候可以通過Redis+SSDB實現分布式緩存的策略,即"用SSDB寫用Redis讀"。

Redis

Redis是一個開源的面向鍵值對Key-Value類型數據的分布式NoSQL數據庫系統,它的特點是高性能,適用於高並發的應用場景。可以說Redis純粹是為應用而產生的。

Redis是一個高性能的KV數據庫,並提供多種語言的API。Redis的缺點也很明顯,對事務的處理很弱,也無法做太復雜的關系型數據庫中的模型。

Redis支持存儲的Value類型相對更多,典型的如字符串String、鏈表List、集合Set、有序集合Zset(sorted set)、哈希類型Hash,這些數據類型都支持push和pop、add和remove,以及取交集、並集、差集等更為復雜的操作。由於這些操作都是原子性的,在此基礎上,Redis支持各種不同方式的排序。

與MemCache一樣為了保證效率,數據都被緩存在內存中,區別在於Redis會周期性的把更新的數據寫入磁盤,或把修改操作寫入追加的記錄文件中,並且在此基礎上實現master-slave主從同步策略,也就是數據可以從主服務器向任意數量的從服務器上同步,從服務器可以關聯其他類型的主服務器。因此,Redis的出現很大程度上彌補了MemCahe此類KV存儲的不足,在部分場合可以對關系型數據庫起到很好的補充作用。

 
 

 
 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM