為什么Redis集群要使用反向代理?
關(guān)注▼Java學(xué)習(xí)之道▼一起成長,一起學(xué)習(xí)~
作者: 等不到的口琴
來源: cnblogs.com/Courage129/p/14351545.html
Part1為什么要使用反向代理?
如果沒有反向代理,一臺Redis可能需要跟很多個客戶端連接:
看著是不是很慌?看沒關(guān)系,主要是連接需要消耗線程資源,沒有代理的話,Redis要將很大一部分的資源用在與客戶端建立連接上,redis的高可用和可擴(kuò)展無論是自帶的Redis Sentinel還是Redis Cluster都要求客戶端進(jìn)行額外的支持,而目前基本上沒有合適的客戶端能夠做這些事情,客戶端來做這些事情也并不合適,它會讓維護(hù)變得特別困難。
因此在客戶端和redis服務(wù)端之間加一層代理成了一種理想的方案,代理屏蔽后端Redis實(shí)現(xiàn)細(xì)節(jié)向客戶端提供redis服務(wù),可以完美的解決Redis的高可用和擴(kuò)展性問題,同時代理的引入也使得Redis維護(hù)變得更加簡單。
于是乎,有了代理:
Part2如何使用代理?
很簡單,將請求連接到調(diào)度代理器上,由Proxy負(fù)責(zé)將請求轉(zhuǎn)發(fā)到后面的Redis服務(wù)實(shí)例,圖示:
又有了新的問題,Proxy掛了可咋整?
所以Proxy又需要做集群,甚至前面可以加一層負(fù)載均衡,負(fù)載均衡嘛,單機(jī)也存在單點(diǎn)故障等問題,一個Director肯定不行,搞不好又掛了,所以整一個主備,備機(jī)通過KeepAlived來檢測主LVS健康狀況,出了問題頂上去。
Part3Redis代理插件
Redis代理插件有很多,這兒簡單介紹幾款
| 高性能全特征redis代理,支持Redis Sentinel和Redis Cluster | |
|---|---|
| 快速、輕量級memcached和redis代理 | |
| redis集群代理解決方案 | |
| Redis Cluster代理 |
Part4代理詳細(xì)功能對比
| 特性 | predixy | twemproxy | codis | redis-cerberus |
|---|---|---|---|---|
| 高可用 | Redis Sentinel或Redis Cluster | 一致性哈希 | Redis Sentinel | Redis Cluster |
| 可擴(kuò)展 | Key哈希分布或Redis Cluster | Key哈希分布 | Key哈希分布 | Redis Cluster |
| 開發(fā)語言 | C++ | C | GO | C++ |
| 多線程 | 是 | 否 | 是 | 是 |
| 事務(wù) | Redis Sentinel模式單Redis組下支持 | 不支持 | 不支持 | 不支持 |
| BLPOP/BRPOP/BLPOPRPUSH | 支持 | 不支持 | 不支持 | 支持 |
| Pub/Sub | 支持 | 不支持 | 不支持 | 支持 |
| Script | 支持load | 不支持 | 不支持 | 不支持 |
| Scan | 支持 | 不支持 | 不支持 | 不支持 |
| Select DB | 支持 | 不支持 | 支持 | Redis Cluster只有一個DB |
| Auth | 支持定義多個密碼,給予不同讀寫及管理權(quán)限和Key訪問空間 | 不支持 | 同redis | 不支持 |
| 讀從節(jié)點(diǎn) | 支持,可定義豐富規(guī)則讀指定的從節(jié)點(diǎn) | 不支持 | 支持,簡單規(guī)則 | 支持,簡單規(guī)則 |
| 多機(jī)房支持 | 支持,可定義豐富規(guī)則調(diào)度流量 | 不支持 | 有限支持 | 有限支持 |
| 統(tǒng)計信息 | 豐富 | 豐富 | 豐富 | 簡單 |
簡單來說,predixy既支持Redis Sentinel也支持Redis Cluster
-
后端為Redis Sentinel監(jiān)控的一組Redis,功能完全等同于原始Redis -
后端為Redis Sentinel監(jiān)控的多組Redis,則有部分功能受限 -
后端為Redis Cluster,功能完全等同于Redis Cluster
-
| 更多精彩文章 -
![]()
▽加我微信,交個朋友 長按/掃碼添加↑↑↑

評論
圖片
表情


