掌桥专利:专业的专利平台
掌桥专利
首页

一种Redis多租户管理方法、装置及服务器

文献发布时间:2023-06-19 18:46:07


一种Redis多租户管理方法、装置及服务器

技术领域

本发明涉及互联网技术领域,更具体的说,是涉及一种Redis多租户管理方法、装置及服务器。

背景技术

随着互联网、移动互联网和移动通讯技术的革命性发展,通过内存数据库将热点数据进行缓存,可以大大的提升数据的读取速度、系统的扩展能力和系统的整体承载能力。Redis因其丰富的数据结构、极快的速度、齐全的功能,而成为目前使用最广泛的内存数据库。

在互联网公司发展初期,很多公司只有虚拟机,没有容器。而很多业务场景又需要通过Redis来提速、利用Redis的分布式锁来解决一些并发安全问题。Redis集群分为两种,一种是独立集群,即一个集群只有一个应用。另一种是混部集群,及多个应用共享一个集群。

虚拟机最低配置是2核4G,且Redis Cluster集群模式下1个Redis集群至少需要3台服务器,对于访问量少的集群,非常浪费资源。如果都采用独立集群方式,那么不仅会浪费资源,而且会带来巨大的运维成本。虚拟环境下,集群的创建、消费、扩容、缩容、容灾等都依赖人工运维,运维工作量跟集群数量成正比。相比独立集群,混部集群方式资源利用率会高很多,但不同应用可能会相互影响,不同应用存在缓存key重复的风险。

发明内容

有鉴于此,本发明提供如下技术方案:

一种Redis多租户管理方法,包括:

Redis代理获得第一应用的配置信息,所述配置信息中包括附加信息和监听端口,不同应用的附加信息具有唯一性;

基于所述配置信息连接对应所述第一应用的Redis节点,并监听所述监听端口,所述Redis节点的工作模式为集群模式;

从所述监听端口获得所述第一应用的第一指令,所述第一指令为访问所述Redis节点的指令;

在所述第一指令中添加所述附加信息;

将添加了附加信息的第一指令发送给所述Redis节点。

可选地,所述获得第一应用的配置信息,包括:

基于第一应用的基础信息拉取所述第一应用的配置信息,所述基础信息包括应用标识的应用密钥,所述配置信息为预先在所述管理后台为所述第一应用申请Redis节点时确定的信息。

可选地,所述配置信息中包括黑名单,所述黑名单中存储了禁止指令名称,则在所述将添加了附加信息的第一指令发送给所述Redis节点前,还包括:

确定所述添加了附加信息的第一指令是否属于黑名单;

若不属于,进入所述将添加了附加信息的第一指令发送给所述Redis节点的步骤。

可选地,还包括:

若所述第一指令属于黑名单,返回禁止所述第一指令的通知消息。

可选地,还包括:

所述Redis代理周期性的获得更新的黑名单。

可选地,所述更新黑名单为在通过监控Redis集群确定满足告警条件后,通过问题分析定位确定出由于大key或热key导致应用流量激增而确定的黑名单。

可选地,所述周期性的获得更新的黑名单,包括:

周期性的从管理后台获得更新的禁止指令列表;

将所述禁止指令列表中的所有指令名称添加上所述附加信息构成黑名单。

可选地,在所述将添加了附加信息的第一指令发送给所述Redis节点后,还包括:

从所述Redis节点接收所述第一指令的响应结果,并返回所述响应结果。

本申请还公开了一种Redis多租户管理装置,包括:

配置获得模块,用于获得第一应用的配置信息,所述配置信息中包括附加信息和监听端口,不同应用的附加信息具有唯一性;

基础准备模块,用于基于所述配置信息连接对应所述第一应用的Redis节点,并监听所述监听端口,所述Redis节点的工作模式为集群模式;

指令获得模块,用于从所述监听端口获得所述第一应用的第一指令,所述第一指令为访问所述Redis节点的指令;

信息添加模块,用于在所述第一指令中添加所述附加信息;

指令转发模块,用于将添加了附加信息的第一指令发送给所述Redis节点。

进一步的,本申请还公开了一种服务器,包括:

处理器;

存储器,用于存储所述处理器的可执行指令;

其中,所述可执行指令包括:获得第一应用的配置信息,所述配置信息中包括附加信息和监听端口,不同应用的附加信息具有唯一性;基于所述配置信息连接对应所述第一应用的Redis节点,并监听所述监听端口,所述Redis节点的工作模式为集群模式;从所述监听端口获得所述第一应用的第一指令,所述第一指令为访问所述Redis节点的指令;在所述第一指令中添加所述附加信息;将添加了附加信息的第一指令发送给所述Redis节点。

经由上述的技术方案可知,本发明实施例公开了一种Redis多租户管理方法、装置及服务器,方法包括:获得第一应用的配置信息,所述配置信息中包括附加信息和监听端口,不同应用的附加信息具有唯一性;基于所述配置信息连接对应所述第一应用的Redis节点,并监听所述监听端口,所述Redis节点的工作模式为集群模式;从所述监听端口获得所述第一应用的第一指令,所述第一指令为访问所述Redis节点的指令;在所述第一指令中添加所述附加信息;将添加了附加信息的第一指令发送给所述Redis节点。上述方案通过代理的方式,为不同的应用配置不同的附加信息,并在各应用的访问指令中添加对应的附加信息,确保Redis集群中不同应用的数据能够基于添加信息清楚的识别,相互不影响;切实有效的实现降低Redis集群成本、提高生产效率、提升服务稳定性的效果。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例公开的一种Redis多租户管理方法的流程图;

图2为本发明实施例公开的另一种Redis多租户管理方法的流程图;

图3为本发明实施例公开的Redis集群系统的环境结构示意图;

图4为本发明实施例公开的Redis多租户管理方法的流程实现时序示意图;

图5为本发明实施例公开的一种Redis多租户管理装置的结构示意图;

图6为本申请实施例公开的一种服务器的结构示意图。

具体实施方式

为了引用和清楚起见,下文中使用的技术名词的说明、简写或缩写总结如下:

Redis:Remote Dictionary Server的缩写,即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

redis cluster:redis cluster是一个去中心化的集群,每个节点都会跟其他节点保持连接,用来交换彼此的信息。节点组成集群的方式使用cluster meet命令,meet命令可以让两个节点相互握手,然后通过gossip协议交换信息。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例公开的一种Redis多租户管理方法的流程图。参见图1所示,Redis多租户管理方法可以包括:

步骤101:Redis代理获得第一应用的配置信息,所述配置信息中包括附加信息和监听端口,不同应用的附加信息具有唯一性。

本实施例所述方法可通过配置在Redis集群的Redis代理执行实现。Redis代理在实现过程中会首先获得第一应用的配置信息,明确其数据传送路径,并在该数据传送路径中拦截访问Redis集群的指令,对其进行相应处理,使得Redis集群的不同租户(应用)间的数据能够容易的辨识,从而互不干扰影响。具体的将在后面的内容中详细介绍,在此不再过多说明。

Redis代理可以独立在Redis集群之外配置,也可以配置在Redis集群的业务服务器中,本申请对此并不限制。Redis代理通过在Redis集群侧的处理使得Redis集群中不同租户的数据能够被区分标识,不需要针对不同的应用或客户端的源码进行修改,不需要考虑不同应用或客户端的款式或编程语言,而存在的针对不同应用或客户端需要单独进行软件开发,且运维工作复杂的问题。

步骤102:基于所述配置信息连接对应所述第一应用的Redis节点,并监听所述监听端口,所述Redis节点的工作模式为集群模式。

获得第一应用的配置信息后,Redis代理可以基于所述配置信息连接对应所述第一应用的Redis节点,打通与第一应用之间的数据通路,从而可以传送第一应用的指令;而且,通过监听与第一应用对应的监控端口,可以监听并拦截第一应用的指令。

所述Redis节点的工作模式为集群模式,在其工作模式为集群模式时,才具有区分不同应用数据的需求,从而适用于本申请方案所述Redis多租户管理方法。

步骤103:从所述监听端口获得所述第一应用的第一指令,所述第一指令为访问所述Redis节点的指令。

由于Redis代理监听了所述第一应用对应的监听端口,因此当所述第一应用发出了访问所述Redis节点的指令后,Redis代理就能够从所述监听端口获得所述第一指令。

步骤104:在所述第一指令中添加所述附加信息。

这里在所述第一指令中添加附加信息,可以理解为在SideCar(边车)模式的代理节点为第一指令添加命名空间前缀。针对不同的应用,Redis代理为其添加的命名空间前缀也不相同。本申请方案可在SideCar(边车)模式的代理节点加命名空间前缀,即能统一的低成本的实现命名空间前缀功能,又没有带来额外的服务器成本。

步骤105:将添加了附加信息的第一指令发送给所述Redis节点。

将添加了附加信息的第一指令发送给所述Redis节点,使得Redis集群中的Redis节点能够清楚的基于附加信息识别出该指令来源于哪个应用,从而保证不同租户间数据资源互不影响。

本实施例所述Redis多租户管理方法通过代理的方式,为不同的应用配置不同的附加信息,并在各应用的访问指令中添加对应的附加信息,确保Redis集群中不同应用的数据能够基于添加信息清楚的识别,相互不影响;切实有效的实现降低Redis集群成本、提高生产效率、提升服务稳定性的效果。

上述实施例中,所述获得第一应用的配置信息,可以包括:基于第一应用的基础信息拉取所述第一应用的配置信息,所述基础信息包括应用标识的应用密钥,所述配置信息为预先在所述管理后台为所述第一应用申请Redis节点时确定的信息。所述配置信息可以但不限于包括命名空间、内存大小、监听端口、Redis类型、超时时间(选填)、禁止指令(选填)中至少几项。

图2为本发明实施例公开的另一种Redis多租户管理方法的流程图。参见图2所示,Redis多租户管理方法可以包括:

步骤201:Redis代理获得第一应用的配置信息,所述配置信息中包括附加信息和监听端口,不同应用的附加信息具有唯一性。

步骤202:基于所述配置信息连接对应所述第一应用的Redis节点,并监听所述监听端口,所述Redis节点的工作模式为集群模式。

步骤203:从所述监听端口获得所述第一应用的第一指令,所述第一指令为访问所述Redis节点的指令。

步骤204:在所述第一指令中添加所述附加信息。

步骤205;确定所述添加了附加信息的第一指令是否属于黑名单,若是,进入步骤206;若否,进入步骤206。

为了更加精确的保证Redis集群中不同租户的数据资源间的隔离性,本实施例中,可以通过黑名单的方式来限制某些指令的访问。所述黑名单中存储的为带有附加信息的指令名称。Redis代理可基于黑名单筛选过滤掉不能够放行的指令。

步骤206:返回禁止所述第一指令的通知消息。

步骤207:将添加了附加信息的第一指令发送给所述Redis节点。

若来访指令属于黑名单中记载的指令,则直接拦截退回;若来访指令不属于黑名单中记载的指令,则再将添加了附加信息的第一指令发送给所述Redis节点进行正常的访问操作。

本实施例方案中,通过黑名单过滤的方式更加精确的隔离开不相关的应用指令和Redis节点,能够进一步避免Redis集群中不同租户资源之间的相互干扰,、提高生产效率、提升服务稳定性的效果。

在上述实施例内容的基础上,Redis多租户管理方法还可以包括:Redis代理周期性的获得更新的黑名单。周期性的更新黑名单,使得拦截策略的精准性更高。

其中,所述更新黑名单可以为在通过监控Redis集群确定满足告警条件后,通过问题分析定位确定出由于大key或热key导致应用流量激增而确定的黑名单。其中,大Key通常以Key的大小和Key中成员的数量来综合判断。例如:Key本身的数据量过大:一个String类型的Key,它的值为5MB。Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100MB。热Key也叫热点Key通常以其接收到的Key被请求频率来判定,例如:QPS(每秒查询率)集中在特定的Key:Redis实例的总QPS为10,000,而其中一个Key的每秒访问量达到了7,000。带宽使用率集中在特定的Key:对一个拥有上千个成员且总大小为1MB的HASH Key每秒发送大量的HGETALL操作请求。CPU使用时间占比集中在特定的Key:对一个拥有数万个成员的Key(ZSET类型)每秒发送大量的ZRANGE操作请求。

具体的,所述周期性的获得更新的黑名单,可以包括:周期性的从管理后台获得更新的禁止指令列表;将所述禁止指令列表中的所有指令名称添加上所述附加信息构成黑名单。

其他实现中,在所述将添加了附加信息的第一指令发送给所述Redis节点后,还可以包括:从所述Redis节点接收所述第一指令的响应结果,并返回所述响应结果。

在一个具体实现中,Redis集群系统的环境结构图,如图3所示。结合图3所示,Redis集群系统可以包括:Redis管理后台、Redis代理和Redis集群。

其中,所述Redis管理后台主要包括租户管理、监控模块、告警模块。租户管理主要是配置Redis代理的配置,包括:启动的监听端口、Redis集群地址、Redis类型(集群模式、单节点模式)、命名空间、读写超时时间、禁止指令、申请内存大小等。监控模块包括Redis代理节点指标采集(包括内存占用、CPU利用率、机器负载、节点RPS(Requestper Second)等)、Redis集群指标采集(包括RPS、热Key、内存利用率等),并根据指标生成相关报表。告警模块根据采集的指标设置阀值,发送相关告警。

所述Redis代理主要包括命名空间、禁止指令、请求转发三个模块。命名空间模块负责给接收到的请求命令加上前缀。禁止指令即命令黑名单,接收到的请求命令如果在禁止指令中,则直接响应禁止结果。请求转发模块负责接收来自客户端请求,并解析协议命令,经命名空间、禁止指令(如果没命中)处理完之后,将新的请求转发给Redis集群,并等待Redis集群的响应结果,将得到的响应结果回写给客户端。需要指出的是,请求转发模块可以根据Redis管理后台的Redis类型配置,支持不同的Redis模式。Redis模式有四种:单机模式(单节点)、主从模式、哨兵模式、集群模式。管理后台可以根据代理节点的能力和需求,配置不同模式。比如:仅当缓存使用的场景,可以选择集群模式、单机模式(单节点模式);在需要并发锁控制、存储等使用场景,则可以选择哨兵模式。如果是Redis Cluster模式,则直接转发。如果是Redis单节点模式,则会根据新的命令进行一致性Hash处理,路由到不同的Redis节点去,也能保证缓存高可用。

所述Redis集群可以是Redis Cluster模式、也可以是单节点模式。

图4为本发明实施例公开的Redis多租户管理方法的流程实现时序示意图。结合图4所示,整个处理流程可以包括:

第一步,先准备一个Redis集群,假设Redis集群的模式是集群(Redis Cluster)模式。

第二步,在管理后台为应用申请一个Redis,需要填写的内容包括:命名空间、内存大小、监听端口、Redis类型、超时时间(选填)、禁止指令(选填)等。其中,命名空间即namespace,如namespace=“ns1”,该应用的所有Redis Key都会加上在Redis代理的命名空间模块加上这个命名空间前缀。内存大小是这个应用所需要的Redis内存,如4G。监听端口是Redis代理启动时监听的端口,如6379。应用服务通过localhost:6779来连连接它。集群模式有集群模式和单节点模式。超时时间包括连接超时、读超时、写超时,默认1秒。禁止指令,表示禁止客户端访问的指令,如“getkey2”。提交完申请后,管理员会给分配应用ID和秘钥,例如,应用ID为“app1”,秘钥为“123456”。

第三步,在应用服务器启动Redis代理,启动配置的参数应用ID为“app1”,秘钥为“123456”。Redis代理通过应用ID和秘钥去管理后台拉取配置,管理后台鉴权成功后,将返回命名空间、监听端口、Redis类型、超时时间、禁止指令、Redis集群地址等配置,然后,Redis代理根据这些配置去连接Redis集群,并开始监听6379端口,等待应用服务的Redis客户端连接。同时,Redis代理会启动一个定时器,定时(如60秒)的去拉取禁止指令列表到本地内存,并给指令加上命名空间前缀,如“getkey2”变成“getns1:key2”。

第四步,假设应用服务采用java语言开发且选择的Redis客户端为RedisCluster,那么应用服务启动时,Redis Cluster客户端通过“localhost:6379”去连接Redis代理。假设执行指令“setkey1 abc”,那么Redis代理的命名空间会自动把原来的key加上namespace,即指令变成“setns1:key1 abc”,请求转发模块转发给Redis集群的指令就是“setns1:key1 abc”。这样,就可以根据namespace来区分不同应用在Redis集群的数据了。假设执行的指令为“get key2”,那Redis代理加上namespace后指令变成“getns1:key2”,然后禁止指令模块校验发现该命令为禁止指令,则直接封装一个禁止指令结果返回给客户端。

这样,就可以根据namespace来区分不同应用在Redis集群的数据了。

为了避免租户间资源互不影响,可以但不限于通过监控、告警、问题根因定位、扩容/禁用指令这几个手段来处理。

1)监控:Redis管理后台会采集Redis集群的RPS(Request Per Second,每秒请求数)、热点Key指令、内存使用率等。其中,关于RPS,对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。监控该指标以及其他指标,用于判断Redis服务是否监控。

2)告警:主要是监控内存使用率。

内存使用率达到80%,发出1级告警;

内存使用率达到85%,发出2级告警;

内存使用率达到90%,发出3级告警。

3)问题根因定位

当告警1级时,管理员就要分析告警原因了,首先执行“RDB内存分析工具”,分析内存不足是哪个应用流量激增导致的,然后分析是bigkey导致的还是就是请求量大导致的。

4)扩容/禁止指令

定位到问题后,通过扩容或者禁止指令来确保Redis集群不被激增的流量打垮。

a.业务正常增长导致,直接在Redis管理后台申请扩容内容流程即可。

大Key/热Key导致,在管理后台新加禁止指令的key,管理后台将禁止指令推送给Redis代理节点,代理节点在禁止指令模块匹配到禁止指令key,直接拦截掉,不往Redis集群转发请求,而是直接响应错误结果。

本申请方案通过代理的方式给应用分配不同的附加信息,通过监控、告警功能,再配合扩容、禁止指令等手段来保证租户间资源互不影响。切实有效的实现降低成本、提高生产效率、提升服务稳定性的目标。同时,通过代理模式能够解决多语言所带来的高研发成本和高接入成本,做到了对应用系统零侵入。

对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

上述本发明公开的实施例中详细描述了方法,对于本发明的方法可采用多种形式的装置实现,因此本发明还公开了一种装置,下面给出具体的实施例进行详细说明。

图5为本发明实施例公开的一种Redis多租户管理装置的结构示意图。参见图5所示,Redis多租户管理装置50可以包括:

配置获得模块501,用于获得第一应用的配置信息,所述配置信息中包括附加信息和监听端口,不同应用的附加信息具有唯一性。

基础准备模块502,用于基于所述配置信息连接对应所述第一应用的Redis节点,并监听所述监听端口,所述Redis节点的工作模式为集群模式。

指令获得模块503,用于从所述监听端口获得所述第一应用的第一指令,所述第一指令为访问所述Redis节点的指令。

信息添加模块504,用于在所述第一指令中添加所述附加信息。

指令转发模块505,用于将添加了附加信息的第一指令发送给所述Redis节点。

本实施例所述Redis多租户管理装置通过代理的方式,为不同的应用配置不同的附加信息,并在各应用的访问指令中添加对应的附加信息,确保Redis集群中不同应用的数据能够基于添加信息清楚的识别,相互不影响;切实有效的实现降低Redis集群成本、提高生产效率、提升服务稳定性的效果。

上述Redis多租户管理装置及其各个模块的具体实现可参见方法实施例中相应部分的内容介绍,在此不再重复赘述。

上述实施例中的所述的任意一种Redis多租户管理装置包括处理器和存储器,上述实施例中的配置获得模块、基础准备模块、指令获得模块、信息添加模块、指令转发模块等均作为程序模块存储在存储器中,由处理器执行存储在所述存储器中的上述程序模块来实现相应的功能。

处理器中包含内核,由内核去存储器中调取相应的程序模块。内核可以设置一个或多个,通过调整内核参数来实现回访数据的处理。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。

在示例性实施例中,还提供了一种计算机可读存储介质,可直接加载到计算机的内部存储器,其中含有软件代码,该计算机程序经由计算机载入并执行后能够实现上述Redis多租户管理方法任一实施例所示步骤。

在示例性实施例中,还提供一种计算机程序产品,可直接加载到计算机的内部存储器,其中含有软件代码,该计算机程序经由计算机载入并执行后能够实现上述所述的Redis多租户管理方法任一实施例所示步骤。

进一步,本发明实施例提供了一种服务器。图6为本申请实施例公开的一种服务器的结构示意图。参见图6所示,服务器包括至少一个处理器601、以及与处理器连接的至少一个存储器602、总线603;其中,处理器、存储器通过总线完成相互间的通信;处理器用于调用存储器中的程序指令,以执行上述的Redis多租户管理方法。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

技术分类

06120115686317