一种防原消息干扰的方法及装置制造方法

文档序号:7783202阅读:139来源:国知局
一种防原消息干扰的方法及装置制造方法
【专利摘要】本发明提供了一种防原消息干扰的方法及装置,通过选择CPU计数器时间作为节点间的计时机制和采用防原消息干扰的协议,避免了节点间对时间同步软件的依赖,可替代现有时间戳和时间同步相结合的方案,消除对时间同步软件的依赖,并降低分布式系统的部署代价和时钟硬件要求,有效消除原消息干扰的问题。
【专利说明】一种防原消息干扰的方法及装置
【技术领域】
[0001]本发明涉及通信【技术领域】,尤其涉及一种防原消息干扰的方法及装置。
【背景技术】
[0002]现有的分布式系统中,节点间通常采用多条网络通道,实现并发传输以提升网络传输性能,并增强网络传输的鲁棒性。
[0003]在一种分布式系统中,当客户端需要将指定页面的数据发送给数据服务器时,需要向数据服务器发送消息,以通知数据服务器处理指定页面的数据。如果消息发送超时,将重新发送指定页面的数据,由于在两次消息发送的间隔里,允许指定页面的数据被更新,所以重传消息中指定页面的数据相对于原消息中相同指定页面的数据可能会有所更新,导致内容不同。这种情况下,对于数据服务器而言,就不允许其在接收重传消息后,再接收处理原消息,否则将导致原消息覆盖重传消息;但是允许数据服务器在接收原消息后,再接收重传消息。
[0004]由于采用多条网络通道,网络通道的异常会导致原消息在重传消息之后被接收,引发原消息干扰问题。为了避免该问题,目前通常采用时间戳和时间同步相结合的方法,具体方案是:在分布式系统各节点上部署时间同步软件,实现各节点间时间同步;节点在接收消息后,计算消息的过期时间(消息的发送时间戳加上消息超时时间),并与接收端本地时间相比较,若判定消息过期则丢弃该消息。由于重传消息在原消息超时之后发送,若接收端在接收重传消息之后接收原消息,鉴于节点间时间同步,必定能够判定原消息过期并丢弃,从而避免原消息干扰问题。
[0005]现有采用的时间戳和时间同步相结合的方案,要在分布式系统的各个节点上部署时间同步软件,部署代价较高,且要求分布式系统各节点的时钟频率完全一致,对硬件要求较高,一旦部分节点的时钟频率出现问题,需要进行时钟同步处理,主要包括两种情况:1)节点时钟受同步影响往前调,会导致接收其它节点的过期消息(时间前调导致判定消息不过期),从而造成原消息干扰;2)节点时钟受同步影响往后调,对于标准时钟的节点而言,该节点发送的原消息和重传消息的时间间隔并未到达超时时限,导致其它节点无法准确判定该节点发送的消息是否过期,进而引发原消息干扰问题。

【发明内容】

[0006]本发明针对上述问题,提出了一种防原消息干扰的方法及装置,可替代现有时间戳和时间同步相结合的方案,消除对时间同步软件的依赖,并降低分布式系统的部署代价和时钟硬件要求,有效消除原消息干扰的问题。
[0007]在一个方面,本发明提供了一种防原消息干扰的方法,其包括:
[0008]接收原消息,所述原消息中包含发送所述原消息时发送节点的当前CPU计数器时间和所述原消息超时时对应的发送节点CPU计数器时间;
[0009]根据收到所述原消息之后的在后消息中的发送节点当前CPU计数器时间,判断所述原消息是否超时,若确定所述原消息超时,则丢弃所述原消息;否则,接收所述原消息。
[0010]在另一个方面,本发明提供了一种防原消息干扰装置,其包括:
[0011]接收单元,用于接收原消息,所述原消息中包含发送所述原消息时发送节点的当前CPU计数器时间和所述原消息超时时对应的发送节点CPU计数器时间;
[0012]处理单元,用于根据收到所述原消息之后的在后消息中的发送节点当前CPU计数器时间,判断所述原消息是否超时,若确定所述原消息超时,则丢弃所述原消息;否则,接收所述原消息。
[0013]本发明提供了一种防原消息干扰的方法及装置,通过选择CPU计数器时间作为节点间的计时机制和防原消息干扰协议,避免了节点间对时间同步软件的依赖,可替代现有时间戳和时间同步相结合的方案,消除对时间同步软件的依赖,并降低分布式系统的部署代价和时钟硬件要求,有效消除原消息干扰的问题。
【专利附图】

【附图说明】
[0014]下面将参照附图描述本发明的具体实施例,其中:
[0015]图1为本发明实施例提供的一种防原消息干扰的方法流程图。
[0016]图2为本发明实施例提供的一种防原消息干扰的方法中节点主动连接时的节点启动时生存期确立流程图。
[0017]图3为本发明实施例提供的一种防原消息干扰的方法中节点被动连接时的节点启动时生存期确立流程图。
[0018]图4为本发明实施例提供的一种防原消息干扰的方法中防原消息干扰协议处理流程图。
[0019]图5为本发明实施例提供的一种防原消息干扰装置的示意图。
【具体实施方式】
[0020]为了使本发明的技术方案及优点更加清楚明白,以下结合附图对本发明的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本发明的一部分实施例,而不是所有实施例的穷举。
[0021]如图1所示,本发明实施例提供了一种防原消息干扰的方法,其包括如下步骤:
[0022]步骤SlOl:接收原消息,该原消息中包含发送该原消息时发送节点的当前CPU计数器时间和该原消息超时时对应的发送节点CPU计数器时间。
[0023]操作系统通常可以提供两种时间机制:系统时间和CPU计数器时间,其中系统时间,可以转换成具体的日期时间,其值可被修改,而CPU计数器时间,记录了系统自启动以来的CPU计数器时间,无法转换成具体的日期时间,但当前CPU计数器时间与标准时间粒度(如:秒)可进行转换。因此由于系统时间可被修改的特性,使其难以实现绝对的单调递增,所以不适合用来严格判定消息是否超时。CPU计数器时间,由于其只会单调增加且不能被修改,从而能确保节点生存期内绝对的单调递增;且判定消息是否超时与具体日期时间无关,仅与消息超时时间间隔有关,所以,本发明中采用CPU计数器时间的机制比较适合用以严格判定消息是否超时。
[0024]各操作系统都提供了有关CPU计数器时间的调用接口,如在Linux环境下,可通过函数 clock_gettime (CLOCK_MONOTONIC,...),以获取 CPU 计数器时间;在 Windows 环境下,可调用函数 GetTickCount O、QueryPerformanceCounter O 等,以获取 CPU 计数器时间。
[0025]步骤S102:根据收到该原消息之后的在后消息中的发送节点当前CPU计数器时间,判断该原消息是否超时,若判断该原消息超时,则执行步骤S103:丢弃该原消息。;否则执行步骤S104:接收该原消息。
[0026]判断原消息是否超时,具体为根据收到的在后消息中的发送节点的最新CPU计数器时间,以及本地记录发送节点的CPU计数器时间,将确定出二者中发送节点最新的CPU计数器时间与该原消息的超时时间相比较,若发送节点最新的CPU计数器时间在该原消息的超时时间之后,则确定该原消息超时;否则,确定该原消息未超时。
[0027]当发送节点发送原消息时,将该节点发送该原消息的当前CPU计数器时间和所发送该原消息的超时时间设置到所发送的原消息中,以便接收节点进行原消息是否超时的判断。具体的,接收节点接收到该原消息后,从该原消息中获取其超时时间和发送节点发送该消息时的CPU计数器时间,然后更新本地记录的发送节点的CPU计数器时间,具体处理是:取MAX(消息中的发送节点最新CPU计数器时间,本地记录发送节点的CPU计数器时间),以上述取MAX值得到的发送节点的CPU计数器时间为准来更新发送节点的CPU计数器时间,进而判定消息是否超时:若更新后的发送节点的CPU计数器时间在原消息的超时的时间(对应发送节点的CPU计数器时间)之后,则原消息为超时;否则,原消息未超时。
[0028]上述的方法,还包括发送节点在该原消息超时时间之后发送该原消息的超时通知,所述超时时间以发送节点的CPU计数器时间表示。设定超时等待后,必须到达超时时刻才算超时,通知超时的时间点必须在超时时刻之后(含超时时刻)。在实验中发现,Linux中如pthread_cond_timedwait提供的超时机制,其通知超时的时间只是在超时时刻附近,即可能在超时时刻之前通知超时(虽然误差很小)。如果使用此类函数控制超时,则可能在超时时间内既发送了原消息,又发送了重传消息,对于接收节点,若接收重传消息后,再接收原消息,将无法判定原消息过期,从而引发原消息干扰问题。所以,在使用有关控制超时函数时,需要进一步封装,确保通知超时的时间点不在超时时刻之前。本发明实施例中,采用使发送节点在该原消息超时时间之后发送该原消息的超时通知,通过设置计数器倒计时检测是否到达超时时刻。
[0029]原消息干扰问题,主要源于两个方面:一方面,因超时及网络异常导致原消息晚于重传消息接收;另一方面,因发送节点程序发生重启及网络异常,导致接收节点在接收处理重传消息后,收到发送节点程序重启前的原消息(在原消息未超时的情况下),为了解决上述情况导致的原消息干扰,本发明实施例中提供的防原消息干扰的方法,还包括为所述节点设置生存期,所述生存期通过发送节点当前系统时间、进程标识和随机数来标识,其中节点包括发送节点和接收节点。
[0030]节点生存期确立,指在节点程序启动后,与之相连的其它节点首先废弃所有旧连接(旧连接是指当前生存期之前的生存期里建立的连接),然后建立新连接。节点间的连接分为主动连接和被动连接两种;节点生存期确立的过程,具体如图2至4所示,
[0031]节点间建立连接时,将自己的生存期标识发送至与其已连接或正在连接中的节点。节点启动后,首先生成该节点的生存期标识。节点生存期标识用以区分节点在此之前所有启动运行过程,可以通过参数组(当前系统时间,进程PID,随机数)来表示节点生存期标识。生成节点生存期标识后,若以主动连接方的身份同相关节点建立连接。被动连接方接收到连接请求后,首先检查对方节点的生存期标识是否发生变更,如果发生变更,则需要释放所有旧连接以免受旧连接消息干扰,并记录下新生存期标识,接受新连接并将自身的生存期标识告知主动连接方。
[0032]作为被动连接方时,其与主动连接方建立连接会相对滞后,其滞后时间受主动连接方对连接故障的感知时间及连接重建周期的影响。当主动连接方感知连接故障后,将发起连接重建并携带主动连接方的生存期标识,当被动连接方完成连接建立后,将携带自身的生存期标识应答主动连接方,主动连接方依据对方的生存期标识检查被动连接方是否发生生存期变更,如果发生变更,则释放所有旧连接、记录新生存期标识,并且发起连接重建。
[0033]当发送节点的生存期发生变化时,当识别出该消息是在当前生存期之前的生存期发送的,则丢弃该消息;否则,接收该消息。
[0034]在本发明实施例中提供的防原消息干扰的方法中,通过引入节点生存期,保证了节点间通信都在一个稳定的生存期内进行,避免了因跨越多个生存期而引发的原消息干扰问题。
[0035]如图5所示,本发明实施例提供了一种防原消息干扰装置,其包括:接收单元501,用于接收原消息,该原消息中包含发送该原消息时发送节点的当前CPU计数器时间和该原消息超时时对应的发送节点CPU计数器时间;处理单元502,用于根据收到该原消息之后的在后消息中的发送节点当前CPU计数器时间,判断该原消息是否超时,若确定该原消息超时,则丢弃该消息;否则,接收该原消息。
[0036]处理单元502,包括超时判断单元,用于根据收到该原消息之后的在后消息中的发送节点当前CPU计数器时间,判断该原消息是否超时;执行单元,用于当确定该原消息已超时,则丢弃该原消息;否则,接收该原消息。
[0037]防原消息干扰装置还可以包括超时通知单元,用于使发送节点在该原消息超时时间之后发送该原消息的超时通知,该超时时间以发送节点的CPU计数器时间表示。
[0038]防原消息干扰装置还可以包括设置单元,用于为节点设置生存期,生存期通过发送节点当前系统时间、进程标识和随机数来标识,其中节点包括发送节点和接收节点。
[0039]防原消息干扰装置还可以包括生存期发送单元,用于在节点间建立连接时,将节点自己的生存期标识发送至与其已连接或正在连接中的节点。
[0040]防原消息干扰装置还可以包括生存期判断执行单元,用于当发送节点的生存期发生变化时,当识别出该原消息是在当前生存期之前的生存期里发送的,则丢弃该原消息;否贝U,接收该原消息。
[0041]本发明的实施例提供了一种防原消息干扰的方法及装置,通过选择CPU计数器时间作为节点间的计时机制和采用防原消息的干扰协议,解除了节点间对时间同步软件的依赖,可替代现有时间戳和时间同步相结合的方案,消除对时间同步软件的依赖,并降低分布式系统的部署代价和时钟硬件要求,有效消除原消息干扰的问题。
[0042]以上实施例仅用以说明本发明的技术方案,而非对其进行限制。因此,在不背离本发明的精神及其实质的情况下,本领域技术人员可作出各种改变、替换和变型。很显然,但这些改变、替换和变型都应涵盖于本发明权利要求的保护范围之内。
【权利要求】
1.一种防原消息干扰的方法,其特征在于,包括: 接收原消息,所述原消息中包含发送所述原消息时发送节点的当前CPU计数器时间和所述原消息超时时对应的发送节点CPU计数器时间; 根据收到所述原消息之后的在后消息中的发送节点当前CPU计数器时间,判断所述原消息是否超时,若确定所述原消息超时,则丢弃所述原消息;否则,接收所述原消息。
2.如权利要求1所述的方法,其特征在于,判断所述原消息是否超时,具体为根据收到在后消息中的发送节点最新CPU计数器时间,以及本地记录发送节点的CPU计数器时间,将确定出二者中发送节点最新的CPU计数器时间与所述原消息的超时时间相比较,若所述最新的CPU计数器时间在所述原消息的超时时间之后,则确定所述原消息超时,丢弃所述原消息;否则,确定所述原消息未超时,接收所述原消息。
3.如权利要求1所述的方法,其特征在于,还包括发送节点在所述原消息超时时间之后发送所述原消息的超时通知,所述超时时间以发送节点的CPU计数器时间表示。
4.如权利要求1所述的方法,其特征在于,还包括为所述节点设置生存期,所述生存期通过发送节点当前系统时间、进程标识和随机数来标识,其中节点包括发送节点和接收节点。
5.如权利要求4所述的方法,其特征在于,节点间建立连接时,将自己的生存期标识发送至与其已连接或正在连接中的节点。
6.如权利要求4或5所述的方法,其特征在于,当发送节点的生存期发生变化时,当识别出所述原消息是在当前生存期之前的生存期里发送的,则丢弃所述原消息;否则,接收所述原消息。
7.一种防原消息干扰装置,其特征在于,包括:` 接收单元,用于接收原消息,所述原消息中包含发送所述原消息时发送节点的当前CPU计数器时间和所述原消息超时时对应的发送节点CPU计数器时间; 处理单元,用于根据收到所述原消息之后的在后消息中的发送节点当前CPU计数器时间,判断所述原消息是否超时,若确定所述原消息超时,则丢弃所述原消息;否则,接收所述原消息。
8.如权利要去7所述的装置,其特征在于,所述处理单元,包括: 超时判断单元,用于根据收到所述原消息之后的在后消息中的发送节点当前CPU计数器时间,判断所述原消息是否超时; 执行单元,用于当确定所述原消息已超时,则丢弃所述原消息;否则,接收所述原消息。
9.如权利要求7所述的装置,其特征在于,还包括: 超时通知单元,用于使发送节点在所述原消息超时时间之后发送所述原消息的超时通知,所述超时时间以发送节点的CPU计数器时间表示。
10.如权利要求7所述的装置,其特征在于,还包括: 设置单元,用于为所述节点设置生存期,所述生存期通过发送节点当前系统时间、进程标识和随机数来标识,其中节点包括发送节点和接收节点。
11.如权利要求10所述的装置,其特征在于,还包括: 生存期发送单元,用于在节点间建立连接时,将所述节点自己的生存期标识发送至与其已连接或正在连接中的节点。
12.如权利要求10或11所述的装置,其特征在于,还包括: 生存期判断执行单元,用于当发送节点的生存期发生变化时,当识别出所述原消息是在当前生存期之前的生存期里发送的,则丢弃所述原消息;否则,接收所述原消息。
【文档编号】H04L1/00GK103684738SQ201310750769
【公开日】2014年3月26日 申请日期:2013年12月31日 优先权日:2013年12月31日
【发明者】季旻, 苗艳超, 杨浩, 张攀勇 申请人:曙光信息产业股份有限公司, 无锡城市云计算中心有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1