面試官:為什么Redis集群要使用反向代理?
你知道的越多,不知道的就越多,業(yè)余的像一棵小草!
你來,我們一起精進(jìn)!你不來,我和你的競爭對(duì)手一起精進(jìn)!
編輯:業(yè)余草
cnblogs.com/Courage129/p/14351545.html
推薦:https://www.xttblog.com/?p=5317
為什么要使用反向代理?
如果沒有反向代理,一臺(tái) Redis 可能需要跟很多個(gè)客戶端連接:

看著是不是很慌?看沒關(guān)系,主要是連接需要消耗線程資源,沒有代理的話,Redis要將很大一部分的資源用在與客戶端建立連接上,redis的高可用和可擴(kuò)展無論是自帶的Redis Sentinel還是Redis Cluster都要求客戶端進(jìn)行額外的支持,而目前基本上沒有合適的客戶端能夠做這些事情,客戶端來做這些事情也并不合適,它會(huì)讓維護(hù)變得特別困難。
因此在客戶端和redis服務(wù)端之間加一層代理成了一種理想的方案,代理屏蔽后端Redis實(shí)現(xiàn)細(xì)節(jié)向客戶端提供redis服務(wù),可以完美的解決Redis的高可用和擴(kuò)展性問題,同時(shí)代理的引入也使得Redis維護(hù)變得更加簡單。
于是乎,有了代理:
如何使用代理?
很簡單,將請(qǐng)求連接到調(diào)度代理器上,由Proxy負(fù)責(zé)將請(qǐng)求轉(zhuǎn)發(fā)到后面的Redis服務(wù)實(shí)例,圖示:

又有了新的問題,Proxy掛了可咋整?
所以 Proxy 又需要做集群,甚至前面可以加一層負(fù)載均衡,負(fù)載均衡嘛,單機(jī)也存在單點(diǎn)故障等問題,一個(gè)Director肯定不行,搞不好又掛了,所以整一個(gè)主備,備機(jī)通過KeepAlived來檢測主LVS健康狀況,出了問題頂上去。

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

代理詳細(xì)功能對(duì)比

簡單來說,predixy 既支持 Redis Sentinel 也支持 Redis Cluster。
后端為Redis Sentinel監(jiān)控的一組Redis,功能完全等同于原始Redis 后端為Redis Sentinel監(jiān)控的多組Redis,則有部分功能受限 后端為Redis Cluster,功能完全等同于Redis Cluster
