处理无序事件的设备、方法和计算机程序的制作方法_4

文档序号:9240024阅读:来源:国知局
件ei的时间戳大于AEP的时间戳(图6a的示例中的A2),则尚未发生假推测并且因此不必撤销或重放事件。在图6a中已经过早地或推测地发出事件AO至事件A2,并且事件A3在已经被转发到事件检测器的输出事件流中未遗漏。
[0084]^eyts彡eAEP.ts:如果新近到达事件(这里:A3)的时间戳小于已经发出指针(AEP)的时间戳(图6b的示例中的A4),则可以借助于将在续篇中描述的构思撤销错误地发出的事件。可以将已经发出指针(AEP)设定为新近到达事件&并且从缓冲器的首部直到新的已经发出指针(AEP)的事件可以被重放,即,重新发送到所关联的事件检测器。在图6b的示例中,可以撤销事件B4,使得能够在重放B4之前过早地发出无序事件A3。
[0085]每当例如基于特定事件类型更新了在推测缓冲器226处的本地时钟信号elk时,推测缓冲器226可以发出满足不等式(I)的所有事件。如果常规非推测K-slack缓冲器还将清除或删除它们则仅可以清除事件,这意味着可以在时刻elk从事件缓冲器226中删除具有满足e1.ts+K ( elk的事件发生时间e1.ts的事件ei。
[0086]图7示例性地例示了来自图3a的事件检测器210的推测缓冲器226如何在推测量α = 1/3和初始K = O情况下工作。推测缓冲器226的定向现在是垂直的,S卩,它的首部在顶上。示例性地,类型A的事件可以被用来设定内部时钟clkA并且可以借助于动态K-slack调整K(参见图7中的黑体值)。可以在相应时刻从缓冲器226中清除由虚线指示的事件。过早地或推测地发出的事件由阴影框指示。尽管在图7中未显式地视觉化,但是已经发出指针(AEP)可以指向最低阴影事件。撤销由否定事件和指向在图7底部的输出流720的箭头来指示。输出流720中的重放事件被描绘为下划线。
[0087]在未排序的输入事件流204开始,我们没有事件延迟的测量结果,所以可以在步骤701和步骤702处推测地发出事件AO和事件A2。当在步骤或时刻703处在缓冲器的输入端处接收到事件Cl时,可以认识到之前已经不正确地发出了事件A2。因此,可以通过替换正确地排序的子流(即,事件Cl)撤销错误地推测地转发的事件A2(参见在步骤703处的A2),并且再次可以再次发出A2。也就是说,将撤销消息从推测缓冲器226转发到所关联的事件检测器210可以包括转发新近接收到的事件Cl并且再次将先前推测地转发的事件A2转发到事件检测器210。
[0088]在步骤704中事件A3 —到达缓冲器的输入端就可以将最大事件延迟K设定为2。A3仍然未被发出,因为e1.ts+α *K = 3+1/3*2 = 3.67>3 = elk。在步骤704中能够清除事件Cl,因为K = 2告诉我们不可能存在具有ts〈3-K= I的无序事件。在步骤705中可以将新近到达事件B4插入到缓冲器中。随着事件A6在步骤706处到达,存在另一个本地elk更新并且可以评估当前缓冲的事件。然后,可以发出事件A3 (3.67^6 = clkA)和事件B4 (4.67 ^ 6 = clkA),并且可以通过(借助于纯K-slack的规则)擦除满足ts+K ( elk的各个事件(即,现在安全的事件A2、事件A3和事件A4)来清除推测缓冲器226。尽管可能不在步骤707中在接收到事件C5时更新本地时钟elk,但是我们能够推测地发出C5,因为它满足ey ts+α *K = 5+1/3*2 = 5.67彡6 = elk,并且因为之前尚未处理事件Α6,所以我们不必重放。事件B8和事件C7可能皆被排队直到在步骤710中接收到事件All为止。我们然后处理A6、C7,并且清除C5。在接收到事件A12情况下,可以过早地发出事件B10,因为满足ey ts+a *K = 10+1/3*6 = 12 ^ 12 = elk。在步骤713中,可以在已经发出指针(AEP)(指向B10)前面插入新近接收到的事件C9,进而可以检测到假推测。因此,可以再定位已经发出指针(AEP)并且可以将撤销消息(参见-B10)转发到所关联的事件检测器以用于通过转发或重放事件C9和事件BlO针对所述事件检测器和/或布置在所述事件检测器下游的更高级别事件检测器启动事件撤销过程。
[0089]图8所描绘的算法I呈现了用于插入无序事件和可能必要的AEP再定位的示例性伪代码,然而图10的示例性算法2给出了针对推测发出(即,事件的重放)的伪代码。下面将进一步描述两个算法的细节。
[0090]如果推测一直太仓促,则推测排序单元226可以再定位已经发出指针(AEP)并且重放事件流。也就是说,如果新近接收到的事件的事件发生时间小于最后推测地转发的事件的事件发生时间,则方法500还可以包括将撤销消息从缓冲器226转发到事件检测器210以用于针对所述事件检测器和/或被布置在所述事件检测器210下游的更高级别事件检测器启动事件撤销过程。然而,尽管推测排序单元226可以借助于将在下面进一步更详细地描述的撤销方法来修订不正确的事件,但是处理所发出的事件的事件检测器可能由于这些不准确的过早地发出的事件而仍然是错误状态。因此,为了重放可以将事件检测器210的内部变量回复到它们在事件检测器210处理第一不正确的过早事件之前具有的状态。换句话说,转发撤销消息可能产生将事件检测器210的推测内部状态回复或恢复到在事件检测器已处理最后推测地转发的事件之前的状态。
[0091]这样的状态恢复因为三个原因而可能是困难的。首先,因为排序中间件220可以透明地处理无序事件流,所以事件检测器210甚至不知道排序单元226存在。其次,即使事件检测器210知道存在推测排序单元226,并且它处理撤销事件以回复它的状态,它然而也没有关于推测量α和最大事件延迟K的线索,并且因此知道它需要保持多少状态。第三,在许多情况下,能够中断并且较快地恢复作为有限推测为什么有利的核心原因的撤销级联。这仅可能从排序中间件内是可能的。
[0092]实施方式提出让中间件220触发事件检测器状态备份和恢复这二者。一经要求,事件检测器210也许能提供有必要稍后被复原到这个快照的所有数据。一个构思在于每当过早事件ei将要从推测缓冲器226发出时为其内部状态的快照而询问事件检测器210并且在于直接在过早地发出的事件ei前面将这个快照作为具有e s.ts = e,.ts的异常事件&插入到排序缓冲器226中。快照状态es然后可以表示在过早事件e i被过早地或推测地发出之前已经处于适当的位置的事件检测器状态。因此,回复到事件检测器210的推测状态可以基于事件检测器210的响应于最后推测地转发的事件先前已被提供给推测事件缓冲器226的存储的快照状态。从而,可以将事件检测器210的快照状态插入到事件缓冲器226中作为具有与最后推测地转发的事件ei相同的发生时间的异常事件e s。
[0093]每当从推测缓冲器226向关联的事件检测器210重放事件时,检测器210 —接收到封装事件检测器210的较早内部状态的这样的异常事件就可以切换回到较早状态。根据一些实施方式,可以在重放(即,最顶部快照)中发出仅首先缓冲的快照事件,可以跳过剩余的快照。在重放期间,还可以为快照而询问事件检测器,并且排序缓冲器226中的现有快照可以用新的快照代替。如之前已经描述的,可以像任何其它事件一样从推测缓冲器226中清除快照事件es。
[0094]图9例示了具有附加快照处理的图7的排序单元。在各个发出的阴影事件之上在缓冲器中存在特殊快照事件(由s表示)。相对于晚到达事件Cl考虑步骤903的重放情形。当已经推测地发出事件A2时在步骤902中已经取得的快照事件S2仍然在缓冲器中。为了重放,首先发出这个快照事件S2,后面是步骤903中的事件Cl和事件A2。当无序事件C9在步骤913中到达时过程是类似的。
[0095]如果同一事件检测器210的后续快照不同,则实施方式可以仅仅存储对在先快照的引用。然而,推测需要额外的存储。所需空间随着推测的程度而增长并且取决于事件检测器的状态空间的复杂性。
[0096]图8的算法I和图10的算法2例示了推测如何可以工作。可以使用在排序单元226之上迭代并且由事件检测器用于事件处理的工作线程(算法2)。在这样的工作线程可能忙于处理事件的同时,可以接收新的事件,并且可以在接收时调用算法I。因为这个事件可能是无序的,所以算法I可以获取对排序单元的缓冲器的锁定,即视需要,可以停止事件检测器处理,将(无序)事件插入在它正确的位置处,重新初始化事件检测器,并且再定位AEPo随着其终止它可以触发工作线程继续进行。工作线程还可以通过elk更新来触发,并且还可以被用来从缓冲器中清除过时事件。因此,可以在接收到新的事件时调用算法I。其任务在于如果适当则更新K、在于贪婪获取对缓冲器的锁定、在于将无序事件插入在它正确的位置处、在于重新初始化事件检测器并且在于再定位已经发出指针(AEP) ο随着其终止算法I可以触发像算法2所描述的那样执行的工作线程。工作线程是通过事件插入和elk更新这二者触发的。它们还可以通过K-slack约束来清除缓冲器。
[0097]如果在推测地发出的事件流(输出流)中错过某个事件,则实施方式可以复原订阅事件检测器210的快照状态并且重放事件流。什么保持开放是这个事件检测器210它本身已经可能基于过早且不完整的输出事件流生成了更高级别事件。可以从由检测器在更高层次级别上订阅的事件流中撤销/消除这些生成的事件。因为这可能导致重度撤销级联,所以实施方式目的在于限制推测的程度。
[0098]考虑图3a的示例事件检测器和图1la所例示的推测缓冲器。当具有发生时间戳ts = 4的无序输入事件B到达缓冲器的输入端时,所关联的事件检测器可能已经推测地处理了阴影事件A3至事件AS并且可能已经基于输出事件A3/C5生成了输出事件DJ并且基于输入事件A6/C7生成了输出事件Di+16。对于这个示例,我们假定事件检测器给所生成的输出事件D编号,例如,DJ表示在elk = 3处生成的第i个事件。因此,订阅事件检测器它本身已经不正确地生成了 DJ。因此,我们可以不仅复原事件检测器的状态并且重放C5至B8,而且从更高级别检测器(即,已订阅事件D的事件检测器)的流中撤销或消除输出事件DJ。而且,输出事件Di+16因为两个原因而也可能是错误的。首先,因为未示出的一些内容状态变量,事件检测器在存在输入事件B4情况下可能尚未达到Di+16状态。其次,然后代替Di+16它应该已产生D#,i表示最后发出的事件D的序列号。因此,除能够重放事件流之外中间件220还可能准备好使已经基于过早地发出的事件生成的事件无效。根据实施方式,可以通过发送标识已被不正确地生成的事件的撤销事件或消息来复原在更高级别事件检测器H处的正确状态,使得H的排序单元可以使该事件流固定并且重放事件流。以下两个技术被呈现来跨越检测层次处理事件撤销:完全撤销和按需撤销。
[0099]完全撤销的一个构思在于已经发出指针(AEP) —被再定位就立即撤销可能已经被不正确地生成的所有事件。出于这个目的,事件检测器的推测排序缓冲器226可以不仅存储过早地发出的事件和所关联的事件检测器210的快照状态而且概念上保持事件检测器210已经从过早地发出的事件(即,上述示例中的0。和Di+16)生成的事件的列表。方法500因此可以包括保持事件检测器210已经基于至少一个推测地转发的事件生成的至少一个事件的列表。
[0100]当无序事件被插入或输入到推测缓冲器226中时,我们可以首先收集可能已经被不正确地生成的所有事件,并且向各个订阅更高级别事件检测器H的排序单元发送针对它们中的每一个的(概念上)撤销消息。当这个排序单元接收到这样的撤销消息时它可以从其缓冲器中清除这个事件并且执行它自己的撤销和重放。因此,撤销消息或撤销事件可能必需与无序事件做的相同的重复和快照恢复。例如,在图1la中可以在A3与C5之间插入新近到达事件B4。立即,可以发送针对_0:和_Di+16的撤销消息以告诉所关联的事件检测器复原适当的快照并且启动重放。
[0101]尽管每个单个不正确地生成的事件D的撤销将工作,但是可能存在用于实现相同效果的更高效方式。一个构思在于像已经由事件检测器之前完成的那样利用推测排序单元226可以附接到事件检测器的状态的事件计数器i。不是发送数个撤销消息(该示例中的_03和_Di+16),而是可能足以向上层检测器发送事件计数器D:1-1。这个事件检测器然后可以从它的缓冲器中清除具有较大计数器的所有D事件。事件计数器可以不仅帮助减小需要被发送到更高级别检测器的撤销事件的数量。利用与检测器状态存储在一起或存储在检测器状态中的计数器,不再需要保持所生成的事件的列表(在上述示例中,对于列表和C7—>Di+16不存在需要)。
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1