关于java:为什么-Redis-集群要使用反向代理-看这篇就明白了

作者:等不到的口琴\
链接:www.cnblogs.com/Courage129/p/14351545.html

如果没有反向代理,一台Redis可能须要跟很多个客户端连贯:

看着是不是很慌?看没关系,次要是连贯须要耗费线程资源,没有代理的话,Redis要将很大一部分的资源用在与客户端建设连贯上,redis的高可用和可扩大无论是自带的Redis Sentinel还是Redis Cluster都要求客户端进行额定的反对,而目前基本上没有适合的客户端可能做这些事件,客户端来做这些事件也并不适合,它会让保护变得特地艰难。

因而在客户端和redis服务端之间加一层代理成了一种现实的计划,代理屏蔽后端Redis实现细节向客户端提供redis服务,能够完满的解决Redis的高可用和扩展性问题,同时代理的引入也使得Redis保护变得更加简略。

于是乎,有了代理:

如何应用代理?

很简略,将申请连贯到调度代理器上,由Proxy负责将申请转发到前面的Redis服务实例,图示:

又有了新的问题,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

近期热文举荐:

1.1,000+ 道 Java面试题及答案整顿(2022最新版)

2.劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.20w 程序员红包封面,快快支付。。。

5.《Java开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞+转发哦!

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理