2021-01-31

为什么Redis集群要使用反向代理?

本文从为什么Redis为什么需要代理开始推导,预测这过程中可能出现的问题并提出解决方案,例如对代理负载均衡,以及LVS心跳检测,最后对比了目前常用代理性能的优劣。

为什么要使用反向代理?

如果没有方向代理,一台Redis可能需要跟很多个客户端连接:

2002319-20210131080526659-119858341

看着是不是很慌?看没关系,主要是连接需要消耗线程资源,没有代理的话,Redis要将很大一部分的资源用在与客户端建立连接上,redis的高可用和可扩展无论是自带的Redis Sentinel还是Redis Cluster都要求客户端进行额外的支持,而目前基本上没有合适的客户端能够做这些事情,客户端来做这些事情也并不合适,它会让维护变得特别困难。

因此在客户端和redis服务端之间加一层代理成了一种理想的方案,代理屏蔽后端Redis实现细节向客户端提供redis服务,可以完美的解决Redis的高可用和扩展性问题,同时代理的引入也使得Redis维护变得更加简单。

于是乎,有了代理:

如何使用代理?

很简单,将请求连接到调度代理器上,由Proxy负责将请求转发到后面的Redis服务实例,图示:

2002319-20210131080732301-1329663942

又有了新的问题,Proxy挂了可咋整?

所以Proxy又需要做集群,甚至前面可以加一层负载均衡,负载均衡嘛,单机也存在单点故障等问题,一个Director肯定不行,搞不好又挂了,所以整一个主备,备机通过KeepAlived来检测主LVS健康状况,出了问题顶上去。

Redis代理插件

Redis代理插件有很多,这儿简单介绍几款

predixy高性能全特征redis代理,支持Redis Sentinel和Redis Cluster
twemproxy快速、轻量级memcached和redis代理
codisredis集群代理解决方案
redis-cerberusRedis Cluster代理

代理详细功能对比

特性predixytwemproxycodisredis-cerberus
高可用Redis Sentinel或Redis Cluster一致性哈希Redis SentinelRedis Cluster
可扩展Key哈希分布或Redis ClusterKey哈希分布Key哈希分布Redis Cluster
开发语言C++CGOC++
多线程
事务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








原文转载:http://www.shaoqun.com/a/521212.html

跨境电商:https://www.ikjzd.com/

友家速递:https://www.ikjzd.com/w/1341

camel:https://www.ikjzd.com/w/331.html


本文从为什么Redis为什么需要代理开始推导,预测这过程中可能出现的问题并提出解决方案,例如对代理负载均衡,以及LVS心跳检测,最后对比了目前常用代理性能的优劣。为什么要使用反向代理?如果没有方向代理,一台Redis可能需要跟很多个客户端连接:看着是不是很慌?看没关系,主要是连接需要消耗线程资源,没有代理的话,Redis要将很大一部分的资源用在与客户端建立连接上,redis的高可用和可扩展无论是自
海豚村:海豚村
feedly:feedly
AIOExpress:AIOExpress
又一电商蓝海市场崛起:跨境企业准备好进军巴西电商市场了吗?:又一电商蓝海市场崛起:跨境企业准备好进军巴西电商市场了吗?
亚马逊产品上架 20 天打造成爆款推广经历分享:亚马逊产品上架 20 天打造成爆款推广经历分享

No comments:

Post a Comment