一种发布/订阅系统的动态负载平衡方法

文档序号:7750017阅读:231来源:国知局
专利名称:一种发布/订阅系统的动态负载平衡方法
技术领域
本发明涉及一种基于渠道的发布/订阅系统的动态负载平衡方法。
背景技术
发布/订阅系统(publish/subscribe)是一种信息交互和共享的中间件。在发布/ 订阅系统中,主要有三个参与方,发布者以事件(event)的形式产生数据,并将事件发布到 系统中;订阅者通过订阅(subscription)向系统声明它们感兴趣的事件;发布/订阅系统 将事件与系统中已收到的订阅进行匹配,并且向订阅了该事件的订阅者发出事件通知。系 统的主要接口包括发布事件(publish)、添加订阅(subscribe)、取消订阅(unsubscribe) 和事件通知(notify)。发布/订阅系统的基本结构如图1所示。通过发布/订阅系统,发 布者和订阅者之间的交互在空间、时间和控制流上完全解耦。大规模分布式的发布/订阅系统具有客户/多服务器体系结构,其中的服务器也 称为事件代理服务器(Event Broker)或者代理(Broker),这些服务器组织成为一定的拓 扑结构,如图2所示。每个服务器都可以作为接入服务器接收订阅者的添加订阅消息和发 布者的发布事件消息。在发布/订阅系统中,一个关键技术就是事件/订阅路由算法,路由 算法负责将系统中的事件消息、订阅消息、取消订阅消息按照一定的规则从接入服务器转 发到目的服务器。发布/订阅系统在金融服务、新闻服务、传感器网络、RFID应用等多个领域有很大 的实际应用价值,普适环境下大规模多种类事件给发布/订阅系统带来了更多的系统效率 和自适应问题。当系统规模很大,订阅和事件数目很多时,系统整体处理的负担加重,同时 可能造成某些服务器负载过重,形成性能瓶颈;网络中事件/订阅路由消息过多,容易造成 网络拥塞。因此,需要设计实现高效的事件/订阅路由算法,提高系统的灵活性与可伸缩 性,满足大数据量处理和适应负载动态变化的需求。发布/订阅系统通常建立在一个由服务器组成的覆盖网络(Overlay)上,其中,服 务器通常被组织成层次结构或者平面结构,覆盖网络结构一般是静态的,拓扑结构的改变 比较少,服务器之间通过底层的通信协议进行通信。在现有的一些事件/订阅路由算法中,有一类称为渠道路由,其中,一个渠道与 某种特定的事件类型关联。渠道路由方法对于接收到的每一个订阅和事件,都会计算出 相应的渠道,并将其传递给那些渠道进行处理。也就是说,给定一个订阅,系统将会计算 出关于该订阅所属的渠道,这些渠道将负责存储该订阅并将满足该订阅的所有事件转发 至订阅者;给定一个事件,也会计算将返回一个这个事件所属的渠道,该渠道负责将该事 件与系统中的订阅匹配,并转发给相关订阅者。采用渠道路由,系统中的每个服务器只需 保存系统中的一部分订阅,每一个事件到达时只访问系统中的一部分服务器,这样,降低 了整个网络中需要转发的消息数目和总的计算开销。Meghdoot (Gupta, A.,Sahin, 0. D., Agrawal,D.,and Abbadi,A. E. Meghdoot :content_based publish/subscribe over P2P networks. InProceedings of the 5th ACM/IFIP/USENIX international Conference on
4Middleware, Toronto, Canada,18—22 October,2004. Middleware Conference, vol. 78. Springer-Verlag New York, NewYork, NY, pp.254-273.)禾口 Hermes(Pietzuch, P. R. and Bacon, J. Peer-to-peer overlay brokernetworks in an event-based middleware. In Proceedings of the 2nd international Workshop onDistributed Event-Based Systems, San Diego, California,08-08 June,2003. DEBS ' 03. ACM, New York, NY, PP. 1-8.)等系统使用了这种路由算法。对于渠道的划分方法,主要包括两种,分别是事件空间划分(Event Space Partitioning, ESP)和订阅集合划分(Filter Set Partitioning,FSP)。在事件空间划分方式下,系统所能处理的整个事件空间被划分成多个互不相交 的子事件空间,这些子事件空间分配到网络中的服务器,由它们进行管理。一个订阅如果 与某些服务器所管理的事件空间有重叠,那么该订阅就存放在这些服务器上;一个事件 可以看成是事件空间中的一个点,它将被转发至所属的唯一事件空间所在的服务器上进 行匹配。基于事件空间划分的主要优点在于每个事件至多只会转发到网络中的一个服务 器,从而降低了网络中的事件流量。它的不足在于,如果一个订阅与多个子事件空间都有 重叠,那么它可能被传递到多个服务器,从而增加了系统中总的订阅消息流量。另外,由 于一个订阅可能存放在多个服务器中,使得订阅的更新也变得复杂。TarkomaCTarkoma, S.Dynamiccontent-based channels :meeting in the middle. In Proceedings of the Second internationalConference on Distributed Event-Based Systems, Rome, Italy, 01-04 July, 2008. DEBS' 08,vol. 332. ACM, New York, NY, pp. 47-58.)给出 了一种基于事 件空间划分的动态渠道路由算法。在订阅划分的方式下,每一个订阅只被一个服务器管理,相似的订阅将会被存放 在同一个服务器上。每个服务器上的订阅集合用一个概要订阅(Summary Subscription) 表示,不同服务器的概要订阅可能重叠。如果一个事件被某些服务器的概要订阅所确定的 空间包含,那么该事件将会被转发至这些服务器上进行处理。显然,订阅划分方式与事件 空间划分方式相比降低了订阅消息的流量,而增加了事件消息的流量。Zhang(Zhang,C., Krishnamurthy, A. ,Wang,R. Y,and Singh,J. P. Combining flexibility and scalability in apeer-to-peer publish/subscribe system. In Proceedings of the ACM/IFIP/ USENIX 2005international Conference on Middleware, Grenoble,France,01—01 November,2005. G. Alonso, Ed. Middleware Conference. Springer-Verlag New York,New York, NY, pp. 102-123.)给出了基于订阅划分的渠道路由算法。目前,发布/订阅系统中的负载平衡问题现有的研究还比较少。Cheimg(AleX YeungCheung,A.K.and Jacobsen,H. Dynamic load balancing in distributed content-basedpublish/subscribe. In Proceedings of the ACM/IFIP/USENIX 2006 international Conference onMiddleware,Melbourne,Australia,01—01 November, 2006. M. Henning and M.van Steen,Eds. Middleware Conference. Springer-Verlag New York, New York, NY, pp. 141-161.) ST PADRES (Li, G. and Jacobsen, H. Composite subscriptions in content-based publish/subscribesystems. In Proceedings of the ACM/IFIP/U SENIX 2005 international Conference onMiddleware, Grenoble, France, 01-01 November,2005. G. Alonso,Ed. Middleware Conference. Springer-Verlag NewYork, New York, NY, pp. 249-269.)给出了一个负载平衡框架、负载估计算法和负载划分算 法。我们注意到PADRES的路由方法是基于广告的,而在现有的渠道路由研究中,系统的负 载平衡问题研究的还相对较少,例如如何衡量服务器上的负载、如何衡量每个订阅所产生 的负载等问题仍然没有一个明确的定义,内容空间的划分标准以及划分优劣的评价仍然没 有一个统一的衡量标准。

发明内容
针对上述的现有的路由算法中存在的问题和不足,本发明的目的是提供一种发布 /订阅系统的动态负载平衡方法,该方法采用高效的路由算法,使得网络中的各个服务器的 处理负载均衡,同时降低事件传递开销,减少事件的处理延迟。所述发布/订阅系统包括由多个服务器组成的对等覆盖网络(Broker Overlay), 网络中的各个服务器均作为接入服务器接收订阅和事件信息(订阅信息主要包括订阅和 取消订阅,事件信息主要包括发布事件),并通过全局路由表确定该信息所属的事件渠道后 将其转发至该事件渠道进行处理;该系统在运行过程中进行动态负载平衡,动态负载平衡 包括负载过重的服务器从本地选择转移负载并在其他服务器中选择负载接收服务器,将 该转移负载发送至该负载接收服务器。本发明涉及的发布/订阅系统将事件空间划分为多个子事件空间,并将其映射为 渠道,再将事件渠道划归到不同的服务器负责,当事件或订阅到达服务器后,该服务器检查 它属于哪些渠道,然后转发至目的渠道进行处理。在路由协议的执行过程中,系统会实时的 监测各个渠道的负载,进而监测网络中各个服务器的负载状况,并采用相应的负载平衡策 略调整渠道的部署,平衡各服务器之间的处理负载。原子路由协议的整体目标是使得网络 中的各个服务器的处理负载均衡,同时降低网络开销,减少事件的处理延迟。该方法主要包括以下几个方面1)网络拓扑结构的建立。系统中的所有服务器组织成为一个覆盖网络,在这个覆 盖网络中,每个服务器都可以与其他服务器直接通信,而不管它们底层是否直接连通;各个 服务器都是对等的,都可以作为接入服务器接收订阅者的添加订阅消息和发布者的发布事 件消息。2)系统的初始化。将系统所能处理的所有事件组成的事件空间表示的渠道称为全 事件渠道,在系统初始化时,选择一个服务器作为初始化服务器,将全事件渠道放置在初始 化服务器上。初始化服务器建立本地渠道表,表中只有一项,即全事件渠道。初始化服务器 生成一个全局路由表,每个表项是渠道到服务器的映射,即 < 渠道,服务器 >,表示渠道的放 置位置。初始化的全局路由表只有一项,即 < 全事件空间渠道,初始化服务器 >,将全局路 由表包装到一个渠道初始化消息中,传递至网络中的所有其他服务器。网络中的服务器接 收到渠道初始化消息后,在本地建立本地渠道表和全局路由表。在初始化时,除了初始化节 点,其他服务器的本地渠道表均为空。3)处理订阅。系统初始化后,网络中的任意一个服务器都可以作为订阅者的接入 服务器接收订阅消息/取消订阅消息。某个服务器作为接入服务器接收到了从订阅者发出 的订阅消息/取消订阅消息,那么该服务器首先查询全局路由表,得到该订阅所属的渠道 集合,进而得到该订阅应该在哪些服务器上处理。如果需要在本地的某些渠道进行处理,则
6在本地渠道上对订阅消息/取消订阅消息进行处理;如果还需要转发至其他服务器上,那 么将该消息转发至目的服务器,并且在转发消息中加入该订阅属于的在目的服务器上的渠 道的标识。如果某个服务器接收到了从其他服务器转发过来的订阅消息/取消订阅消息和 订阅/取消订阅属于的本地渠道的标识,那么服务器不需要再查询全局路由表,直接将订 阅/取消订阅交给本地渠道处理。4)处理事件。系统初始化后,网络中的任意一个服务器都可以作为发布者的接入 服务器接收事件。某个服务器作为接入服务器接收到了从发布者发出的事件消息,那么该 服务器首先查询全局路由表,得到该事件所属的渠道(事件只可能属于某一个事件渠道), 进而得到该事件应该在哪个服务器上处理。如果需要在本地的渠道进行处理,则在本地渠 道上对订阅消息/取消订阅消息进行处理;如果事件需要被在其他服务器上的渠道处理, 那么将该消息转发至目的服务器,并且在转发消息中加入该事件属于的在目的服务器上的 渠道的标识。如果某个服务器接收到了从其他服务器转发过来的事件消息和事件属于的本地 渠道的标识,那么服务器不需要再查询全局路由表,直接将事件交给本地渠道处理。如果有 订阅与事件匹配了,那么将向订阅了该事件的订阅者发送事件通知。5)监测负载状态。当渠道处理属于它的事件时,会调用渠道所在服务器上的匹配 模块,将事件与订阅进行匹配。在事件进行匹配时,将记录由于该事件匹配在该事件渠道上 产生的负载。服务器上的负载等于放置在该服务器上的各个渠道负载之和,所以进而可以 得到服务器上的负载。各个服务器在系统运行时会定期的向所有邻居发送自己的负载信 息;服务器接收它的邻居发送过来的负载信息,从而得知整个网络的负载状况。6)负载平衡过程。服务器在得知整个网络的负载状况之后,如果发现自己的负载 过重,那么将以一定的概率触发负载平衡过程。负载过重的服务器作为负载移出服务器,从 负载较低的邻居服务器中选择出负载接收服务器,并在负载移出服务器的本地渠道中选择 出可以转移出去的渠道。在选择负载接收服务器和负载移出渠道时,需要考虑不同的因素, 使得转移开销尽量小,负载平衡效果较优,并且在选择的过程中,可能涉及渠道的分割或者 合并。在选择出负载接收服务器和负载移出渠道后,在负载移出服务器和负载接收服务器 之间就会建立负载转移会话,转移渠道进而转移负载。进一步地,上述步骤5)所述的监测负载过程具体为负载平衡算法的执行过程分成一个个时间片T,在每个时间片内监测本地负载和 其他服务器的负载,并根据自身与其他服务器的负载状况决定是否启动负载平衡过程。在每个时间片T内,服务器会接受其他服务器传递过来的负载交换消息,并且在 时间片结束的时候,根据本地服务器的负载信息,生成一个负载交换消息,发送给网络中其 他所有服务器。服务器会根据邻居的负载信息以及自己的负载信息计算出包括网络中平均 负载水平等数据,分析自己的负载平衡状态,如果发现本地服务器负载过重,那么将以一定 概率调用负载平衡算法,开始平衡过程。对于一个渠道,在匹配属于该渠道的某个事件时,测试到的订阅的数目(不论该 订阅是否与事件匹配成功,只要在匹配过程中参与了测试就计算在内),称为匹配这个事件 的开销,在时间片T内渠道处理的所有事件的开销之和就是渠道在时间片T内的负载,服务
7器在时间片T内的负载等于该服务器上各个事件渠道的负载之和。具体的负载检测流程可按下列实例进行0.各个服务器在初始化时默认自己的负载状况是低负载状态;1.从网络中的其他服务器接收到负载信息交换消息,得到其他服务器的负载信 息;2.对于从邻居服务器接收到的每一个负载交换消息,根据它们是否负载过重,分 别放入两个链表中保存;3.在时间片末,计算出自己的负载值。如果已经得到所有邻居的负载消息,那么计 算出平均负载;4.根据自己的负载状态,生成一个新的负载交换消息,将这个消息发送给网络中 的其他服务器;5.如果当前服务器处于负载过重的状态,那么以一定概率调用负载调度算法,平 衡服务器之间的负载;6.时间片T结束,继续1。进一步地,负载平衡过程,即上述步骤6),分为两个阶段负载调度(选择出负载 接收服务器和负载转移渠道)和负载转移。负载调度使用一组评估函数选择出负载接收服 务器和需要转移的渠道,在评估函数的执行过程中可能会分割/合并本地已有的渠道。负 载转移定义了在负载移出服务器和负载接收服务器之间的通信协议,将移出渠道和相关订 阅由负载移出服务器转移到负载接收服务器上,完成负载平衡过程。本发明采用基于渠道的路由方法,能够将事件的处理责任分布到网络中的不同服 务器上,在处理订阅和事件消息时,至多在网络中转发一次,即可由接入服务器转发至目的 服务器进行处理,从而减少了网络中的消息流量,降低网络负载;事件在网络中的服务器上 仅需要匹配一次,就可以得到对它感兴趣的订阅者。同时,本发明中为渠道路由算法加入了 负载平衡机制,系统一直监测整个网络的负载状况,在负载不平衡的情况发生时,可以启动 负载平衡的过程,平衡服务器之间的负载。与现有的渠道路由协议相比,可以防止热点区域 的产生,进而降低事件的处理延迟,提高事件的处理效率。


图1是现有发布/订阅系统的基本结构示意图;图2是现有的服务器拓扑结构示意图,其中1-事件服务器,2-发布者/订阅者;图3是本发明的渠道路由服务器覆盖网络示意图;图4是事件空间与订阅关系示意图;
图5是服务器状态转换示意图。
具体实施例方式下面通过具体实施例对本发明作更为详细的描述。本发明将系统中的服务器组织成为一个对等覆盖网络,在这个覆盖网络中,服务 器之间可以直接通信。在系统建立之初,首先任意选择一个服务器作为初始化服务器,在这 个服务器上部署上全事件渠道,建立全局路由表,并将这个全局路由表转发至网络中的其他服务器;然后各个服务器可以作为接入服务器接收用户的订阅或者事件消息,通过查询 全局路由表,可以得到订阅或者事件应该被哪些服务器处理。在系统正式运行时,部署在每 个服务器上的负载平衡模块会不断的监测各个服务器上的负载并在服务器之间交换负载 信息,在负载不平衡的状况发生时,开始负载平衡过程,调度负载,使得各个服务器之间的 处理负载分布均勻。[1],首先详细介绍本发明中服务器覆盖网络的建立。不考虑网络中的服务器是如 何硬件连通的,在覆盖网络层任意两个服务器之间是可以连通的,每一个服务器都知道网 络中所有服务器的IP地址。一个服务器可以通过IP地址和另外的任何一个服务器进行通 信,消息的传输使用TCP完成。底层的物理链路发生改变,不影响应用层上两个服务器之间 的通信,只要它们之间仍有可以连接的通路。网络拓扑结构如图3所示,服务器之间的物理 连接使用虚线表示,当服务器A与服务器D之间的物理链路断开时,A向D发送的消息可以 通过路径A — C — E — D到达服务器D。另外,服务器上的网络接口模块使用MINA(Apache MINA Project. http//mina. apache, org/)网络框架开发,负责服务器间接收/发送各种消息,包括事件消息、订阅消 息、路由表更新消息、渠道转移消息、负载监测消息等。网络接口模块包括消息接收队列和 消息发送队列,在接收消息队列不为空时,系统按照消息到达的先后顺序,对消息队列中的 消息逐一进行处理;在发送队列不为空时,系统按照进入队列的先后顺序逐一将消息发送 出去。消息接收队列/消息发送队列包括两种,一种是常规消息接收/发送队列,用于接收 /发送普通的事件、订阅和取消订阅消息,另外一种是高优先级队列,用于接收/发送事件 渠道初始化消息、负载平衡相关的消息等具有高优先级的消息。在高优先级队列不为空时, 系统总是先处理高优先级队列中的消息,然后才是常规队列中的消息。[2],下面详细介绍本发明涉及的订阅、事件和事件空间的定义以及它们之间关系 的定义。基于内容的发布/订阅系统中的谓词、订阅、事件项、事件定义如下一个谓词f 定义为一个四元组,即f = (type, attr, op, cons),其中type表示该谓词的取值类型, attr表示属性名称,op表示谓词所允许使用的操作符,cons表示该谓词在该属性上的约 束值。一个订阅F是若干谓词的合取,可以表示为F = f\ Af2 A... Afn。一个事件项 a是一个三元组,S卩a = (type,attr,value),其中type是取值类型,attr是属性名称, value是事件项的取值。一个事件是若干事件项的合取,所以,一个事件e可以表示为e = a \ a2/\...八 ak。对于谓词f = (type, attr, op, cons),我们定义L (f)为f的约束值域,即在属性 attr上满足f的所有类型为type的值的集合。对于事件项a = {typee :attre, valj和 谓词f = {type :attr,0p,Val},我们说事件项a满足谓词f,即f > a ,当且仅当type = typee A attr = attre A vale G L(f)。一个订阅 F = 八 f2 八...A fn,事件 e = a A a2 A . . . A a k,事件 e 满足 订阅F,即e G F,当且仅当VfiBo^fi > a JO另外,谓词之间、订阅之间还存在着覆盖关系,下面给出谓词之间和订阅之间覆盖 关系的定义。对于谓词 f1 = {type! -.attr^ op” valj 禾口谓词 f2 = {type2 :attr2, op2, val2},如
9果满足f2的事件项一定满足f\,那么称覆盖f2,即> f2。形式化的描述为f\ > f2,当 且仅当,type1=type2Aattr1=attr2AL(f1)2L(f2)。覆盖关系是自反的,覆盖自身。一个订阅F1 = f/八C八...A f;,,另一个订阅F2 = f\2八f22八...八fn2,如果 满足F2的事件一定满足F1,那么称订阅F1覆盖订阅F2,S卩F^F2。形式化的描述为F2, 当且仅当,▽ fi'3 f, f/ > f/0本发明采用事件空间划分的机制,将内容空间进行划分,进而将划分后 的事件空间映射为事件渠道。事件空间的表示也类似订阅,可以表示为Es = f\八f2八…A fis A ... A fn,其中谓词fid^i^n)表示了在某种属性上的约束,用 于限定事件空间在该属性维度上的范围。如果某属性不出现在事件空间的表达式中,表明 该属性在该事件空间上值可以取值域中的任一个。所以,如果定义事件空间的表达式中的 谓词数目为0,则对所有的属性的取值都没有限制,那么该事件空间就是全事件空间,为了 简单起见,记为WES。事件空间Es覆盖事件e表示为e G Es ;事件空间Es覆盖订阅F表示为ES = F;事 件空间Es与订阅F有重叠表示为ESAF关0。一个事件空间Es = f\Es A f2Es A... A fnEs,事 件e= ai A a2 A... A ak,事件空间艮覆盖事件e (或者说事件e在事件空间ES中、 事件e属于事件空间ES),即e e Es,当且仅当f产> a」(1彡i彡n,1彡j彡k)。 事件空间Es = f\Es A f2Es A ... A fnEs和订阅F = f\F A f/ A . . . A f;,事件空间Es覆盖 订阅F,即Es〕F,当且仅当V f,Es3 f/, f^3 > f/0事件空间艮=€严八f2Es八…AfnEs, 一个订阅卩=(八《八...A f/,二者存在重叠关系,即EsfTF¥0 ,当且仅当 ,, f;)attr,Es = attrf a L(f,Es) (1 L(ff ) = 0(1 Q 1 W S m)。如果一个订阅 F 被一个
事件空间Es覆盖或者与Es有重叠关系,那么就称订阅F属于事件空间Es。图4给出了一个二维的事件空间,它被分割成了 6个子事件空间E” E2,E3,E4,E5, E6,其中订阅 Sub!, Sub2 禾口 Sub3 属于 E^ Sub3, Sub4, Sub5 禾口 Sub6 属于 E2, Sub6, Sub7 禾口 Sub8 属于E3,Sub9属于E4,Sub1Q和Subn属于E5,Sub1Q和Sub12属于E6。并且在图4中,矩形之 间的包含表示了订阅之间的覆盖关系,矩形之间的重叠表示了订阅与事件空间、订阅与订 阅之间的重叠关系。同时也可以看出,一个订阅可能会属于多个事件空间。[3],下面介绍本发明中事件渠道的定义。一个事件渠道ch (Event Channel,或简称为渠道)包含这个渠道的事件空间Es和 属于Es的订阅的集合S。在事件渠道上除了保存有该渠道上的事件空间和订阅的集合之 外,还包括采样统计时间片内落在该渠道上的事件的集合等,这些信息都是为了后续监测 渠道上的负载和进行渠道分割等操作设置的。另外,在表示时,可以将渠道简化表示为CH =<Es,S>这种二元组的形式。定义EC为所有事件渠道的集合,即全事件渠道。一个事件渠道被放置到唯一的服 务器上,一个服务器上可以放置有多个事件渠道。每个事件渠道都包含有一个唯一的id作 为它在网络中的唯一标识,这个id是建立这个事件渠道的服务器赋给的(初始化时或者渠 道分割或合并时),包括服务器的标识和服务器本地的一个序列号,所以id是全局唯一的。[4],下面介绍服务器上的本地渠道表(localTable)和全局路由表 (routingTable)。
在服务器上保存着两个表,一个表称为本地渠道表(localTable),表项为事件 渠道,记录着放置在这个服务器上的渠道,另外一个表称为全局路由表(routingTable), 表项为事件渠道到服务器的映射,记录着渠道在服务器上的放置位置。每个服务器的 localTable是各不相同的,而routingTable都是一样的。当订阅消息到达某一个服务器(即,接入服务器)时,接入服务器上通过查询 routingTable得到它属于的那些事件渠道,并将该消息转发到相应的渠道进行处理;一个 渠道ch接收到订阅消息后,将会把该订阅添加至本地的订阅管理结构中,并根据添加结 果,将订阅保存在自己的订阅集合S (使用哈希表实现)中。如果有事件消息到达接入服务 器时,路由模块会判断出该事件属于哪个渠道,然后将该事件转发到该渠道进行处理;渠道 接收到事件后,会将其进行匹配,并且记录相关的匹配结果和产生的负载。在系统初始化时,在初始化服务器(initializer broker, ibrk)上部署着全事件 渠道EC,routingTable中只有一项,即<EC,ibrk>,并将这个路由表传递给系统中的所有服 务器。初始化完成后,系统可以接收订阅和事件,通过查询路由表,将其转发给相应渠道进 行处理;并且根据服务器间交换的负载信息,移动渠道,平衡负载。[5].下面介绍在本发明中渠道路由的属性模式的约定。在渠道路由中,对订阅和事件有一些约束,例如,系统必须已知所需要处理的所有 属性的集合,所有事件和订阅的属性都从这个集合中选取,事件中必须包含的属性的集合 也是已知的等。对于系统所处理的事件和订阅,规定它们的表达式要满足一定的模式(schema), 这个模式规定了系统所处理的事件/订阅的属性种类和约束,包括系统中所能处理的所有 属性的集合,事件中必须包含的属性等。系统所使用的模式更加规范的描述为S = k2,... kv ...,AJ,其中每一个 A^l^i^n)表示了一个属性,每一个属性包含了属性名称,属性类型和属性值域三个方 面的信息,可以表示为Iname,type, min, max} 0每一个属性由它们唯一确定的属性名称确 定,属性的类型是系统所支持的数据类型,例如在本发明的发布/订阅系统中支持数值、字 符串禾口 RFID 编石马(Beihong Jin, Shuang Yu, Xinchao Zhao, Zhenyue Long, Yifeng Qian Subscribing andMatching RFID-Related Events. ICEBE 2007. pp. 41-47.)三种数据类型 等,min和max描述了该属性的值域的取值范围。系统中所有的参与方都遵循这个模式。系 统中使用的订阅中出现在谓词中的属性集合是模式中规定的属性集合的子集,事件可以表 示成为事件中只包含模式中的属性的一个子集。一个事件可以不包含有模式中所列举的所 有属性,但是总有一些属性是必选的,在定义系统的属性模式时,也给出了系统中事件需要 的必选属性和可选属性。在本发明中给出特征属性(Distinguishing Attributes, DA)集 合的概念,DA =出 力^,...』々』,也就是所谓的必选属性。事件中的属性集合必须包含 特征属性集。并且,用于表示或划分事件空间的属性,也必须从DA集合中选取,这样,可以 保证事件总是事件空间中的一个点,从而只能属于唯一的一个事件空间,进而只能被唯一 的一个事件渠道处理。在系统初始化的时候,这个模式就已经预先在各个服务器上配置好 了。选择划分事件空间的属性需要满足下列条件首先这些属性是从DA集合中选取 的,而且,可以给这些候选属性设定优先级,选取划分事件空间的属性时更倾向于使用数值
11类型,然后是RFID编码类型,最后才是字符串型。同时,给出了一个特征属性attr的流行 度的概念:
属性的流行度用于定乂问种类型的 特征属性的优先级,一个属性的流行度值越大,说明关注这个属性的订阅越多,那么它的优 先级就越高,在划分事件空间时就越倾向于选取它。[6],下面,给出在本发明的路由算法中动态负载平衡的问题定义。假设在系统中包含有n个服务器,渠道总数是m(m的值是可以根据渠道分割或者 合并的结果动态变化的)。令gi表示一个服务器,假设在服务器gi上有mi个 事件渠道。令chik表示在服务器上gi的第k渠道,1≤i≤n并且1≤k≤mp渠道chik 的负载是dik,Ci是gi的处理能力。gi的处理能力可通过测试服务器的处理能力给出。
定义dCi 作为一个服务的负载水平(Load Leve 1

是网络中n个服务器负载水平的平均值,即
的值是所有服务器的负载水平的标准差。使用一个参数S去衡量不同的负载转移策略的效果,
希望S的值在渠道转移之后变小。 假如一个渠道要从服务器gi转移到gj,那么转移开销mig_COst {chik — gj}可以定 义为
其中mig_ChSiZeikj(Chik)是需要转移的渠道的大小,可以用需要转
移出去的订阅数目衡量它,bWiJ是服务器gi与gj之间的网络带宽。在网络中包含n个服务器、m个渠道的情况下,希望能够找到一种使得5和mig_ cost的值最低的转移策略。服务器负载过重和负载过轻的定义如下如果dCi<dc-△d,那么负载过轻,它的负 载状态即为UNDERLOADED ;如果dCi>dc+△d,那么负载过重,负载状态为OVERLOADED。A d是 一个根据应用或经验设定的值。如果一个服务器的负载非常接近忑并且通过移动渠道不能到达更好的状态,那么 它为负载平衡状态,即STABLE,它的负载水平满足
如果服务器处于负 载平衡状态,那么负载调度算法将不会被调用。可以定义
其中S e (0,1),S在 实际使用时可以选取0.1,作为Ad的一个参考值。如果一个服务器的负载状态为OVERLOADED,即负载过重状态,负载调度算法则可 能被调用。当负载调度算法执行时,调度算法中各个参与方的状态设置为BUSY,表明它正处 在负载调度算法执行过程中。图5给出了服务器的状态转换图。[7],下面介绍在本发明中对渠道上以及服务器上的负载的估算。定义在采样统计时间片T内服务器brk上的负载等于该服务器上各个事件渠道的 负载之和 系统将一直监测各个事件渠道上的负载,记录每个采样统计时间片T内的负载。
一个事件渠道ch上的负载计算公式定义为 sub6表示服务器在匹配一个事件e时测试到的订阅的数目(不论e是否匹配该订 阅,只要在匹配过程中测试了的订阅就计算在内;原子订阅匹配模块只会测试属于渠道ch 的订阅,不属于ch的订阅都已经被过滤,不会被测试),用这个数值表示匹配该事件所需要 的资源开销。采用将订阅匹配的开销与订阅数目联系起来的负载定义方式的好处是,在划 分出去事件空间的时候,可以通过观察划分出去某一部分事件空间可以使多少订阅划分出 去,得到对负载移出服务器和负载接收服务器上负载的影响。[8],下面介绍本发明中的负载系统的平衡算法。负载平衡算法的执行过程分成一个个时间片T(即前面提到的采样统计时间片), 在每个时间片内监测本地负载和其他服务器的负载,并根据自身与其他服务器的负载状况 决定是否启动负载平衡过程。服务器在每个时间片T内都交换负载信息,根据这些信息,可以在发生负载过重 或者负载不平衡的时候触发负载调度算法,平衡负载。服务器之间交换的消息称为负载信息交换消息(Load Information Exchange Message, LIEM)。一个LIEM消息包含4个属性(1)服务器的唯一标识,(2)该服务器负载 平衡的状态,可以是UNDERLOADED,STABLE, OVERLOADED,或者BUSY,(3)该服务器的负载水 平dc, (4)该服务器的处理能力c。在每个时间片T内,服务器会接受其他服务器传递过来的LIEM消息,并且在时间 片结束的时候,根据本地服务器的负载信息,生成一个LIEM消息,发送给网络中其他所有 服务器。服务器会根据邻居的负载信息以及自己的负载信息计算出包括网络中平均负载水 平等数据,分析自己的负载平衡状态,如果发现本地服务器负载过重,那么将以一定概率调 用负载平衡算法,开始平衡过程。[9],下面给出动态负载平衡算法的流程描述。0.各个服务器在初始化时默认自己的负载状况是UNDERLOADED ;1.从网络中的其他服务器接收到负载信息交换消息LIEM,得到其他服务器的负 载信息;2.对于接收到的每一个LIEM (发送者为gj),如果gj的状态是UNDERLOADED,那 么就把它加入到链表uNodeList (如果gj已经保存在oNodeList之中,那么需要先把它从 oNodeList中删除),如果状态是OVERLOADED,那么把它加入到链表oNodeList中(同样,如 果已经保存在uNodeList中,需要先把它从uNodeList中删除),这两个数据结构将在负载 调度算法中用到;3.在时间片末,计算出自己的dc值。如果已经得到所有邻居的负载消息, 那么计算出平均负载忑,并根据前面给出的服务器状态定义,更新自己的负载状态为 UNDERLOADED/OVERLOADED/STABLE ;4.生成一个新的负载交换消息,将这个消息发送给网络中的其他服务器;5.如果当前服务器处于OVERLOADED的状况,那么以一定概率调用负载调度算法, 开始负载调度过程,平衡服务器之间的负载;
6.时间片T结束,继续1。对于时间片T的选择,有这样的考虑如果时间片太短,那么在较短的时间内我们 将不能得到正确的事件分布信息,从而不能得到正确的负载分布信息,这样得出的结果往 往会造成系统负载转移的抖动,在具体选择T的初始值时,需要考虑系统所在的应用场景, 对事件流的模式变化周期有一个估计值,并根据此估计值设置T的初始值。如果在负载平 衡算法当中发现负载调度算法非常频繁的执行(例如连续多次检测到在每两个时间片T内 就会调用一次负载调度算法),那么系统就需要自动的将T适当延长(例如延长至原值的 150%),以能够得到更加准确的事件流信息,防止抖动的发生。并且,在本地服务器发现自 己是OVERLOADED状态时,并不会立刻启动负载调度算法,而是以一定的概率调用负载调度 算法(例如在实现时以50%的概率调用),以防止抖动的发生。另外,服务器gi在得到网络中的某个服务器g^的LIEM消息之后,更新本地的 uNodeList和oNodeList两个数据结构时,可以不参看它们的负载状态,而是将g」的负载水 平dCj与自己的dCi比较,如果dCi大于dCj,那么就将gj放置在uNodeList中,如果dCi小 于dCj,则把gj放置在oNodeList中,以取得更好的负载平衡效果。[10].下面介绍本发明中的负载调度算法,该算法首先使用一组评估函数选择出 负载接收服务器和需要转移的渠道,在评估函数的执行过程中可能会分割/合并本地已有 的渠道。然后将选择出的渠道转移到负载接收服务器上,完成负载平衡过程。下面的内容 分别介绍了负载评估函数、渠道分割/合并的策略和调度算法。首先介绍负载调度算法中的负载评估函数。在发生负载不平衡时进行负载调度,需要确定哪些渠道可以被转移、被转移到哪 些服务器上。在渠道转移的过程中,还存在着转移开销,包括从负载移出服务器上选择出要 转移的渠道、将渠道及其订阅转移至负载接收服务器上、在负载接收服务器上添加订阅、最 后将由于渠道转移而将不再需要的订阅从负载移出服务器上删除等过程的开销。网络中服 务器的处理能力可能是不相同的,那么把一个渠道从一个服务器转移到另外一个服务器, 即使渠道负载是一样的,但对不同的负载接收服务器,造成的负载改变是不同的。为了将前面提到的各种因素都考虑进去,并比较不同因素的影响,定义了分级函 数(leveling function),lev(x)=「x.Z"|/i,其中 x G
,并且「]是取整操作符,L 是层 次的数目,是可以根据需要作出改变的值。这个分级函数可以将x划分到L个层次中。评估函数包括四个,f\ f4,用于找到较好的将负载(渠道)从负载较重的服务器 上转移出去的策略。其中,用于评价选择不同的本地渠道作为转移渠道对负载平衡的影 响;f2用于评价选择不同的服务器作为负载接收服务器对负载平衡的影响;f3用于评价在 已经选择出某个负载接收服务器时,选择不同的转移渠道对负载转移开销的大小;f4用于 评价在已经选择出某个负载接收服务器时,选择不同的转移渠道对订阅靠近事件源放置的 影响。负载转移策略的确定分为两个步骤(1)利用&和&选定接收负载的服务器;(2) 利用f\,f3和f4选定合适的转移出去的渠道。下面介绍&的推导。为了评估在负载过重的服务器gi上的某个渠道chik(l ^ k ^ m,)转移到某个已经 确定的接收负载的目的服务器gj的效果,定义了第一个评估函数f\(gi,gj, chik),用于评价选择不同的本地渠道作为转移渠道,对负载平衡的影响。&由以下过程推理得出如果要比较8值在chik转移之前和之后的变化,我们只需要保证 并且希望 的值最小,其中x是转移出去的渠道上的负载。解(1)式得到识
,从而得至IJ, 另外,由 所以如果将一个渠道chik转移出去之后,如果dik在(0,2(p)之间,那么S的值在转 移之后会变小。而且,选择出需要转移的渠道时,我们尽量选择那些dik最接近cp的值,这样 能够取得更好的负载平衡效果。所以我们定义 其中, 这样,我们就可以对&上的每一个渠道给出一个等级(rank)值,通过这个rank值 测定把它们转移出去的优劣。但是,如果负载过重的服务器上找不到任何渠道chik,满足dlke (0,2cp),那么必须要 对渠道进行分割,然后再选择。例如系统在初始化时,只有唯一的一个渠道chn,并且部署 在该初始化服务器&上,那么屯=dn,dCi = dn/Ci,忑=dCi/n。如果已经选择出来某个服务
器&作为接收负载的服务器,那么解(1)式之后得到

加特殊的,假设每个服务器的处理能力都是相同的C,则X < di = dn,那么就必须要对已有 的渠道进行分割,将分割后的渠道划分出去。这时,我们将选择服务器上负载最大的那个渠 道,然后将其分割成两个部分,使得分割出的那一部分负载最接近cp。上面给出的是需要对
渠道进行分割的一种情况,另外,假如在gi上存在k个渠道,满足
,即这些渠道的负载之和与cp的差别小于某个限定值£ (实现时£可选取为0.1* (P),那么可以将这些渠道合并,成为一个新的渠道,转移出去。下面介绍&的推导。为了从负载较轻的服务器中,选择出合适的服务器作为接收负载的服务器 gj(j辛i),根据服务器上的负载和处理能力,定义了 f2(gi,g」,chik),其中上的一 个渠道。f2 根据非合作博弈论(Non-Cooperative Game Theory, John Nash. Equilibrium points in n-persongames. Proc. of the National Academy of Sciences, 36, pp. 48—49, 1950.)得到,用于评估选择不同的服务器作为负载接收服务器的好坏。如果某个服务器总 是选择负载最轻的服务器最为负载接收服务器,那么不同的服务器之间很容易会产生选择 冲突,而且,可能会导致更加不平衡的状况产生。因此,每一个负载过重的服务器需要根据 它的负载需求来选择接收负载的目标服务器。对于负载较重的服务器,在本发明中为它们 定义了 rank。值,对于负载较轻的服务器,我们定义了 ranku值,rank。和ranku值的定义如 下 其中Max (dc0-dik/c0)是所有负载较重的服务器中dc-d^/c,值最大的那个, Min(dcu-dik/cu)是所有负载较轻的服务器中(!…+知/…值最小的那个。一个负载过重的服务器,它评测得到的级别为rank。,它更愿意选择那些负载级别 接近ranku的节点作为负载接收服务器,所以f2定义如下 其中, 下面介绍f3的推导。
根据渠道转移开销
,转移渠道的开销与
转移出去的渠道的大小以及两个相关服务器之间的带宽相关,由此定义出f3(gi,gj, chik)。 首先,从gj上的mi个渠道中和所有的负载较轻的服务器中选择出最小的负载转移开销
;然后,将可能从gi转移到g^上的渠道chik的转移开销与最低的转移开销进行对比,得到评估结果。是gi和gj之间的带宽,bwi max表示gj到所有负载较 低服务器的带宽中的最大值。mig_chsize(chik)是转移出去渠道的大小,使用需要转移出去的订阅的数目来衡 量,f3定义如下 其中,
CN 101854299 A
说明书14/23页
.,, mig chsize(chlk)mi§-cost{chlk=--—下面介绍&的推导。由于原子路由同时也为复合路由(Peter R. Pietzuch, Brian Shand, and Jean Bacon. Composite Event Detection as a Generic Middleware Extension. IEEE Network Magazine, Special Issue on Middleware Technologies for Future Communication Networks,18(1),pp. 44-55,January/February, 2004.)提供支持,希望尽量使事件的检测 结构的放置靠近事件发布者,那么需要考虑将渠道放置在靠近事件发布者的服务器上,将 事件渠道放置在接近事件的发布者的接入服务器上。在gi上的每一个事件渠道chik上,保存了采样统计时间片T内到达渠道的事件数 目nik,另外还设置了一个数组,保存了这些事件中分别由网络中的哪个服务器转发过来的 数目,例如,由服务器g^转发过来事件的数目记为niW,如果当前服务器本身就是事件的接 入服务器,那么也相应记为niki。在渠道路由策略下,事件由接入服务器进入系统,至多被转 发一次就可以到达目的渠道进行处理,那么我们可以记录服务器gj作为事件的接入服务器 的概率为acc_rateikj = nikj/nik。所以f4定义如下
综上,四个评估函数 f4定义如下 [11].在使用上面的评估函数选择负载接收服务器和转移出去的渠道过程中,可能会涉及到渠道的分割/合并,所以下面介绍事件渠道的分割/合并策略。首先介绍如何分割事件渠道。已知特征属性集合DA= {DAi,DA2,...,DAm},一个事件渠道ch = <Es,S>,其中ES =fDA1 A fDA2 A ... A fDAk,1彡k彡m是事件空间;fDAi (1彡i彡k)是在某个特征属性上 的约束。另外已知该事件渠道上的负载LD,需要划分出去的负载为ALD。需要选取出属性 作为划分属性,将渠道分割,并且分割出来的两个新的渠道,其中之一的负载等于ALD。首先,我们需要从特征属性中选取出作为划分属性的属性。对特征属性集合中的 属性首先按照类型、流行度进行排序,得到特征属性的优先级顺序,然后试图从优先级最高 的属性开始,选择它作为划分属性对渠道进行划分;如果选择出来的属性不合适划分,那么 将会选择优先级排序结果中的下一个属性,作为划分属性,继续进行划分,直到找到合适的 划分方式。对于数值和RFID编码类型的属性,由于它们的谓词都可以表示成为一个区间的 形式,所以,可以将它们原来的值域划分为连续的区域。而对于字符串类型,尤其是引入了 取前缀,取后缀,取子串等复杂的字符串操作符之后(Beihong Jin,Xinchao Zhao,Zhenyue Long, Fengliang Qi, Shuang Yu, Effective and Efficient Event Dissemination for RFID Applications, The Computer Journal, doi 10. 1093/comjnl/bxn063),很难找至lj—— 种很好的划分字符串的方式,目前采取的方式是划分字符串集合。如果某个属性DAste= {name, type, valDomain}是字符串类型的属性,需要划分的 渠道中的事件空间表示为Es,采用DAste作为划分属性时的具体规则如下如果DAste还没有加入到事件空间的表达式中,即“,那么统计 包含落在所在事件渠道上的事件在该属性上的值,得到一个值的集合valSet,然后如果需 要使用该属性进行划分,那么将这个集合进行分割,例如分成valSetl和valSet2。valSetl 部分作为分割出去的事件空间在该属性上的字符串约束,称为类型1的字符串约束;另外 一个渠道在该属性上的约束该属性上的约束为valDomain/valSetl,称为类型2的字符串 约束,记录为{valSet2,valD0main/ValSetl}。并且如果有新到来的事件包含DAste属性,那 么就把新的值加入到valSet2中,以备以后划分使用。如果DAste已经是事件空间表达式中的一个属性,并且是类型1的约束,那么就 直接把集合分割就可以了,分割出来的属性都是类型1的字符串约束;如果是类型2的 约束,表示为{valSet2,valDomain/ValSetl},那么就从valSet2中分割出来新的集合 valSet3和valSet4,其中valSet3作为一个新的渠道在该属性上的约束,当然该约束是属 于类型1的字符串约束,另外一个渠道在该属性上的约束就表示为{valSetl valDomain/ (ValSetl U valSet3)},同样是类型2的字符串约束,并且如果有新到来的事件包含 性,那么就把新的值加入到valSet4中,以备以后再次划分使用。有了前面给出的特征属性的优先级的定义,下面我们说明如何使用这些特征属性 划分事件空间。假如特征属性按照优先级排列为DA = {DAp DA2,DAJ,那么在每个采 样统计时间片T内,每个渠道都对落入这个渠道的事件给出一个记录<ei,nunii〉,并将所有 的事件记录保存到一个队列中。事件记录在这个队列中是有顺序的,排在最前面的是在按 照落入这个渠道的在属性上值最小的那个事件,如果两个事件在上值相同,那么就 按照下一个属性DA2上的值的大小关系排序,如果仍旧相同则采用下一个属性上的值进行
18比较,以此规则,使得所有的事件有序记录在队列中。对数值和RFID编码类型的属性,只需 要比较它们的值的大小就可以了 ;对于字符串类型的属性,我们就根据它们字符串值的大 小进行排序。numi记录了事件ei在事件空间上产生的负载。假如这个事件队列为{<ei,numi>, <e2,num2>, <en,numn>},那么可以知道,渠道
ch上的总负载LD。h = E nmv如果需要划分出去的负载为A LD,并且|| <。
i=\
那么前k个事件就是我们需要划分出去的那些,它们在DA = {DAp DA2,. . .,DAJ上的属性 约束构成的子空间就是我们要划分出去的空间的大小。而且,我们可以从DA选择出来划分 属性如果前k个事件是需要划分出去的那些,我们找到一个值j,满足1 <= j < = m,并 且对于任何i,i < j,事件ek与ek+1在第i个属性上的值相等,在第j个属性上的值不相等。 那么选择SDA= {DA1,...,DAJ}这个集合作为划分属性。如果划分属性是数值或者RFID编 码数据类型,直接根据ek在这个属性上的数值分割事件渠道;如果划分属性是字符串类型, 那么就将e2,...,ek事件在这个属性上的值放入一个集合strSet,然后根据这个集合划 分事件渠道,具体操作为,对于strSet中的每一个字符串str,如果事件渠道上在这个属性 上的约束(也表示成了一个字符串集合valSet)包含了 str,那么就将str从valSet中删 除,并且把str加入到分割出的新事件渠道的约束集合valSet’中。下面我们给出一个分割渠道的例子,DA = {a, b},并且a的优先级比b的高,渠道 表示为ch = {a G
,b G [50,80]},T时间内落在该事件渠道上的事件记录如下<ei={a =10,b=50},3>
<e2={a =15,b=50},1>
<e3={a =20,b=60},5>
<e4={a =20,b=60},5>
<e5={a =40,b=65},2>
<e6={a =50,b=65},4>
<e7={a =70,b=70},2>
<e8={a =90,b=80},6>那么可以得到在T时间内渠道上的负载为LD = 28,如果要划分出的负载为A LD
=14。由于=14,所以,将前四个事件(ei,e2, e3, e4)作为新的事件空间中的属性,
而且在这个例子中,只需要划分属性a的值域就可以了,可以把ch分割成为两个渠道eh = {a G
,bG [50,80]}和 ch2 = {a G [21,100],b G [50,80]}。在这个例子当中,如 果<e5 = {a = 20,b = 65,2>,那么我们除了使用a属性之外,还需要使用b值进行划分;在 更加特殊的情况下,如果所有的事件在属性a上的值都相等,那么我们就选择b属性作为唯 一的划分属性。另外还有可能出现的极端情况是,假如到来的事件都是同一个事件,那么无法选 择任何属性作为渠道分割的属性,并且无论怎样分割渠道都不可能平衡负载。在这个事件 分布非常极端的情况下,可以采取渠道复制的方式,将整个渠道复制到其他的服务器上去, 并且标记为该渠道已经被复制和复制的目标服务器;在新的事件到达时,使用一个随机函 数随机选择一个服务器作为服务器,通过这种方式进行负载平衡。
下面介绍如何合并事件渠道。如果已知特征属性结合DA = {DA:, DA2,... , DAJ,也根据渠道中的事件空的各个 特征属性的值进行排序。对于数值和RFID编码类型属性,可以按照区间范围的低值进行 排序,对于字符串类型,由于它的表示方式是集合类型,所以可以不管它的顺序,默认类型1 的字符串约束优先级高于类型2的。如果在系统运行时,发现服务器上的某个渠道ch在连 续n个时间片内的负载值都小于某一个限定的值,那么我们就可以将它与在排序中的邻居 渠道进行合并;如果在负载转移过程中,需要从服务器上转移出去多个渠道,也可以将这些 需要转移出去的渠道进行合并。例如两个相邻的事件渠道的事件空间Esl = {a G [10,20]},Es2 = {a G [21,50]} 可以合并成一个新的渠道,它的事件空间表示为Es= {aG [10,50]} 0对于字符串类型,可 以看做是集合的合并。在本发明中规定事件空间只能划分为连续的区域,所以如果在试图合并两个渠道 的事件空间时,如果合并出来的区域并不连续,那么就不能合并这两个渠道,例如如果Es2 ={a g [30,50]},就不能跟£31 = {a G [10,20]}合并。[12].下面介绍负载调度算法。负载调度算法的目标是综合f\ f4四个因素,得出一个比较优的渠道转移方案。 选择出一个较好的渠道转移策略的过程分为两步,第一步根据 其中
选择出接收负载的服务器;第二步根据rank2(w2, g" gj, chik) = a f1 (gi, gj, chik) + & f3(gi, gj, chik) + y f4(gi, g」, chik) (10)选择出gi上应该转移的渠道。其中co G
和 a,旦,y (a ,旦,y G
, a+^ + y =1)是权重系数。 第一步中并没有考虑4使用的渠道,而是使用avg(gi)作为计算ran、的一个参数。上述 两个式子计算出的值都限制在(0,1)区间,得到的值越大,表明级别越高。第二步通过使用 已选择出来的负载接收服务器,选择出gi上需要转移的事件渠道,这时同时考虑了转移该 渠道后对负载平衡的影响、负载转移开销和订阅就近放置三个方面的因素。同时需要注意 的是,在第二步的时候可能涉及到渠道的分割。在第一步计算时,设置了一个优先级队列candidatejist用于选择负载接收服 务器,candidate_list的大小就是最多选择的接收服务器的数目。首先根据rank:式子,计 算出在uNodeList中服务器的等级值,根据计算出的等级高低放入candidatejist,然后 从candidatejist选择第一个服务器(其级别最高)作为负载接收服务器&。然后检查 如果将gi上负载最小的渠道转移至g^上,gj是否会变成负载过重。如果不会负载过重,那 么就进入第二步,检查每一个候选服务器,并根据rank2计算出来的值,选择出需要转移的 渠道。如果在第一步时,发现如果将gi上负载最小的渠道转移至g^上,如果g^变成负载过重,那么就必须要进行渠道的分割操作了,另外,如果在第二步计算rank2时,在计算时, 如果找不到任何渠道chik,满足dikE(0,2(p),也需要进行渠道分割操作。在选择出负载接收服务器和可以转移的渠道之后,负载移出服务器就向负载接 收服务器发送负载转移请求,试图与之建立负载转移会话。如果负载接收服务器回复可 以接收负载,那么负载转移会话建立,将事件渠道以及与之相关的订阅由负载移出服务器 转移到负载接收服务器;如果负载接收服务器不能接收负载,那么负载移出服务器将会从 candidatejist中选择出来下一个服务器作为负载接收服务器,并且计算出可以转移出去 的渠道,继续向新的负载接收服务器发送负载转移请求。[13].下面介绍本发明中负载调度的全部过程描述。1当服务器发现自己负载过重时(并且以一定的概率得出自己可以执行负载调度 过程),首先将自己的状态置为BUSY,表明它正处在负载调度过程中,并且生成本地渠道表 的一份副本charmellist。注意在更新本地和全局路由表操作之前,负载移出服务器的本 地渠道表和全局路由表都保持不变。2负载移出服务器开始调用rar^函数,计算candidatejist。在使用ranki计算 candidate_list时,如果channel_list中只有唯一的一个事件渠道ch,那么必定需要分割 ch。如果要分割ch,则将ch从charmlejist中删除,然后按照它的负载值分割成几乎相等 的两部分的标准分割,生成两个新的渠道ch和ch2,将这个分割信息记录在一个数据结构 splitlnfos中。splitlnfos中的每一项是被分割的渠道的id到渠道分割信息ChSplitlnfo 的一个映射,每一个ChSplitlnfo中记录着被分割的父渠道和由此渠道分割出来的两个子 渠道。另外,为了使用方便,同时将ch:和ch2放入集合newedCharmels中,如果ch已经存 在于newedChannels中,那么就把ch从中删除。3如果candidate_list不为空,那么从candidate_list选择出来第一个服务器作 为负载接收服务器(这个服务器的级别最高),并将其从队列中删除,向其发送负载转移请 求消息。如果candidatejist为空,说明没有任何服务器可以作为负载接收服务器,负载 平衡过程不能继续下去,那么负载移出服务器将自己的状态由BUSY置为OVERLOADED,终止 负载平衡过程,继续等待下一次负载平衡的机会。4服务器接收到负载转移请求消息后,如果服务器处于UNDERLOADED状态,那么 它可以接受负载,就回复消息给负载移出服务器,说明它可以作为负载接收服务器,并将自 己的状态设置为BUSY,说明它正参与负载调度过程;如果服务器处于BUSY、OVERLOADED、 STABLE等状态时,则说明不能接收更多的负载,那么就回复消息给负载移出服务器,说明它 不能作为负载接收服务器。5负载移出服务器接收到负载请求消息的回复消息后,那么它将5. 1如果回复消息的服务器不能作为负载接收服务器,那么继续3。5. 2如果回复消息的服务器可以作为负载接收服务器,那么将选定此服务器作为 负载接收服务器,并且选择合适的渠道作为负载接收渠道的阶段。在这个阶段,将调用1^1^2函数,在1^1^2函数中,将调用&和&。在&的计算 时将计算出最佳的负载移出量,即推导过程中给出的9值。根据计算出各个事件渠道 的优先级,并按照优先级由高到低进行排列,放入这个一个候选渠道队列ch_candidate_ list (注意,在1中如果负载移出服务器上只有1个事件渠道的情况下,已经发生了,如果从ch_candidate_list中的找不出前k个事件渠道,满足I ^(load on ch,)-(p\< alpha,其
M
中alpha是允许的误差值,可以取0.1*9,那么就需要对某些渠道进行分割,这时候必然存在 k k+\
<p-YjLD、ch;) > alpha,Y,LDichi)~(P> alPha,那么就分割 ch—candidate—list 中第 k+1 /=i /=i
个渠道油,其中分成一部分负载为供-^>/)(戏),分给出来的两个新的渠道chl和ch2,同
i=\
样的将ch从channel_list中删除,同时更新splitlnfos和newedChannels两个数据结
构,记录渠道分割信息。然后再次调用函数,更新ch_candidate_list,直到可以从ch_
k
candidate—list中的找不出前k个事件渠道,满足| ^(/o^ on戏)—炉,否则继
i=l
续向前面一样分割事件渠道。这样,根据,可以对每一个待选的事件渠道给出对应的优
先级值,同样经过f3,也对每一个待选的事件渠道给出对应的优先级值。经过rant计算
之后,得到每一个事件渠道的选择优先级别队列loCalCh_Candidate_liSt,从l0calch_
k
candidate list中的找出前k个事件渠道,满足[(/oad 戏)-刮),其中就是 beta是允许的误差值,这k个事件渠道就是要转移出去的渠道,记录在transferCharmels
隹入由 朱口 T o6负载移出服务器向负载接收服务器转移渠道和负载。6. 1负载移出服务器向负载接收服务器发送渠道转移消息。负载移出服务器将选 择出来的转移渠道包装在一个渠道转移消息内,发送至负载接收服务器,负载接收服务器 在接收到该消息后,将会在其localTable中添加转移过来的渠道,在渠道建立成功之后将 会给负载移出服务器发送渠道建立成功的回复。6. 2负载移出服务器在接收到负载接收服务器的渠道建立成功消息之后,将会发 送订阅转移消息,把属于转移渠道的那些订阅发送到负载接收服务器上,在发送的消息中, 还包含了这些订阅属于哪些渠道的信息。负载接收服务器收到订阅转移消息后,将会在订 阅属于的那些渠道中添加这些订阅,在订阅添加成功后将向负载移出服务器发送订阅转移 完成消息。7负载移出服务器更新本地的localTable和routingTable。负载移出服务器 在接收到转移订阅已经在负载接收服务器上建立完成之后,它开始更新本地事件渠道表 localTable和全局路由表routingTable。首先负载移出服务器将根据选择出来的转移渠 道transferChannels以及渠道分割信息记录(splitlnfos和newedChannels)计算出5个 集合,包括l0CalAdd,是需要在localTable中添加的渠道(某些本地渠道被分割后仍然放 置在本地的那些渠道);localDel,是需要在localTable中删除的渠道(已经被分割或者 已经被转移);globalAdd是需要从routingTable中添加的渠道(由于渠道分割而新生成 的渠道);globalUpdate,是需要在routingTable中更新的渠道(它们的放置位置发生了 变化);globalDel,是需要在routingTable中删除的渠道(它们已经被分割,不再存在)。 使用这5个集合分别更新本地的localTable和routingTable。更新的过程将对两个表加 锁,此时不能进行与这两个表相关的操作。
8负载移出服务器在更新完localTable和routingTable后,将那些已经被转移出 去的订阅,并且不再说任何本地渠道表中的订阅从本地服务器上清除。9负载移出服务器将globalAdd、globalUpdate和globalDel集合包装成为全局 路由表更新消息,发送给所有的其他服务器,使其能够更新自己的routingTable。10网络中的其他服务器接收到全局路由表更新的消息之后,更新本地 的routingTab 1 e。更新的过程会对routingTab 1 e加锁,这样新来的消息将不能查 routingTable,直到更新完成。注意到不参与负载平衡过程的服务器只是自己本地的 routingTable,不需要更新本地的localTable,而负载接收服务器同样也只需要更新本地 的routingTable,不需要更新本地渠道表localTable,因为在它处理渠道转移消息的时候 本地localTable,将转移的渠道添加了进去。服务器在更新完成之后,向负载移出服务器发 送事件空间更新完成消息。10负载移出服务器接收到所有服务器的全局路由表更新完成消息之后,向负载接 收服务器发送负载平衡过程完成消息,通知其负载平衡过程结束。负载移出服务器将本地 负载状态由BUSY设置为STABLE,结束负载平衡过程。11负载接收服务器接收到负载完成消息后,将自己的负载状态由BUSY设置为 STABLE。[14]下面介绍本发明的全部消息类型及其处理。本发明有如下16种类型的消息1、RoutingTablelnit消息,路由表初始化消息。在系统初始化时,由初始化 服务器向网络中的其他所有服务器发送,用于初始化接收该消息的服务器的全局路 由表 routingTable 和本地渠道表 localTable。消息格式为(RoutingTablelnit routingTable),其中routingTable为全局路由表,包括了全部的渠道到服务器的放置位 置映射信息。2、ReplyRoutingTablelnit消息,确认全局路由表已经在服务器中创建 完毕。这个消息是服务器对IteplyRoutingTablelnit消息的回复。消息格式为 (ReplyRoutingTablelnit ),由于这个消息只是一个确认信息,在服务器接收到 RoutingTablelnit消息并建立好全局路由表和本地渠道表后,通知初始化服务器建立完 成,所以消息体中不必包含其他内容。3、Subscription消息,订阅消息。表示一个订阅请求,消息格式为 (Subscription :subExp, subscriber, dispatchSign, chID),其中 subExp 是订阅的字符串 形式,subscriber是订阅者的标识,dispatchSign是订阅处理的标记,可取SUBSCRIBE_NEW 或SUBSCRIBE_DISPATCHED,chID是渠道标记。如果订阅消息是从订阅者直接发送过来的, 那么dispatchSign的取值为SUBSCRIBE_NEW,chID标记无意义,接入服务器在接收到这样 的消息后,将查询全局路由表routingTable,进而确定出订阅应该由哪些渠道处理,如果渠 道在本地,则在本地处理该订阅,如果需要转发到在其他服务器上的渠道进行处理,则生成 新的订阅消息,并将dispatchSign设置为SUBSCRIBE_DISPATCHED,将chID设置为该订阅属 于的那个渠道的id ;如果订阅消息是从网络中的其它服务器传来的,则该订阅消息必定是 dispatchSign为SUBSCRIBE_DISPATCHED,在chID中已经包含了该订阅属于的本地渠道,则 直接将该订阅交由本地渠道进行处理。特殊的情况是,如果渠道所在的服务器正在处于负 载平衡过程中,并且是负载移出服务器,那么该订阅消息将不会被渠道处理,将生成一个重传消息Reforward,具体操作将在下面Reforward消息的介绍中给出。4、UnSubscription消息,取消订阅消息。表示取消订阅请求,消息格式为 (UnSubscription :unsubExp, unsubscriber, dispatchSign, chID),其中 unsubExp 是订 阅的字符串形式,unsubscriber是订阅者的标识,dispatchSign是订阅处理的标记,可 取UNSUBSCRIBE_NEW或UNSUBSCRIBE_DISPATCHED,chID是渠道标记。如果取消订阅消息 是从订阅者直接发送过来的,那么dispatchSign的取值为UNSUBSCRIBE_NEW,chID标记 无意义,接入服务器在接收到这样的消息后,将查询全局路由表routingTable,进而确定 出该取消订阅消息应该由哪些渠道处理,如果渠道在本地,则在本地处理该订阅,如果需 要转发到在其他服务器上的渠道进行处理,则生成新的取消订阅消息,并将dispatchSign 设置为UNSUBSCRIBE_DISPATCHED,将chID设置为该订阅属于的那个渠道的id ;如果取 消订阅消息是从网络中的其它服务器传来的,则该取消订阅消息必定是dispatchSign为 UNSUBSCRIBE_DISPATCHED,在chID中已经包含了该订阅属于的本地渠道,则直接将该取消 订阅消息交由本地渠道进行处理。特殊的情况是,如果渠道所在的服务器正在处于负载平 衡过程中,并且是负载移出服务器,那么该取消订阅消息将不会被渠道处理,将生成一个重 传消息Reforward,具体操作将在下面Reforward消息的介绍中给出。5、Event消息,事件消息。表示事件消息的到达,消息格式为(Event :eventExp, dispatchSign,chID),其中eventExp是订阅的字符串形式,dispatchSign是事件处理的标 记,可取EVENT_NEW或EVENT_DISPATCHED,chID是渠道标记。如果取事件消息是从发布者 直接发送过来的,那么dispatchSign的取值为EVENT_NEW,chID标记无意义,接入服务器在 接收到这样的消息后,将查询全局路由表routingTable,进而确定出该事件应该由哪个渠 道处理,如果渠道在本地,则在本地处理该事件,如果需要转发到在其他服务器上的渠道进 行处理,则生成新的事件消息,并将dispatchSign设置为EVENT_DISPATCHED,将chID设置 为该事件属于的那个渠道的id ;如果事件消息是从网络中的其它服务器传来的,则该订阅 消息必定是dispatchSign为EVENT_DISPATCHED,在chID中已经包含了该事件属于的本地 渠道,则直接将该事件交由本地渠道进行处理。特殊的情况是,如果渠道所在的服务器正在 处于负载平衡过程中,并且是负载移出服务器,那么该事件消息将不会被渠道处理,将生成 一个重传消息Reforward,具体操作将在下面Reforward消息的介绍中给出。6、LIEM(Load Information Exchange Message)消息,负载信息交换消息。各个 服务器每隔一段时间向所有其他服务器通过LIEM发送自己的信息。消息格式为(LIEM: brokerlD, brokerStatus, brokerD, brokerDC),其中,brokerlD 为发送月艮务器的标识; brokerStatus为当前发送服务器所处状态,取值为UNDERLOADED、STABLE、OVERLOADED或者 BUSY ;brokerD为服务器的负载值,brokerDC为服务器的负载水平值。7,RequestLoadBanlance消息,请求负载平衡消息。由负载移出服务器发出,询问 可作为负载接收服务器的候选节点是否可以接收负载,执行负载平衡过程。这个消息是当 服务器负载过重且监控机制允许其发起负载平衡过程时发送,对方节点是在ran、函数中 计算得到。格式为(RequestLoadBanlance :brokerD,brokerDC),其中 brokerD 是负载移 出服务器的负载,brokerDC是负载移出服务器的负载水平,用于接收服务器确认自己是否 可以参与负载平衡过程。8、ReplyRequestLoadBanlance 消息,对 RequestLoadBanlance 请求的回复消息。消息格式为(R印lyRequestLoadBanlance :status),其中status为当前节点所处状态,如 果status的取值为UNDERLOADED,则说明该服务器可以作为负载接收服务器,如果负载接 收服务器接收到了这样的消息后,则可以与负载接收服务器之间建立负载平衡会话,进行 进一步的操作;否则,则说明该服务器本身正处在其他服务器的负载平衡过程或者负载过 重,不适合接收新的负载平衡请求,负载移出服务器接收到这样的回复消息后,将向下一个 候选服务器发送RequestLoadBanlance消息。9、ChannelTransfer消息,渠道转移消息。由负载移出服务器向负载接收服务器 发送,表示服务器间进行渠道转移。格式为(ChannelTransfer channels),其中channels 是转移渠道的信息集合,每个渠道信息包括渠道的标识和渠道的表示。lO.RelplyChannelTransfer消息,渠道转移消息的回复消息。由负载接收服务器 在接收到ChannelTransfer消息并在本地建立渠道表localTable中建立完新的渠道后向 负载移出服务器发送。消息格式为(RelplyChannelTransfer :r印lySign,channel IDs), 其中r印lySign为当前节点渠道建立是否成功的表示,其值为REPLY_SUCCESS (渠道建立成 功)或REPLY_FAIL(渠道建立失败)两种形式;charmellDs为负载接收服务器在本地建立 的若干渠道的标识信息集合。11、SubscriptionMove消息,转移订阅消息。这个消息是负载移出服务器 收到RelplyChannelTransfer消息,确认了相应渠道已经在负载接收服务器建立成 功后,将渠道对应的订阅信息进行转移时发送的。消息格式为(SubscriptionMove subscriptionType, chSubSet),其中subscriptionType为订阅基本格式信息,标识转移的 是原子订阅还是复合订阅;chSubSet包含了相应渠道的标识该渠道对应的所有订阅。12、R印lySubscriptionMove 消息,SubscriptionMove 消息的回复消息。由负载接 收服务器向负载移出服务器发送,用于确认发送过来的订阅在本地已经创建完毕。消息格 式为(R印lySubscriptionMove ),由于这个消息只是一个确认信息,所以不必包含其他 内容。负载移出服务器在接收到负载接收服务器将订阅建立成功的消息之后,将更新本地 的渠道表localTable和存放在本地的全局路由表routingTable。13、UpdateRoutingTable消息,更新全局路由表消息。由负载移出服务器在收到 R印lySubMove消息,确认需要转移出的订阅已经在负载接收服务器创建成功后,并更新完 本地的localTable和routingTable后,向网络中的所有其他服务器发送的全局路由表更 新请求。消息格式为(UpdateRoutingTable :deleteChs,updateChs),其中 deleteChs 为 应该在接收方服务器routingTable中删除的渠道信息;updateChs为经过转移过程后应该 在路由表中更新的渠道信息,包括新建立的渠道(直接添加)和重定向的渠道(渠道的放 置位置发生了变化,更新放置的服务器)。14、ReplyUpdateGlobal消息,确认全局路由表已经更新的消息,接收到 UpdateRoutingTable的服务器向负载移出服务器发送,表明服务器已经更新完全局路由 表。消息格式为(R印lyUpdateGlobal ),由于这个消息只是一个确认信息,所以不必包含 其他内容。15XompleteLoadBalance消息,负载平衡过程结束的消息。负载移出服务器接收 到所有其他节点路由表更新的确认后,向负载接收服务器发送,接负载接收服务器收到后 自行将服务器状态转换为STABLE。消息格式为(CompleteLoadBalance ),由于这个消息只是一个确认信息,所以不必包含其他内容。16,Reforward消息,负载平衡过程中消息重传请求。这个消息是保证负载平衡过 程正确性的关键。负载移出服务器在负载平衡过程中,如果接收到订阅、取消订阅或事件消 息应该被其本地渠道处理,并且属于需要转移的事件渠道,那么这些消息也可能需要被负 载接收服务器处理,以保证在负载接收服务器上不丢失任何信息,这时候负负载移出服务 器需要根据其所处的负载平衡过程阶段进行分别处理。在负载平衡过程中,标识出三个重 要的时间点,首先是负载平衡开始时刻记为<1>时刻,其次是渠道转移完成时刻(这时需要 转移的事件渠道已经在负载接收服务器建立)记为<2>时刻,最后是渠道相关的订阅转移 完成的时刻(这时订阅已经在负载接收服务器建立,并且负载移出服务器的本地渠道表和 全局路由表已经更新完成)记为<3>时刻。<1>时刻和<3>时刻之间是负载平衡过程的主 要时间阶段,在这段时间内,负载移出服务器对接收到的属于转移渠道的订阅、取消订阅和 事件消息需要特殊考虑在<1>时刻到<2>时刻之间,负载移出服务器仍然可以正常的处理订阅、取消订阅 和事件消息,因为在负载移出服务器上的渠道并没有受到负载平衡过程的影响。但是此时 由于转移渠道还没有在负载接收服务器上建立,所以属于负载接收服务器的这些渠道的暂 时不能进行订阅添加、取消操作,需要对新来的与转移渠道相关的订阅、取消订阅消息在负 载移出服务器上记录,在<2>时刻将这些消息包装成为Reforward消息重传给负载接收服 务器。这个时候由于本地订阅未发生转移,事件消息仍然可以到来可以类似负载平衡过程 前在本地进行进行正确处理,而且不需要保存并重传至负载接收服务器。在<2>时刻和<3>时刻之间,由于需要转移的渠道已经在对方节点建立,并且负载 移出服务器在<2>时刻接收到渠道建立成功消息之后就立刻发送订阅转移消息,将与转移 渠道相关的订阅发送给负载接收服务器,并且如果有在<1>与<2>时刻之间需要重传的订 阅、取消订阅消息,那么在发送完转移订阅消息之后,就将这些消息组织成为Reforward消 息进行重传。之后,与属于转移渠道的订阅、取消订阅、事件消息可以直接重传到相应节点 上进行处理,并且由于消息是按照到达序列顺序发送的,亦可以保证消息的正确处理顺序。Reforward 消息格式为(Reforward :chID,messages),其中 chID 表示该订阅、 取消订阅或者事件消息属于的渠道的标识,messages可能为一条消息也可能为多条消 息,其中每条消息格式为(sign,message_prefiX),其中sign为消息类型标志,取值范 围为 SUBSCRIBE_MESSAGE (订阅消息),UNSUBSCRIBE_MESSAGE (取消订阅消息),EVENT_ MESSAGE (事件消息);message_pref ix为消息体,如果为订阅消息或是取消订阅消息,那么 这其中还包含订阅者的标识。
2权利要求
一种发布/订阅系统的动态负载平衡方法,其特征在于,该系统包括由多个服务器组成的对等覆盖网络,网络中的各个服务器均作为接入服务器接收订阅和事件信息,并通过全局路由表确定该信息所属的事件渠道后将其转发至该事件渠道进行处理;所述动态负载平衡方法包括负载过重的服务器从本地选择转移负载并在其他服务器中选择负载接收服务器,将该转移负载发送至该负载接收服务器。
2.如权利要求1所述的发布/订阅系统的动态负载平衡方法,其特征在于,服务器保存 本地渠道表和全局路由表,本地渠道表记录服务器本地的事件渠道全局路由表记录事件渠 道在服务器上的放置位置。
3.如权利要求1所述的发布/订阅系统的动态负载平衡方法,其特征在于,负载接收服 务器收到转移负载后,若该转移负载的订阅或事件消息属于本地渠道,则直接将该转移负 载交给该本地渠道处理。
4.如权利要求1所述的发布/订阅系统的动态负载平衡方法,其特征在于,该系统通过 下列方法触发所述动态负载平衡a)系统初始化时,服务器默认为低负载状态;b)服务器之间按设定的周期共享各自的负载信息;c)服务器收到其他服务器的负载信息后计算平均负载并确定自身是否负载过重;d)负载过重的服务器按设定的概率触发所述动态负载平衡。
5.如权利要求1所述的发布/订阅系统的动态负载平衡方法,其特征在于,负载过重的 服务器通过下列方法在其他服务器中选择负载接收服务器服务器根据ranlq式对其他服务器中负载过轻的服务器排序,得到序列candidate list,按照candidatejist中的顺序选择服务器作为负载接收服务器 其中ω e W,1],是权重系数;gi表示当前服务器,gj表示其他服务器之一,Chik表示 gi中的第k个渠道叫表示gi上的事件渠道数;bWij表示gi与gj之间的网络带宽,bwimax表 示gi到所有负载较低服务器的带宽中的最大值; Ci和Cj分别表示gi和gj的处理能力,dCi和dCj分别表示gi和gj的负载水平,dik 是Chik的负载,Max(dc0-dik/c0)表示负载较重的服务器中(dCi-dik/Ci)值最大的服务器, Min(dcu-dik/cu)表示负载较轻的服务器中(dCj+dik/Cj)值最小的服务器;lev表示分级函数,leV(x)=「x_Z"|/Z,xe
,Γ 表示取整操作符,L表示层次数目。
6.如权利要求1所述的发布/订阅系统的动态负载平衡方法,其特征在于,负载过重的 服务器通过下列方法从本地选择转移负载根据rank2式对本地渠道排序,按照得到的序列选择渠道作为转移渠道 其中α,β,Y是权重系数,α、β、γ e
, α+β + y =1 ;gi表示当前服务器,gj表示其他服务器之一,Chik表示gi中的第k个渠道;Ci和Cj分别表示gi和gj的处理能力,dik是Chik的负载,Hii表示gi上的事件渠道数;,, 其中乂=」--— d,和…分别表示gi和g^的负载水平,—表示‘c^;dc网络中服务器负载水平的平均值, 分别表示和gj的负载水平,MaX(dc。-dik/c。)表示负载较重的服务器中(dCi_dik/Ci)值最 大的服务器,Min(dCu-dik/Cu)表示负载较轻的服务器中(dCj+dik/Cj)值最小的服务器, 其中,min_mig_cost表示gi的各个渠道中最小的负载转移开销,mig_cost {chik — gj} 表示chik到gj的转移开销; lev表示分级函数, ,1],「]表示取整操作符,L表示层次数目。
全文摘要
本发明公开了一种发布/订阅系统的动态负载平衡方法。所述系统包括由多个服务器组成的对等覆盖网络,网络中的各个服务器均作为接入服务器接收订阅和事件信息,并通过全局路由表确定该信息所属的事件渠道后将其转发至该事件渠道进行处理;该系统在运行过程中进行动态负载平衡,动态负载平衡包括负载过重的服务器从本地选择转移负载并在其他服务器中选择负载接收服务器,将该转移负载发送至该负载接收服务器。本发明可用于金融服务、新闻服务、传感器网络、RFID应用等多个领域。
文档编号H04L12/56GK101854299SQ20101018629
公开日2010年10月6日 申请日期2010年5月21日 优先权日2010年5月21日
发明者金蓓弘, 陈海彪, 齐凤亮 申请人:中国科学院软件研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1