...

爲(wéi / wèi)什麽 Redis 集群要(yào / yāo)使用反向代理? 看這(zhè)篇就(jiù)明白了(le/liǎo)!

2022-03-21

如果沒有反向代理,一(yī / yì /yí)台Redis可能需要(yào / yāo)跟很多個(gè)客戶端連接:

圖片

看着是(shì)不(bù)是(shì)很慌?看沒關系,主要(yào / yāo)是(shì)連接需要(yào / yāo)消耗線程資源,沒有代理的(de)話,Redis要(yào / yāo)将很大(dà)一(yī / yì /yí)部分的(de)資源用在(zài)與客戶端建立連接上(shàng),redis的(de)高可用和(hé / huò)可擴展無論是(shì)自帶的(de)Redis Sentinel還是(shì)Redis Cluster都要(yào / yāo)求客戶端進行額外的(de)支持,而(ér)目前基本上(shàng)沒有合适的(de)客戶端能夠做這(zhè)些事情,客戶端來(lái)做這(zhè)些事情也(yě)并不(bù)合适,它會讓維護變得特别困難。

因此在(zài)客戶端和(hé / huò)redis服務端之(zhī)間加一(yī / yì /yí)層代理成了(le/liǎo)一(yī / yì /yí)種理想的(de)方案,代理屏蔽後端Redis實現細節向客戶端提供redis服務,可以(yǐ)完美的(de)解決Redis的(de)高可用和(hé / huò)擴展性問題,同時(shí)代理的(de)引入也(yě)使得Redis維護變得更加簡單。

于(yú)是(shì)乎,有了(le/liǎo)代理:

如何使用代理?

很簡單,将請求連接到(dào)調度代理器上(shàng),由Proxy負責将請求轉發到(dào)後面的(de)Redis服務實例,圖示:

圖片

又有了(le/liǎo)新的(de)問題,Proxy挂了(le/liǎo)可咋整?

所以(yǐ)Proxy又需要(yào / yāo)做集群,甚至前面可以(yǐ)加一(yī / yì /yí)層負載均衡,負載均衡嘛,單機也(yě)存在(zài)單點故障等問題,一(yī / yì /yí)個(gè)Director肯定不(bù)行,搞不(bù)好又挂了(le/liǎo),所以(yǐ)整一(yī / yì /yí)個(gè)主備,備機通過KeepAlived來(lái)檢測主LVS健康狀況,出(chū)了(le/liǎo)問題頂上(shàng)去。

圖片

Redis代理插件

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

predixy高性能全特征redis代理,支持Redis Sentinel和(hé / huò)Redis Cluster
twemproxy快速、輕量級memcached和(hé / huò)redis代理
codisredis集群代理解決方案
redis-cerberusRedis Cluster代理

代理詳細功能對比

特性predixytwemproxycodisredis-cerberus
高可用Redis Sentinel或Redis Cluster一(yī / yì /yí)緻性哈希Redis SentinelRedis Cluster
可擴展Key哈希分布或Redis ClusterKey哈希分布Key哈希分布Redis Cluster
開發語言C++CGOC++
多線程是(shì)是(shì)是(shì)
事務Redis Sentinel模式單Redis組下支持不(bù)支持不(bù)支持不(bù)支持
BLPOP/BRPOP/BLPOPRPUSH支持不(bù)支持不(bù)支持支持
Pub/Sub支持不(bù)支持不(bù)支持支持
Script支持load不(bù)支持不(bù)支持不(bù)支持
Scan支持不(bù)支持不(bù)支持不(bù)支持
Select DB支持不(bù)支持支持Redis Cluster隻有一(yī / yì /yí)個(gè)DB
Auth支持定義多個(gè)密碼,給予不(bù)同讀寫及管理權限和(hé / huò)Key訪問空間不(bù)支持同redis不(bù)支持
讀從節點支持,可定義豐富規則讀指定的(de)從節點不(bù)支持支持,簡單規則支持,簡單規則
多機房支持支持,可定義豐富規則調度流量不(bù)支持有限支持有限支持
統計信息豐富豐富豐富簡單

簡單來(lái)說(shuō),predixy既支持Redis Sentinel也(yě)支持Redis Cluster

  • 後端爲(wéi / wèi)Redis Sentinel監控的(de)一(yī / yì /yí)組Redis,功能完全等同于(yú)原始Redis
  • 後端爲(wéi / wèi)Redis Sentinel監控的(de)多組Redis,則有部分功能受限
  • 後端爲(wéi / wèi)Redis Cluster,功能完全等同于(yú)Redis Cluster


來(lái)源: 架構師優雅之(zhī)道(dào)