CN115052006B - 一种基于领导节点的数据同步方法及系统 - Google Patents
一种基于领导节点的数据同步方法及系统 Download PDFInfo
- Publication number
- CN115052006B CN115052006B CN202210966079.8A CN202210966079A CN115052006B CN 115052006 B CN115052006 B CN 115052006B CN 202210966079 A CN202210966079 A CN 202210966079A CN 115052006 B CN115052006 B CN 115052006B
- Authority
- CN
- China
- Prior art keywords
- data
- node
- synchronization
- new
- group
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
Abstract
本发明提供一种基于领导节点的数据同步方法及系统,包括:步骤S1,建立基于领导节点的数据同步系统模型,对其同步组的所有同步节点按顺序递增编号,确定所述同步节点的身份;步骤S2,通过预设规则对数据以及网络分组进行命名;步骤S3,在所述数据集状态中,仅将数据名称的节点前缀及其最新的序列号作为同步状态进行编码;步骤S4,判断数据的同步需求,根据所述同步需求进行相应的数据同步;步骤S5,通过判断同一节点前缀下的数据序列号是否为上一次接收到的序列号基础上顺序加一,若否则进行数据恢复。本发明能够有效解决现有技术中网络流量大和数据恢复效率低的问题,有效地减小了数据同步延迟,并高效地实现了数据的同步和恢复。
Description
技术领域
本发明涉及一种数据同步方法,尤其涉及一种基于领导节点的数据同步方法,并涉及采用了该基于领导节点的数据同步方法的数据同步系统。
背景技术
当今互联网广泛使用TCP/IP网络架构,其通信模型是两台机器之间的对话,一台希望使用资源,另一台提供资源以供访问。因此,IP数据包中含有两个地址标识符,一个用于源主机,一个用于目标主机,Internet上的几乎所有流量都由主机对之间的。人们看重Internet的资源,但资源的交流仍然取决于主机所在的地点,这导致了资源可用性和位置依赖性等诸多问题。数据同步作为网络传输的关键问题,也面临网络开销大、传输效率低等挑战。
多标识网络(Multi-Identifier Network,简称MIN)与传统IP网络兼容,支持渐进式部署,允许多种标识并行共存在网络层中,包括身份、内容、服务、车辆、地理信息和IP地址等,具有高度的可扩展性。MIN通过区块链验证数据生产者和数据消费者的身份,达成共识后将相关的归属信息和操作信息记录在区块链上,使数据不可篡改和可追溯,通过多标识路由器解析标识和转发网络分组。在MIN中,数据生产者发布的数据以唯一的层次化名称命名,数据消费者以包含数据名称的兴趣包去请求数据,网络层使用数据的名称来转发数据消费者的兴趣包,并缓存数据生产者的数据包以备其他数据消费者的请求。MIN基于兴趣包和数据包交换进行可靠的多方通信,为分布式应用程序高效的数据同步提供了基础。
现有的数据同步技术方案中存在局限性,具体如下所述。
第一,同步网络内兴趣包数量多,占用网络开销大,路由可扩展性差。现有数据同步方案普遍采用的“长期兴趣包”机制,导致同步网络中产生大量的Sync Interest,SyncInterest指的是同步兴趣包,即网络内每个同步节点都定期向其他所有节点发送SyncInterest,导致同步网络中会产生大量的Sync Interest。同时未被回复的生命周期未完成的Sync Interest会一直存在于路由器中,占用网络开销,尤其是当网络中产生的新数据较少时,这也对网络中的路由可扩展性提出了挑战,对于托管许多同步组的大型网络通常是不可行的。
第二,容易发生网络状态发散,导致同步摘要无法识别,增加数据同步延迟。如果多个数据生产者节点同时发布新数据,则会生成多个Sync Reply以响应同一个数据消费者节点的Sync Interest。Sync Reply指的是同步回复数据包,但是,当多个回复同一个SyncInterest的Sync Reply到达路由器时,路由器用最先到达的Sync Reply满足SyncInterest后,将删除该Sync Interest的信息,导致后续到达的Sync Reply没有与之匹配的Sync Interest,因此数据消费者节点将不能收到后续的Sync Reply,进而不能获取对应的新数据。当不同的节点收到不同的数据元素时,计算多个不同的状态摘要,导致同步网络状态发散,使节点难以互相识别对方的摘要,增加数据同步延迟。
第三,数据恢复机制效率低。现有数据同步方案使用三种方式进行数据恢复:第一种,检查到过期摘要的所有节点都会回复落后节点,落后节点仅能收到其中的一个回复,回复中仅包含缺失的数据名称,需要落后节点再发送相应的数据包去获取,数据恢复的效率低。第二种,当网络发散导致节点不能互相识别摘要时,节点将包含“排除过滤器”的SyncInterest重新发送给其他节点,“排除过滤器”中包含过期的摘要。但是如果节点已经发生了多个更改,“排除过滤器”也不能识别状态差异。第三种,重复发送数据包,直至发送至最大次数,效率低。
现有技术的其中一种技术方案中,采用的是ChronoSync协议,也称ChronoSync同步协议。ChronoSync协议是NDN项目发布的经典数据同步协议。在ChronoSync协议中,ChronoSync的命名空间用摘要树表示,摘要树是一个两级的树结构,叶子节点储存数据名称的哈希值,根节点储存所有叶子节点的递归哈希值。这种方式下,同步树只需存储最新的数据名称,即可代表同步网络内已同步的所有数据。因为根节点的值是对所有节点的递归哈希值,所以根哈希代表了整个数据集的状态摘要。但是ChronoSync使用“长期兴趣包”机制,同步网络内的每个节点定期向同步组中的其他节点多播包含其状态摘要的同步兴趣包(Sync Interest),其他节点收到后,将Sync Interest中的状态摘要与本地的状态摘要进行比较:如果本地的状态摘要更新,则返回同步回复(Sync Reply),Sync Reply中包含本地产生的新数据名称;如果两者的状态摘要相同,则将Sync Interest挂起,一旦产生新数据,将立即将包含新数据名称的Sync Reply返回。
此外,每个ChronoSync节点都维护有限的摘要日志,记录每次的同步状态更新。如果某个节点在同步过程中落后于其他节点,向其他节点发送的Sync Interest中将包含过期的状态摘要,其他节点检查到摘要过期后,将根据摘要日志,返回落后节点缺失的数据名称,再由落后节点向对应的节点获取数据。然而,检查到过期摘要的所有节点都会回复落后节点,落后节点仅能收到其中的一个回复。
这种采用ChronoSync协议的现有技术中,存在如下的缺点:ChronoSync协议的每个同步节点都定期向其他所有节点发送Sync Interest,导致同步网络中会产生大量的Sync Interest,同时未被回复的生命周期未完成的Sync Interest会一直存在于路由器中,占用网络开销。如果多个数据生产者节点同时发布新数据,不同的节点会收到不同的数据元素,计算多个不同的状态摘要,导致同步网络状态发散,使节点难以互相识别对方的摘要,增加数据同步延迟。当网络发散导致节点不能互相识别摘要时,节点将包含“排除过滤器”的Sync Interest重新发送给其他节点,“排除过滤器”中包含过期的摘要。但是如果节点已经发生了多个更改,“排除过滤器”也不能识别状态差异,使ChronoSync的数据恢复效率低。
现有技术的另一种技术方案中,采用的是PSync协议。PSync协议是NDN项目发布的具有代表性的数据同步协议。PSync协议旨在支持部分数据集同步,允许消费者订阅数据流的子集,其中数据流是公共名称前缀下的数据元素序列。PSync协议与ChronoSync协议的数据命名方式相同。
PSync协议的数据同步机制包含两个阶段:1. 初始化阶段:数据生产者向数据消费者发送当前的IBF,IBF指的是可逆布鲁姆过滤器,即Invertible Bloom Filter;数据消费者在本地保存数据生产者的IBF,并根据IBF选择感兴趣的数据流,向数据生产者发送订阅列表,其中包含其感兴趣的数据流前缀。当每个节点的订阅列表中都包含所有的流前缀时,实现全部数据同步。2. 同步阶段:与ChronoSync协议相同,PSync协议也采用“长期兴趣包”机制,数据消费者定期向数据生产者发送Sync Interest,包含本地的IBF副本和最新的订阅列表。数据生产者节点收到后,将自己的新IBF减去Sync Interest中的旧IBF,提取新数据包的流前缀,检查其中是否有数据消费者订阅的流前缀,若有,则向数据消费者返回Sync Reply,包含数据生产者最新的IBF和消费者订阅数据流的新数据名称;若没有,则将Sync Interest挂起,一旦产生就会向数据消费者返回Sync Reply。数据消费者收到SyncReply后,向数据生产者发送兴趣包获取新数据。
这种采用PSync协议的现有技术中,存在如下的缺点:PSync协议的“长期兴趣包”机制导致同步网络中产生大量的同步兴趣包。占用网络开销大,而且容易导致网络状态发散。虽然PSync协议用IBF表示命名空间,不会发生数据状态不能识别的情况,但是,当发生网络状态发散后,PSync协议仍然需要数据生产者再次多播以让所有节点实现同步,甚至迭代多次才能消除状态发散,数据恢复的效率低。此外,由于PSync协议的每个同步兴趣包和同步回复都需要携带IBF和订阅列表,这会使兴趣名称的大小膨胀到数百字节,占用网络开销。
现有技术的再一种技术方案中,李挥、杨柳、马军锋、王锋、蒋傅礼提出了可扩展的NDN分布式数据同步协议,简称GroupSync,相关研究成果发表在第三届信息技术与计算机应用学术会议暨能源区块链分委会论坛会议(International Academic ExchangeConference on Science and Technology Innovation, IAECST 2021)。GroupSync采用分组同步的思想,在每个同步组内选择中心节点对同步组进行管理和数据同步,适合于在NDN在移动场景和IoT场景下的扩展应用。
GroupSync采用ChronoSync协议和Psync协议的命名方法,每个同步节点用Dataset State Digest Tree表示同步内容的命名空间状态,使用摘要树将同步内容的状态压缩为加密摘要。摘要树根节点的每个子节点都持有一个加密摘要。生成摘要树的过程如下,对每个生产者节点的状态(节点的名称前缀和其产生数据的最新序列号)应用 SHA-256 哈希函数计算得出其摘要,对根节点的所有子节点递归应用相同的哈希函数产生代表整个同步组的数据集状态摘要。每当有新数据产生,Dataset State Digest Tree的相应分支就会重新计算,以始终保持在最新状态。GroupSync的每个节点都有Dataset StateDigest Log结构,包含所有节点同步内容变化的日志记录。此外,GroupSync用Group State表示同步组当前的成员状态信息。
这种采用GroupSync的现有技术中,同样存在如下的缺点:采用摘要树的结构表示命名空间,容易在网络状态发散时产生摘要不易识别的情况。GroupSync的每个节点都有Dataset State Digest Log结构,随着同步网络中产生的数据逐渐增多,日志记录也随之增加,会产生较大的空间开销。GroupSync的Leader节点只有兴趣包转发功能,没有兴趣包聚合功能,同步网络中仍会产生较大的流量开销。
发明内容
本发明所要解决的技术问题是需要提供一种能够减小网络流量,并提高数据恢复机制的高效性能的数据同步方法,在此基础上,还进一步提供其数据同步系统,旨在解决现有技术中数据同步协议网络流量大以及数据恢复效率低的问题,达到减小数据同步延迟,满足MIN的分布式应用程序的高效数据同步需求的技术效果。
对此,本发明提供一种基于领导节点的数据同步方法,包括以下步骤:
步骤S1,建立基于领导节点的数据同步系统模型,包括一个或多个同步组,每个同步组包括一个或多个同步节点,对同步组的所有同步节点按顺序递增编号,确定所述同步节点的身份,所述同步节点的身份包括Leader节点、Assistant节点和Member节点,所述Leader节点为领导节点,所述Assistant节点为本同步组Leader节点的备用节点,所述Member节点为成员节点;所述同步节点的数据结构包括同步数据集、数据集状态以及组成员状态;
步骤S2,通过预设规则对数据以及网络分组进行命名,其中,数据的名称命名规则为节点前缀和顺序递增的序列号;网络分组包括发布新数据兴趣包、通知新数据兴趣包、获取新数据兴趣包、节点数据包、数据恢复兴趣包、新节点加入请求兴趣包、新节点加入通知兴趣包、新Leader节点通知兴趣包以及新Assistant节点通知兴趣包;
步骤S3,在所述数据集状态中,仅将数据名称的节点前缀及其最新的序列号作为同步状态进行编码;
步骤S4,判断数据的同步需求,根据所述同步需求进行相应的数据同步;
步骤S5,通过判断同一节点前缀下的数据序列号是否为上一次接收到的序列号基础上顺序加一,若是则返回等待下一次的数据序列号,若否则进行数据恢复。
本发明的进一步改进在于,所述步骤S1中,所述同步数据集用于存储多标识网络中本同步组的同步内容;所述数据集状态包括本同步节点已知的同步组中所有已发布的最新的数据名称;所述组成员状态用于存储同步组当前的成员状态信息,包含组内所有成员的编号和节点名称,并且只有成员名单内的同步节点具有参与同步组内数据同步的权限。
本发明的进一步改进在于,所述步骤S2中,所述节点前缀为与通过节点相对应的唯一的可路由前缀,所述顺序递增的序列号为在产生新数据时将数据的序列号在上一次数据基础上递增1所得到的序列号。
本发明的进一步改进在于,所述步骤S2中,通过预设规则对所述网络分组进行命名的过程包括:
步骤S201, 当数据生产者节点产生新数据时,会向同步网络内的Leader节点发送所述发布新数据兴趣包,所述发布新数据兴趣包的命名为/min/producer-name/mingroupsync/publish/app-name/seq#,其中,/min 表示多标识网络,/producer-name表示发布新数据的节点名称,/mingroupsync/publish表示基于领导节点的数据同步系统的协议发布新数据,/app-name表示产生的数据的应用程序名称,/seq#表示产生的新的数据序列号;数据生产者节点通过私钥对所述发布新数据兴趣包进行签名;
步骤S202,当Leader节点收到所述发布新数据兴趣包,将数据生产者节点前缀及数据序列号在所述数据集状态中编码,然后所述Leader节点向除发布数据的节点之外的所有节点发布所述通知新数据兴趣包,并命名为/min/leader-name/mingroupsync/notify/<new-IBF>,其中,/leader-name表示本数据同步组的Leader节点的名称,mingroupsync 表示基于领导节点的数据同步,/notify表示通知新数据产生,/<new-IBF>表示Leader节点编码发布新数据的节点前缀及数据序列号的数据集状态;所述Leader节点通过私钥对所述通知新数据兴趣包进行签名;
步骤S203,当数据消费者节点收到所述通知新数据兴趣包后,将向发布新数据的节点请求获取新数据,发送所述获取新数据兴趣包,并命名为/min/consumer-name/mingroupsync/request/producer-name/app-name/seq#,其中,/consumer-name表示请求新数据的节点名称,/request表示获取新数据,/producer-name/app-name/seq#代表所要获取数据的信息;所述数据消费者节点通过私钥对所述获取新数据兴趣包进行签名;
步骤S204,当数据生产者节点收到所述获取新数据兴趣包后,将向数据消费者节点发送所述节点数据包,并命名为/min/producer-name/mingroupsync/app-name/seq#,其中/producer-name表示发布新数据节点的名称,/app-name表示产生新数据的应用名称,所述节点数据包的内容为该节点产生的新数据;数据生产者节点通过私钥对所述节点数据包进行签名;
步骤S205,当多标识网络内的同步节点由于网络丢包或连接异常导致数据缺失时,该节点将发送所述数据恢复兴趣包给本同步组的Leader节点,并通过私钥对其签名,所述数据恢复兴趣包命名为/min/node-name/mingroupsync/recover/<old-IBF>,其中,/node-name表示节点名称,/recover表示请求恢复数据,/<old-IBF>表示请求恢复数据的节点的数据集状态;
步骤S206,当同步组中有新的节点加入时,该节点将发送所述新节点加入请求兴趣包给本同步组的Leader节点,并通过私钥签名,命名为/min/node-name/mingroupsync/join,其中,/node-name表示节点名称,/join表示请求加入同步组;当Leader节点验证签名通过后,同意该节点加入,将向同步组的所有节点发送所述新节点加入通知兴趣包,命名为/min/leader-name/mingroupsync/newmember/node-name,其中,/newmember代表本同步组有新的节点加入;
步骤S207,当同步组中的Leader节点退出同步组时,则由Assistant节点作为本同步组的新任Leader节点,其下一个序号的节点作为本同步组的Assistant节点;新任Leader节点将向同步组中所有节点发送所述新Leader节点通知兴趣包,并通过私钥签名,命名为/min/node-name/mingroupsync/newleader,其中,/newleader表示新Leader节点通知。
本发明的进一步改进在于,所述步骤S4中,当同步组内的同步节点应用程序产生新数据时,所述同步需求为组内数据同步,对应的组内数据同步过程为:
步骤A1,节点将新数据存储在本节点的同步数据集中,更新该节点的数据集状态,同时向该节点所在同步组的Leader节点发送所述发布新数据兴趣包;
步骤A2,所述同步组的Leader节点收到所述发布新数据兴趣包后,验证是否在组成员状态中且签名有效,直到验证通过则向数据生产者节点返回所述获取新数据兴趣包,然后将所收到的所有数据生产者的前缀及其数据序号编码至用于通知的数据集状态中,在此过程中,如果Leader节点也产生新数据,将与数据生产者的前缀及其数据序号一起编码至用于通知的数据集状态中;
步骤A3,所述Leader节点向本同步组中的Member节点发送所述通知新数据兴趣包,将收到的所有新数据的信息发送到本同步组中的其余节点;
步骤A4,本同步组中的其余节点收到所述通知新数据兴趣包后,进行签名验证,解码所述通知新数据兴趣包中的数据集状态,获取发布新数据的节点前缀及序列号,然后向对应的节点发送所述获取新数据兴趣包去获取数据;
步骤A5,发布新数据的节点收到所述获取新数据兴趣包后,验证是否在组成员状态中且签名有效,直到验证通过则按原路径返回所述节点数据包;
步骤A6,所有节点在收到所述节点数据包后,验证是否在组成员状态中且签名有效,直到验证通过,则将所述节点数据包中包含的新数据储存在本节点的同步数据集中,并更新本节点的数据集状态。
本发明的进一步改进在于,所述步骤S4中,当与同步组关联的其他同步组产生新数据时,所述同步需求为组间数据同步,对应的组间数据同步过程为:
步骤B1,各个同步组初始化一份同步白名单,所述同步白名单包括与本同步组相关联的同步组的名称;
步骤B2,Leader节点收到来自其他同步组的所述发布新数据兴趣包后,先验证其名称是否在本同步组的所述同步白名单内且签名有效,如果不在所述同步白名单内或签名无效,将废弃收到的所述发布新数据兴趣包,否则将返回确认收到回复,并解码其中包含的数据集状态,将收到的所有新数据的信息编码到一个新的数据集状态中,向同步组内的其他节点发送本同步组的通知新数据兴趣包;
步骤B3,数据消费者节点收到通知新数据兴趣包后,进行签名验证,解码其数据前缀及序列号信息,向相应的数据生产者节点发送所述获取新数据兴趣包,所述数据生产者节点收到后,将先验证其所在同步组的名称是否在本同步组的同步白名单内,并进行签名验证,如果不在同步白名单内或签名无效,将废弃收到的获取新数据兴趣包,否则将返回节点数据包;
步骤B4,请求数据的节点收到所述节点数据包后,验证同步白名单及签名,如果在白名单中且签名有效,验证同一节点前缀的数据序列号是否顺序增1,若不是则进入数据恢复流程,若是则将其中的数据存储在本节点的同步数据集中,并更新本节点的数据集状态。
本发明的进一步改进在于,所述步骤S4中,当一部分节点仅作数据生产者,另一部分节点仅作数据消费者时,所述同步需求为部分数据同步,对应的部分数据同步过程为:
步骤C1,数据消费者节点将感兴趣的节点前缀名单发送给Leader节点;
步骤C2,数据生产者节点将所述发布新数据兴趣包发送给Leader节点,Leader节点根据不同数据消费者节点所发送的前缀名单,对数据消费者节点发送相对应的通知新数据兴趣包;
步骤C3,数据消费者节点收到所述通知新数据兴趣包后,进行签名验证,解码订阅的数据前缀及序列号信息,向相应的数据生产者节点发送所述获取新数据兴趣包,所述数据生产者节点收到所述获取新数据兴趣包后,进行签名验证,并向数据消费者节点发送节点数据包。
本发明的进一步改进在于,所述步骤S5中,当检测到同一节点前缀下的数据序列号不是在上一次接收到的数据序列号上顺序加一,则向Leader节点发送数据恢复兴趣包进行数据恢复;所述数据恢复兴趣包中包括请求恢复数据的节点的数据集状态,Leader节点收到所述数据恢复兴趣包后,进行签名验证,将其与本节点的数据集状态进行比较,协调数据差异,解码请求恢复数据的节点的数据,并直接将其缺失的同步数据返回给该节点,以完成数据恢复。
本发明的进一步改进在于,还包括用于实现同步组管理的步骤S6,所述步骤S6中:
设置时间阈值 1,当Leader节点在时间阈值 1时间后未收到来自某节点的兴趣
包,则向该节点发送兴趣包,若该节点正常,则回复该兴趣包,Leader节点继续
向该节点发送数据更新兴趣包;若Leader节点未收到该兴趣包的回复,则认为该节点
已退出同步组,不再向该节点发送数据更新兴趣包,Leader节点在组成员状态中保留并标
记该节点已失效,同时向同步组的其他节点发送最新的组成员状态;若节点故障恢复或重
新加入到该同步组,Leader节点再次收到该节点的兴趣包时,认为该节点恢复正常,在所述
组成员状态中去除该节点的失效信息,重新向该节点发送数据更新兴趣包,再次向同步组
的其他节点发送最新的组成员状态;
设置时间阈值 2,当Assistant节点在时间阈值 2时间后未收到来自Leader节点
的兴趣包,则向Leader节点发送兴趣包,若Leader节点连接正常,则会向Assistant节
点发送兴趣包的回复;若Assistant节点未收到回复,则升级为新的Leader节点,并向
本组的节点和其他组的Leader节点发送新Leader节点通知兴趣包,本同步组内排序仅次于
它的节点成为新任的Assistant节点。
本发明还提供一种基于领导节点的数据同步系统,采用了如上所述的基于领导节点的数据同步方法,并包括:
建立架构模块,建立基于领导节点的数据同步系统模型,包括一个或多个同步组,每个同步组包括一个或多个同步节点,对同步组的所有同步节点按顺序递增编号,确定所述同步节点的身份,所述同步节点的身份包括Leader节点、Assistant节点和Member节点,所述Leader节点为领导节点,所述Assistant节点为本同步组Leader节点的备用节点,所述Member节点为成员节点;所述同步节点的数据结构包括同步数据集、数据集状态以及组成员状态;
数据及网络分组命名模块,通过预设规则对数据以及网络分组进行命名,其中,数据的名称命名规则为节点前缀和顺序递增的序列号;网络分组包括发布新数据兴趣包、通知新数据兴趣包、获取新数据兴趣包、节点数据包、数据恢复兴趣包、新节点加入请求兴趣包、新节点加入通知兴趣包、新Leader节点通知兴趣包以及新Assistant节点通知兴趣包;
命名空间表示模块,在所述数据集状态中,仅将数据名称的节点前缀及其最新的序列号作为同步状态进行编码;
数据同步模块,判断数据的同步需求,根据所述同步需求进行相应的数据同步;
数据恢复模块,通过判断同一节点前缀下的数据序列号是否为上一次接收到的序列号基础上顺序加一,若是则返回等待下一次的数据序列号,若否则进行数据恢复。
与现有技术相比,本发明的有益效果在于:通过基于领导节点的数据同步的技术方案,很好地解决了现有数据同步协议中采用长期兴趣包机制所造成的网络流量大和网络状态易发散的问题,本发明通过领导节点聚合兴趣包,能够进一步减小了网络流量,在此基础上,还通过高效的数据恢复机制,减小了数据同步延迟,提升了同步协议的数据恢复效率。加之,本发明还进一步通过组间数据同步机制,实现了多个同步组之间高效可靠的数据同步;通过部分同步机制,实现了发布/订阅类应用程序的数据同步;通过同步组管理机制,提升了数据同步的安全性。本发明能够有效解决现有技术中网络流量大和数据恢复效率低的问题,有效地减少了网络流量,并设计了高效的数据恢复机制,减小数据同步延迟,能够很好地满足MIN的分布式应用程序的高效数据同步需求。
附图说明
图1是本发明一种实施例的工作流程示意图;
图2是本发明一种实施例的架构结构示意图;
图3是本发明一种实施例的数据通知阶段的同步过程示意图;
图4是本发明一种实施例的数据获取阶段的同步过程示意图。
具体实施方式
下面结合附图,对本发明的较优的实施例作进一步的详细说明。
数据同步是多用户聊天、文件传输以及多用户协作办公等分布式应用程序的基本需求,MIN基于兴趣包和数据包交换进行可靠的多方通信,为分布式应用程序高效的数据同步提供了基础。由于分布式应用程序往往涉及一方和多方之间的数据同步,例如,文件共享、项目协作和群发消息都在多方参与者之间收集和分发数据,需要数据消费者不断向数据生产者发送兴趣包,请求获取数据。因此需要有数据同步协议,让数据消费者知道何时去获取数据、获取什么数据,整个通信过程由此将变得简洁和有序,而现有的数据同步协议面临着网络流量大和数据恢复效率低等诸多问题。
对此,本实施例旨在提供一种基于领导节点的数据同步方法,所述基于领导节点的数据同步方法简称MINGroupSync,针对现有数据同步协议网络流量大和数据恢复效率低的问题,本实施例提出的是一种基于领导节点的通知机制,旨在减少网络流量,并设计了高效的数据恢复机制,减小数据同步延迟,以满足MIN的分布式应用程序的高效数据同步需求。
具体的,如图1所示,本实施例提供一种基于领导节点的数据同步方法,包括以下步骤:
步骤S1,建立基于领导节点的数据同步系统模型,包括一个或多个同步组,每个同步组包括一个或多个同步节点,对同步组的所有同步节点按顺序递增编号,确定所述同步节点的身份,所述同步节点的身份包括Leader节点、Assistant节点和Member节点,所述Leader节点为领导节点,所述Assistant节点为本同步组Leader节点的备用节点,所述Member节点为成员节点;所述同步节点的数据结构包括同步数据集、数据集状态以及组成员状态;
步骤S2,通过预设规则对数据以及网络分组进行命名,其中,数据的名称命名规则为节点前缀和顺序递增的序列号;网络分组包括发布新数据兴趣包、通知新数据兴趣包、获取新数据兴趣包、节点数据包、数据恢复兴趣包、新节点加入请求兴趣包、新节点加入通知兴趣包、新Leader节点通知兴趣包以及新Assistant节点通知兴趣包;
步骤S3,在所述数据集状态中,仅将数据名称的节点前缀及其最新的序列号作为同步状态进行编码;
步骤S4,判断数据的同步需求,根据所述同步需求进行相应的数据同步;
步骤S5,通过判断同一节点前缀下的数据序列号是否为上一次接收到的序列号基础上顺序加一,若是则返回等待下一次的数据序列号,若否则进行数据恢复。
在全部数据同步场景中,每一个同步节点既是数据生产者,又是数据消费者,同步
节点简称节点,即,每一个节点都需要将自己产生的新数据同步到其他节点,也需要从其他
节点那里获取同步数据。在部分数据同步场景中,一部分节点仅是数据生产者,另一部分节
点仅是数据消费者。如图2所示,本实施例所述同步节点包括的数据结构包括同步数据集、
数据集状态以及组成员状态,同步数据集也称,数据集状态也称,组成员状态也称。
所述数据集状态()表示MIN网络本同步组共享数据集最新状态
的命名空间,与MINSync协议相同,用进行编码;包括本同步节点已知的
同步组中所有已发布的最新的数据名称。每当本节点产生新数据或从其他节点获取新数据
后,都将更新。MINGroupSync中的每个同步节点都具有此数据结构。
所述组成员状态()用于存储同步组当前的成员状态信息,包含组内
所有成员的编号和节点名称。是本同步组的一份成员名单,并且只有成员名单内的同步节
点具有参与同步组内数据同步的权限,才能够进行数据发布和获取,不在名单内的节点将
不被允许参与同步组内的数据同步。通过Leader节点对同步组成员信息的管理,可以有效
维护同步数据的安全,防止恶意节点的攻击。
在初始化阶段,将MINGroupSync同步组的所有节点按顺序递增编号,确定Leader
节点、Assistant节点和Member节点三种节点的身份。根据节点重要性算法进行排序编号,
从1开始顺序递增。在本实施例的实际应用中,根据不同网络的特性选择不同的排序算法,
如根据网络的规模大小和网络的功能选择对应适合的算法,这一点在本实施例中不作过多
讨论和分析,通过现有技术的方案来实现即可。排序完成后,将序号为1的节点作为Leader
节点,序号为2的节点作为Assistant节点,其余节点为Member节点。Leader节点和
Assistant节点拥有同步组所有的成员状态信息,包含组内所有成员的编号和节点名称,即
本组的。各同步节点的职能如表1所示。
表1 MINGroupSync中各同步节点的职能
在对MINGroupSync的数据及网络分组进行命名的过程中,本实施例的数据名称按“节点前缀+顺序命名”的结构命名。每个同步节点都有唯一的可路由的前缀,其发布的数据从零开始编号,每当产生新数据时,将数据的序列号递增1。即所述步骤S2中,所述节点前缀为与通过节点相对应的唯一的可路由前缀,所述顺序递增的序列号为在产生新数据时将数据的序列号在上一次数据基础上递增1所得到的序列号。在这种预先设置的命名规则下,可以将同一数据生产者生成的数据以最高序列号表示,同步协议只需要关注同一节点前缀下最新的序列号,而不再需要关注整个命名空间。因此,本实施例能够有效减少同步状态的编码量。MINGroupSync中的网络分组的命名规则如表2所示。
表2 MINGroupSync网络分组的命名规则
更为具体的,本实施例所述步骤S2中,通过预设规则对所述网络分组进行命名的过程包括步骤S201至步骤S207,值得说明的是,步骤S201至步骤S207并不一定是顺序步骤,而是基于条件触发的,根据不同的实际情况触发不同的兴趣包发送。
本实施例的步骤S201,用于对发布新数据兴趣包进行命名。当数据生产者节点产生新数据时,会向同步网络内的Leader节点发送所述发布新数据兴趣包,所述发布新数据兴趣包的命名为/min/producer-name/mingroupsync/publish/app-name/seq#,其中,/min表示多标识网络,/producer-name表示发布新数据的节点名称,/mingroupsync/publish表示基于领导节点的数据同步系统的协议发布新数据,/app-name表示产生的数据的应用程序名称,/seq#表示产生的新的数据序列号;数据生产者节点通过私钥对所述发布新数据兴趣包进行签名。
本实施例的步骤S202,用于对通知新数据兴趣包进行命名。当Leader节点收到所
述发布新数据兴趣包,将数据生产者节点前缀及数据序列号在所述数据集状态中编码,即
在中编码。Leader节点收到来自同步组内的多个节点的所述发布新数
据兴趣包后,将所有发布新数据的节点前缀及数据序列号在中编码。然后
所述Leader节点向除发布数据的节点之外的所有节点发布所述通知新数据兴趣包,并命名
为/min/leader-name/mingroupsync/notify/<new-IBF>,其中,/leader-name表示本数据
同步组的Leader节点的名称,mingroupsync 表示基于领导节点的数据同步,/notify表示
通知新数据产生,/<new-IBF>表示Leader节点编码发布新数据的节点前缀及数据序列号的
数据集状态(IBF);所述Leader节点通过私钥对所述通知新数据兴趣包进行签名。
本实施例的步骤S203,用于对获取新数据兴趣包进行命名。当数据消费者节点收到所述通知新数据兴趣包后,将向发布新数据的节点请求获取新数据,发送所述获取新数据兴趣包,并命名为/min/consumer-name/mingroupsync/request/producer-name/app-name/seq#,其中,/consumer-name表示请求新数据的节点名称,/request表示获取新数据,/producer-name/app-name/seq#代表所要获取数据的信息;所述数据消费者节点通过私钥对所述获取新数据兴趣包进行签名。值得说明的是,Leader节点在收到所述发布新数据兴趣包后,即会向数据生产者节点请求获取新数据。由于多标识路由器在处理所述获取新数据兴趣包时,不需要查询转发表,仅需沿所述发布新数据兴趣包的路径返回,因此为了进一步缩短同步流程和减少网络中产生的包数量,本实施例在所述获取新数据兴趣包上增加标识字段,该标识字段包括对所述发布新数据兴趣包的回复信息,回复信息在所述标识字段中位置及格式通过可以预先设置和自定义修改,进而使得所述获取新数据兴趣包能够同时具有回复所述发布新数据兴趣包和获取数据的功能,大幅度地缩短了同步流程,并有效地减少了同步网络中产生的包数量。
本实施例的步骤S204,用于对节点数据包进行命名。当数据生产者节点收到所述获取新数据兴趣包后,将向数据消费者节点发送所述节点数据包,并命名为/min/producer-name/mingroupsync/app-name/seq#,其中/producer-name表示发布新数据节点的名称,/app-name表示产生新数据的应用名称,“/seq#”表示数据系列号;所述节点数据包的内容为该节点产生的新数据;数据生产者节点通过私钥对所述节点数据包进行签名。
本实施例的步骤S205,用于对数据恢复兴趣包命名。当多标识网络内的同步节点由于网络丢包或连接异常导致数据缺失时,该节点将发送所述数据恢复兴趣包给本同步组的Leader节点,并通过私钥对其签名,所述数据恢复兴趣包命名为/min/node-name/mingroupsync/recover/<old-IBF>,其中,/node-name在此处表示请求恢复数据的节点名称,/recover表示请求恢复数据,/<old-IBF>表示请求恢复数据的节点的数据集状态(IBF)。
本实施例的步骤S206,用于对新节点加入请求兴趣包进行命名。当同步组中有新的节点加入时,该节点将发送所述新节点加入请求兴趣包给本同步组的Leader节点,并通过私钥签名,命名为/min/node-name/mingroupsync/join,其中,/node-name在此时表示的是请求加入同步组的节点名称,/join表示请求加入同步组;当Leader节点验证签名通过后,同意该节点加入,将向同步组的所有节点发送所述新节点加入通知兴趣包,命名为/min/leader-name/mingroupsync/newmember/node-name,其中,/newmember代表本同步组有新的节点加入;/node-name在此时表示的则是新加入节点的节点名称。
本实施例的步骤S207,用于对新Leader节点通知兴趣包进行命名。当同步组中的
Leader节点退出同步组时,则由Assistant节点作为本同步组的新任Leader节点,其下一个
序号的节点作为本同步组的Assistant节点;依此类推。新任Leader节点将向同步组中所有
节点发送所述新Leader节点通知兴趣包,并通过私钥签名,命名为/min/node-name/
mingroupsync/newleader,其中,/node-name”表示节点名称,此时表示新Leader节点的节
点名称;/newleader表示新Leader节点通知。新任Assistant节点将向同步组中所有节点发
送新Assistant节点通知兴趣包,并通过私钥签名,命名为“/min/node-name/
mingroupsync/newassistant”,其中/node-name中的节点名称在此时表示的是新节点的节点名称,/newassistant表示的是新Assistant节点通知。
本实施例所述步骤S3用于MINGroupSync的命名空间表示。MINGroupSync用表示同步数据集的命名空间。为了提高空间利用率,MINGroupSync的仅将数据流的名称前缀与其最新序列号作为同步状态进行编码。由于
MINGroupSync的每个节点前缀固定,每次发布新数据都是将序列号从零开始顺序递增,因
此每个节点的本质上是包含该同步组中曾经发布过的所有数据的命名
空间的浓缩表示。
本实施例所述步骤S4用于实现数据同步。根据新数据产生方式的不同,也会对应触发不同的数据同步。
当同步组内的同步节点应用程序产生新数据时,所述同步需求为组内数据同步,对应的组内数据同步过程包括步骤A1至步骤A6。
MINGroupSync将同步过程分为轮次,每隔预设时间为一轮,预设时间可根据网
络内数据发布的速率进行调整。MINGroupSync的Leader节点会维护两种IBF,一种是本节点
的,即数据集状态;一种是仅编码单个同步轮次的用于通知的IBF,即可
逆布鲁姆过滤器标识的同步数据命名空间。
MINGroupSync的组内同步机制分为三个阶段:初始化阶段、数据通知阶段和数据
获取阶段。在初始化阶段,将MINGroupSync同步组的所有节点按顺序递增编号,从1开始顺
序递增。排序完成后,将序号为1的节点作为Leader节点,序号为2的节点作为Assistant节
点,其余节点为Member节点。每个节点拥有同步组所有的成员状态信息,包含组内所有成员
的编号和节点名称,即本组的。作为本同步组的一份成员名单,名
单内的节点才可参与同步组内的数据同步,进行数据发布和获取,不在名单内的节点将不
被允许参与同步组内的数据同步。
在MINGroupSync一个同步轮次中,新数据发布阶段的同步过程示意图如图3所示。当一个MINGroupSync同步节点之上的应用程序产生新数据时,通过步骤A1至步骤A6实现组内数据同步。
步骤A2,所述同步组的Leader节点收到所述发布新数据兴趣包后,验证是否在组成员状态中且签名有效,若不在组成员状态中或签名无效,则废弃所述发布新数据兴趣包,直到验证通过则向数据生产者节点返回所述获取新数据兴趣包,然后将所收到的所有数据生产者的前缀及其数据序号编码至用于通知的数据集状态new-IBF中,在此过程中,如果Leader节点也产生新数据,将与数据生产者的前缀及其数据序号一起编码至用于通知的数据集状态new-IBF中,以便节省网络中的数据包数量;
步骤A3,所述Leader节点向本同步组中的Member节点发送所述通知新数据兴趣包,将收到的所有新数据的信息发送到本同步组中的其余节点(包括Member节点);如果数据生产者节点超时未收到数据生产者节点返回的所述获取新数据兴趣包,则向Leader节点重传所述发布新数据兴趣包,若重传超过最大次数,则进入下一轮同步;所述最大次数可以根据实际情况和需求进行自定义设置和调整;
在MINGroupSync一个同步轮次中,MINGroupSync新数据获取阶段的同步过程如图4所示。Leader节点收所述到发布新数据兴趣包,进行签名验证后,直接向发布新数据的节点发送所述获取新数据兴趣包去获取数据;
步骤A4,本同步组中的其余节点收到所述通知新数据兴趣包后,进行签名验证,解码所述通知新数据兴趣包中的数据集状态(IBF),获取发布新数据的节点前缀及序列号,然后向对应的节点发送所述获取新数据兴趣包去获取数据;
步骤A5,发布新数据的节点收到所述获取新数据兴趣包后,验证是否在组成员状态中且签名有效,若不在组成员状态中或签名无效则废弃,直到验证通过则按原路径返回所述节点数据包;
步骤A6,所有节点在收到所述节点数据包后,验证是否在组成员状态中且签名有
效,若不在组成员状态中或签名无效则废弃,直到验证通过,则将所述节点数据包中包含的
新数据储存在本节点的同步数据集中,并更新本节点的数据集状态。
因此,本实施例实现了安全可靠的组内数据同步过程,并且本实施例通过设计数据生产者节点的主动通知机制,实现了不依赖长期兴趣包进行数据同步,很好地解决了现有数据同步协议长期兴趣包机制所造成的网络流量大和网络状态易发散的问题,此为其一;其二,本实施例还通过领导节点聚合数据生产者节点的同步兴趣包,进一步减小了网络流量,解决了网络升级时的路由可扩展性问题;其三、在组内数据同步过程中多次同步实现验证,在不增加兴趣包数量的基础上还能够进一步保证同步过程的安全和可靠性能。
本实施例所述步骤S4中,当与同步组关联的其他同步组产生新数据时,所述同步需求为组间数据同步,对应的组间数据同步过程包括步骤B1至步骤B4。
在组间同步的场景中,当其他与本组关联的同步组产生新数据时,该同步组的Leader节点会向其他同步组的Leader节点发送所述发布新数据兴趣包,再由各同步组的Leader 节点发送所述通知新数据兴趣包,通知本同步组节点。Leader节点可以对接收到的不同同步组的发布新数据兴趣包进行聚合后统一发布给本同步组内节点,若本同步组内的节点希望获取其他组的数据,则发送数据请求兴趣包到相关节点,由该节点沿原路径返回到请求数据的节点。与单个同步组的同步不同,组间数据同步需要在兴趣包和数据包名称中添加同步组的名称,以提升组间同步的数据安全性,防止恶意节点的攻击和篡改。
步骤B1,用于实现初始化,各个同步组初始化一份同步白名单,所述同步白名单包括与本同步组相关联的同步组的名称;
步骤B2,用于实现数据通知,Leader节点收到来自其他同步组的所述发布新数据兴趣包后,先验证其名称是否在本同步组的所述同步白名单内且签名有效,如果不在所述同步白名单内或签名无效,将废弃收到的所述发布新数据兴趣包,否则将返回确认收到回复,并解码其中包含的数据集状态(IBF),将收到的所有新数据的信息编码到一个新的数据集状态中,向同步组内的其他节点发送本同步组的通知新数据兴趣包;若数据生产者节点所在组的Leader节点未收到回复,且重传次数未超过预先设置的最大值,则会重传,否则进入下一轮同步;
步骤B3,用于实现验证和数据获取,数据消费者节点收到通知新数据兴趣包后,进行签名验证,解码其数据前缀及序列号信息,向相应的数据生产者节点发送所述获取新数据兴趣包,所述数据生产者节点收到后,将先验证其所在同步组的名称是否在本同步组的同步白名单内,并进行签名验证,如果不在同步白名单内或签名无效,将废弃收到的获取新数据兴趣包,否则将返回节点数据包;
步骤B4,用于再次验证和数据获取,请求数据的节点收到所述节点数据包后,验证同步白名单及签名,如果在白名单中且签名有效,验证同一节点前缀的数据序列号是否顺序增1,若不是则进入数据恢复流程,若是则将其中的数据存储在本节点的同步数据集中,并更新本节点的数据集状态。
本实施例通过对组间数据同步的控制,Leader节点对接收到的不同组的发布新数据兴趣包进行聚合后统一发布给本同步组内节点,实现了多个同步组之间高效可靠的数据同步,很好地解决了大规模网络下的数据同步问题。
本实施例所述步骤S4中,当一部分节点仅作数据生产者,另一部分节点仅作数据消费者时,所述同步需求为部分数据同步,对应的部分数据同步过程包括步骤C1至步骤C3。本实施例通过对部分数据同步的控制,实现了同步组内高效的部分数据同步,解决了发布/订阅类应用程序的数据同步问题。
在MINGroupSync的部分数据同步场景下,一部分节点仅是数据生产者节点,仅发布数据给同步组中的其他节点,不从其他节点获取数据;另一部分节点仅是数据消费者节点,仅从其他节点获取数据,不发布数据给同步组中的其他节点,且数据消费者仅对部分节点的数据感兴趣。
步骤C1,用于实现初始化,数据消费者节点将感兴趣的节点前缀名单发送给Leader节点,Leader节点在数据消费者节点中根据感兴趣的节点前缀名单进行选择;
步骤C2,用于实现数据通知,数据生产者节点将所述发布新数据兴趣包发送给Leader节点,Leader节点根据不同数据消费者节点所发送的前缀名单,对数据消费者节点发送相对应的通知新数据兴趣包;即所述通知新数据兴趣包的数据集状态(IBF)仅编码该数据消费者节点订阅的数据前缀及序列号信息;
步骤C3,用于实现数据获取,数据消费者节点收到所述通知新数据兴趣包后,进行签名验证,解码订阅的数据前缀及序列号信息,向相应的数据生产者节点发送所述获取新数据兴趣包,所述数据生产者节点收到所述获取新数据兴趣包后,进行签名验证,并在验证通过后向数据消费者节点发送节点数据包。
本实施例所述步骤S4用于实现数据同步,并且在组内数据同步、组间数据同步以及部分数据同步过程中,都需要分别进行签名验证,以保证数据同步的安全可靠性;为了提高签名验证的便利性,本实施例优选将所述节点前缀与所述组成员状态进行一一对应关联,进而能够在签名验证的时候,直接通过所述节点前缀与所述组成员状态之间的关联关系进行匹配便可快速完成验证;当然,在实际应用中也可以通过预先设置的私钥实现其验证过程。
本实施例所述步骤S5用于实现MINGroupSync的数据恢复机制,进而实现了由于网络丢包或同步节点连接异常时数据的高效恢复,能够很好地解决了现有数据同步协议数据恢复效率低的问题。
同步网络内需要进行数据恢复的场景主要包括以下两种:(1)网络发生丢包,兴趣包或数据包在传输的过程中丢失,使数据消费者节点未能获取到数据生产者节点的数据。(2)同步节点连接异常,同步节点因网络故障等原因与其他节点断连,后又重连到同步网络中,缺失断连期间的同步数据。以上两种情况,都会导致落后节点再次收到其他节点的发布新数据兴趣包时,检测到同一节点前缀下的数据序列号并不是在上一次接收到的序列号上顺序加一。所述落后节点指的是请求恢复数据的节点。
因此,当检测到同一节点前缀下的数据序列号不是在上一次接收到的数据序列号上顺序加一,则本实施例向Leader节点发送数据恢复兴趣包进行数据恢复;所述数据恢复兴趣包中包括请求恢复数据的节点的数据集状态<old-IBF>,Leader节点收到所述数据恢复兴趣包后,进行签名验证,将其与本节点的数据集状态进行比较,协调数据差异,即进行对比得到数据序列号的差别,解码请求恢复数据的节点的数据,并直接将其缺失的同步数据返回给该节点,以完成数据恢复。
本实施例还包括用于实现同步组管理的步骤S6,所述步骤S5用于实现同步组管理
机制,通过Leader节点对同步组节点加入和退出的管理,并将作为本同步组的
一份成员名单,不在名单内的节点将不被允许参与同步组内的数据同步,提升了数据同步
的安全性。
表3 初始化阶段Group State编号示例
MINGroupSync初始化阶段同步组节点编号示例如表3所示,在初始化阶段,同步组节点序号编号为1-50,序号为1的节点为本同步组的Leader节点,序号为2的节点为本同步组的Assistant节点,序号为3-50的节点为本同步组的Member节点。
在同步阶段,当有新的节点加入(包括其他同步组信任的Leader节点)时,新的节
点会向Leader节点发送所述新节点加入请求兴趣包,Leader节点根据其签名判断是否通
过,如果通过,则在加入该节点的信息,将其继续在原最大序号之上顺序命名,
向新节点返回本同步组的,并向本同步组内其他节点发送所述新节点加入通
知兴趣包,其他节点收到后,向Leader节点请求最新;如果签名验证不通过,
Leader节点将拒绝该请求。在默认设置下,一个同步组内的节点都会不定期向Leader节点
发送数据更新或数据请求兴趣包。当遇到网络故障或节点退出同步组时,Leader节点将不
会收到来自该节点的兴趣包。
为了节省网络开销,本实施例设置时间阈值 1,该时间阈值 1可以根据实际情况
和需求进行自定义设置和调整,当Leader节点在时间阈值 1的时间后未收到来自某节点的
兴趣包,则向该节点发送兴趣包(打招呼兴趣包),若该节点正常,则回复该兴趣
包,Leader节点继续向该节点发送数据更新兴趣包;若Leader节点未收到该兴趣包的
回复,则认为该节点已退出同步组,不再向该节点发送数据更新兴趣包,Leader节点在组成
员状态中保留并标记该节点已失效,同时向同步组的其他节点发送最新的组成员状态;若
节点故障恢复或重新加入到该同步组,Leader节点再次收到该节点的兴趣包时,认为该节
点恢复正常,在所述组成员状态中去除该节点的失效信息,重新向该节点发送数据更新兴
趣包,再次向同步组的其他节点发送最新的组成员状态;
在同步阶段,如果本同步组的Leader节点退出本同步组,则由Assistant节点作为
本同步组的Leader节点,其下一个序号的节点作为本同步组的Assistant节点,依此类推。
新任Leader节点将向同步组中所有节点发送所述新Leader节点通知兴趣包,其他节点回复
以获取最新的。新任Assistant节点将向同步组中所有节点发送所述新
Assistant节点通知兴趣包。为了保证在Leader节点失效时Assistant节点能够及时得知。
本实施例优选使用心跳监测机制,即Leader节点定期向Assistant节点发送心跳包。
同样的,为了节省网络开销,本实施例优选设置时间阈值 2,该时间阈值 2可以根
据实际情况和需求进行自定义设置和调整,并且,由于Leader节点的重要性,该时间阈值 2
的设置默认小于时间阈值 1;当Assistant节点在时间阈值 2时间后未收到来自Leader节
点的兴趣包,则向Leader节点发送兴趣包,若Leader节点连接正常,则会向Assistant
节点发送兴趣包的回复;若Assistant节点未收到回复,则升级为新的Leader节点,并
向本组的节点和其他组的Leader节点发送新Leader节点通知兴趣包,本同步组内排序仅次
于它的节点成为新任的Assistant节点。
本实施例还提供一种基于领导节点的数据同步系统,采用了如上所述的基于领导节点的数据同步方法,并包括:
建立架构模块,建立基于领导节点的数据同步系统模型,包括一个或多个同步组,每个同步组包括一个或多个同步节点,对同步组的所有同步节点按顺序递增编号,确定所述同步节点的身份,所述同步节点的身份包括Leader节点、Assistant节点和Member节点,所述Leader节点为领导节点,所述Assistant节点为本同步组Leader节点的备用节点,所述Member节点为成员节点;所述同步节点的数据结构包括同步数据集、数据集状态以及组成员状态;
数据及网络分组命名模块,通过预设规则对数据以及网络分组进行命名,其中,数据的名称命名规则为节点前缀和顺序递增的序列号;网络分组包括发布新数据兴趣包、通知新数据兴趣包、获取新数据兴趣包、节点数据包、数据恢复兴趣包、新节点加入请求兴趣包、新节点加入通知兴趣包、新Leader节点通知兴趣包以及新Assistant节点通知兴趣包;
命名空间表示模块,在所述数据集状态中,仅将数据名称的节点前缀及其最新的序列号作为同步状态进行编码;
数据同步模块,判断数据的同步需求,根据所述同步需求进行相应的数据同步;
数据恢复模块,通过判断同一节点前缀下的数据序列号是否为上一次接收到的序列号基础上顺序加一,若是则返回等待下一次的数据序列号,若否则进行数据恢复。
综上所述,本实施例通过基于领导节点的数据同步的技术方案,很好地解决了现有数据同步协议中采用长期兴趣包机制所造成的网络流量大和网络状态易发散的问题,本发明通过领导节点聚合兴趣包,能够进一步减小了网络流量,在此基础上,还通过高效的数据恢复机制,减小了数据同步延迟,提升了同步协议的数据恢复效率。加之,本发明还进一步通过组间数据同步机制,实现了多个同步组之间高效可靠的数据同步;通过部分同步机制,实现了发布/订阅类应用程序的数据同步;通过同步组管理机制,提升了数据同步的安全性。本发明能够有效解决现有技术中网络流量大和数据恢复效率低的问题,有效地减少了网络流量,并设计了高效的数据恢复机制,减小数据同步延迟,能够很好地满足MIN的分布式应用程序的高效数据同步需求。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (9)
1.一种基于领导节点的数据同步方法,其特征在于,包括以下步骤:
步骤S1,建立基于领导节点的数据同步系统模型,包括一个或多个同步组,每个同步组包括一个或多个同步节点,对同步组的所有同步节点按顺序递增编号,确定所述同步节点的身份,所述同步节点的身份包括Leader节点、Assistant节点和Member节点,所述Leader节点为领导节点,所述Assistant节点为本同步组Leader节点的备用节点,所述Member节点为成员节点;所述同步节点的数据结构包括同步数据集、数据集状态以及组成员状态;
步骤S2,通过预设规则对数据以及网络分组进行命名,其中,数据的名称命名规则为节点前缀和顺序递增的序列号;网络分组包括发布新数据兴趣包、通知新数据兴趣包、获取新数据兴趣包、节点数据包、数据恢复兴趣包、新节点加入请求兴趣包、新节点加入通知兴趣包、新Leader节点通知兴趣包以及新Assistant节点通知兴趣包;
步骤S3,在所述数据集状态中,仅将数据名称的节点前缀及其最新的序列号作为同步状态进行编码;
步骤S4,判断数据的同步需求,根据所述同步需求进行相应的数据同步;
步骤S5,通过判断同一节点前缀下的数据序列号是否为上一次接收到的序列号基础上顺序加一,若是则返回等待下一次的数据序列号,若否则进行数据恢复;
所述步骤S2中,通过预设规则对所述网络分组进行命名的过程包括:
步骤S201, 当数据生产者节点产生新数据时,会向同步网络内的Leader节点发送所述发布新数据兴趣包,所述发布新数据兴趣包的命名为/min/producer-name/mingroupsync/publish/app-name/seq#,其中,/min 表示多标识网络,/producer-name表示发布新数据的节点名称,/mingroupsync/publish表示基于领导节点的数据同步系统的协议发布新数据,/app-name表示产生的数据的应用程序名称,/seq#表示产生的新的数据序列号;数据生产者节点通过私钥对所述发布新数据兴趣包进行签名;
步骤S202,当Leader节点收到所述发布新数据兴趣包,将数据生产者节点前缀及数据序列号在所述数据集状态中编码,然后所述Leader节点向除发布数据的节点之外的所有节点发布所述通知新数据兴趣包,并命名为/min/leader-name/mingroupsync/notify/<new-IBF>,其中,/leader-name表示本数据同步组的Leader节点的名称,/ mingroupsync 表示基于领导节点的数据同步,/notify表示通知新数据产生,/<new-IBF>表示Leader节点编码发布新数据的节点前缀及数据序列号的数据集状态;所述Leader节点通过私钥对所述通知新数据兴趣包进行签名;
步骤S203,当数据消费者节点收到所述通知新数据兴趣包后,将向发布新数据的节点请求获取新数据,发送所述获取新数据兴趣包,并命名为/min/consumer-name/mingroupsync/request/producer-name/app-name/seq#,其中,/consumer-name表示请求新数据的节点名称,/request表示获取新数据,/producer-name/app-name/seq#代表所要获取数据的信息;所述数据消费者节点通过私钥对所述获取新数据兴趣包进行签名;
步骤S204,当数据生产者节点收到所述获取新数据兴趣包后,将向数据消费者节点发送所述节点数据包,并命名为/min/producer-name/mingroupsync/app-name/seq#,其中/producer-name表示发布新数据节点的名称,/app-name表示产生新数据的应用名称,所述节点数据包的内容为该节点产生的新数据;数据生产者节点通过私钥对所述节点数据包进行签名;
步骤S205,当多标识网络内的同步节点由于网络丢包或连接异常导致数据缺失时,该节点将发送所述数据恢复兴趣包给本同步组的Leader节点,并通过私钥对其签名,所述数据恢复兴趣包命名为/min/node-name/mingroupsync/recover/<old-IBF>,其中,/node-name表示节点名称,/recover表示请求恢复数据,/<old-IBF>表示请求恢复数据的节点的数据集状态;
步骤S206,当同步组中有新的节点加入时,该节点将发送所述新节点加入请求兴趣包给本同步组的Leader节点,并通过私钥签名,命名为/min/node-name/mingroupsync/join,其中,/node-name表示节点名称,/join表示请求加入同步组;当Leader节点验证签名通过后,同意该节点加入,将向同步组的所有节点发送所述新节点加入通知兴趣包,命名为/min/leader-name/mingroupsync/newmember/node-name,其中, /newmember代表本同步组有新的节点加入;
步骤S207,当同步组中的Leader节点退出同步组时,则由Assistant节点作为本同步组的新任Leader节点,其下一个序号的节点作为本同步组的Assistant节点;新任Leader节点将向同步组中所有节点发送所述新Leader节点通知兴趣包,并通过私钥签名,命名为/min/node-name/mingroupsync/newleader,其中,/newleader表示新Leader节点通知。
2.根据权利要求1所述的基于领导节点的数据同步方法,其特征在于,所述步骤S1中,所述同步数据集用于存储多标识网络中本同步组的同步内容;所述数据集状态包括本同步节点已知的同步组中所有已发布的最新的数据名称;所述组成员状态用于存储同步组当前的成员状态信息,包含组内所有成员的编号和节点名称,并且只有成员名单内的同步节点具有参与同步组内数据同步的权限。
3.根据权利要求1所述的基于领导节点的数据同步方法,其特征在于,所述步骤S2中,所述节点前缀为与节点相对应的唯一的可路由前缀,所述顺序递增的序列号为在产生新数据时将数据的序列号在上一次数据基础上递增1所得到的序列号。
4.根据权利要求1至3任意一项所述的基于领导节点的数据同步方法,其特征在于,所述步骤S4中,当同步组内的同步节点应用程序产生新数据时,所述同步需求为组内数据同步,对应的组内数据同步过程为:
步骤A1,节点将新数据存储在本节点的同步数据集中,更新该节点的数据集状态,同时向该节点所在同步组的Leader节点发送所述发布新数据兴趣包;
步骤A2,所述同步组的Leader节点收到所述发布新数据兴趣包后,验证是否在组成员状态中且签名有效,直到验证通过则向数据生产者节点返回所述获取新数据兴趣包,然后将所收到的所有数据生产者的前缀及其数据序号编码至用于通知的数据集状态中,在此过程中,如果Leader节点也产生新数据,将与数据生产者的前缀及其数据序号一起编码至用于通知的数据集状态中;
步骤A3,所述Leader节点向本同步组中的Member节点发送所述通知新数据兴趣包,将收到的所有新数据的信息发送到本同步组中的其余节点;
步骤A4,本同步组中的其余节点收到所述通知新数据兴趣包后,进行签名验证,解码所述通知新数据兴趣包中的数据集状态,获取发布新数据的节点前缀及序列号,然后向对应的节点发送所述获取新数据兴趣包去获取数据;
步骤A5,发布新数据的节点收到所述获取新数据兴趣包后,验证是否在组成员状态中且签名有效,直到验证通过则按原路径返回所述节点数据包;
步骤A6,所有节点在收到所述节点数据包后,验证是否在组成员状态中且签名有效,直到验证通过,则将所述节点数据包中包含的新数据储存在本节点的同步数据集中,并更新本节点的数据集状态。
5.根据权利要求1至3任意一项所述的基于领导节点的数据同步方法,其特征在于,所述步骤S4中,当与同步组关联的其他同步组产生新数据时,所述同步需求为组间数据同步,对应的组间数据同步过程为:
步骤B1,各个同步组初始化一份同步白名单,所述同步白名单包括与本同步组相关联的同步组的名称;
步骤B2,Leader节点收到来自其他同步组的所述发布新数据兴趣包后,先验证其名称是否在本同步组的所述同步白名单内且签名有效,如果不在所述同步白名单内或签名无效,将废弃收到的所述发布新数据兴趣包,否则将返回确认收到回复,并解码其中包含的数据集状态,将收到的所有新数据的信息编码到一个新的数据集状态中,向同步组内的其他节点发送本同步组的通知新数据兴趣包;
步骤B3,数据消费者节点收到通知新数据兴趣包后,进行签名验证,解码其数据前缀及序列号信息,向相应的数据生产者节点发送所述获取新数据兴趣包,所述数据生产者节点收到后,将先验证其所在同步组的名称是否在本同步组的同步白名单内,并进行签名验证,如果不在同步白名单内或签名无效,将废弃收到的获取新数据兴趣包,否则将返回节点数据包;
步骤B4,请求数据的节点收到所述节点数据包后,验证同步白名单及签名,如果在白名单中且签名有效,验证同一节点前缀的数据序列号是否顺序增1,若不是则进入数据恢复流程,若是则将其中的数据存储在本节点的同步数据集中,并更新本节点的数据集状态。
6.根据权利要求1至3任意一项所述的基于领导节点的数据同步方法,其特征在于,所述步骤S4中,当一部分节点仅作数据生产者,另一部分节点仅作数据消费者时,所述同步需求为部分数据同步,对应的部分数据同步过程为:
步骤C1,数据消费者节点将感兴趣的节点前缀名单发送给Leader节点;
步骤C2,数据生产者节点将所述发布新数据兴趣包发送给Leader节点,Leader节点根据不同数据消费者节点所发送的前缀名单,对数据消费者节点发送相对应的通知新数据兴趣包;
步骤C3,数据消费者节点收到所述通知新数据兴趣包后,进行签名验证,解码订阅的数据前缀及序列号信息,向相应的数据生产者节点发送所述获取新数据兴趣包,所述数据生产者节点收到所述获取新数据兴趣包后,进行签名验证,并向数据消费者节点发送节点数据包。
7.根据权利要求1至3任意一项所述的基于领导节点的数据同步方法,其特征在于,所述步骤S5中,当检测到同一节点前缀下的数据序列号不是在上一次接收到的数据序列号上顺序加一,则向Leader节点发送数据恢复兴趣包进行数据恢复;所述数据恢复兴趣包中包括请求恢复数据的节点的数据集状态,Leader节点收到所述数据恢复兴趣包后,进行签名验证,将其与本节点的数据集状态进行比较,协调数据差异,解码请求恢复数据的节点的数据,并直接将其缺失的同步数据返回给该节点,以完成数据恢复。
8.根据权利要求1至3任意一项所述的基于领导节点的数据同步方法,其特征在于,还包括用于实现同步组管理的步骤S6,所述步骤S6中:
设置时间阈值 1,当Leader节点在时间阈值 1时间后未收到来自某节点的兴趣包,则向该节点发送兴趣包,若该节点正常,则回复该兴趣包,Leader节点继续向该节点发送数据更新兴趣包;若Leader节点未收到该兴趣包的回复,则认为该节点已退出同步组,不再向该节点发送数据更新兴趣包,Leader节点在组成员状态中保留并标记该节点已失效,同时向同步组的其他节点发送最新的组成员状态;若节点故障恢复或重新加入到该同步组,Leader节点再次收到该节点的兴趣包时,认为该节点恢复正常,在所述组成员状态中去除该节点的失效信息,重新向该节点发送数据更新兴趣包,再次向同步组的其他节点发送最新的组成员状态;
9.一种基于领导节点的数据同步系统,其特征在于,采用了如权利要求1至8任意一项所述的基于领导节点的数据同步方法,并包括:
建立架构模块,建立基于领导节点的数据同步系统模型,包括一个或多个同步组,每个同步组包括一个或多个同步节点,对同步组的所有同步节点按顺序递增编号,确定所述同步节点的身份,所述同步节点的身份包括Leader节点、Assistant节点和Member节点,所述Leader节点为领导节点,所述Assistant节点为本同步组Leader节点的备用节点,所述Member节点为成员节点;所述同步节点的数据结构包括同步数据集、数据集状态以及组成员状态;
数据及网络分组命名模块,通过预设规则对数据以及网络分组进行命名,其中,数据的名称命名规则为节点前缀和顺序递增的序列号;网络分组包括发布新数据兴趣包、通知新数据兴趣包、获取新数据兴趣包、节点数据包、数据恢复兴趣包、新节点加入请求兴趣包、新节点加入通知兴趣包、新Leader节点通知兴趣包以及新Assistant节点通知兴趣包;
命名空间表示模块,在所述数据集状态中,仅将数据名称的节点前缀及其最新的序列号作为同步状态进行编码;
数据同步模块,判断数据的同步需求,根据所述同步需求进行相应的数据同步;
数据恢复模块,通过判断同一节点前缀下的数据序列号是否为上一次接收到的序列号基础上顺序加一,若是则返回等待下一次的数据序列号,若否则进行数据恢复。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210966079.8A CN115052006B (zh) | 2022-08-12 | 2022-08-12 | 一种基于领导节点的数据同步方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210966079.8A CN115052006B (zh) | 2022-08-12 | 2022-08-12 | 一种基于领导节点的数据同步方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115052006A CN115052006A (zh) | 2022-09-13 |
CN115052006B true CN115052006B (zh) | 2022-11-18 |
Family
ID=83166619
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210966079.8A Active CN115052006B (zh) | 2022-08-12 | 2022-08-12 | 一种基于领导节点的数据同步方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115052006B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115426308B (zh) * | 2022-11-08 | 2023-04-11 | 北京大学深圳研究生院 | 一种多标识网络下的链路状态路由方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103533450B (zh) * | 2013-06-09 | 2018-03-09 | 浙江宇视科技有限公司 | 一种媒体流可靠传输和接收的方法以及装置 |
US10270689B2 (en) * | 2014-12-19 | 2019-04-23 | Futurewei Technologies, Inc. | Multi-nonce enabled interest packet design for named-data networking |
CN110493885B (zh) * | 2019-08-21 | 2020-12-08 | 北京理工大学 | 一种针对数据分片的命名数据网络连续数据推送方法 |
CN113055430A (zh) * | 2019-12-27 | 2021-06-29 | 华为技术有限公司 | 一种数据同步的方法及相关设备 |
CN112019380B (zh) * | 2020-08-12 | 2022-07-22 | 西华大学 | 一种基于权益激励的结合Raft和PBFT算法的区块链共识方法 |
CN113364847B (zh) * | 2021-05-31 | 2022-07-19 | 新疆大学 | 区块链节点的数据同步方法、装置及存储介质 |
CN114640462A (zh) * | 2022-02-17 | 2022-06-17 | 北京邮电大学 | 区块链隐私保护方法、装置、电子设备及存储介质 |
-
2022
- 2022-08-12 CN CN202210966079.8A patent/CN115052006B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN115052006A (zh) | 2022-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Zhang et al. | Scalable name-based data synchronization for named data networking | |
CN108769150B (zh) | 区块链网络的数据处理方法、装置、集群节点和存储介质 | |
Zhu et al. | Let's chronosync: Decentralized dataset state synchronization in named data networking | |
US7978631B1 (en) | Method and apparatus for encoding and mapping of virtual addresses for clusters | |
US9497282B2 (en) | Network coding for content-centric network | |
Zhu et al. | Chronos: Serverless multi-user chat over NDN | |
US20140344379A1 (en) | Multi-Tier Push Hybrid Service Control Architecture for Large Scale Conferencing over ICN | |
Li et al. | A brief introduction to ndn dataset synchronization (ndn sync) | |
CN109981308B (zh) | 报文传输方法及装置 | |
CN103986738B (zh) | 一种多终端间的同步方法及系统 | |
Shang et al. | A survey of distributed dataset synchronization in Named Data Networking | |
CN104509073A (zh) | 在软件定义的网络中发现ip多播组成员 | |
CN111787349B (zh) | 一种数据缓存方法、装置、设备及介质 | |
US20160080340A1 (en) | Communication control device | |
CN115052006B (zh) | 一种基于领导节点的数据同步方法及系统 | |
Shang et al. | Publish-subscribe communication in building management systems over named data networking | |
Zhang et al. | Partialsync: Efficient synchronization of a partial namespace in ndn | |
CN111586102B (zh) | 一种基于bft共识的联盟链组网方法 | |
Moll et al. | SoK: The evolution of distributed dataset synchronization solutions in NDN | |
CN103546302A (zh) | 使用单播协议的多播传输 | |
Wang et al. | AC: an NDN-based blockchain network with erasure coding | |
Xu et al. | Chinese Remainder Theorem based DTN group key management | |
CN106487643B (zh) | 一种即时通信的信息存储方法及装置 | |
WO2014146388A1 (zh) | 一种分组设备运行状态同步方法 | |
CN107370716B (zh) | 组播信息的处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |