分布式是指將業(yè)務系統(tǒng)進行拆分,即分布式的每一個節(jié)點都是實現(xiàn)不同的功能。
集群是一組協(xié)同工作的服務實體,用以提供比單一服務實體更具擴展性與可用性的服務平臺。? ? ? ? (推薦學習:Redis視頻教程)
簡單說,分布式是以縮短單個任務的執(zhí)行時間來提升效率的,而集群則是通過提高單位時間內執(zhí)行的任務數(shù)來提升效率。
redis Cluster 集群模式通常具有高可用、可擴展性、分布式、容錯等特性。Redis 分布式方案一般有兩種:
客戶端分區(qū)方案
客戶端就已經(jīng)決定數(shù)據(jù)會被存儲到哪個 redis 節(jié)點或者從哪個 redis 節(jié)點讀取數(shù)據(jù)。其主要思想是采用哈希算法將 Redis 數(shù)據(jù)的 key 進行散列,通過 hash 函數(shù),特定的 key會映射到特定的 Redis 節(jié)點上。
客戶端分區(qū)方案的代表為 Redis Sharding,Redis Sharding 是 Redis Cluster 出來之前,業(yè)界普遍使用的 Redis多實例集群方法。Java 的 Redis 客戶端驅動庫 Jedis,支持 Redis Sharding 功能,即 ShardedJedis 以及結合緩存池的 ShardedJedisPool。
優(yōu)點
不使用第三方中間件,分區(qū)邏輯可控,配置簡單,節(jié)點之間無關聯(lián),容易線性擴展,靈活性強。
缺點
客戶端無法動態(tài)增刪服務節(jié)點,客戶端需要自行維護分發(fā)邏輯,客戶端之間無連接共享,會造成連接浪費。
代理分區(qū)方案
客戶端發(fā)送請求到一個代理組件,代理解析客戶端的數(shù)據(jù),并將請求轉發(fā)至正確的節(jié)點,最后將結果回復給客戶端。
優(yōu)點:簡化客戶端的分布式邏輯,客戶端透明接入,切換成本低,代理的轉發(fā)和存儲分離。 缺點:多了一層代理層,加重了架構部署復雜度和性能損耗。
代理分區(qū)主流實現(xiàn)的有方案有 Twemproxy 和 Codis。
?Twemproxy
Twemproxy 也叫 nutcraker,是 twitter 開源的一個 redis 和 memcache 的中間代理服務器程序。Twemproxy 作為代理,可接受來自多個程序的訪問,按照路由規(guī)則,轉發(fā)給后臺的各個 Redis 服務器,再原路返回。Twemproxy 存在單點故障問題,需要結合 lvs 和 Keepalived 做高可用方案。
優(yōu)點:應用范圍廣,穩(wěn)定性較高,中間代理層高可用。 缺點:無法平滑地水平擴容/縮容,無可視化管理界面,運維不友好,出現(xiàn)故障,不能自動轉移。
Codis
Codis 是一個分布式Redis 解決方案,對于上層應用來說,連接 Codis-Proxy 和直接連接原生的Redis-Server 沒有的區(qū)別。Codis 底層會處理請求的轉發(fā),不停機的進行數(shù)據(jù)遷移等工作。Codis 采用了無狀態(tài)的代理層,對于客戶端來說,一切都是透明的。
優(yōu)點
實現(xiàn)了上層 Proxy 和底層 Redis 的高可用,數(shù)據(jù)分片和自動平衡,提供命令行接口和 restful API,提供監(jiān)控和管理界面,可以動態(tài)添加和刪除Redis 節(jié)點。
缺點
部署架構和配置復雜,不支持跨機房和多租戶,不支持鑒權管理。
更多Redis相關技術文章,請訪問Redis視頻教程欄目進行學習!