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

一种多节点间事件同步装置

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


一种多节点间事件同步装置

技术领域

本发明属于软件开发技术领域,尤其涉及一种多节点间事件同步装置。

背景技术

在分布式系统中,节点之间的信息同步是非常重要的,以确保系统的一致性和可靠性,以下是一些常见的节点间信息同步机制:

消息传递:节点之间通过消息传递进行信息同步,节点可以通过发送消息来通知其他节点有关状态的变化或事件发生,消息传递可以是同步的(例如请求-响应模式)或异步的(例如发布-订阅模式),具体取决于系统的需求和设计。

广播:广播是一种将信息传递给所有节点的同步机制,当节点发生状态变化或事件发生时,它可以将消息广播给所有其他节点,广播可以通过多播或组播机制来实现,以提高效率和减少网络带宽的使用。

共享日志:共享日志是一种记录节点操作和状态变化的数据结构,所有节点共享同一个日志,当节点发生状态变化时,它将在日志中追加相应的条目,并复制给其他节点,通过共享日志,节点可以按照相同的顺序执行相同的操作,以保持一致性。

上述同步机制中,由于分布式系统的异步性和网络延迟等原因,节点之间的数据同步可能存在延迟或不一致的情况。数据更新的顺序和时间戳可能会因为网络通信延迟或故障而导致不同节点之间的数据不一致,另外,在大规模的分布式系统中,节点数量众多,数据量庞大,信息同步的性能成为一个重要问题,高效地将数据更新传播到所有节点,以及处理大量的同步请求,需要考虑系统的性能和可扩展性。

发明内容

鉴于以上现有技术的不足,发明的目的在于提供一种多节点间事件同步装置,通过分部署缓存系统,MDN节点用于接收缓存的更新请求,并将更新操作同步到其他SDN缓存节点,以保证数据的一致性和高可用性;分布式日志系统,MDN节点负责接收和写入日志消息,然后将日志消息同步到其他SDN节点,以实现日志的集中存储和分发;分布式消息队列系统,MDN节点负责接收和处理消息,并将消息同步到其他的SDN节点,以实现消息的可靠传递和消费。

本发明,提出了一种多节点间事件同步装置,包括MDN节点、EN节点、PackBatchWorker组件、ReplicationWorker组件、SDN节点;

所述EN节点用于推送事件到MDN节点;

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理;

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件;

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点;

所述SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket进行哈希计算生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记。

进一步地,所述MDN节点为协调节点,且MDN节点用于写入事件和同步事件。

进一步地,所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理具体包括步骤:

S1:通过MDN节点接收EN节点推送的事件;

S2:通过Dispatcher处理MDN节点接收的事件,将对应的事件结果放入EventResultBucket,事件则放入AcceptorQueue。

进一步地,所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件具体包括如下步骤:

S3:通过PackBatchWorker组件每隔预设时间将AcceptorQueue中的事件转移至ProcessingQueue对中;

S4:然后从ProcessingQueue对中取出第一个Event,顺序遍历队列直到找到第二个Event,且该Event的入队时间≥预设时间;

S5:将两个Event之间的Event进行打包,生成一个BatchEvent,并放入BatchEventQueue,若当前BatchEvent为此次操作中的最后一个批量事件,则对当前的MDN节点中的EventResultBucket进行哈希计算,并将计算出的哈希值放入该BatchEvent中,并标记该BatchEvent为最后一个批量事件。

进一步地,所述ReplicationWorker组件用于将BatchEvent发送给SDN节点具体包括如下步骤:

S6:通过ReplicationWorker组件在每隔预设时间内将BatchEventQueue中的元素取出,遍历PeerNodes,将BatchEvent发送给其他的SDN节点。

进一步地,所述的SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket通过哈希算法进行计算,生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记具体包括步骤:

S7:通过SDN节点接收MDN节点同步过来的BatchEvent,并将BatchEvent进行拆解;

S8:通过Dispatcher处理不同的Event,然后更新自身的EventResultBucket,若发现当前的BatchEvent为最后一个批量事件,则对自身的EventResultBucket进行哈希计算,并将得到的哈希值和同步过来的哈希值进行对比;

S9:若两个哈希值一致,则标记自身的状态为完成态,若两个哈希值不一致,则标记自身的状态为非法态,并主动从MDN节点中全量拉取EventResultBucket,并标记为完成态。

进一步地,所述S3及S4中,预设时间均为500ms。

进一步地,所述S5中,一个BatchEvent最多包含250个Event。

进一步地,所述S6中,预设时间为30s。

进一步地,所述哈希算法包括MD5算法、CRC算法和MurmurHash算法。

本发明有益效果如下:

1、本发明提出了一种基于队列的增量更新和基于全量哈希值对比的方法,事件按顺序入队列,保证了事件顺序一致性,而全量哈希值比对,则保证了全量数据的一致性,哈希对比是一种比较重量级的操作,在分布式系统中具有广泛的应用。

2、本发明提出了一种三级队列,第一级队列负责事件的写入操作,可以实现无阻塞写入,从而提高事件的写入速率;第二级队列,主要负责事件的打包及合并,在不影响一级队列写入的情况下,通过合并,减少事件同步的频率;第三级队列,主要负责事件在节点间的同步操作,不影响事件的写入和打包处理,同时所有操作都是内存操作,因此具有较高的性能。

3、本发明通过设置PackBatchWorker以及ReplicationWorker的轮询时间可动态设置,可针对不同的业务场景,设置不同的事件间隔,从而提高时效性。

4、本发明通过设置数据恢复流程,当MDN接收到Event时,首先进行日志落盘然后再对Event进行处理,当服务进行重启,通过日志回放,进行数据恢复,从而保证数据不丢失,在进行日志落盘时,采用的是MappedFile技术,通过文件内存映射机制,日志数据先写入到内存,再从内存刷新到磁盘,因此具有较高的写入速率。

附图说明

附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1为本发明实施例的基于三级队列的事件处理流程图;

图2为本发明实施例的基于增量更新和全量哈希值对比处理流程图;

图3为本发明实施例的三级队列示意图;

图4为本发明实施例的基于日志同步落盘的流程图。

具体实施方式

为了使本领域的人员更好地理解本发明实施例中的技术方案,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。应该理解,这些描述只是示例性的,并非用于限定本发明的范围。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明公开的概念。

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的方法和系统的例子。

本发明提出了一种多节点间事件同步装置,用于解决大量消息同步引发的网络请求风暴,以及数据一致性和性能的问题。

为了辅助人员理解本发明,现对本文中出现的名词进行解释:

EN(Event Node)事件触发节点,并将事件发送给MDN;

MDN(Master Data Node)负责事件的写入操作,并将事件同步给其他的SDN;

SDN(SLAVE Data Node)接收MDN节点同步过来事件,并对外提供事件的读操作;

Event,各种类型的消息,事件;

BatchEvent,多个事件的集合;

PeerNodes,MDN中用于存放其他SDN节点的数据结构;

EventResultBucket,MDN和SDN节点中用于存放各种事件处理结果的数据结构;

Dispatcher,分发器,MDN和SDN中用于处理各种事件的组件;

AcceptorQueue,MDN中用于接收各种事件的队列;

ProcessingQueue,MDN中用于二次处理事件的队列;

BatchEventQueue,MDN节点中用于存放批量事件的队列;

PackBatchWorker,MDN节点中用于将AcceptorQueue队列中事件转移至ProcessingQueue,并将Event打包成BatchEvent,并转移至BatchEventQueue的组件;

ReplicationWorker,MDN中用于将BatchEventQueue队列中的BatchEvent同步给其它SDN的组件。

另外,在本发明中,提出了一种多节点间事件同步装置,为了进行解释,如图1-图4所示,提供如下实施方式:

实施方式1

一种多节点间事件同步装置,其特征在于,包括MDN节点、EN节点、PackBatchWorker组件、ReplicationWorker组件、SDN节点

所述EN节点用于推送事件到MDN节点;

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理;

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件;

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点;

所述SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket进行哈希计算生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记。

实施方式2

一种多节点间事件同步装置,其特征在于,包括MDN节点、EN节点、PackBatchWorker组件、ReplicationWorker组件、SDN节点

所述EN节点用于推送事件到MDN节点;

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理;

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件;

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点;

所述SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket进行哈希计算生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记。

所述MDN节点为协调节点,且MDN节点用于写入事件和同步事件。

实施方式3

一种多节点间事件同步装置,其特征在于,包括MDN节点、EN节点、PackBatchWorker组件、ReplicationWorker组件、SDN节点

所述EN节点用于推送事件到MDN节点;

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理;

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件;

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点;

所述SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket进行哈希计算生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记。

所述MDN节点为协调节点,且MDN节点用于写入事件和同步事件。

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理具体包括步骤:

S1:通过MDN节点接收EN节点推送的事件;

S2:通过Dispatcher处理MDN节点接收的事件,将对应的事件结果放入EventResultBucket,事件则放入AcceptorQueue。

实施方式4

一种多节点间事件同步装置,其特征在于,包括MDN节点、EN节点、PackBatchWorker组件、ReplicationWorker组件、SDN节点

所述EN节点用于推送事件到MDN节点;

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理;

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件;

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点;

所述SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket进行哈希计算生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记。

所述MDN节点为协调节点,且MDN节点用于写入事件和同步事件。

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理具体包括步骤:

S1:通过MDN节点接收EN节点推送的事件;

S2:通过Dispatcher处理MDN节点接收的事件,将对应的事件结果放入EventResultBucket,事件则放入AcceptorQueue。

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件具体包括如下步骤:

S3:通过PackBatchWorker组件每隔预设时间将AcceptorQueue中的事件转移至ProcessingQueue对中;

S4:然后从ProcessingQueue对中取出第一个Event,顺序遍历队列直到找到第二个Event,且该Event的入队时间≥预设时间;

S5:将两个Event之间的Event进行打包,生成一个BatchEvent,并放入BatchEventQueue,若当前BatchEvent为此次操作中的最后一个批量事件,则对当前的MDN节点中的EventResultBucket进行哈希计算,并将计算出的哈希值放入该BatchEvent中,并标记该BatchEvent为最后一个批量事件。

实施方式5

一种多节点间事件同步装置,其特征在于,包括MDN节点、EN节点、PackBatchWorker组件、ReplicationWorker组件、SDN节点

所述EN节点用于推送事件到MDN节点;

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理;

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件;

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点;

所述SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket进行哈希计算生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记。

所述MDN节点为协调节点,且MDN节点用于写入事件和同步事件。

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理具体包括步骤:

S1:通过MDN节点接收EN节点推送的事件;

S2:通过Dispatcher处理MDN节点接收的事件,将对应的事件结果放入EventResultBucket,事件则放入AcceptorQueue。

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件具体包括如下步骤:

S3:通过PackBatchWorker组件每隔预设时间将AcceptorQueue中的事件转移至ProcessingQueue对中;

S4:然后从ProcessingQueue对中取出第一个Event,顺序遍历队列直到找到第二个Event,且该Event的入队时间≥预设时间;

S5:将两个Event之间的Event进行打包,生成一个BatchEvent,并放入BatchEventQueue,若当前BatchEvent为此次操作中的最后一个批量事件,则对当前的MDN节点中的EventResultBucket进行哈希计算,并将计算出的哈希值放入该BatchEvent中,并标记该BatchEvent为最后一个批量事件。

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点具体包括如下步骤:

S6:通过ReplicationWorker组件在每隔预设时间内将BatchEventQueue中的元素取出,遍历PeerNodes,将BatchEvent发送给其他的SDN节点。

实施方式6

一种多节点间事件同步装置,其特征在于,包括MDN节点、EN节点、PackBatchWorker组件、ReplicationWorker组件、SDN节点

所述EN节点用于推送事件到MDN节点;

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理;

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件;

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点;

所述SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket进行哈希计算生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记。

所述MDN节点为协调节点,且MDN节点用于写入事件和同步事件。

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理具体包括步骤:

S1:通过MDN节点接收EN节点推送的事件;

S2:通过Dispatcher处理MDN节点接收的事件,将对应的事件结果放入EventResultBucket,事件则放入AcceptorQueue。

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件具体包括如下步骤:

S3:通过PackBatchWorker组件每隔预设时间将AcceptorQueue中的事件转移至ProcessingQueue对中;

S4:然后从ProcessingQueue对中取出第一个Event,顺序遍历队列直到找到第二个Event,且该Event的入队时间≥预设时间;

S5:将两个Event之间的Event进行打包,生成一个BatchEvent,并放入BatchEventQueue,若当前BatchEvent为此次操作中的最后一个批量事件,则对当前的MDN节点中的EventResultBucket进行哈希计算,并将计算出的哈希值放入该BatchEvent中,并标记该BatchEvent为最后一个批量事件。

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点具体包括如下步骤:

S6:通过ReplicationWorker组件在每隔预设时间内将BatchEventQueue中的元素取出,遍历PeerNodes,将BatchEvent发送给其他的SDN节点。

所述的SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket通过哈希算法进行计算,生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记具体包括步骤:

S7:通过SDN节点接收MDN节点同步过来的BatchEvent,并将BatchEvent进行拆解;

S8:通过Dispatcher处理不同的Event,然后更新自身的EventResultBucket,若发现当前的BatchEvent为最后一个批量事件,则对自身的EventResultBucket进行哈希计算,并将得到的哈希值和同步过来的哈希值进行对比;

S9:若两个哈希值一致,则标记自身的状态为完成态,若两个哈希值不一致,则标记自身的状态为非法态,并主动从MDN节点中全量拉取EventResultBucket,并标记为完成态。

实施方式7

一种多节点间事件同步装置,其特征在于,包括MDN节点、EN节点、PackBatchWorker组件、ReplicationWorker组件、SDN节点

所述EN节点用于推送事件到MDN节点;

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理;

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件;

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点;

所述SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket进行哈希计算生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记。

所述MDN节点为协调节点,且MDN节点用于写入事件和同步事件。

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理具体包括步骤:

S1:通过MDN节点接收EN节点推送的事件;

S2:通过Dispatcher处理MDN节点接收的事件,将对应的事件结果放入EventResultBucket,事件则放入AcceptorQueue。

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件具体包括如下步骤:

S3:通过PackBatchWorker组件每隔预设时间将AcceptorQueue中的事件转移至ProcessingQueue对中;

S4:然后从ProcessingQueue对中取出第一个Event,顺序遍历队列直到找到第二个Event,且该Event的入队时间≥预设时间;

S5:将两个Event之间的Event进行打包,生成一个BatchEvent,并放入BatchEventQueue,若当前BatchEvent为此次操作中的最后一个批量事件,则对当前的MDN节点中的EventResultBucket进行哈希计算,并将计算出的哈希值放入该BatchEvent中,并标记该BatchEvent为最后一个批量事件。

所述S3及S4中,预设时间均为500ms。

实施方式8

一种多节点间事件同步装置,其特征在于,包括MDN节点、EN节点、PackBatchWorker组件、ReplicationWorker组件、SDN节点

所述EN节点用于推送事件到MDN节点;

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理;

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件;

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点;

所述SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket进行哈希计算生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记。

所述MDN节点为协调节点,且MDN节点用于写入事件和同步事件。

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理具体包括步骤:

S1:通过MDN节点接收EN节点推送的事件;

S2:通过Dispatcher处理MDN节点接收的事件,将对应的事件结果放入EventResultBucket,事件则放入AcceptorQueue。

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件具体包括如下步骤:

S3:通过PackBatchWorker组件每隔预设时间将AcceptorQueue中的事件转移至ProcessingQueue对中;

S4:然后从ProcessingQueue对中取出第一个Event,顺序遍历队列直到找到第二个Event,且该Event的入队时间≥预设时间;

S5:将两个Event之间的Event进行打包,生成一个BatchEvent,并放入BatchEventQueue,若当前BatchEvent为此次操作中的最后一个批量事件,则对当前的MDN节点中的EventResultBucket进行哈希计算,并将计算出的哈希值放入该BatchEvent中,并标记该BatchEvent为最后一个批量事件。

所述S5中,一个BatchEvent最多包含250个Event。

实施方式9

一种多节点间事件同步装置,其特征在于,包括MDN节点、EN节点、PackBatchWorker组件、ReplicationWorker组件、SDN节点

所述EN节点用于推送事件到MDN节点;

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理;

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件;

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点;

所述SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket进行哈希计算生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记。

所述MDN节点为协调节点,且MDN节点用于写入事件和同步事件。

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理具体包括步骤:

S1:通过MDN节点接收EN节点推送的事件;

S2:通过Dispatcher处理MDN节点接收的事件,将对应的事件结果放入EventResultBucket,事件则放入AcceptorQueue。

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件具体包括如下步骤:

S3:通过PackBatchWorker组件每隔预设时间将AcceptorQueue中的事件转移至ProcessingQueue对中;

S4:然后从ProcessingQueue对中取出第一个Event,顺序遍历队列直到找到第二个Event,且该Event的入队时间≥预设时间;

S5:将两个Event之间的Event进行打包,生成一个BatchEvent,并放入BatchEventQueue,若当前BatchEvent为此次操作中的最后一个批量事件,则对当前的MDN节点中的EventResultBucket进行哈希计算,并将计算出的哈希值放入该BatchEvent中,并标记该BatchEvent为最后一个批量事件。

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点具体包括如下步骤:

S6:通过ReplicationWorker组件在每隔预设时间内将BatchEventQueue中的元素取出,遍历PeerNodes,将BatchEvent发送给其他的SDN节点。

所述S6中,预设时间为30s。

实施方式10

一种多节点间事件同步装置,其特征在于,包括MDN节点、EN节点、PackBatchWorker组件、ReplicationWorker组件、SDN节点

所述EN节点用于推送事件到MDN节点;

所述MDN节点用于通过Dispatcher组件对接收到的事件进行处理;

所述PackBatchWorker组件用于转移事件,生成BatchEvent,并标记一个最后批量事件;

所述ReplicationWorker组件用于将BatchEvent发送给SDN节点;

所述SDN节点用于接收MDN节点同步的BatchEvent,并拆解BatchEvent,通过Dispatcher处理Event,更新自身的EventResultBucket,以当前BatchEvent是最后一个批量事件为前提,对自身EventResultBucket进行哈希计算生产哈希值,与同步得来的哈希值对比,并对自身进行状态标记。

所述哈希算法包括MD5算法、CRC算法和MurmurHash算法。

综上,为了对本发明进行进一步的解释,提供另一实施方式:

实施方式11

MDN为协调节点,负责事件的写入和同步操作。

EN推送各种事件到MDN,MDN收到事件之后,使用Dispatcher进行处理之后,把对应的事件结果放入EventResultBucket,事件则放入AcceptorQueue。

PackBatchWorker组件每隔500ms(轮询时间可动态配置)将AcceptorQueue中的事件转移至ProcessingQueue队里,然后从ProcessingQueue取出第一个Event,顺序遍历队列直到找到第二个Event,且该Event的入队时间,要比第一个Event的入队时间大于等于500ms,将这两个Event之间的Event进行打包,生成一个BatchEvent,且一个BatchEvent最多包含250个Event,并放入BatchEventQueue。如果当前BatchEvent是此次操作中的最后一个批量事件,则对当前的MDN中的EventResultBucket进行哈希,并将计算出的哈希值放入该BatchEvent中,并标记该BatchEvent为最后一个批量事件。

ReplicationWorker每隔30秒(轮询时间可动态配置)将BatchEventQueue中的元素取出,遍历PeerNodes,将BatchEvent发送给其他的SDN节点。

SDN节点收到MDN节点同步过来的BatchEvent,并将BatchEvent进行拆解,使用Dispatcher处理不同的Event,然后更新自己的EventResultBucket。如果发现当前的BatchEvent是最后一个批量事件,则对自己的EventResultBucket进行哈希,并将得到的哈希值和同步过来的哈希值进行对比,两者一致,则标记自己的状态为完成态,如果两者不一致,则标记自己的状态为非法态,并主动从MDN节点,全量拉取EventResultBucket。并标记为完成态。

基于同一发明构思,本发明另一实施例提供一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信,

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现本发明的多节点间事件同步装置。

上述终端提到的通信总线可以是外设部件互联标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于上述终端与其他设备之间的通信。存储器可以包括随机存取存储器(Random AccessMemory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储系统。

上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

此外,为实现上述目的,本发明的实施例还提出了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时实现本发明实施例的多节点间事件同步装置。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、系统、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用车辆(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的系统。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令系统的制造品,该指令系统实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

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

最后应说明的是,以上实施例仅用以说明本发明实施例的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

相关技术
  • 一种开关柜局部放电多节点监测系统同步化装置
  • 一种多节点服务器的节点供电方法及装置
  • 一种多节点间的数据同步方法、系统、设备及存储介质
  • 一种实现多节点间信息同步的方法
技术分类

06120116587316