根据优先级发布事件的方法及系统技术领域
本申请涉及计算机的分布式计算领域,特别涉及一种根据优先级发布事件的方法
及系统。
背景技术
图1为现有技术中的发布订阅系统结构示意图,如图所示,包括客户端和第一服
务器子系统,其中,
客户端,用于向服务器子系统发布事件;
第一服务器子系统,用于将从客户端接收的事件按照优先级别依次转发。
在第一服务器子系统中,可以包括第一接入代理服务器、第一核心代理服务器和
第一规则库,其中,
第一接入代理服务器,用于接收客户端发布的事件,发送给第一规则库,接收第
一规则库返回该事件的优先级别,将携带有优先级别的事件发送给第一核心代理服务
器;
第一规则库,用于存储优先级别规则,根据优先级别规则对从第一接入代理服务
器接收的事件进行优先级匹配后,将所确定该事件的优先级别发送给第一接入代理服
务器;
第一核心代理服务器,用于将从第一接入代理服务器接收的事件,按照该事件的
优先级别将该事件转发出去。
在该系统中,第一接入代理服务器可以接入多个客户端,接收多个客户端发布的
事件,第一接入代理服务器和第一核心代理服务器是多对一的关系。
对于一个事件,其具有设定事件结构的事件实例,比如,所设定的事件结构为<a1,
a2,a3>,一个来自客户端事件的事件实例为<10,30,50>,在第一规则库中,设定的优先
级规则为:当(a1>8&a2<50)或者当(a1>4&a3<60)时,优先级为1;当(a1>9&a2<20)
或者当(a1>1&a3<90)时,优先级为2;这样,在将客户端的事件进行优先级匹配时,
满足(a1>8&a2<50),优先级别为1。
可以看出,在第一规则库中,存储了对应不同事件结构的优先级规则,一个事件
结构的优先级规则中具有多条不同优先级的判定子规则,在对一个事件进行优先级确
定时,首先要确定事件的事件结构,然后调用该事件结构的优先级规则中的多条判定
子规则,一一与事件的事件实例进行匹配计算得到该事件的优先级别。由于在确定事
件的优先级时,需要将事件的事件实例一一与子规则匹配,计算量很大,确定事件的
优先级事件很长,严重影响了第一服务器子系统的吞吐事件能力,降低发布订阅系统
中根据优先级发布事件的效率。
发明内容
有鉴于此,本发明实施例提供一种根据优先级发布事件的方法,该方法能够减少
发布事件的优先级匹配时间,提高发布事件的吞吐量。
本发明实施例还提供一种根据优先级发布事件的系统,该系统能够减少发布事件
的优先级匹配时间,提高发布事件的吞吐量。
根据上述目的,本发明实施例是这样实现的:
一种根据优先级发布事件的方法,对应事件结构设置离散化规则,对应优先
级存储设定长度的二进制子规则值,该二进制子规则值是由对应优先级的子规则
采用所设置的离散化规则离散化后,采用哈希计算得到的;
接收客户端发布的事件,根据事件的事件结构确定对应的离散化规则,采用
所确定的离散化规则对事件离散化后,进行哈希计算,映射得到设定长度的二进
制事件值;
将所得到的设定长度的二进制事件值与所存储的设定长度的二进制子规则值
比较,确定匹配的二进制子规则值,将该匹配的二进制子规则值对应的优先级作
为该事件的优先级;
根据该事件的优先级将事件转发。
所述设定长度是根据存储二进制子规则值的布隆滤波器的容量及所述比较时
的误匹配率设置的。
所述设置化规则实时更新,所述存储设定长度的二进制子规则值对应进行实
时更新。
一种根据优先级发布事件的系统,该系统包括:包括客户端和服务子系统,
其中,
客户端,用于向服务子系统发布事件;
服务子系统,用于对应事件结构设置离散化规则,对应优先级存储设定长度
的二进制子规则值,该二进制子规则值是由对应优先级的子规则采用所设置的离
散化规则离散化后,采用哈希计算得到的;接收到客户端发布的事件,根据事件
的事件结构确定对应的离散化规则,采用所确定的离散化规则对事件离散化后,
进行哈希计算,映射得到设定长度的二进制事件值;将所得到的设定长度的二进
制事件值一一与所存储的设定长度的二进制子规则值比较,确定匹配的二进制子
规则值后,将该匹配的二进制子规则值对应的优先级作为该事件的优先级,根据
该事件的优先级将事件转发。
所述服务子系统包括接入代理服务器、规则库及核心代理服务器,其中,
接入代理服务器,用于对应事件结构设置离散化规则;接收到客户端发布的
事件,根据事件的事件结构确定对应的离散化规则,采用所确定的离散化规则对
事件离散化后,进行哈希计算,映射得到设定长度的二进制事件值,发送给规则
库;接收规则库返回该事件的优先级别,将携带有优先级别的事件发送给核心代
理服务器;
规则库,用于对应优先级存储设定长度的二进制子规则值;将所得到的设定
长度的二进制事件值一一与所存储的设定长度的二进制子规则值比较,确定匹配
的二进制子规则值后,将该匹配的二进制子规则值对应的优先级作为该事件的优
先级,发送给接入代理服务器;
核心代理服务器,用于将从接入代理服务器接收的事件,按照该事件的优先
级别将该事件转发出去。
所述规则库,还包括布隆滤波器,用于存储二进制子规则值。
所述接入代理服务器,还用于将对应事件结构设置离散化规则实时更新;
所述规则库,还用于将对应优先级存储设定长度的二进制子规则值实时更新。
从上述方案可以看出,本发明实施例将针对事件结构的优先级规则中的对应优先
级的每个判定子规则进行离散化得到离散子规则,采用哈希计算将离散子规则映射为
设定长度的二进制子规则值,对应优先级存储;在匹配事件的优先级时,将事件的事
件实例根据事件结构进行离散化后,进行哈希计算,与所存储的二进制子规则值匹配,
将所匹配的二进制子规则值对应的优先级作为该事件的优先级。由于本发明在对事件
的事件实例进行匹配时,不是像现有技术那样采用表格或队列进行判定子规则的一一
对比,而是简单的二进制子规则值的数据结构对比,提高了比较速度,从而减少了发
布事件的优先级匹配事件,提高了事件的吞吐量。
附图说明
图1为现有技术中的发布订阅系统结构示意图;
图2为本发明实施例提供的在发布订阅系统中根据优先级发布事件的方法流
程图;
图3为本发明实施例在布隆滤波器存储的二进制子规则值示意图;
图4为本发明实施例提供的确定事件的优先级过程的具体实施例流程图;
图5为本发明实施例提供的根据优先级发布事件的系统示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施
例对本发明作进一步地详细描述。
从背景技术可以看出,造成第一服务器子系统的吞吐事件能力比较低,发布
订阅系统中根据优先级发布事件的效率比较低的原因为:对事件的事件实例进行
优先级规则中具有多条不同优先级的判定子规则进行一一对比确定对应的优先级
别时,采用的是将判定子规则以表格或队列的方式一一呈现,然后再一条一条的
与事件的事件实例对比,找到匹配的判定子规则,这种匹配过程的速度会很慢。
因此,本发明实施例提供的方法引入了哈希算法,哈希算法将任意长度的二
进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值
是一段数据唯一且极其紧凑的数值表示形式,作为线性数据结构与表格和队列等
方式相比,哈希是查找速度比较快的一种。
具体地说,就是将针对事件结构的优先级规则中的对应优先级的每个判定子
规则进行离散化得到离散子规则,采用哈希计算将离散子规则映射为设定长度的
二进制子规则值,对应优先级存储;在匹配事件的优先级时,将事件的事件实例
根据事件结构进行离散化后,进行哈希计算,与所存储的二进制子规则值匹配,
将所匹配的二进制子规则值对应的优先级作为该事件的优先级。
图2为本发明实施例提供的在发布订阅系统中根据优先级发布事件的方法流
程图,其具体步骤为:
步骤201、对应事件结构设置离散化规则,对应优先级存储设定长度的二进制
子规则值,该二进制子规则值是由对应优先级的子规则采用所设置的离散化规则
离散化后,采用哈希计算得到的;
在本步骤中,对于同一事件结构,所设置的优先级规则中会具有多个子规则,
分别对应不同的优先级别,这时,就需要将这多个子规则采用对应的离散化规则
离散化后,得到离散子规则,再采用哈希计算,比如MD5哈希算法计算,映射为
所设定长度的二进制子规则值,对应优先级存储;所映射为设定长度的而二进制
子规则值可以是唯一的,也可以是不唯一的,这里不限制;
在本步骤中,所设定长度是根据实际需要设置的,一般在存储二进制子规则
值时,存储在服务器子系统设置的布隆滤波器(Bloom Filter)中,所以所设定的
长度与布隆滤波器的容量相关及后续匹配时的误匹配率都相关,所设定的长度越
长,误匹配率也就越低;
步骤202、接收到客户端发布的事件后,根据事件的事件结构确定对应的离散
化规则,采用所确定的离散化规则对事件进行离散化后,进行哈希计算,映射得
到设定长度的二进制事件值;
步骤203、将所得到的设定长度的二进制事件值一一与所存储的设定长度的二
进制子规则值比较,确定匹配的二进制子规则值后,将该匹配的二进制子规则值
对应的优先级作为该事件的优先级;
步骤204、根据该事件的优先级将事件转发。
以下举具体例子说明该方法。
对应事件结构设置离散化规则,对应优先级存储二进制子规则值的过程为:
假设事件为ETID001,该ETID001的事件结构为{a,b},其中,a为{a1,a2,....},
b取真值,采用的优先级规则中的对应优先级的每个判定子规则为:当a在{a1,
a2,a2,a5}&b>10时,或者a在{a2,a8,a10,a11}&b>30时,优先级为1;设置
的离散化规则为:当b在(-∞,0)中,则为A,当b在(1,10)中,则为B,当b在
[10,25)时,则为C,当b在[25,∞)则为D,这时,将ETID001离散化得到的离散
子规则为:ETID001a1C,ETID001a2C,ETID001a5C,ETID001a1D,ETID001a2D,
ETID001a5D,,ETID001a8D,ETID001a10D,ETID001a11D;
然后,对离散子规则进行哈希计算,映射为所设定长度的二进制子规则值,
存储在布隆滤波器中,所设定长度的二进制子规则值就是多列二进制的数据结构,
每列包括设定长度的空位,空位中为1或0,比如图3所示的在布隆滤波器存储的
二进制子规则值。
当接收到客户端发布的事件时,比如该事件为<ETID001,a1,20,100,“This event
is an alarm”,“Notes can be added here”>,则确定该事件的优先级过程如图4
所示:
步骤401、服务器子系统接收客户端发布的<ETID001,a1,20,100,“This event
is an alarm”,“Notes can be added here”>事件;
步骤402、服务器子系统确定事件结构为{a,b},其中,b为20,然后根据该
事件结构对应的离散化规则,将b转换为C,得到的离散化事件为ETID001a1C;
步骤403,服务器子系统采用哈希计算,映射得到设定长度的二进制事件值;
步骤404、服务器子系统将所得到的设定长度的二进制事件值一一与所存储的
设定长度的二进制子规则值比较,确定匹配的二进制子规则值是对应ETID001a1C
的二进制子规则值,将该匹配的二进制子规则值对应的优先级1作为该事件的优
先级。
图5为本发明实施例提供的根据优先级发布事件的系统示意图,包括客户端
和服务器子系统,其中,
客户端,用于向服务器子系统发布事件;
服务器子系统,用于对应事件结构设置离散化规则,对应优先级存储二进制
子规则值,该二进制子规则值是由对应优先级的子规则采用所设置的离散化规则
离散化后,采用哈希计算得到的;接收到客户端发布的事件,根据事件的事件结
构确定对应的离散化规则,采用所确定的离散化规则对事件离散化后,进行哈希
计算,映射得到设定长度的二进制事件值;将所得到的设定长度的二进制事件值
一一与所存储的设定长度的二进制子规则值比较,确定匹配的二进制子规则值后,
将该匹配的二进制子规则值对应的优先级作为该事件的优先级,根据该事件的优
先级将事件转发。
在本系统中,服务器子系统包括接入代理服务器、规则库及核心代理服务器,
其中,
接入代理服务器,用于对应事件结构设置离散化规则;接收到客户端发布的
事件,根据事件的事件结构确定对应的离散化规则,采用所确定的离散化规则对
事件离散化后,进行哈希计算,映射得到设定长度的二进制事件值,发送给规则
库;接收规则库返回该事件的优先级别,将携带有优先级别的事件发送给核心代
理服务器;
规则库,用于对应优先级存储二进制子规则值;将所得到的设定长度的二进
制事件值一一与所存储的设定长度的二进制子规则值比较,确定匹配的二进制子
规则值后,将该匹配的二进制子规则值对应的优先级作为该事件的优先级,发送
给接入代理服务器;
核心代理服务器,用于将从接入代理服务器接收的事件,按照该事件的优先
级别将该事件转发出去。
在该结构中,规则库,还包括布隆滤波器,用于存储二进制子规则值。
在该系统中,接入代理服务器可以接入多个客户端,接收多个客户端发布的
事件,接入代理服务器和核心代理服务器是多对一的关系。
在本发明中,对应优先级存储二进制子规则值时,可以实时更新,该二进制
子规则值是由对应优先级的子规则采用所设置的离散化规则离散化后,采用哈希
计算得到的,计算可以由规则库在更新时计算得到,也可以由接入代理服务器计
算得到后存储在规则库中,这里不限定,在实时更新时,对应地,也实时更新对
应事件结构设置离散化规则。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包
含在本发明的保护范围之内。