為什么Redis集群要使用反向代理?


為什么要使用反向代理?

如果沒有反向代理,一台Redis可能需要跟很多個客戶端連接:

2002319-20210131080526659-119858341

看着是不是很慌?看沒關系,主要是連接需要消耗線程資源,沒有代理的話,Redis要將很大一部分的資源用在與客戶端建立連接上,redis的高可用和可擴展無論是自帶的Redis Sentinel還是Redis Cluster都要求客戶端進行額外的支持,而目前基本上沒有合適的客戶端能夠做這些事情,客戶端來做這些事情也並不合適,它會讓維護變得特別困難。

因此在客戶端和redis服務端之間加一層代理成了一種理想的方案,代理屏蔽后端Redis實現細節向客戶端提供redis服務,可以完美的解決Redis的高可用和擴展性問題,同時代理的引入也使得Redis維護變得更加簡單。

於是乎,有了代理:

如何使用代理?

很簡單,將請求連接到調度代理器上,由Proxy負責將請求轉發到后面的Redis服務實例,圖示:

2002319-20210131080732301-1329663942

又有了新的問題,Proxy掛了可咋整?

所以Proxy又需要做集群,甚至前面可以加一層負載均衡,負載均衡嘛,單機也存在單點故障等問題,一個Director肯定不行,搞不好又掛了,所以整一個主備,備機通過KeepAlived來檢測主LVS健康狀況,出了問題頂上去。

Redis代理插件

Redis代理插件有很多,這兒簡單介紹幾款

predixy 高性能全特征redis代理,支持Redis Sentinel和Redis Cluster
twemproxy 快速、輕量級memcached和redis代理
codis redis集群代理解決方案
redis-cerberus Redis Cluster代理

代理詳細功能對比

特性 predixy twemproxy codis redis-cerberus
高可用 Redis Sentinel或Redis Cluster 一致性哈希 Redis Sentinel Redis Cluster
可擴展 Key哈希分布或Redis Cluster Key哈希分布 Key哈希分布 Redis Cluster
開發語言 C++ C GO C++
多線程
事務 Redis Sentinel模式單Redis組下支持 不支持 不支持 不支持
BLPOP/BRPOP/BLPOPRPUSH 支持 不支持 不支持 支持
Pub/Sub 支持 不支持 不支持 支持
Script 支持load 不支持 不支持 不支持
Scan 支持 不支持 不支持 不支持
Select DB 支持 不支持 支持 Redis Cluster只有一個DB
Auth 支持定義多個密碼,給予不同讀寫及管理權限和Key訪問空間 不支持 同redis 不支持
讀從節點 支持,可定義豐富規則讀指定的從節點 不支持 支持,簡單規則 支持,簡單規則
多機房支持 支持,可定義豐富規則調度流量 不支持 有限支持 有限支持
統計信息 豐富 豐富 豐富 簡單

簡單來說,predixy既支持Redis Sentinel也支持Redis Cluster

  • 后端為Redis Sentinel監控的一組Redis,功能完全等同於原始Redis
  • 后端為Redis Sentinel監控的多組Redis,則有部分功能受限
  • 后端為Redis Cluster,功能完全等同於Redis Cluster


免責聲明!

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



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