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

一种分布式缓存发布订阅的方法、系统和装置

文献发布时间:2024-04-18 20:02:18


一种分布式缓存发布订阅的方法、系统和装置

技术领域

本发明涉及中间件技术领域,具体而言,涉及一种分布式缓存发布订阅的方法、系统和装置。

背景技术

ACCESS,是中国电信天翼云研发的一款分布式缓存访问代理中间件,该中间件接收来自客户端的数据处理请求,然后转发到底层的缓存存储分片节点,缓存中例如Redis后端存储等。

分布式缓存,是一种兼容Redis协议的NoSQL内存数据库软件,可以接受其它客户端应用的数据查询和存储请求,通过ACCESS代理中间件一致性hash分片透传至后端缓存存储分片节点并进行响应。

发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件;发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者。

为解决原生集群不支持跨节点的发布与订阅的问题,即当订阅的频道落在不同的分片上时,原生集群暂无有效的手段去支持跨分片节点的发布订阅。且由于原生集群基于发布订阅的设计缺陷,在消息发布时可能会出现所谓“订阅风暴”问题,当一个节点接收到PUBLISH命令时,它会将该消息广播到整个集群中的所有节点,订阅了相应频道或模式的所有节点都会收到该消息,原生集群现有的发布订阅模式会对网络和集群性能产生较大的影响,并且后端集群在发生节点切换、宕机重启等变更操作时,应用侧能够感知到订阅连接断开重新手工订阅。

本申请提出一种分布式缓存发布订阅的方法、系统和装置。

发明内容

为了实现上述目的,本发明提供了一种分布式缓存发布订阅的方法、系统和装置,以解决原生集群不支持跨节点的发布与订阅的问题。

为了解决上述技术问题,本发明提供了一种分布式缓存发布订阅的方法,所述方法包括:

接收发布者发送的特定消息;

对发布者发送的消息进行ACCSEE协议拆解;

根据ACCSEE协议拆解数据将消息保存至特定的redis分片;

当redis分片接收消息后,此redis分片通过ACCSEE自动通知到订阅者。

优选的,在当redis分片接收消息后,此redis分片通过ACCSEE自动通知到订阅者之前,需要用户对频道进行订阅。

优选的,在用户对频道进行订阅时具体为:

用户发送频道订阅请求,发送至分布式缓存代理层,将用户一致性哈希路由至对应redis分片;

用户发送多频道订阅请求时,由多频道订阅SUBSCRIBE一致性哈希路由至对应redis分片,ACCESS代理层自动模拟多个订阅客户端订阅至后端对应的数据分片节点;

ACCESS对所有频道订阅信息进行缓存。

优选的,在根据ACCSEE协议拆解数据将消息保存至特定的redis分片之前,所述方法还包括:

通过基于键的哈希分片来选择节点;

设定redis集群并配置节点和分片映射;其中,各个分片之间互相独立,每个分片节点保存着属于自身的订阅频道。

优选的,在ACCESS对所有频道订阅信息进行缓存之后,所述方法还包括:

周期性的对缓存的订阅频道信息重新一致性哈希并模拟不同的订阅制重新订阅到数据分片节点。

优选的,在ACCESS对所有频道订阅信息进行缓存之后,所述方法还包括,当分布式缓存集群发生主从切换、节点扩容、节点宕机重启等变更操作时,Access探测到产生变更操作的分片节点连接断开时,自动将缓存的订阅频道信息重新一致性哈希并模拟不同的订阅者重连订阅到数据分片节点。

优选的,所述对发布者发送的消息进行ACCSEE协议拆解之前,所述方法还包括:使用Java编写并运行分布式缓存代理层服务ACCSEE。

进一步优选的,本申请还包括一种分布式缓存发布订阅的系统,包括:

消息接收模块:用于接收发布者发送的特定消息;

协议拆解模块:用于对发布者发送的消息进行ACCSEE协议拆解;

消息缓存模块:用于根据ACCSEE协议拆解数据将消息保存至特定的redis分片;

消息发送模块:用于当redis分片接收消息后,此redis分片通过ACCSEE自动通知到订阅者。

进一步优选的,本申请还包括一种服务器,其特征在于,所述服务器包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的分布式缓存发布订阅的方法。

进一步优选的,本申请还包括一种计算机储存介质,其特征在于,储存有计算机程序,当程序被执行时实现如权利要求1-7中任一所述的分布式缓存发布订阅的方法。

本发明实施例一种分布式缓存发布订阅的方法、系统和装置与现有技术相比,其有益效果在于:本方法通过自研分布式缓存ACCESS代理层优化,针对分布式缓存发布订阅应用场景,通过ACCESS代理层对应用的多频道订阅SUBSCRIBE一致性哈希路由至对应分片,解决了原生集群无法支持跨分片节点发布订阅的问题,且针对应用的订阅频道发布PUBLISH消息直接路由至真正的频道订阅分片节点,无需广播消息至集群所有分片节点,解决了原生集群去中心化的发布场景痛点问题。此外针对集群后端集群的主从切换、扩容等操作自动重连,不影响应用侧订阅频道的丢失,解决了原生集群在订阅频道稳定性无法覆盖的一些场景。

附图说明

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

图1是本发明实施例提供的一种分布式缓存发布订阅的方法结构图。

具体实施方式

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

在本申请的描述中,需要理解的是,术语“中心”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。

术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。

在本申请的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请中的具体含义。

参阅图1所示,本发明优选实施例的一种分布式缓存发布订阅的方法、系统和装置,以解决原生集群不支持跨节点的发布与订阅的问题。

现有的原生集群即当订阅的频道落在不同的分片上时,原生集群暂无有效的手段去支持跨分片节点的发布订阅。且由于原生集群基于发布订阅的设计缺陷,在消息发布时可能会出现所谓“订阅风暴”问题,当一个节点接收到PUBLISH命令时,它会将该消息广播到整个集群中的所有节点,订阅了相应频道或模式的所有节点都会收到该消息,原生集群现有的发布订阅模式会对网络和集群性能产生较大的影响,并且后端集群在发生节点切换、宕机重启等变更操作时,应用侧能够感知到订阅连接断开重新手工订阅。

即原生集群在下列场景下有着重大的缺陷:

场景1、原生集群的”订阅风暴”问题,严重影响了集群处理性能。

场景2、原生集群在跨分片节点的支持上欠缺有效手段,尤其是发布订阅场景。

场景3、原生集群在宕机、主从切换等故障转移下,需要应用侧重新发布订阅,无法做到发布订阅的透明无感知。

为了解决上述技术问题,本发明提供了一种分布式缓存发布订阅的方法,所述方法包括:

接收发布者发送的特定消息;

对发布者发送的消息进行ACCSEE协议拆解;

根据ACCSEE协议拆解数据将消息保存至特定的redis分片;

当redis分片接收消息后,此redis分片通过ACCSEE自动通知到订阅者。

优选的,在当redis分片接收消息后,此redis分片通过ACCSEE自动通知到订阅者之前,需要用户对频道进行订阅。

优选的,在用户对频道进行订阅时具体为:

用户发送频道订阅请求,发送至分布式缓存代理层,将用户一致性哈希路由至对应redis分片;

用户发送多频道订阅请求时,由多频道订阅SUBSCRIBE一致性哈希路由至对应redis分片,ACCESS代理层自动模拟多个订阅客户端订阅至后端对应的数据分片节点;

ACCESS对所有频道订阅信息进行缓存。

优选的,在根据ACCSEE协议拆解数据将消息保存至特定的redis分片之前,所述方法还包括:

通过基于键的哈希分片来选择节点;

设定redis集群并配置节点和分片映射;其中,各个分片之间互相独立,每个分片节点保存着属于自身的订阅频道。

优选的,在ACCESS对所有频道订阅信息进行缓存之后,所述方法还包括:

周期性的对缓存的订阅频道信息重新一致性哈希并模拟不同的订阅制重新订阅到数据分片节点。

优选的,在ACCESS对所有频道订阅信息进行缓存之后,所述方法还包括,当分布式缓存集群发生主从切换、节点扩容、节点宕机重启等变更操作时,Access探测到产生变更操作的分片节点连接断开时,自动将缓存的订阅频道信息重新一致性哈希并模拟不同的订阅者重连订阅到数据分片节点。

优选的,所述对发布者发送的消息进行ACCSEE协议拆解之前,所述方法还包括:使用Java编写并运行分布式缓存代理层服务ACCSEE。

综上所述,通过本申请实施例提供的一种分布式缓存发布订阅的方法针对上述场景本申请做出了针对性优化,具体为:

针对场景一原生集群的”订阅风暴”问题:本专利中分布式缓存集群不同于原生集群的去中心化架构,各个分片之间互相独立,每个分片节点保存着属于自身的订阅频道,当有消息发布时,指定redis分片节点通过Access自动通知到应用,而无需将该消息“广播”至集群中所有节点,避免了原生集群中的“订阅风暴”问题,大大减轻了消息发布订阅所引起的集群网络拥塞及性能瓶颈等现象。

针对场景二原生集群集群跨节点订阅问题:本专利分布式缓存代理层Access能够智能解析应用的订阅频道协议,将不同频道的订阅信息整合并模拟订阅者来订阅至后端对应的数据分片节点,弥补了原生集群的JedisCluster无法跨分片节点订阅的场景,应用可以像单机Redis的模式使用集群一样,较大程度上提高了应用的开发效率。

针对场景三原生集群应用透明感知问题:原生集群在主从切换、扩容等集群变更时,应用的订阅连接会被直接断开,本专利分布式缓存Access则缓存着应用的所有订阅频道信息,当后端数据节点宕机或切换、扩容时,Access探测到产生变更操作的分片节点连接断开时,自动将缓存的订阅频道信息重新一致性哈希并模拟不同的订阅者重连订阅到数据分片节点,做到了应用透明无感知。

下面通过实施例来详细说明上述方法:

实施例1:

1、使用Java编写并运行分布式缓存代理层服务Access。

2、在Access接收REDIS发布订阅请求,发起响应的代码位置发出请求和响应事件,由分布式缓存代理层智能协议处理模块接收。

3、Access智能协议处理模块自动解析客户端的多频道订阅请求协议,根据多频道订阅SUBSCRIBE一致性哈希路由至对应redis分片,ACCESS代理层自动模拟多个订阅客户端订阅至后端对应的数据分片节点(解决了原生集群无法支持跨分片节点的操作)。

4、订阅的频道有消息发布PUBLISH时,对应redis分片节点通过Access自动通知到应用,而无需将该消息“广播”至集群中所有节点,避免了原生集群中的“订阅风暴”问题。

5、集群发生主从切换、节点扩容、节点宕机重启等变更操作时,,Access探测到产生变更操作的分片节点连接断开时,自动将缓存的订阅频道信息重新一致性哈希并模拟不同的订阅者重连订阅到数据分片节点,做到了应用透明无感知。

进一步的,本申请还包括一种分布式缓存发布订阅的系统,包括:

消息接收模块:用于接收发布者发送的特定消息;

协议拆解模块:用于对发布者发送的消息进行ACCSEE协议拆解;

消息缓存模块:用于根据ACCSEE协议拆解数据将消息保存至特定的redis分片;

消息发送模块:用于当redis分片接收消息后,此redis分片通过ACCSEE自动通知到订阅者。

进一步的,本申请还包括一种服务器,其特征在于,所述服务器包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现任意实施例所述的分布式缓存发布订阅的方法。

存储器作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的分布式缓存发布订阅方法对应的程序指令/模块(例如,分布式缓存发布订阅系统中的消息接收模块、协议拆解模块、消息存储模块和消息发送模块)。处理器通过运行存储在存储器中的软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述的基于Redis的多用户发布订阅方法。

存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

通信装置可用于接收用户终端发来的消息,以及向用户终端发送消息。

进一步的,本申请还包括一种计算机储存介质,其特征在于,储存有计算机程序,当程序被执行时实现任意实施例所述的分布式缓存发布订阅的方法。

综上,本发明实施例提供一种分布式缓存发布订阅的方法、系统和装置,其通过自研分布式缓存ACCESS代理层优化,针对分布式缓存发布订阅应用场景,通过ACCESS代理层对应用的多频道订阅SUBSCRIBE一致性哈希路由至对应分片,解决了原生集群无法支持跨分片节点发布订阅的问题,且针对应用的订阅频道发布PUBLISH消息直接路由至真正的频道订阅分片节点,无需广播消息至集群所有分片节点,解决了原生集群去中心化的发布场景痛点问题。此外针对集群后端集群的主从切换、扩容等操作自动重连,不影响应用侧订阅频道的丢失,解决了原生集群在订阅频道稳定性无法覆盖的一些场景。

以上所述仅为本发明的一个实施例子,但不能以此限制本发明的范围,凡依据本发明所做的结构上的变化,只要不失本发明的要义所在,都应视为落入本发明保护范围之内受到制约。

需要说明的是,上述实施例提供的系统,仅以上述各功能模块的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能模块来完成,即将本发明实施例中的模块或者步骤再分解或者组合,例如,上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块,以完成以上描述的全部或者部分功能。对于本发明实施例中涉及的模块、步骤的名称,仅仅是为了区分各个模块或者步骤,不视为对本发明的不当限定。

术语“包括”或者任何其它类似用语旨在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备/装置不仅包括那些要素,而且还包括没有明确列出的其它要素,或者还包括这些过程、方法、物品或者设备/装置所固有的要素。

至此,已经结合附图所示的优选实施方式描述了本发明的技术方案,但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本发明的原理的前提下,本领域技术人员可以对相关技术特征作出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

技术分类

06120116582986