用于发布订阅系统的实现历史事件订阅的缓存方法

文档序号:7798093阅读:259来源:国知局
用于发布订阅系统的实现历史事件订阅的缓存方法
【专利摘要】本发明公开了一种用于发布订阅系统的实现历史事件订阅的缓存方法,包括如下步骤:路由表扩充步骤,在路由表中增设缓存路由信息;事件处理步骤,通过哈希函数计算缓存点参考值;事件发布步骤:根据缓存点参考值判断当前代理节点是否作为缓存点并进行缓存,同步更新缓存路由信息;缓存订阅步骤;以及缓存获取步骤。本发明具有以下有益效果:本发明提供的缓存方法实现了订阅者对历史事件的订阅;本发明充分利用了事件分发路径上所有代理及其邻居代理的存储空间,提高了存储资源利用率,增强了发布订阅系统的缓存能力;本发明对缓存冗余做了精简,在访存效率与存储占用率之间做了平衡。
【专利说明】用于发布订阅系统的实现历史事件订阅的缓存方法
【技术领域】
[0001]本发明涉及发布订阅系统技术,具体涉及一种实现历史事件订阅的缓存方法。
【背景技术】
[0002]发布订阅系统包含一个分布式的通信网络,即事件代理网络,和一系列相互通信的端点,即订阅者和发布者。订阅者和发布者之间通过事件代理网络互联,采用一种异步的发布-订阅方式来完成数据交换。订阅者通过声明一个过滤条件表达式提交订阅,当发布者发布了一条符合其订阅条件的事件,该事件即经由代理网络路由到订阅者。在时间上,内容的订阅与发布是异步的,而在空间上,订阅者与发布者也不必关心对方位于何处,因此发布订阅系统实现了通信双方在空间、时间和控制流上完全解耦。
[0003]在传统的发布订阅系统中,事件通知能够确保最终到达每个感兴趣的订阅者,但前提是每个订阅者都处于在线状态且各自的订阅被整个系统所知。这一前提条件对于动态网络环境来说则是一大限制,因为客户端往往会频繁地加入或离开网络,新加入的订阅者可能会请求一个在其加入网络之前所发布的事件。在传统的发布订阅系统中,这种请求是得不到响应的,因而如何利用事件缓存机制以使新用户能够获知历史事件就成为了发布订阅系统需要解决的一大问题。

【发明内容】

[0004]为了克服现有技术中存在的订阅者无法订阅历史事件的缺陷,本发明提供一种实现历史事件订阅的缓存方法。本发明具体的技术方案如下:
[0005]一种用于发布订阅系统的实现历史事件订阅的缓存方法,包括如下步骤:
[0006]路由表扩充步骤:在各代理节点的路由表中增设缓存路由信息,所述缓存路由信息用于提供能够定位到缓存点的路由信息;
[0007]事件处理步骤:当某一代理节点发出一事件时,通过哈希函数进行计算,得到一缓存点参考值;为所述事件附加一消息头,所述消息头中记录了缓存点信息以及订阅路径信息;所述缓存点信息中包括所述缓存点参考值;
[0008]事件发布步骤:根据所述消息头中记录的订阅路径信息,将所述事件向对应的订阅节点进行发布;对于发布路径中的每个代理节点,根据所述缓存点参考值判断当前代理节点是否作为缓存点并进行缓存,同时,当前代理节点同步更新对应于所述事件的缓存路
由信息;
[0009]缓存订阅步骤:某一代理节点发出一缓存请求,所述缓存请求中包含订阅条件;将所述订阅条件与当前代理节点的路由表中预存的过滤条件进行匹配,确定缓存事件;所述缓存事件是指,与订阅条件匹配成功的过滤条件对应的事件;
[0010]缓存获取步骤:若当前代理节点的路由表中包含所述缓存事件对应的缓存路由信息,则直接根据该缓存路由信息找到所述缓存事件对应的缓存点,
[0011]将缓存请求转发到缓存点,获取缓存;若当前代理节点的路由表中不包含所述缓存事件对应的缓存路由信息,则根据所述缓存事件对应的订阅路由信息,将缓存请求发送到下一个代理节点,回转执行缓存获取步骤。
[0012]作为优化方案,所述哈希函数如公式(I)所示:
[0013]
【权利要求】
1.一种用于发布订阅系统的实现历史事件订阅的缓存方法,其特征在于,包括如下步骤: 路由表扩充步骤:在各代理节点的路由表中增设缓存路由信息,所述缓存路由信息用于提供能够定位到缓存点的路由信息; 事件处理步骤:当某一代理节点发出一事件时,通过哈希函数进行计算,得到一缓存点参考值;为所述事件附加一消息头,所述消息头中记录了缓存点信息以及订阅路径信息;所述缓存点信息中包括所述缓存点参考值; 事件发布步骤:根据所述消息头中记录的订阅路径信息,将所述事件向对应的订阅节点进行发布;对于发布路径中的每个代理节点,根据所述缓存点参考值判断当前代理节点是否作为缓存点并进行缓存,同时,当前代理节点同步更新对应于所述事件的缓存路由信息; 缓存订阅步骤:某一代理节点发出一缓存请求,所述缓存请求中包含订阅条件;将所述订阅条件与当前代理节点的路由表中预存的过滤条件进行匹配,确定缓存事件;所述缓存事件是指,与订阅条件匹配成功的过滤条件对应的事件; 缓存获取步骤:若当前代理节点的路由表中包含所述缓存事件对应的缓存路由信息,则直接根据该缓存路由信息找到所述缓存事件对应的缓存点,将缓存请求转发到缓存点,获取缓存;若当前代理节点的路由表中不包含所述缓存事件对应的缓存路由信息,则根据所述缓存事件对应的订阅路由信息,将缓存请求发送到下一个代理节点,回转执行缓存获取步骤。
2.根据权利要求1所述的缓存方法,其特征在于,所述哈希函数如公式(I)所示:
3.根据权利要求2所述的缓存方法,其特征在于,根据所述缓存点参考值判断当前代理节点是否作为缓存点并进行缓存具体为: 当前代理节点收到事件后先将所述缓存点参考值t减1,然后根据缓存点参考值进行判断,若t = 0,则将当前代理节点做为缓存点。
4.根据权利要求1所述的缓存方法,其特征在于,所述路由表扩充步骤具体为: 在各代理节点的路由表中增加cache_nexthops字段,使得所述路由表的结构为:
〈filter Isub_nexthops|cache_nexthops> 其中,filter是指过滤条件,sub_nexthops记录了与filter匹配成功的事件向订阅节点方向转发的下一跳代理,cache_nexthops记录了与filter匹配成功的缓存请求向缓存点方向转发的下一跳代理。
5.根据权利要求4所述的缓存方法,其特征在于,所述事件发布步骤中,对于事件在发布过程中的当前代理节点,其缓存路由信息的更新方法具体为: 若当前代理节点在缓存点的后方,则将缓存路由信息中的下一跳设置为前驱的代理节占.^ \\\ ? 若当前代理节点正好为缓存点,则将缓存路由信息中的下一跳设置为当前代理节点自身; 若当前代理节点在缓存点的前方,则将缓存路由信息中的下一跳设置为后继的代理节点。
6.根据权利要求5所述的缓存方法,其特征在于,所述缓存获取步骤中,将缓存请求转发到缓存点获取缓存的方法具体为: 在缓存请求转发到缓存点的过程中依次记录沿途经过的代理节点,记为缓存请求路径;缓存请求到达缓存点后,缓存点将请求的缓存沿缓存请求路径的逆序发送给发出缓存请求的代理节点。
7.根据权利要求1所述的缓存方法,其特征在于,所述事件发布步骤中,若当前代理节点作为缓存点并进行缓存时,进行判断:若当前代理节点的存储空间耗尽,则询问该事件发布路径之外的直接邻居是否尚有可用存储空间;若该邻居有可用存储空间,则将事件转发给该邻居进行缓存。
8.根据权利要求1所述的缓存方法,其特征在于,所述缓存点信息还包括缓存点位置、缓存副本数目以及缓存时间戳,所述缓存点位置、缓存副本数目以及缓存时间戳的初值均为空;对于发布路径中的每个代理节点,若当前代理节点作为缓存点并进行缓存时,更新事件的消息头中记录的缓存点位置、缓存副本数目以及缓存时间戳,同时更新当前代理节点内存储的缓存点位置、缓存副本数目以及缓存时间戳。
9.根据权利要求8所述的缓存方法,其特征在于,在事件在发布过程中,沿途比较各代理节点的缓存时间戳,获得最旧缓存的位置,当事件抵达订阅节点时,若整条发布路径上的存储空间耗尽,则转回至最旧缓存的位置替换最旧的缓存。
10.根据权利要求1所述的缓存方法,其特征在于,所述事件发布步骤中,对于每个代理节点,采用冗余精简方法对事件进行缓存,所述冗余精简方法具体为: 设代理节点为bi;其包含若干子节点bij,设gij为每个子节点bij对应的子树;根据目标函数學确定将缓存的副本分派到缓存点的哪些子树,如公式(2)所示:
【文档编号】H04L29/08GK103888517SQ201410075650
【公开日】2014年6月25日 申请日期:2014年3月4日 优先权日:2014年3月4日
【发明者】曹健, 于润胜, 徐钱元, 许文星 申请人:上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1