一种数据处理方法、装置、设备及可读存储介质与流程

文档序号:26139657发布日期:2021-08-03 14:23阅读:73来源:国知局
一种数据处理方法、装置、设备及可读存储介质与流程

本申请涉及计算机技术领域,尤其涉及一种数据处理方法、装置、设备以及可读存储介质。



背景技术:

消息队列遥测传输(messagequeuingtelemetrytransport,mqtt)是一个即时通信协议,采用发布/订阅的模式,可以适用于低功耗和网络带宽有限的物联网设备。作为物联网的重要传输协议,mqtt支持几乎所有平台。

发布和订阅模式中,发布者可向mqtt服务器发送一条带有特定主题的消息,订阅者通过向服务器订阅这一主题,从而可接收从服务器发来的消息。

现有方案中,各个mqtt服务器单点部署,即是单机的mqtt服务。而若某些服务器存在性能不足的问题不足以支撑大量业务时,需要新的mqtt服务器上线运行,以分担这些服务器的业务压力,增强服务器的服务性能。而在新的服务器上线时,需要对所有的单点运行的服务器进行业务暂停,将所有的订阅信息进行重新配置,使得某些性能不足的服务器的业务可以分配至新上线的服务器,由此可改善这些服务器的服务性能,保障业务的顺利进行。



技术实现要素:

本申请实施例提供一种数据处理方法、装置、设备以及可读存储介质,可以在实现代理节点动态扩展的同时,提高新上线代理节点拉取数据的准确率。

本申请实施例一方面提供了一种数据处理方法,包括:

处于未上线状态的第一代理节点基于上线请求遍历数据库;数据库包括已上线代理节点集合中每个已上线代理节点的关键标识以及关键标识对应的运行失效时间;每个已上线代理节点包括同步订阅信息;

根据已上线代理节点集合对应的运行失效时间集合与请求时间,在已上线代理节点集合中获取有效节点,在剩余代理节点执行存储目标订阅信息的过程中,从有效节点中同步请求拉取同步订阅信息;剩余代理节点为已上线代理节点集合中除有效节点以外的已上线代理节点;同步订阅信息不包括目标订阅信息;

存储同步订阅信息,将处于未上线状态的第一代理节点的状态从未上线状态切换为已上线状态;

处于已上线状态的第一代理节点向数据库发送存储成功提示信息,以使数据库基于存储成功提示信息为处于已上线状态的第一代理节点分配目标运行失效时间,并将处于已上线状态的第一代理节点的目标关键标识以及目标运行失效时间添加至数据库中。

本申请实施例一方面提供了一种数据处理装置,包括:

遍历模块,用于基于上线请求遍历数据库;数据库包括已上线代理节点集合中每个已上线代理节点的关键标识以及关键标识对应的运行失效时间;每个已上线代理节点包括同步订阅信息;

节点获取模块,用于根据已上线代理节点集合对应的运行失效时间集合与上线请求对应的请求时间,在已上线代理节点集合中获取有效节点;

信息拉取模块,用于在剩余代理节点执行存储目标订阅信息的过程中,从有效节点中同步请求拉取同步订阅信息;剩余代理节点为已上线代理节点集合中除有效节点以外的已上线代理节点;同步订阅信息不包括目标订阅信息;

信息存储模块,用于存储同步订阅信息,将处于未上线状态的第一代理节点的状态从未上线状态切换为已上线状态;

信息发送模块,用于处于已上线状态的第一代理节点向数据库发送存储成功提示信息,以使数据库基于存储成功提示信息为处于已上线状态的第一代理节点分配目标运行失效时间,并将处于已上线状态的第一代理节点的目标关键标识以及目标运行失效时间添加至数据库中。

在一个实施例中,同步订阅信息包括订阅树;订阅树用于存储订阅客户端、订阅客户端所订阅的主题信息以及订阅客户端对应的代理节点之间的关联关系;

该数据处理装置还包括:

消息转发模块,用于接收发布客户端针对目标消息的发布请求;发布请求包括目标消息的主题信息;

消息转发模块,还用于基于发布请求遍历订阅树,在订阅树所存储的代理节点中获取待传输代理节点;待传输代理节点对应的待传输订阅客户端所订阅的订阅主题信息,与目标消息的主题信息相匹配;订阅客户端包括待传输订阅客户端;

消息转发模块,还用于将目标消息发送至待传输代理节点,以使待传输代理节点将目标消息转发至待传输代理节点对应的待传输订阅客户端。

在一个实施例中,该数据处理装置还包括:

消息检测模块,用于获取检测规则库;检测规则库中包括异常文本与异常音频;

消息检测模块,还用于将目标消息与检测规则库中的异常文本、异常音频进行匹配;

消息检测模块,还用于若目标消息中存在与异常文本相同的文本内容,或存在与异常音频相同的音频内容,则将目标消息确定为违规消息,生成违规提示信息,将违规提示信息发送至目标发布客户端以及待传输代理节点;

步骤执行模块,用于若目标消息中不存在与异常文本相同的文本内容,且不存在与异常音频相同的音频内容,则执行将目标消息发送至待传输代理节点的步骤。

在一个实施例中,该数据处理装置还包括:

时间匹配模块,用于将请求时间与已上线代理节点集合对应的运行失效时间集合进行匹配;

树构建模块,用于若运行失效时间集合中不存在晚于请求时间的运行失效时间,则构建包括根节点的空订阅树;

树构建模块,还用于若运行失效时间集合中存在晚于请求时间的运行失效时间,则执行根据已上线代理节点集合对应的运行失效时间集合与上线请求对应的请求时间,在已上线代理节点集合中获取有效节点的步骤。

在一个实施例中,节点获取模块包括:

候选时间确定单元,用于将运行失效时间集合中晚于请求时间的运行失效时间,确定为候选失效时间;

候选时间确定单元,还用于将候选失效时间所对应的关键标识确定为候选关键标识;

节点获取单元,用于将候选关键标识对应的已上线代理节点确定为候选代理节点,在候选代理节点中获取有效节点。

在一个实施例中,候选代理节点的数量为至少两个;

节点获取单元,包括:

数量统计子单元,用于获取至少两个候选代理节点中每个候选代理节点分别对应的候选关键标识,在数据库中,获取每个候选关键标识对应的运行失效时间;

数量统计子单元,还用于统计至少两个候选关键标识中每个候选关键标识对应的运行失效时间的数量;

节点删除子单元,用于将至少两个候选关键标识中运行失效时间的数量大于或等于数量阈值的候选关键标识确定为错误标识,将错误标识对应的候选代理节点从至少两个候选代理节点中进行删除,得到待选择代理节点;

节点确定子单元,用于在待选择代理节点中获取有效节点。

在一个实施例中,节点确定子单元,还具体用于获取待选择代理节点对应的网络质量参数;

节点确定子单元,还具体用于将网络质量参数中的最大网络质量参数所对应的待选择代理节点,确定为有效节点。

在一个实施例中,目标订阅信息的数量为至少两个;

该数据处理装置还包括:

时间获取模块,用于获取至少两个目标订阅信息中每个目标订阅信息分别对应的订阅时间;

排序模块,用于将至少两个目标订阅信息按照订阅时间的时间顺序进行排序,得到排序后的目标订阅信息;

信息存储模块,用于将排序后的目标订阅信息按序存储至订阅树中,得到目标订阅树。

在一个实施例中,该数据处理装置还包括:

序列处理模块,用于当处于已上线状态的第一代理节点为处于未上线状态的第二代理节点所确定的有效节点时,接收第二代理节点发送的第二数据拉取请求;处于未上线状态的第二代理节点为待上线的代理节点;

序列处理模块,还用于基于第二数据拉取请求,获取目标订阅树;

序列处理模块,还用于将目标订阅树进行序列化处理得到序列订阅树;

树发送模块,用于将序列订阅树发送至处于未上线状态的第二代理节点,以使处于未上线状态的第二代理节点将序列订阅树进行反序列化处理,得到目标订阅树,并存储目标订阅树。

在一个实施例中,序列处理模块包括:

模板获取单元,用于获取序列化处理对应的逻辑代码模板;

变量确定单元,用于获取目标订阅树中的订阅客户端以及订阅客户端所订阅的订阅主题信息,将订阅客户端以及订阅客户端所订阅的订阅主题信息作为变量;

融合单元,用于将变量与逻辑代码模板进行融合,得到序列订阅树。

在一个实施例中,该数据处理装置还包括:

时间更新模块,用于根据请求时间与目标运行失效时间,确定更新时间;

时间更新模块,还用于当系统时间到达更新时间时,生成时间更新请求,将时间更新请求发送至数据库,以使数据库基于时间更新请求对目标运行失效时间进行更新;更新后的目标运行失效时间晚于目标运行失效时间。

在一个实施例中,该时间更新模块包括:

时长确定单元,用于确定请求时间与目标运行失效时间之间的总时长;

时长运算单元,用于将总时长与配置时长比例值进行相乘处理,得到运算时长;运算时长小于或等于总时长;

时长运算单元,还用于将请求时间与运算时长进行相加处理,得到更新时间。

本申请实施例一方面提供了一种计算机设备,包括:处理器和存储器;

存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行本申请实施例中的方法。

本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序包括程序指令,程序指令当被处理器执行时,执行本申请实施例中的方法。

本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例中一方面提供的方法。

在本申请实施例中,代理节点可以以分布式集群方式部署,每个已上线代理节点可存储有相同的同步订阅信息,同时,本申请可以为每个已上线的代理节点分配一个运行失效时间,并将每个已上线代理节点的关键标识以及每个已上线代理节点的运行失效时间,共同保存于数据库中;通过为每个已上线的代理节点分配运行失效时间,可准确知道每个已上线的代理节点无法运行的时间,由此,在有新的代理节点(已上线代理节点集群中没有的代理节点,如,处于未上线状态的第一代理节点)请求上线时,可遍历数据库,通过数据库中的关键标识以及运行失效时间,可准确查询出在当时(请求上线的请求时刻)的已上线代理节点集群中还没失效的已上线代理节点有哪些,请求上线的代理节点可将之作为有效节点,可向其发送数据拉取请求以拉取到有效节点中所存储的同步订阅信息;由于通过运行失效时间可更为准确的确定正常运行的节点有哪些,即可确定有效节点为正常运行节点,则从有效节点获取到的同步订阅信息也会更为准确,那么可以提高新上线代理节点拉取到的同步订阅信息的准确性。同时,当请求上线的代理节点向有效节点拉取同步订阅信息的过程中,已上线代理节点集群中除有效节点以外的剩余代理节点无需像有效节点一样暂停运行,而是继续运行即可,也就是说,在扩展代理节点时,已上线代理节点无需停止运行全部的代理节点,只需暂停运行某个收到数据拉取请求的代理节点即可,可以实现代理节点的动态扩展。综上,本申请可以在实现代理节点动态扩展的同时,提高请求上线的代理节点拉取到的数据的准确率。

附图说明

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

图1是本申请实施例提供的一种网络架构图;

图2是本申请实施例提供的一种新增代理节点的场景示意图;

图3是本申请实施例提供的一种数据处理方法的流程示意图;

图4是本申请实施例提供的一种对目标订阅树进行序列化处理并发送的流程示意图;

图5是本申请实施例提供的一种系统流程示意图;

图6是本申请实施例提供的一种数据处理装置的结构示意图;

图7是本申请实施例提供的一种计算机设备的结构示意图。

具体实施方式

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

请参见图1,图1是本申请实施例提供的一种网络架构示意图。如图1所示,该网络架构可以包括服务器1000、代理节点集群100以及用户终端集群10,用户终端集群10可以包括一个或者多个用户终端,这里将不对用户终端的数量进行限制;代理节点集群100可以包括一个或者多个代理节点(mqtt服务器,即客户端代理,也可称之为broker),这里将不对代理节点的数量进行限制。如图1所示,多个用户终端可以包括用户终端10a、用户终端10b、用户终端10c、…、用户终端10n;多个代理节点可包括代理节点100a、代理节点100b、代理节点100c、…、代理节点100n。如图1所示,用户终端10a、用户终端10b、用户终端10c、…、用户终端10n可以分别与代理节点100中的任一代理节点进行网络连接,以便于每个用户终端可以通过该网络连接与代理节点100之间进行数据交互;代理节点100中的代理节点之间可以进行网络连接,以便于代理节点之间可以通过该网络连接进行数据交互;代理节点100a、代理节点100b、代理节点100c、…、代理节点100n可以分别与服务器1000之间进行网络连接,以便于每个代理节点可以通过该网络连接与服务器1000之间进行数据交互。

当每个用户终端与某个代理节点进行网络连接,且该代理节点与该服务器1000之间进行网络连接时,该用户终端可通过该网络连接、该代理节点以及该服务器1000与其他用户终端进行数据交互,以发布或订阅消息等。

如图1所示,本申请实施例中的服务器1000可以为提供各种服务的服务器,例如对用户终端10a、用户终端10b、…、用户终端10n通过代理节点集群100所订阅的消息提供存储或转发功能的后台云端服务器,可按时间对接收到的订阅信息进行存储并按时间进行排序,再按序依次将订阅信息转发至各个代理节点,使得各个代理节点可以按序依次存储各个订阅信息。该服务器1000可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统(如,kafka分布式系统),还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。

为便于理解,本申请实施例可以在图1所示的多个用户终端中选择一个用户终端作为目标用户终端,该用户终端可以包括:智能手机、平板电脑、笔记本电脑、桌上型电脑、智能电视、智能音箱、台式计算机、智能手表等携带数据处理功能的智能终端,但并不局限于此。例如,本申请实施例可以将图1所示的用户终端100a作为目标用户终端。

本申请实施例中,用户终端可理解为客户端,代理节点集群100以及服务器1000可进行mqtt服务,用户可通过用户终端集群10、代理节点集群100以及服务器100订阅感兴趣的主题,同时也可以接收发布客户端所发布的消息。当用户对应的用户终端连接到代理节点,用户可通过用户终端订阅感兴趣的主题;同理,当用户对应的用户终端连接到代理节点,也可以在一个主题上发布消息,则其他用户可通过其对应的用户终端订阅该主题并接收到该用户所发布的消息。

例如,以用户终端10a、用户终端10b以及用户终端10c为目标用户终端为例,用户终端10a对应的用户为用户a,用户终端10b对应的用户为用户b,用户终端10c对应的用户为用户c。用户终端10a所连接的代理节点为代理节点100a,用户终端10b所连接的代理节点为代理节点10b,用户终端10c所连接的代理节点为代理节点10c。用户a可通过用户终端10a订阅主题a,用户终端10a所连接的代理节点100a可将该用户终端10a针对主题a的订阅信息发送至服务器1000;用户b也可通过用户终端10b订阅主题a,用户终端10b所连接的代理节点100b也可将该用户终端10b针对主题a的订阅信息发送至服务器1000。

进一步地,在服务器1000中,可根据用户终端10a订阅该主题a的订阅时间t1与用户终端10b订阅该主题a的订阅时间t2,对用户终端10a的订阅信息与用户终端10b的订阅信息进行排序(例如,订阅时间t1早于订阅时间t2,可将订阅时间小的订阅信息排于订阅时间大的订阅信息之前,则得到的排序结果为{用户终端10a的订阅信息,用户终端10b的订阅信息})。进一步地,服务器1000可按序(例如,从前至后的顺序即按照订阅时间由小到大的顺序)将用户终端10a的订阅信息以及用户终端10b的订阅信息先后发送至代理节点100a、代理节点100b以及代理节点100c,而代理节点100a、代理节点100b以及代理节点100c可先后将用户终端10a的订阅信息以及用户终端10c的订阅信息,存储至本机中。也就是说,代理节点100a、代理节点100b以及代理节点100c所存储的订阅信息是同步一致的。

应当理解,用户a可通过用户终端10c在主题a上发布消息,此时,用户终端10c所对应的代理节点100c可查阅本机所存储的订阅信息,通过订阅信息查询到订阅了该主题a的用户终端包括用户终端10a与用户终端10b,该用户终端10a对应的代理节点为代理节点100a,该用户终端10b对应的代理节点为代理节点100b,则代理节点100c可将该用户a所发布的主题a的消息转发至代理节点100a与代理节点100b,而代理节点100a可将该主题a的消息发送至用户终端10a,代理节点100b可将该主题a的消息发送至用户终端10b。

可以理解的是,本申请中的各个代理节点以分布式集群方式部署时,可支持新的代理节点上线运行,以完成代理节点集群的扩展。当新的代理节点请求上线时,需要从已上线的代理节点集群中选择任一代理节点作为数据拉取节点向其发送数据拉取请求,由此该数据拉取节点可以基于该数据拉取请求向该新的代理节点推送本机所存储的订阅信息。而为提高新的请求上线的代理节点接收到的订阅信息的准确率,本申请提供一种选择数据拉取节点的方法:即为已上线的代理节点集群中的每个代理节点分配一个运行失效时间,可以理解的是,在每个代理节点成功上线后,可以为其分配一个运行失效时间,一旦超过这个运行失效时间,则该代理节点即为不支持业务处理功能(发布/订阅消息)的代理节点。

鉴于此,当新的代理节点请求上线时,可以基于每个已上线的代理节点的运行失效时间,准确地查找到有哪些代理节点已无法运行,哪些代理节点为健康节点(正在运行)。随后,在查找到后,正在请求上线的代理节点可以选择任一健康节点作为数据拉取节点向其发送数据拉取请求。应当理解,基于运行失效时间查找健康节点的方式,可以避免请求上线的代理节点将已不具备业务处理功能的代理节点作为数据拉取节点,拉取到不完成的不准确订阅信息。同时,由于本申请中的各个代理节点采用分布式集群部署,各个代理节点所存储的订阅信息是一致的,当请求上线的代理节点请求向某个已上线的代理节点(数据拉取节点)拉取订阅信息时,在已上线的代理节点中的除该数据拉取节点以外的代理节点,可以继续执行发布/订阅消息的业务功能、继续存储新的订阅信息。也就是说,本申请在扩展代理节点时,无需停止全部已上线的代理节点的运行,可以实现动态扩展。

为便于理解,请一并参见图2,图2是本申请实施例提供的一种新增代理节点的场景示意图。

请参见图2,已上线的代理节点集群中包括已上线代理节点20a、已上线代理节点20b以及已上线代理节点20c,其中,已上线代理节点20a的运行失效时间为2021年6月1日11:00、已上线代理节点20b的运行失效时间为2021年6月1日11:02、已上线代理节点20c的运行失效时间为2021年6月1日11:05。每个已上线代理节点的运行失效时间可与其对应的节点关键标识一并存储至数据库中,当新的代理节点请求上线时,可遍历该数据库以查询有效节点(运行失效时间尚未失效的代理节点)。

例如,如图2所示,代理节点200可为新的请求上线的代理节点,当代理节点200请求上线时,可基于上线请求遍历数据库,以查询有效节点。以代理节点200请求上线的请求时间为2021年6月1日10:55为例,代理节点200可将已上线代理节点20a、已上线代理节点20b以及已上线代理节点20c分别对应的运行失效时间与该请求时间2021年6月1日10:55进行比较,若某个已上线代理节点的运行失效时间大于(即晚于)该请求时间,则可确定该已上线代理节点为正在运行的健康节点。例如,如图2所示,通过将运行失效时间2021年6月1日11:00、运行失效时间2021年6月1日11:02、运行失效时间2021年6月1日11:05分别与请求时间2021年6月1日10:55进行比较后,可确定运行失效时间2021年6月1日11:00、运行失效时间2021年6月1日11:02、运行失效时间2021年6月1日11:05均晚于该请求时间,可将已上线代理节点20a、已上线代理节点20b以及已上线代理节点20c均确定为健康节点。

进一步地,代理节点200可在健康节点(包括已上线代理节点20a、已上线代理节点20b以及已上线代理节点20c)中,选择任一节点作为有效节点(即数据拉取节点)并向其发送数据拉取请求。其中,代理节点200在健康节点中选择有效节点的方式可为随机选择方式,也可选择网络质量参数最好的健康节点作为有效节点,还可为选择硬件设备参数最优的健康节点作为有效节点,对于新的请求上线的代理节点在健康节点中选择有效节点的方式,本申请将不做限制。

如图2所示,代理节点200所选择的有效节点为已上线代理节点20a,代理节点200可向已上线代理节点20a发送数据拉取请求,已上线代理节点20a可基于该数据拉取请求,将本机所存储的订阅信息发送至代理节点200。

可以理解的是,运行失效时间可理解为每个已上线代理节点“活着”(即在正常运行)的证明,每个已上线代理节点可在快到运行失效时间时,向数据库申请延长更新运行失效时间,由此由于已上线代理节点的不断请求更新,那么该运行失效时间也会不断变化,只要每个已上线代理节点还“活着”,那么数据库中就会存在该已上线代理节点的运行失效时间。新的请求上线的代理节点可基于该运行失效时间准确的获取到哪些已上线代理节点为正常运行的健康节点。

需要说明的是,若代理节点200在请求上线时,在遍历数据库后,并未查询到晚于该请求时间的运行失效时间,那么该代理节点200可直接向数据库申请运行失效时间,获取到自己的运行失效时间并开始运行。

进一步地,请参见图3,图3是本申请实施例提供的一种数据处理方法的流程示意图。其中,该方法可以由代理节点(如,上述图1所示的代理节点集群100中的任一代理节点,如,代理节点100a)执行。其中,该方法至少可以包括以下步骤s101-步骤s104:

步骤s101,处于未上线状态的第一代理节点基于上线请求遍历数据库;数据库包括已上线代理节点集合中每个已上线代理节点的关键标识以及关键标识对应的运行失效时间;每个已上线代理节点包括同步订阅信息。

本申请中,代理节点可以是指mqtt协议中的客户端代理(又可称之为broker),当用户终端与该代理节点相连接时,基于mqtt的发布消息和订阅主题的原则,该用户终端可支持mqtt服务,用户可以在该用户终端中订阅自己所感兴趣的主题;用户也可以在该用户终端中的一个主题上发布消息,那么其他用户可通过其他支持mqtt服务的用户终端中订阅相同的主题,在订阅后,可接收到该用户针对该主题所发布的消息。其中,主题如文件系统一样可以包括一个或多个层次(层级),每两个层级之间可以由斜杠符号“/”来进行划分,例如,各个计算机可发布各自的硬件驱动(sensors)的温度信息(temperature)在如下的主题上,其中计算机的名称(computer_name)与硬件的名称(harddrive_name)可以被适当的替换:

“sensors/computer_name/temperature/harddrive_name”。

其中,在如上主题中,“sensors”可为一个层次(层级);“computer_name”可为一个层次;“temperature”可为一个层次;“harddrive_name”可为一个层次。可以理解的是,可认为每个斜杠之前的层次高于斜杠后的层次,例如,可认为上述“sensors”层次高于“computer_name”层次,而“computer_name”高于“temperature”层次,以此类推。

应当理解,本申请中的各个代理节点可以存储订阅信息(可包括客户端所订阅的主题信息,这里可将每个代理节点所存储的订阅信息称之为同步订阅信息),从而在接收到发布客户端发送的针对某一特定主题的消息时,可以将该特定主题的消息转发至订阅了该特定主题的客户端。

为保证各个代理节点所保存的订阅信息是同步一致的,本申请中的各个代理节点可以以分布式集群方式部署,每个代理节点在接收到客户端发送的订阅信息时,可先将该订阅信息存储至消息队列(如kafka队列)中,那么在该消息队列中,就可暂时保存一个或多个代理节点所发送的订阅信息,随后,可根据这些订阅信息的订阅时间的先后顺序(早晚顺序)来进行排序,各个代理节点可按序获取这些订阅信息并按序存储至本机中。

在一种可行的方式中,为进一步保证各个代理节点所保存的订阅信息是同步一致的,可采用订阅树(前缀树或字典树,又可称之为trie)来存储订阅信息,由此,即使存在某个代理节点存在存储乱序的问题,由于trie的可插入与可删除机制,在代理节点本该存储却仍未存储某个订阅信息时,可以将该订阅信息插入至该代理节点的字典树中(或在代理节点本不该存储却提前存储了某个订阅信息时,可以将该订阅信息从字典树中进行删除),采用订阅树可以很好的解决代理节点的乱序问题,使得各个代理节点所存储的订阅信息可以保持同步一致。

在各个代理节点以分布式集群方式部署时,为增强代理节点集群的性能,可支持新的代理节点上线运行(加入到该分布式集群中),从而可以完成对代理节点集群的扩展。当新的代理节点请求上线时,需要从已上线的代理节点集群中选择任一代理节点作为数据拉取节点向其发送数据拉取请求,由此该数据拉取节点可以基于该数据拉取请求向该新的代理节点推送本机所存储的订阅信息。

可以理解的是,为提高新的请求上线的代理节点接收到的订阅信息的准确率,本申请提供一种选择数据拉取节点(可称之为有效节点)的方法:即采用远程字典服务(remotedictionaryserver,redis;也可称之为key-valve数据库)为已上线的代理节点集群中的每个代理节点分配一个运行失效时间,该数据库中可保存每个已上线代理节点的关键标识(key值)以及运行失效时间;新的请求上线的代理节点在上线时,可遍历数据库获取到正在运行的健康节点,并从健康节点中获取到有效节点。本申请中的任一一个新的请求上线的代理节点可称之为处于未上线状态的第一代理节点,还未成功上线的代理节点的状态(包括正在请求上线状态)均可称之为未上线状态。

步骤s102,根据已上线代理节点集合对应的运行失效时间集合与请求时间,在已上线代理节点集合中获取有效节点,在剩余代理节点执行存储目标订阅信息的过程中,从有效节点中同步请求拉取同步订阅信息;剩余代理节点为已上线代理节点集合中除有效节点以外的已上线代理节点;同步订阅信息不包括目标订阅信息。

本申请中,处于未上线状态的第一代理节点可将数据库中各个已上线代理节点的运行失效时间与请求时间进行比较(即,可将请求时间与已上线代理节点集合对应的运行失效时间集合进行匹配),若该运行失效时间集合中不存在晚于该请求时间的运行失效时间,则该处于未上线状态的第一代理节点可无需拉取订阅信息,该处于未上线状态的第一代理节点可从消息队列中从头开始按序获取订阅信息,并按序存储订阅信息(当以订阅树的方式存储订阅信息时,该处于未上线状态的第一代理节点即可构建一个仅包含根节点的空订阅树,并按序存储订阅信息至订阅树中);而若该运行失效时间集合中存在晚于该请求时间的运行时效时间,则该处于未上线状态的第一代理节点可根据运行失效时间集合与请求时间,在该已上线代理节点集合中获取到有效节点。

其中,对于根据运行失效时间集合与请求时间,在该已上线代理节点集合中获取到有效节点的具体方法可为:可将运行失效时间集合中晚于请求时间的运行失效时间,确定为候选失效时间;随后,可将候选失效时间所对应的关键标识确定为候选关键标识;随后,可将候选关键标识对应的已上线代理节点确定为候选代理节点,可在候选代理节点中获取有效节点。

其中,对于在候选代理节点中获取有效节点的具体方法可为:可获取至少两个候选代理节点中每个候选代理节点分别对应的候选关键标识,随后,可在数据库中,获取每个候选关键标识对应的运行失效时间;随后,可统计至少两个候选关键标识中每个候选关键标识对应的运行失效时间的数量;可将至少两个候选关键标识中运行失效时间的数量大于或等于数量阈值的候选关键标识确定为错误标识,可将错误标识对应的候选代理节点从至少两个候选代理节点中进行删除,得到待选择代理节点;随后,可在待选择代理节点中获取有效节点。

其中,对于在待选择代理节点中获取有效节点的具体方法可为:可获取待选择代理节点对应的网络质量参数;随后,可将网络质量参数中的最大网络质量参数所对应的待选择代理节点,确定为有效节点。

可选的,在一种可行的方式中,对于在待选择代理节点中获取有效节点的具体方法可为:可获取代理节点对应的硬件设备参数;随后,可将硬件设备参数中的最优设备参数所对应的待选择代理节点,确定为有效节点。

可选的,在一种可行的方式中,对于在待选择代理节点中获取有效节点的具体方法可为:可先对多个待选择代理节点的网络质量参数按从大到小的顺序进行排序,再获取到排序靠前(即网络质量参数较大)的n(n为正整数)个的待选择代理节点;随后,再从这n个待选择代理节点中获取到硬件设备参数为最优设备参数的待选择代理节点,并将之作为有效节点。

可选的,在一种可行的方式中,对于在待选择代理节点中获取有效节点的具体方法可为:可在多个待选择代理节点中,随机选择任一一个待选择代理节点作为有效节点。

应当理解,数据库可为每个已上线的代理节点分配运行失效时间,而若某个已上线的代理节点进行了重启,且重启速度很快的话,那么该重启的已上线代理节点在快速重启后,数据库又会为之分配一个新的运行失效时间,若该重启的已上线代理节点在数据库中存储的历史运行失效时间还并未及时删除,那么该重启的已上线代理节点就会在数据库中拥有两个运行失效时间;此时虽然该重启的已上线代理节点的运行失效时间还未失效,但其所对应的服务已无法调用(该重启的已上线代理节点本机所存储的订阅信息并不准确),那么若该新的请求上线的代理节点所确定的有效节点为重启的已上线代理节点,该新的请求上线的代理节点(如处于未上线状态的第一代理节点)会拉取到不准确的订阅信息或无法拉取到订阅信息。

鉴于此,新的请求上线的代理节点(处于未上线状态的第一代理节点)在比较请求时间与运行时效时间后,可以先获取到晚于该请求时间的运行失效时间,再获取到这些运行失效时间对应的关键标识,通过关键标识可确定数据库中已上线代理节点是否存在两个运行失效时间,若存在,则可确定其为重启的已上线代理节点,可将其进行删除,再从剩下的已上线代理节点中获取有效节点。

步骤s103,存储同步订阅信息,将处于未上线状态的第一代理节点的状态从未上线状态切换为已上线状态。

本申请中,处于未上线状态的第一代理节点可存储从有效节点处所拉取到的同步订阅信息,并将状态从未上线状态切换为已上线状态。可以理解的是,处于未上线状态的第一代理节点可在获取到同步订阅信息时,将该状态从未上线状态切换为已上线状态;处于未上线状态的第一代理节点也可在存储完成同步订阅信息时,再将状态从未上线状态切换为已上线状态;处于未上线状态的第一代理节点也可在存储同步订阅信息的过程中,将状态从未上线状态切换为已上线状态。

步骤s104,处于已上线状态的第一代理节点向数据库发送存储成功提示信息,以使数据库基于存储成功提示信息为处于已上线状态的第一代理节点分配目标运行失效时间,并将处于已上线状态的第一代理节点的目标关键标识以及目标运行失效时间添加至数据库中。

本申请中,处于已上线状态的第一代理节点在存储成功后,可向数据库发送存储成功提示信息,而该数据库可基于该存储成功提示信息为处于已上线状态的第一代理节点分配目标运行失效时间,并将处于已上线状态的第一代理节点的目标关键标识以及目标运行失效时间添加至数据库中。由此,当有其他的新的代理节点请求上线的过程中,可通过该目标运行失效时间确定该第一代理节点是否为健康节点。

应当理解,在第一代理节点上线运行后,可以接收客户端发送的针对某一主题的消息,该第一代理节点可基于本机所存储的同步订阅信息,查找到订阅了该主题的客户端,并将该消息转发至该客户端。为便于理解,以下将以代理节点采用订阅树的方式存储订阅信息(即同步订阅信息包括订阅树,该订阅树中存储有订阅树;订阅树用于存储订阅客户端、订阅客户端所订阅的主题信息以及订阅客户端对应的代理节点之间的关联关系)为例,对代理节点转发消息至客户端的流程进行说明,其具体方法可为:可接收发布客户端针对目标消息的发布请求;其中,发布请求包括目标消息的主题信息;随后,第一代理节点可基于发布请求遍历订阅树,在订阅树所存储的代理节点中获取待传输代理节点;待传输代理节点对应的待传输订阅客户端所订阅的订阅主题信息,与目标消息的主题信息相匹配;订阅客户端包括待传输订阅客户端;将目标消息发送至待传输代理节点,以使待传输代理节点将目标消息转发至待传输代理节点对应的待传输订阅客户端。

也就是说,因为该订阅树中存储了订阅客户端、订阅客户端所连接的代理节点以及订阅客户端所订阅的主题信息,那么在第一代理节点接收到针对目标消息的发布请求后,可通过订阅树获取到订阅了该目标消息的主题的订阅客户端有哪些,并获取到这些订阅客户端所连接的代理节点(可作为待传输代理节点),那么第一代理节点可将该目标消息转发至这些待传输代理节点,无需广播至全部的代理节点集群中的每个代理节点,可以节约传输流量。

可选的,在一种可行的方式中,第一代理节点在转发目标消息至待传输代理节点前,还可先对目标消息进行检测,检测目标消息中是否存在异常文本与异常音频,其具体方法可为:可获取检测规则库;其中,检测规则库中包括异常文本与异常音频;随后,可将目标消息与检测规则库中的异常文本、异常音频进行匹配;若目标消息中存在与异常文本相同的文本内容,或存在与异常音频相同的音频内容,则将目标消息确定为违规消息,生成违规提示信息,将违规提示信息发送至目标发布客户端以及待传输代理节点;而若目标消息中不存在与异常文本相同的文本内容,且不存在与异常音频相同的音频内容,则执行将目标消息发送至待传输代理节点的步骤。

应当理解,可预先设置异常文本与异常音频,并将该异常文本与异常音频放入规则检测库中,代理节点在每次转发目标消息时,都可获取到该目标消息中所包括的文本与音频,可将该目标消息中包括的文本与该异常文本进行匹配,以确定该目标消息中是否存在异常的文本;同时,也可将该目标消息中包括的音频与该异常音频进行匹配,以确定该目标消息中是否存在异常的音频。在该目标消息中不存在异常的文本且不存在异常的音频时,才将该目标消息发送至待传输节点。而若该目标消息中存在异常的文本或异常的音频,则可生成违规提示信息,并将该违规提示信息返回至目标发布客户端,同时,可不向待传输节点发送该目标消息(也可以将该违规提示信息同时发送至待传输节点)。

应当理解,在第一代理节点向有效节点拉取同步订阅信息的过程中,已上线代理节点集合中除有效节点以外的代理节点可继续执行业务(如,发布/订阅消息、继续存储消息队列中的订阅信息),而在第一代理节点拉取完成同步订阅信息后,也可从消息队列中按序获取尚未存储的(同步订阅信息中未包括的)订阅信息,并按序存储至本机。为便于理解,以下将以代理节点采用订阅树的方式存储订阅信息(即同步订阅信息包括订阅树,该订阅树中存储有订阅树;订阅树用于存储订阅客户端、订阅客户端所订阅的主题信息以及订阅客户端对应的代理节点之间的关联关系)为例,对第一代理节点存储目标订阅信息的具体方法进行说明,其具体方法可为:可获取至少两个目标订阅信息(消息队列中除同步订阅信息以外的其余订阅信息)中每个目标订阅信息分别对应的订阅时间;随后,可将至少两个目标订阅信息按照订阅时间的时间顺序进行排序,得到排序后的目标订阅信息;将排序后的目标订阅信息按序存储至订阅树中,得到目标订阅树。

应当理解,当第一代理节点在上线且同步完成订阅信息后,也可以接收其他新的上线节点发送的数据拉取请求,该第一代理节点可将本机所存储的目标订阅树进行序列化处理,并将序列化处理的订阅树发送至新的上线节点;由此,新的上线节点可将接收到的序列化处理的订阅树进行反序列化处理,并存储至本机,其具体实现流程可参见后续图4所对应实施例中的描述。

应当理解,第一代理节点在上线运行后,为证明自己是“活着”的(即在正常运行的),该第一代理节点可在到达运行失效时间之前,向数据库申请延长运行失效时间,由此可证明该第一代理节点在不断正常运行。其具体方法可为:根据请求时间与目标运行失效时间,确定更新时间;当系统时间到达更新时间时,生成时间更新请求,将时间更新请求发送至数据库,以使数据库基于时间更新请求对目标运行失效时间进行更新;更新后的目标运行失效时间晚于目标运行失效时间。

其中,对于根据请求时间与目标运行失效时间,确定更新时间的方式,可为:可确定请求时间与目标运行失效时间之间的总时长;随后,可将总时长与配置时长比例值进行相乘处理,得到运算时长;其中,运算时长小于或等于总时长;随后,可将请求时间与运算时长进行相加处理,得到更新时间。其中,上述配置时长比例值可为人为规定数值,该配置时长比例值可为小数、百分数、分数等呈现形式,如该配置时长比例值可为1/2、50%、60%、0.8……在此不再一一进行举例说明。

示例性地,如第一代理节点的目标运行失效时间为11:00,请求时间为10:54,则该目标运行失效时间与该请求时间之间的总时长为6分钟,假设配置时长比例值为1/2;将该总时长与配置时长比例值进行相乘处理后,即可得到运算时长为3分钟;随后,可将该请求时间11:00与该运算时长3分钟进行相加处理,即可得到更新时间为11:03,则第一代理节点可在11:03时,向数据库发送时间更新请求,数据库可基于该时间更新请求将目标运行失效时间进行延长。其中,对于数据库延长目标运行失效时间的方式可为:可人为规定一个配置更新时长或数据库随机选择某个时长(如,10s、1分钟、20分钟……)作为配置更新时长,数据库可将目标运行失效时间与该配置更新时长进行相加处理,即可得到更新后的目标运行失效时间,该更新后的目标运行失效时间可作为第一代理节点新的运行失效时间。

应当理解,代理节点通过不断向数据库发起时间更新请求以更新运行失效时间的方式,可以证明代理节点自身是正在运行的(还健康的),也就是说,通过不断发起时间更新请求对运行失效时间进行更新的方式,可以进一步为代理节点提供“健康证明”(即证明代理节点为正常运行的节点),那么在新的请求上线的代理节点通过不断更新的运行失效时间获取有效节点时,可以更为准确的获取到处于正常运行的代理节点,由此可以更为准确的拉取到准确的订阅信息。

在本申请实施例中,代理节点可以以分布式集群方式部署,每个已上线代理节点可存储有相同的同步订阅信息,同时,本申请可以为每个已上线的代理节点分配一个运行失效时间,并将每个已上线代理节点的关键标识以及每个已上线代理节点的运行失效时间,共同保存于数据库中;通过为每个已上线的代理节点分配运行失效时间,可准确知道每个已上线的代理节点无法运行的时间,且每个已上线的代理节点可不断请求更新运行失效时间来证明自己是正常运行的,由此,在有新的代理节点(已上线代理节点集群中没有的代理节点,如,处于未上线状态的第一代理节点)请求上线时,可遍历数据库,通过数据库中的关键标识以及运行失效时间,可准确查询出在当时(请求上线的请求时刻)的已上线代理节点集群中还没失效的已上线代理节点有哪些,请求上线的代理节点可将之作为有效节点,可向其发送数据拉取请求以拉取到有效节点中所存储的同步订阅信息;由于通过运行失效时间可更为准确的确定正常运行的节点有哪些,即可确定有效节点为正常运行节点,则从有效节点获取到的同步订阅信息也会更为准确,那么可以提高新上线代理节点拉取到的同步订阅信息的准确性。同时,当新的请求上线的代理节点向有效节点拉取同步订阅信息的过程中,已上线代理节点集群中除有效节点以外的剩余代理节点无需像有效节点一样暂停运行,而是继续运行即可,也就是说,在扩展代理节点时,已上线代理节点无需停止运行全部的代理节点,只需暂停运行某个收到数据拉取请求的代理节点即可,可以实现代理节点的动态扩展。综上,本申请可以在实现代理节点动态扩展的同时,提高新上线代理节点拉取数据的准确率。

进一步地,请参见图4,图4是本申请实施例提供的一种对目标订阅树进行序列化处理并发送的流程示意图。本申请实施例以目标订阅树的数量为至少两个来进行说明,该流程可以包括以下步骤s201-步骤s203:

步骤s201,当处于已上线状态的第一代理节点为处于未上线状态的第二代理节点所确定的有效节点时,接收第二代理节点发送的第二数据拉取请求;处于未上线状态的第二代理节点为待上线的代理节点。

本申请中,如前文所述,在第一代理节上线后,在有其他新的上线代理节点(如处于未上线状态的第二代理节点)上线时,也可能会将处于已上线状态的第一代理节点确定为有效节点。此时,第一代理节点可以接收到处于未上线状态的第二代理节点所发来的数据拉取请求(可称之为第二数据拉取请求)。

步骤s202,基于第二数据拉取请求,获取目标订阅树,将目标订阅树进行序列化处理得到序列订阅树。

本申请中,对于将目标订阅树进行序列化处理的具体方法可为:可获取序列化处理对应的逻辑代码模板;随后,可获取目标订阅树中的订阅客户端以及订阅客户端所订阅的订阅主题信息,可将订阅客户端以及订阅客户端所订阅的订阅主题信息作为变量;随后,可将变量与逻辑代码模板进行融合,即可得到序列订阅树。

应当理解,上述逻辑代码模板可如表1所示:

表1

应当理解,本申请的订阅树在存储订阅信息时,可按照层级结构存储方式来存储订阅信息,即每个节点存储订阅主题当中的一级,其中,主题中的最高层级(如主题“a/b/c/d”中的层级“a”)可为订阅树中的父节点来存储,而层级“a”的下一个层级“b”可采用父节点“a”的子节点来存储;层级“b”的下一个层级“c”可采用子节点“b”的下一个子节点来存储,以此类推直至主题中的全部层级存储完成。应当理解,trie中的叶子节点(即最后一个层级对应的节点,如上述层级“d”所对应的节点)中可存储订阅客户端的信息和订阅客户端所连接的broker(代理节点)。也就是说,订阅树中可包括根节点、父节点以及子节点(包括叶子节点),而上述表1所示的子节点即可为订阅树中的子节点;订阅者即可为订阅客户端,可采用递归的方式将代理节点的目标订阅树的树状结构(包括订阅主题信息、子节点数量、订阅客户端数量等等)写入该逻辑代码模板,进行融合即是对目标订阅树进行序列化处理,融合后即可得到序列化后的订阅树(即序列订阅树)。

步骤s203,将序列订阅树发送至处于未上线状态的第二代理节点,以使处于未上线状态的第二代理节点将序列订阅树进行反序列化处理,得到目标订阅树,并存储目标订阅树。

本申请中,第一代理节点可将该序列订阅树发送至处于未上线状态的第二代理节点,该第二代理节点可将该序列订阅树进行反序列化处理,即可得到该目标订阅树。

在本申请实施例中,代理节点可以以分布式集群方式部署,每个已上线代理节点可存储有相同的同步订阅信息,同时,本申请可以为每个已上线的代理节点分配一个运行失效时间,并将每个已上线代理节点的关键标识以及每个已上线代理节点的运行失效时间,共同保存于数据库中;通过为每个已上线的代理节点分配运行失效时间,可准确知道每个已上线的代理节点无法运行的时间,且每个已上线的代理节点可不断请求更新运行失效时间来证明自己是正常运行的,由此,在有新的代理节点(已上线代理节点集群中没有的代理节点,如,处于未上线状态的第一代理节点)请求上线时,可遍历数据库,通过数据库中的关键标识以及运行失效时间,可准确查询出在当时(请求上线的请求时刻)的已上线代理节点集群中还没失效的已上线代理节点有哪些,请求上线的代理节点可将之作为有效节点,可向其发送数据拉取请求以拉取到有效节点中所存储的同步订阅信息;由于通过运行失效时间可更为准确的确定正常运行的节点有哪些,即可确定有效节点为正常运行节点,则从有效节点获取到的同步订阅信息也会更为准确,那么可以提高请求上线的代理节点拉取到的同步订阅信息的准确性。同时,当请求上线的代理节点向有效节点拉取同步订阅信息的过程中,已上线代理节点集群中除有效节点以外的剩余代理节点无需像有效节点一样暂停运行,而是继续运行即可,也就是说,在扩展代理节点时,已上线代理节点无需停止运行全部的代理节点,只需暂停运行某个收到数据拉取请求的代理节点即可,可以实现代理节点的动态扩展。综上,本申请可以在实现代理节点动态扩展的同时,提高请求上线的代理节点拉取到的数据的准确率。

为便于理解,请参见图5,图5是本申请实施例提供的一种系统流程示意图。该流程可以包括以下步骤51-步骤515:

步骤51,首个节点上线。

具体的,代理节点1为首个上线的节点,在代理节点1之前未存在其他已上线的代理节点。

步骤52,代理节点1从数据库查询健康节点。

具体的,代理节点1可从数据库中查询健康节点,即查询数据库中是否存在有未过期的key(关键标识)。因为数据库中可以存储每个已上线代理节点的关键标识以及运行失效时间(可称之为过期时间);若该数据库中不存在带有未过期的key,则可说明该代理节点1是第一个上线的节点,则该代理节点可建立一个空订阅树;而若该数据库中存在一个或多个带有未过期的key,则该代理节点1可确定这些key值对应的代理节点均为健康节点,代理节点1此时可选择任一一个健康节点作为有效节点向其学习订阅树。

步骤53,代理节点1建立空订阅树。

具体的,因为代理节点1为首个上线节点,则该数据库中并不存在带有未过期时间的key,此时代理节点1可建立一个空订阅树。

步骤54,代理节点1注册为健康节点并保持心跳。

具体的,代理节点1在建立完成空订阅树后,可向数据库发起注册请求,数据库可基于该注册请求为其分配一个过期时间(即运行失效时间)。代理节点1可周期性的向数据库申请对该过期时间进行延长更新,由此可向数据库证明自己仍然“保持心跳”(即处于正常运行的状态)。

需要说明的是,若代理节点1在到达过期时间时,仍未向数据库请求对过期时间进行更新,则数据库可将该代理节点1确定为是异常节点(该代理节点1已不具备心跳,无法正常运行),数据库可将该代理节点1从已上线代理节点集群中删除。

步骤55,代理节点1开始从消息队列中消费。

具体的,消息队列(如kafka队列)中存储有各个代理节点发送的订阅信息(因为代理节点1为首个上线的代理节点,所以消息队列中目前未存储有任何订阅信息),代理节点1在注册完成后,可开始从消息队列开始消费(即,按消息队列中订阅信息的时间顺序按序存储各个订阅信息)。因为代理节点1为首个上线的代理节点,此时消息队列中尚未存在任何订阅信息,则代理节点1无需存储订阅信息至订阅树中。

需要说明的是,代理节点1在接收到客户端发送的订阅信息后,可将该订阅信息存储至消息队列中,再从消息队列中按序消费。

步骤56,新节点上线。

具体的,以代理节点2为代理节点1之后的第二个上线节点为例,代理节点2上线时,代理节点1已经完成注册上线。

步骤57,代理节点2从数据库查询健康节点。

具体的,代理节点1可从数据库中查询健康节点,即查询数据库中是否存在有未过期的key(关键标识)。

步骤58,数据库返回代理节点1的信息。

具体的,因为代理节点1已经完成注册上线,若该代理节点1在此时过期时间尚未过期,则可将代理节点1确定为健康节点,可将代理节点1的信息返回至代理节点2。

步骤59,代理节点2向代理节点1请求学习订阅树。

具体的,代理节点2可向代理节点1发送数据拉取请求,以拉取代理节点1本机所存储的订阅树(即请求学习订阅树)。

步骤510,代理节点序列化订阅树。

具体的,代理节点1在接收到数据拉取请求后,可首先拿到互斥锁并加上互斥锁,以暂停从消息队列消费。在暂停消费后,代理节点1可对订阅树进行序列化处理。

需要说明的是,若此时存在除代理节点1以外的健康节点,则这些其他健康节点无需加互斥锁,可继续运行,即继续从消息队列中消费。

步骤511,代理节点1向代理节点2返回序列化后的订阅树。

具体的,代理节点1在序列化完成后,可将序列化后的订阅树返回至代理节点2。

步骤512,代理节点1解互斥锁,继续从消息队列消费。

具体的,代理节点1在序列化完成序列树后,可解开互斥锁,以继续从消息队列消费。可以理解的是,步骤512可与步骤511同时进行,也就是说,代理节点1在完成对订阅树的序列化处理后,可将序列化后的订阅树返回至代理节点2,同时解开互斥锁继续从消息队列消费。

步骤513,代理节点2反序列化得到订阅树。

具体的,代理节点2可将接收到的序列化后的订阅树进行反序列化处理,由此可得到订阅树,代理节点2可将该订阅树存储至本机。

步骤514,代理节点2注册为健康节点并保持心跳。

具体的,代理节点2在存储完成订阅树后,可向数据库发起注册请求,数据库可基于该注册请求为其分配一个过期时间(即运行失效时间)。代理节点2可周期性的向数据库申请对该过期时间进行延长更新,由此可向数据库证明自己仍然“保持心跳”(即处于正常运行的状态)。

需要说明的是,同理,若代理节点2在到达过期时间时,仍未向数据库请求对过期时间进行更新,则数据库可将该代理节点2确定为是异常节点(该代理节点2已不具备心跳,无法正常运行),数据库可将该代理节点2从已上线代理节点集群中删除。应当理解,除代理节点1与代理节点2以外,其他上线节点也同样如此,会周期性的向数据库请求更新过期时间,一旦未及时向数据库发起时间更新请求,则数据库可认为该代理节点为异常节点,会将其删除。

步骤515,代理节点2开始从消息队列消费。

具体的,代理节点2在注册完成后,可从消息队列中开始消费,即从消息队列中按序获取尚未存储至订阅树的订阅信息。

在本申请实施例中,代理节点可以以分布式集群方式部署,每个已上线代理节点可存储有相同的同步订阅信息,同时,本申请可以为每个已上线的代理节点分配一个运行失效时间,并将每个已上线代理节点的关键标识以及每个已上线代理节点的运行失效时间,共同保存于数据库中;通过为每个已上线的代理节点分配运行失效时间,可准确知道每个已上线的代理节点无法运行的时间,且每个已上线的代理节点可不断请求更新运行失效时间来证明自己是正常运行的,由此,在有新的代理节点(已上线代理节点集群中没有的代理节点,如,处于未上线状态的第一代理节点)请求上线时,可遍历数据库,通过数据库中的关键标识以及运行失效时间,可准确查询出在当时(处于请求上线的请求时间时)的已上线代理节点集群中还没失效的已上线代理节点有哪些,请求上线的代理节点可将之作为有效节点,可向其发送数据拉取请求以拉取到有效节点中所存储的同步订阅信息;由于通过运行失效时间可更为准确的确定正常运行的节点有哪些,即可确定有效节点为正常运行节点,则从有效节点获取到的同步订阅信息也会更为准确,那么可以提高新上线代理节点拉取到的同步订阅信息的准确性。同时,当请求上线的代理节点向有效节点拉取同步订阅信息的过程中,已上线代理节点集群中除有效节点以外的剩余代理节点无需像有效节点一样暂停运行,而是继续运行即可,也就是说,在扩展代理节点时,已上线代理节点无需停止运行全部的代理节点,只需暂停运行某个收到数据拉取请求的代理节点即可,可以实现代理节点的动态扩展。综上,本申请可以在实现代理节点动态扩展的同时,提高请求上线的代理节点拉取到的数据的准确率。

进一步地,请参见图6,图6是本申请实施例提供的一种数据处理装置的结构示意图。该数据处理装置可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如该数据处理装置为一个应用软件;该数据处理装置可以用于执行图3所示的方法。如图6所示,该数据处理装置1可以包括:遍历模块11、节点获取模块12、信息拉取模块13、信息存储模块14以及信息发送模块15。

遍历模块11,用于基于上线请求遍历数据库;数据库包括已上线代理节点集合中每个已上线代理节点的关键标识以及关键标识对应的运行失效时间;每个已上线代理节点包括同步订阅信息;

节点获取模块12,用于根据已上线代理节点集合对应的运行失效时间集合与请求时间,在已上线代理节点集合中获取有效节点;

信息拉取模块13,用于在剩余代理节点执行存储目标订阅信息的过程中,从有效节点中同步请求拉取同步订阅信息;剩余代理节点为已上线代理节点集合中除有效节点以外的已上线代理节点;同步订阅信息不包括目标订阅信息;

信息存储模块14,用于存储同步订阅信息,将处于未上线状态的第一代理节点的状态从未上线状态切换为已上线状态;

信息发送模块15,用于处于已上线状态的第一代理节点向数据库发送存储成功提示信息,以使数据库基于存储成功提示信息为处于已上线状态的第一代理节点分配目标运行失效时间,并将处于已上线状态的第一代理节点的目标关键标识以及目标运行失效时间添加至数据库中。

其中,遍历模块11、节点获取模块12、信息拉取模块13、信息存储模块14以及信息发送模块15的具体实现方式,可以参见上述图3所对应实施例中步骤s101-步骤s104的描述,这里将不再进行赘述。

在一个实施例中,同步订阅信息包括订阅树;订阅树用于存储订阅客户端、订阅客户端所订阅的主题信息以及订阅客户端对应的代理节点之间的关联关系;

请参见图6,该数据处理装置1还可以包括:消息转发模块16。

消息转发模块16,用于接收发布客户端针对目标消息的发布请求;发布请求包括目标消息的主题信息;

消息转发模块16,还用于基于发布请求遍历订阅树,在订阅树所存储的代理节点中获取待传输代理节点;待传输代理节点对应的待传输订阅客户端所订阅的订阅主题信息,与目标消息的主题信息相匹配;订阅客户端包括待传输订阅客户端;

消息转发模块16,还用于将目标消息发送至待传输代理节点,以使待传输代理节点将目标消息转发至待传输代理节点对应的待传输订阅客户端。

其中,消息转发模块16的具体实现方式,可以参见上述图3所对应实施例中步骤s104的描述,这里将不再进行赘述。

请参见图6,该数据处理装置1还可以包括:消息检测模块17与步骤执行模块18。

消息检测模块17,用于获取检测规则库;检测规则库中包括异常文本与异常音频;

消息检测模块17,还用于将目标消息与检测规则库中的异常文本、异常音频进行匹配;

消息检测模块17,还用于若目标消息中存在与异常文本相同的文本内容,或存在与异常音频相同的音频内容,则将目标消息确定为违规消息,生成违规提示信息,将违规提示信息发送至目标发布客户端以及待传输代理节点;

步骤执行模块18,用于若目标消息中不存在与异常文本相同的文本内容,且不存在与异常音频相同的音频内容,则执行将目标消息发送至待传输代理节点的步骤。

其中,消息检测模块17与步骤执行模块18的具体实现方式,可以参见上述图3所对应实施例中步骤s104的描述。

请参见图6,该数据处理装置1还可以包括:时间匹配模块19与树构建模块20。

时间匹配模块19,用于将请求时间与已上线代理节点集合对应的运行失效时间集合进行匹配;

树构建模块20,用于若运行失效时间集合中不存在晚于请求时间的运行失效时间,则构建包括根节点的空订阅树;

树构建模块20,还用于若运行失效时间集合中存在晚于请求时间的运行失效时间,则执行根据已上线代理节点集合对应的运行失效时间集合与请求时间,在已上线代理节点集合中获取有效节点的步骤。

其中,时间匹配模块19与树构建模块20的具体实现方式,可以参见上述图3所对应实施例中步骤s102的描述。

请参见图6,节点获取模块12可以包括:候选时间确定单元121与节点获取单元122。

候选时间确定单元121,用于将运行失效时间集合中晚于请求时间的运行失效时间,确定为候选失效时间;

候选时间确定单元121,还用于将候选失效时间所对应的关键标识确定为候选关键标识;

节点获取单元122,用于将候选关键标识对应的已上线代理节点确定为候选代理节点,在候选代理节点中获取有效节点。

其中,候选时间确定单元121与节点获取单元122的具体实现方式,可以参见上述图3所对应实施例中步骤s102中的描述,这里将不再进行赘述。

在一个实施例中,候选代理节点的数量为至少两个;

请参见图6,节点获取单元122可以包括:数量统计子单元1221、节点删除子单元1222以及节点确定子单元1223。

数量统计子单元1221,用于获取至少两个候选代理节点中每个候选代理节点分别对应的候选关键标识,在数据库中,获取每个候选关键标识对应的运行失效时间;

数量统计子单元1221,还用于统计至少两个候选关键标识中每个候选关键标识对应的运行失效时间的数量;

节点删除子单元1222,用于将至少两个候选关键标识中运行失效时间的数量大于或等于数量阈值的候选关键标识确定为错误标识,将错误标识对应的候选代理节点从至少两个候选代理节点中进行删除,得到待选择代理节点;

节点确定子单元1223,用于在待选择代理节点中获取有效节点。

其中,数量统计子单元1221、节点删除子单元1222以及节点确定子单元1223的具体实现方式,可以参见上述图3所对应实施例中步骤s102中的描述,这里将不再进行赘述。

在一个实施例中,节点确定子单元1223,还具体用于获取待选择代理节点对应的网络质量参数;

节点确定子单元1223,还具体用于将网络质量参数中的最大网络质量参数所对应的待选择代理节点,确定为有效节点。

在一个实施例中,目标订阅信息的数量为至少两个;

请参见图6,该数据处理装置1还可以包括:时间获取模块21、排序模块22以及信息存储模块23。

时间获取模块21,用于获取至少两个目标订阅信息中每个目标订阅信息分别对应的订阅时间;

排序模块22,用于将至少两个目标订阅信息按照订阅时间的时间顺序进行排序,得到排序后的目标订阅信息;

信息存储模块23,用于将排序后的目标订阅信息按序存储至订阅树中,得到目标订阅树。

其中,时间获取模块21、排序模块22以及信息存储模块23的具体实现方式,可以参见上述图3所对应实施例中步骤s104中的描述,这里将不再进行赘述。

在一个实施例中,该数据处理装置1还可以包括:序列处理模块24。

序列处理模块24,用于当处于已上线状态的第一代理节点为处于未上线状态的第二代理节点所确定的有效节点时,接收第二代理节点发送的第二数据拉取请求;处于未上线状态的第二代理节点为待上线的代理节点;

序列处理模块24,还用于基于第二数据拉取请求,获取目标订阅树;

序列处理模块24,还用于将目标订阅树进行序列化处理得到序列订阅树;

树发送模块,用于将序列订阅树发送至处于未上线状态的第二代理节点,以使处于未上线状态的第二代理节点将序列订阅树进行反序列化处理,得到目标订阅树,并存储目标订阅树。

其中,序列处理模块24的具体实现方式,可以参见上述图4所对应实施例中步骤s201-步骤s203中的描述,这里将不再进行赘述。

在一个实施例中,序列处理模块24可以包括:模板获取单元241、变量确定单元242以及融合单元243。

模板获取单元241,用于获取序列化处理对应的逻辑代码模板;

变量确定单元242,用于获取目标订阅树中的订阅客户端以及订阅客户端所订阅的订阅主题信息,将订阅客户端以及订阅客户端所订阅的订阅主题信息作为变量;

融合单元243,用于将变量与逻辑代码模板进行融合,得到序列订阅树。

其中,模板获取单元241、变量确定单元242以及融合单元243的具体实现方式,可以参见上述图4所对应实施例中步骤s202中的描述,这里将不再进行赘述。

在一个实施例中,该数据处理装置1还可以包括:时间更新模块25。

时间更新模块25,用于根据请求时间与目标运行失效时间,确定更新时间;

时间更新模块25,还用于当系统时间到达更新时间时,生成时间更新请求,将时间更新请求发送至数据库,以使数据库基于时间更新请求对目标运行失效时间进行更新;更新后的目标运行失效时间晚于目标运行失效时间。

其中,时间更新模块25的具体实现方式,可以参见上述图3所对应实施例中步骤s104中的描述,这里将不再进行赘述。

在一个实施例中,该时间更新模块25可以包括:时长确定单元251与时长运算单元252。

时长确定单元251,用于确定请求时间与目标运行失效时间之间的总时长;

时长运算单元252,用于将总时长与配置时长比例值进行相乘处理,得到运算时长;运算时长小于或等于总时长;

时长运算单元252,还用于将请求时间与运算时长进行相加处理,得到更新时间。

其中,时长确定单元251与时长运算单元252的具体实现方式,可以参见上述图3所对应实施例中步骤s104中的描述,这里将不再进行赘述。

在本申请实施例中,代理节点可以以分布式集群方式部署,每个已上线代理节点可存储有相同的同步订阅信息,同时,本申请可以为每个已上线的代理节点分配一个运行失效时间,并将每个已上线代理节点的关键标识以及每个已上线代理节点的运行失效时间,共同保存于数据库中;通过为每个已上线的代理节点分配运行失效时间,可准确知道每个已上线的代理节点无法运行的时间,且每个已上线的代理节点可不断请求更新运行失效时间来证明自己是正常运行的,由此,在有新的代理节点(已上线代理节点集群中没有的代理节点,如,处于未上线状态的第一代理节点)请求上线时,可遍历数据库,通过数据库中的关键标识以及运行失效时间,可准确查询出在当时(请求上线的请求时刻)的已上线代理节点集群中还没失效的已上线代理节点有哪些,请求上线的代理节点可将之作为有效节点,可向其发送数据拉取请求以拉取到有效节点中所存储的同步订阅信息;由于通过运行失效时间可更为准确的确定正常运行的节点有哪些,即可确定有效节点为正常运行节点,则从有效节点获取到的同步订阅信息也会更为准确,那么可以提高新上线代理节点拉取到的同步订阅信息的准确性。同时,当请求上线的代理节点向有效节点拉取同步订阅信息的过程中,已上线代理节点集群中除有效节点以外的剩余代理节点无需像有效节点一样暂停运行,而是继续运行即可,也就是说,在扩展代理节点时,已上线代理节点无需停止运行全部的代理节点,只需暂停运行某个收到数据拉取请求的代理节点即可,可以实现代理节点的动态扩展。综上,本申请可以在实现代理节点动态扩展的同时,提高请求上线的代理节点拉取到的数据的准确率。

进一步地,请参见图7,图7是本申请实施例提供的一种计算机设备的结构示意图。如图7所示,上述图6所对应实施例中的数据处理装置1可以应用于上述计算机设备1000,上述计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机设备1000还包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(display)、键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图7所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。

在图7所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:

基于上线请求遍历数据库;数据库包括已上线代理节点集合中每个已上线代理节点的关键标识以及关键标识对应的运行失效时间;每个已上线代理节点包括同步订阅信息;

根据已上线代理节点集合对应的运行失效时间集合与请求时间,在已上线代理节点集合中获取有效节点,在剩余代理节点执行存储目标订阅信息的过程中,从有效节点中同步请求拉取同步订阅信息;剩余代理节点为已上线代理节点集合中除有效节点以外的已上线代理节点;同步订阅信息不包括目标订阅信息;

存储同步订阅信息,将处于未上线状态的第一代理节点的状态从未上线状态切换为已上线状态;

处于已上线状态的第一代理节点向数据库发送存储成功提示信息,以使数据库基于存储成功提示信息为处于已上线状态的第一代理节点分配目标运行失效时间,并将处于已上线状态的第一代理节点的目标关键标识以及目标运行失效时间添加至数据库中。

应当理解,本申请实施例中所描述的计算机设备1000可执行前文图3到图4所对应实施例中对该数据处理方法的描述,也可执行前文图6所对应实施例中对该数据处理装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。

此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且上述计算机可读存储介质中存储有前文提及的数据处理的计算机设备1000所执行的计算机程序,且上述计算机程序包括程序指令,当上述处理器执行上述程序指令时,能够执行前文图3到图4所对应实施例中对上述数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。

上述计算机可读存储介质可以是前述任一实施例提供的数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。

本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例中一方面提供的方法。

本申请实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、装置、产品或设备固有的其他步骤单元。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

本申请实施例提供的方法及相关装置是参照本申请实施例提供的方法流程图和/或结构示意图来描述的,具体可由计算机程序指令实现方法流程图和/或结构示意图的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。这些计算机程序指令可提供到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或结构示意一个方框或多个方框中指定的功能的步骤。

以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1