会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 复杂事件处理 / 一种复杂事件处理单元部署系统

一种复杂事件处理单元部署系统

申请号 CN202310392787.X 申请日 2023-04-11 公开(公告)号 CN116400930A 公开(公告)日 2023-07-07
申请人 南京大学; 发明人 胡昊; 匡胤鑫; 周官皓; 王禹又; 蔡逸凡;
摘要 本发明公开一种复杂事件处理单元部署系统,包括集群抽象层、复杂事件处理单元模型、算法模块和部署模块,集群抽象层对Kubernetes集群的虚拟化,屏蔽了许多来自硬件节点本身或者Kubernetes的配置细节;复杂事件处理单元模型将所有由用户编写的处理单元、编排的处理单元图和事件描述类、数据生成模块、运行启动器打包成的容器镜像;算法模块,由一个抽象算法基类和若干个继承了该基类的实际算法样例组成,用户通过继承抽象算法基类的形式实现自己想要的部署算法,应用于部署;部署模块由部署实验的配置模块、集群初始化模块、负责执行部署的模块和计算响应时间的模块组成。本发明实现了对复杂事件处理模型的简易部署。
权利要求

1.一种基于Kubernetes的复杂事件处理单元部署系统,其特征在于,包括集群抽象层Cluster、复杂事件处理单元模型Models、算法模块Methods和部署模块Core;

集群抽象层Cluster,通过KubeTools模块实现了对Kubernetes集群的虚拟化,KubeTools模块是对Kubernetes API的封装,还包含了用于模拟链路时延的DelayRules模块;

复杂事件处理单元模型Models,该模块是一个将所有由用户编写的处理单元Operator、编排的处理单元图Graph和事件描述类Event、数据生成模块Data、运行启动器Starter打包成的容器镜像;复杂事件处理单元模型Models依据用户编写好的Dockerfile的指示被Docker打包上传到镜像仓库;Dockerfile是Docker打包时所用到的配置文件,Docker是一个开源的应用容器引擎;

算法模块Methods,该模块由一个抽象算法基类和若干个继承了该基类的实际算法样例组成;抽象算法基类规定了部署算法的输入输出,用户可以通过继承抽象算法基类的形式实现自己想要的部署算法;部署算法从集群获取状态信息,生成部署策略,出来的结果最终被部署模块Core所调用,应用于部署;

部署模块Core,该模块主要由部署实验的配置模块Config、集群初始化模块Initialize、负责执行部署的Deploy模块和计算响应时间的DelayCalculate模块组成;其中配置模块Config是对系统中诸多参数的抽取集中;集群初始化模块Initialize会通过KubeTools为集群中每一个节点部署一个用于测量节点间链路时延的Nginx容器;Deploy模块则负责通过用户所选择的部署算法返回的部署策略对集群执行部署。

2.根据权利要求1所述的基于Kubernetes的复杂事件处理单元部署系统,其特征在于,集群抽象层Cluster通过KubeTools模块实现了对Kubernetes集群的虚拟化,Kubernetes集群的每个节点上都部署一个以容器形式存在的Nginx服务器,用于拓展一些Kubernetes API没有提供的功能,当需要获取节点间的响应时延时,就借助Kubernetes API进入容器内部执行Curl命令来获取。

3.根据权利要求1所述的基于Kubernetes的复杂事件处理单元部署系统,其特征在于,集群抽象层Cluster通过KubeTools模块中的DelayRules模块约定了Kubernetes集群节点间链路时延的放大倍数,这些放大倍数会在复杂事件处理单元模型Models中的处理单元Operator中被调用,并用于实现链路等效时延模拟。

4.根据权利要求1所述的基于Kubernetes的复杂事件处理单元部署系统,其特征在于,复杂事件处理单元模型Models中的所有处理单元Operator、编排的处理单元图Graph都由各自对应的抽象基类继承而来;处理单元Operator的抽象基类中实现了处理单元间的通信模型、链路等效时延模拟、输入率等效负载等级功能,用户只需继承基类并覆盖其中用于处理事件的方法即可制定其所需要的处理单元Operator;处理单元图Graph的抽象基类中实现了各种供部署和算法使用的方法,并对子类提供一个需要被覆盖的、会被构造方法所调用的方法,称为覆盖调用方法,该覆盖调用方法返回若干处理单元Operator的类型、名称和各自之间拓扑描述,用以完成编排的处理单元图Graph的初始化;用户只需要在继承抽象基类时覆盖此覆盖调用方法,即可编排出所需要的处理单元图Graph。

5.根据权利要求1所述的基于Kubernetes的复杂事件处理单元部署系统,其特征在于,复杂事件处理单元模型Models依据用户编写好的Dockerfile的指示被Docker打包上传到镜像仓库;在部署中,部署模块Core中的Deploy模块会指挥KubeTools发送不同的指令填充复杂事件处理单元模型Models的容器的ENTRYPOINT(相当于运行指令),并将容器部署到各自对应的节点上,最后复杂事件处理单元模型Models中的运行启动器Starter根据指令内容实例化对应的处理单元Operator,最终实现在不同的节点上使用相同的容器镜像但却能运行不同的处理单元实例的效果。

6.根据权利要求1所述的基于Kubernetes的复杂事件处理单元部署系统,其特征在于,算法模块Methods中包含了若干个继承了抽象算法基类的各种实际部署算法样例,其中包括Greedy算法、LoadBalance算法、ResponseTimeAware算法和ReinforcementLearning算法。

7.根据权利要求1所述的基于Kubernetes的复杂事件处理单元部署系统,其特征在于,部署模块Core中的DelayCalculate模块通过对Kubernetes日志的分析计算了部署模型在不同部署算法下的响应时间,同时部署模块Core内部各模块间耦合松散,用户能自行定义类似DelayCalculate的模块以进行拓展,以获取对部署实验更多维度的分析。

8.根据权利要求1所述的基于Kubernetes的复杂事件处理单元部署系统,其特征在于,处理单元Operator的抽象基类中实现了处理单元Operator间的通信模型,该通信模型借助于Kubernetes的Pod间通信原理和TCP网络编程实现。

9.根据权利要求1所述的基于Kubernetes的复杂事件处理单元部署系统,其特征在于,处理单元Operator的抽象基类中实现了链路等效时延模拟,原理是:设目前集群内有N个节点,定义Mij为第i个节点到第j个节点之间时延要放大的倍数,Mij≥1,在DelayRules模块中,先让用户编排好集群内所有节点之间时延放大的倍数;当系统开始运行时,在数据包中记录发送时间Ts和发送节点i,然后在接收端再次记录接收时间Tr和当前节点j,让接收线程等待一段长度为(Ts–Tr)×(Mij–1)的时间,之后再将数据包交给负责事件处理的方法,从而达到模拟链路时延的效果。

10.根据权利要求1所述的基于Kubernetes的复杂事件处理单元部署系统,其特征在于,处理单元Operator的抽象基类中实现了输入率等效负载等级;定义系统状态值为事件输入率与集群算力的比值,视相同值的系统状态为等效状态,设需要模拟的事件输入率的变化范围为RL到RH,将这个范围划分为I(I≥0)个区间,用0、1、2、…、I共I+1个等效负载等级的变化去取代事件输入率的变化,设一个处理单元Operator中处理完当前事件所用的时间为Tprocess,然后让负责事件处理的线程方法在每处理完一个事件后等待Twait长度的时间即可实现对集群算力的等效下降,则在第i(i=0,1,2,…,I)级的等效负载等级下,等待时间Twait的计算公式为:

说明书全文

一种复杂事件处理单元部署系统

技术领域

[0001] 本发明涉及一种基于Kubernetes的复杂事件处理单元部署系统,属于计算机软件技术领域。

背景技术

[0002] 复杂事件处理(Complex Event Processing,CEP)是一种在动态环境中对事件的实时流处理分析技术,此处的事件通常指对于系统或环境有意义的状态变化。复杂事件处理的模型一般是由一系列处理单元(Operator)组成的有向无环图,即处理单元图(Operator Graph)。借助该技术,用户通过对事件间关系的理解向处理单元制定规则,实现对事件的实时过滤、关联、聚合,得到对事件流的分析,并期望从中获取有价值的复杂事件序列或信息,从而做出响应。该技术广泛应用于防止犯罪、风险识别、营销决策等领域。在分布式计算模型中,如何将复杂事件的处理单元部署在各个计算节点上,从而满足用户对系统的响应时间、负载均衡的期望,在学术上被归类为处理单元部署问题(Operator Placement Problem)。现有技术中对于处理单元部署问题的研究,通常采用软件仿真环境,例如OMNeT++或NS3等,相比于真机环境,软件仿真在对链路时延、拥塞控制等方面的模拟效果存在一定不足,需要真机环境对研究的算法或内容进行进一步的验证。

发明内容

[0003] 发明目的:针对现有技术中存在的问题与不足,本发明提供一种基于Kubernetes的复杂事件处理单元部署系统,借助容器集群管理平台Kubernetes,有效解决了复杂事件处理单元部署问题(Operator Placement Problem)相关领域的研究人员在进行研究时对部署算法验证与比较的需求,实现了对复杂事件处理模型的简易部署。用户可以通过该系统实现处理单元在真机环境下的简易部署,高效完成部署算法的验证与比较工作。
[0004] 技术方案:一种基于Kubernetes的复杂事件处理单元部署系统,主要由四个部分组成,分别是集群抽象层Cluster、复杂事件处理单元模型Models、算法模块Methods和部署模块Core。
[0005] 集群抽象层Cluster,通过KubeTools模块实现了对Kubernetes集群的虚拟化,屏蔽了许多来自硬件节点本身或者Kubernetes的配置细节。KubeTools模块主要是对Kubernetes API的封装,还包含了用于模拟链路时延的DelayRules模块。
[0006] 复杂事件处理单元模型Models,该模块是一个将所有由用户编写的处理单元Operator、编排的处理单元图Graph和事件描述类Event、数据生成模块Data、运行启动器Starter打包成的容器镜像。复杂事件处理单元模型Models将会依据用户编写好的Dockerfile的指示被Docker打包上传到镜像仓库。Dockerfile是Docker打包时所用到的配置文件,Docker是一个开源的应用容器引擎。
[0007] 算法模块Methods,该模块主要由一个抽象算法基类和若干个继承了该基类的实际算法样例组成。抽象算法基类规定了部署算法的输入输出,用户可以通过继承抽象算法基类的形式实现自己想要的部署算法。部署算法从集群获取状态信息,生成部署策略,出来的结果最终被部署模块Core所调用,应用于部署。
[0008] 部署模块Core,该模块主要由部署实验的配置模块Config、集群初始化模块Initialize、负责执行部署的Deploy模块和计算响应时间的DelayCalculate模块组成。其中配置模块Config是对系统中诸多参数的抽取集中。集群初始化模块Initialize会通过KubeTools为集群中每一个节点部署一个用于测量节点间链路时延的Nginx容器。而Deploy模块则负责通过用户所选择的部署算法返回的部署策略对集群执行部署。
[0009] 集群抽象层Cluster通过KubeTools模块实现了对Kubernetes集群的虚拟化,屏蔽了许多来自硬件节点本身或者Kubernetes的配置细节。Kubernetes集群的每个节点上都会部署一个以容器形式存在的Nginx服务器,主要用于拓展一些Kubernetes API没有提供的功能,当需要获取节点间的响应时延时,就可以借助Kubernetes API进入容器内部执行Curl命令来获取。
[0010] 集群抽象层Cluster通过KubeTools模块中的DelayRules模块约定了Kubernetes集群节点间链路时延的放大倍数,这些放大倍数会在复杂事件处理单元模型Models中的处理单元Operator中被调用,并用于实现链路等效时延模拟。
[0011] 复杂事件处理单元模型Models中的所有处理单元Operator、编排的处理单元图Graph都由各自对应的抽象基类继承而来。处理单元Operator的抽象基类中实现了处理单元间的通信模型、链路等效时延模拟、输入率等效负载等级等功能,用户只需继承基类并覆盖其中用于处理事件的方法即可制定其所需要的处理单元Operator。处理单元图Graph的抽象基类中实现了各种供部署和算法使用的方法,并对子类提供一个需要被覆盖的、会被构造方法所调用的方法,称为覆盖调用方法。该覆盖调用方法返回若干处理单元Operator的类型、名称和各自之间拓扑描述,用以完成编排的处理单元图Graph的初始化。用户只需要在继承抽象基类时覆盖此覆盖调用方法,即可编排出所需要的处理单元图Graph。
[0012] 复杂事件处理单元模型Models将会依据用户编写好的Dockerfile的指示被Docker打包上传到镜像仓库。在部署中,部署模块Core中的Deploy模块会指挥KubeTools发送不同的指令填充复杂事件处理单元模型Models的容器的ENTRYPOINT(相当于运行指令),并将容器部署到各自对应的节点上,最后复杂事件处理单元模型Models中的运行启动器Starter会根据指令内容实例化对应的处理单元Operator,最终实现在不同的节点上使用相同的容器镜像但却能运行不同的处理单元实例的效果。
[0013] 算法模块Methods中包含了若干个继承了抽象算法基类的各种实际部署算法样例,其中包括Greedy算法、LoadBalance算法、ResponseTimeAware算法和ReinforcementLearning算法等。
[0014] 部署模块Core中的DelayCalculate模块通过对Kubernetes日志的分析计算了部署模型在不同部署算法下的响应时间。同时部署模块Core内部各模块间耦合松散,用户可自行定义类似DelayCalculate的模块以进行拓展,以获取对部署实验更多维度的分析。
[0015] 处理单元Operator的抽象基类中实现了处理单元Operator间的通信模型。该通信模型主要借助于Kubernetes的Pod间通信原理和TCP网络编程实现。在Kubernetes中,所有的容器都被打包在Pod里,不同节点上部署的Pod间是无法直接通信的,因为他们各自处在不同的虚拟地址空间。不过Kubernetes提供了一种名为Service的API对象。Service的本质就像是一个路由表,可以在集群内部暴露一个访问地址,并将所有数据转发到与其具有相同标签的Pod上。只要为每一个Pod创建一个专属的Service,即可实现Pod之间的通信。
[0016] 处理单元Operator的抽象基类中实现了链路等效时延模拟,其主要原理是,假设目前集群内有N个节点,定义Mij为第i个节点到第j个节点之间时延要放大的倍数(Mij≥1)。先让用户编排好集群内所有节点之间时延放大的倍数(在DelayRules模块中)。当系统开始运行时,在数据包中记录发送时间Ts和发送节点i,然后在接收端再次记录接收时间Tr和当前节点j,让接收线程等待一段长度为(Ts–Tr)×(Mij–1)的时间,之后再将数据包交给负责事件处理的方法,从而达到模拟链路时延的效果。
[0017] 处理单元Operator的抽象基类中实现了输入率等效负载等级。由于在真实环境中,复杂事件处理模型面临的事件流输入率往往是动态变化的,在集群内部无法完全模拟出外部数据源动态产生事件的效果。需要通过特殊的处理单元担任数据源和数据消费者的角色。这时则会出现由于输入率存在上限导致无法模拟高压状态的情况。因此,我们定义系统状态值为事件输入率与集群算力的比值,视相同值的系统状态为等效状态,这样就能通过延长事件处理的时间降低集群算力,从而让事件输入率不变、集群算力下降的方式去等效模拟集群算力不变、事件输入率升高的状态。假设需要模拟的事件输入率的变化范围为RL到RH,则可将这个范围划分为I(I≥0)个区间,用0、1、2、…、I共I+1个等效负载等级的变化去取代事件输入率的变化,这里的I越大,划分出的等效结果就越精细。假设一个处理单元Operator中处理完当前事件所用的时间为Tprocess,然后让负责事件处理的线程方法在每处理完一个事件后等待Twait长度的时间即可实现对集群算力的等效下降,则在第i(i=0,1,2,…,I)级的等效负载等级下,等待时间Twait的计算公式为:
[0018]
[0019] 本发明具备以下有益效果:可以帮助解决复杂事件处理单元部署问题(Operator Placement Problem)相关领域的研究人员在进行研究时对部署算法验证与比较的需求。相较于以往,用户只需要编写处理单元Operator、编排处理单元图Graph、实现自己的算法、配置基本参数即可实现对复杂事件处理模型的简易部署。同时还具备链路等效时延模拟、输入率等效负载等级等功能,支持多样化的自定义和拓展。相比于从头编写分布式程序、实现各种底层技术细节,该系统能帮助用户更专注于部署问题本身;相比于单机运行的网络仿真环境,该系统能在真实的物理机集群上部署,使得实验效果更加精确、真实。

附图说明

[0020] 图1为Kubernetes集群中的复杂事件处理单元通信模型原理示意图;
[0021] 图2为Kubernetes集群中的链路等效时延模拟原理示意图;
[0022] 图3为基于Kubernetes的复杂事件处理单元部署系统架构图。

具体实施方式

[0023] 下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
[0024] 如图3所示,基于Kubernetes的复杂事件处理单元部署系统,主要由四个部分组成,分别是集群抽象层Cluster、复杂事件处理单元模型Models、算法模块Methods和部署模块Core。
[0025] 集群抽象层Cluster,通过KubeTools模块实现了对Kubernetes集群的虚拟化,屏蔽了许多来自硬件节点本身或者Kubernetes的配置细节。KubeTools模块主要是对Kubernetes API的封装,Kubernetes集群的每个节点上都会部署一个以容器形式存在的Nginx服务器,主要用于拓展一些Kubernetes API没有提供的功能,当需要获取节点间的响应时延时,就可以借助Kubernetes API进入容器内部执行Curl命令来获取。KubeTools还包含了用于模拟链路时延的DelayRules模块。DelayRules模块约定了Kubernetes集群节点间链路时延的放大倍数,这些放大倍数会在复杂事件处理单元模型Models中的处理单元Operator中被调用,并用于实现链路等效时延模拟。
[0026] 复杂事件处理单元模型Models,该模块是一个将所有由用户编写的处理单元Operator、编排的处理单元图Graph和事件描述类Event、数据生成模块Data、运行启动器Starter打包成的容器镜像。复杂事件处理单元模型Models将会依据用户编写好的Dockerfile的指示被Docker打包上传到镜像仓库。在部署中,部署模块Core中的Deploy模块会指挥KubeTools发送不同的指令填充复杂事件处理单元模型Models的容器的ENTRYPOINT(相当于运行指令),并将容器部署到各自对应的节点上,最后复杂事件处理单元模型Models中的运行启动器Starter会根据指令内容实例化对应的处理单元Operator,最终实现在不同的节点上使用相同的容器镜像但却能运行不同的处理单元实例的效果。在C/C++和Java端,容器打包时所用到的Dockerfile中除基础镜像外还应加上编译相关的配置,Python一类的解释型语言则不需要。事件描述类Event描述了事件的格式,数据生成模块Data负责提供数据。此外,复杂事件处理单元模型Models中的所有处理单元Operator、编排的处理单元图Graph都由各自对应的抽象基类继承而来。处理单元Operator的抽象基类中实现了处理单元间的通信模型、链路等效时延模拟、输入率等效负载等级等功能,用户只需继承基类并覆盖其中用于处理事件的方法即可制定其所需要的处理单元Operator。处理单元图Graph的抽象基类中实现了各种供部署和算法使用的方法,并对子类提供一个需要被覆盖的、会被构造方法所调用的方法,称为覆盖调用方法。该覆盖调用方法返回若干处理单元Operator的类型、名称和各自之间拓扑描述,用以完成编排的处理单元图Graph的初始化。用户只需要在继承抽象基类时覆盖此覆盖调用方法,即可编排出所需要的处理单元图Graph。
[0027] 处理单元Operator的抽象基类中实现了处理单元Operator间的通信模型。该通信模型主要借助于Kubernetes的Pod间通信原理和TCP网络编程实现。在Kubernetes中,所有的容器都被打包在Pod里,不同节点上部署的Pod间是无法直接通信的,因为他们各自处在不同的虚拟地址空间。不过Kubernetes提供了一种名为Service的API对象。Service的本质就像是一个路由表,可以在集群内部暴露一个访问地址,并将所有数据转发到与其具有相同标签的Pod上。如图1所示,只要为每一个Pod创建一个专属的Service,即可实现Pod之间的通信。
[0028] 处理单元Operator的抽象基类中实现了链路等效时延模拟,如图2所示,其主要原理是,假设目前集群内有N个节点,定义Mij为第i个节点到第j个节点之间时延要放大的倍数(Mij≥1)。先让用户编排好集群内所有节点之间时延放大的倍数(在DelayRules模块中)。当系统开始运行时,在数据包中记录发送时间Ts和发送节点i,然后在接收端再次记录接收时间Tr和当前节点j,让接收线程等待一段长度为(Ts–Tr)×(Mij–1)的时间,之后再将数据包交给负责事件处理的方法,从而达到模拟链路时延的效果。
[0029] 处理单元Operator的抽象基类中实现了输入率等效负载等级。由于在真实环境中,复杂事件处理模型面临的事件流输入率往往是动态变化的,在集群内部无法完全模拟出外部数据源动态产生事件的效果。需要通过特殊的处理单元担任数据源和数据消费者的角色。这时则会出现由于输入率存在上限导致无法模拟高压状态的情况。因此,我们定义系统状态值为事件输入率与集群算力的比值,视相同值的系统状态为等效状态,这样就能通过延长事件处理的时间降低集群算力,从而让事件输入率不变、集群算力下降的方式去等效模拟集群算力不变、事件输入率升高的状态。假设需要模拟的事件输入率的变化范围为RL到RH,则可将这个范围划分为I(I≥0)个区间,用0、1、2、…、I共I+1个等效负载等级的变化去取代事件输入率的变化,这里的I越大,划分出的等效结果就越精细。假设一个处理单元Operator中处理完当前事件所用的时间为Tprocess,然后让负责事件处理的线程方法在每处理完一个事件后等待Twait长度的时间即可实现对集群算力的等效下降,则在第i(i=0,1,2,…,I)级的等效负载等级下,等待时间Twait的计算公式为:
[0030]
[0031] 算法模块Methods,该模块主要由一个抽象算法基类和若干个继承了该基类的实际算法样例组成。其中包括Greedy算法、LoadBalance算法、ResponseTimeAware算法和ReinforcementLearning算法等。抽象算法基类规定了部署算法的输入输出,用户可以通过继承抽象算法基类的形式实现自己想要的部署算法。部署算法从集群获取状态信息,生成部署策略,出来的结果最终被部署模块Core所调用,应用于部署。
[0032] 部署模块Core,该模块主要由部署实验的配置模块Config、集群初始化模块Initialize、负责执行部署的Deploy模块和计算响应时间的DelayCalculate模块组成。其中配置模块Config是对系统中诸多参数的抽取集中,例如与Kubernetes连接所用的密钥文件、各种用到的默认端口、镜像仓库地址、负载参数等;集群初始化模块Initialize会通过KubeTools为集群中每一个节点部署一个用于测量节点间链路时延的Nginx容器。而Deploy模块则负责通过用户所选择的部署算法返回的部署策略对集群执行部署;DelayCalculate模块通过对Kubernetes日志的分析计算了部署模型在不同部署算法下的响应时间。同时部署模块Core内部各模块间耦合松散,用户可自行定义类似DelayCalculate的模块以进行拓展,以获取对部署实验更多维度的分析。