爲何Redis集羣要使用反向代理?

爲何要使用反向代理?

若是沒有方向代理,一臺Redis可能須要跟不少個客戶端鏈接:git

2002319-20210131080526659-119858341

看着是否是很慌?看不要緊,主要是鏈接須要消耗線程資源,沒有代理的話,Redis要將很大一部分的資源用在與客戶端創建鏈接上,redis的高可用和可擴展不管是自帶的Redis Sentinel仍是Redis Cluster都要求客戶端進行額外的支持,而目前基本上沒有合適的客戶端可以作這些事情,客戶端來作這些事情也並不合適,它會讓維護變得特別困難。github

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

因而乎,有了代理:後端

如何使用代理?

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

2002319-20210131080732301-1329663942

又有了新的問題,Proxy掛了可咋整?負載均衡

因此Proxy又須要作集羣,甚至前面能夠加一層負載均衡,負載均衡嘛,單機也存在單點故障等問題,一個Director確定不行,搞很差又掛了,因此整一個主備,備機經過KeepAlived來檢測主LVS健康情況,出了問題頂上去。memcached

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
相關文章
相關標籤/搜索