一种基于CEP 发布订阅中间件应用研究
2014-01-02阳建坤祖向荣
阳建坤 祖向荣
1.华北电力大学,控制与计算机工程系
针对传统的基于内容的订阅发布(Publisher/Subcriber,Pub/Sub)中间件只能对简单的事件进行检测的现状,引入复杂事件处理(Complex Event Processing,CEP)技术,提出一种基于CEP 发布订阅中间件,并对开源CEP 引擎Esper 进行扩展,实现基于CEP 的事件发布订阅机制,最后对电力系统中多源事件流进行仿真监控,验证了该方法的有效性。
1 引言
随着信息通信技术的快速发展,软件系统的主要使用方式、运行方式、生产方式和形态都在发生着巨大的变革,各类软件系统逐渐形成一种开放协同的应用环境,而软件的应用形态也开始从面向熟识用户群体、相对静态和相对封闭的紧耦合形式向公共可访问、开放式以及动态协作的松耦合模式转变,这就要求软件系统能够支持对分布式异构系统进行动态松耦合地协同通信,与此同时还要保持较高效的时间性能。
Pub/Sub 技术在控制流、时间和空间三个方面都具备完全的解耦能力,且具有较高的时间性能,能够很好地迎合这样的需求。本文在对当前几种主流的Pub/Sub 系统进行研究的基础上,针对其只能对简单事件进行的检测的现状,提出一种基于CEP 的Pub/Sub 中间件,增强Pub/Sub 系统的表达能力,支持对“复杂事件”或“事件模式”的订阅,从而改善系统的可扩展性和性能。最后,对开源CEP 引擎ESPER 进行扩展,实现了该中间件,并进行了仿真实验。
2 发布/订阅系统概述
从订阅模型的角度来看,当前Pub/Sub 技术主要分为四大类:基于通道的“发布/订阅”、基于主题的“发布/订阅”、基于内容的“发布/订阅”、基于类型的“发布/订阅。其中,容易实现和应用的当属基于通道和基于主题的 Pub/Sub 系统。它们相对设计实施过程较为简单,因此,在很多厂商的消息中间件产品中都集成了这两类系统。然而基于通道和基于主题的 Pub/Sub 则只具备了非常有限的过滤机制,使得很多应用中用户的个性化订阅需求无法得到满足,例如当前被广泛地应用于网站内容更新、新闻频道和 blog 信息订阅等的 RSS(Really Simple Syndication,RSS)技术,从原理上探究,即是一种基于主题(也可以说是基于通道)的Pub/Sub,这是由于用户可能比较关心着大量的网站、新闻频道和blog 中的小部分内容,却不是全部,因此,用户只能地对多个 RSS 链接进行订阅,才可以获取他所关心的内容。但是,假如能够整合所有这些 RSS 的资源,从而建立基于内容的订阅机制,这对用户来说,将会产生很大的方便,而基于内容的 Pub/Sub 即是能够迎合这种需求的最佳选择。但是,相较而言,基于内容的 Pub/Sub 系统在实现和部署上则要显得复杂的多,它要成为一个能够完整精确地支持大规模分布式应用系统且具有实用性的平台,仍然面临着许多关键性问题的挑战。例如传统的基于内容的 Pub/Sub 系统只能支持对单个简单事件进行检测,而对现实生产生活中出现的复杂事件(多个具有时空、因果关系的简单事件集合)却无法支持。
3 基于CEP 发布订阅中间件设计
图1 基于CEP 发布订阅系统概念模型
图2 仿真部署图
图3 用电组用电情况动态监控图
在Pub/Sub 系统中,分布式系统中的各类参与者能够以发布/订阅的方式进行交互协同。通常情况下,信息源的生产者被称为发布者,输出信息的消费者则被称之为订阅者,而订阅者和发布者都被称为客户端。另外,在系统中,信息的发布者和订阅者之间所交互的信息则被称之为事件,发布者将事件发布给CEP 发布/订阅中间件;订阅者则向CEP 发布/订阅中间件发送一个订阅条件,描述对系统中感兴趣事件的特征,当然,假如订阅者不再对系统中任何事件感兴趣,也可以及时取消订阅;而CEP发布/订阅中间件的主要作用是确保发布者发布的事件能够可靠、及时地传送给所有对之感兴趣的订阅者。
本文为实现可对复杂事件进行匹配处理的Pub/Sub系统,对传统的Pub/Sub 系统进行了扩展,将CEP 引擎接入订阅条件匹配模块,将不同订阅者的订阅条件定制为CEP引擎中EPL(Event Processing Language,EPL)语句,继而利用CEP 技术对发布者发布的事件流进行复杂事件处理,最终实现支持高效处理复杂事件的发布订阅中间件。如图1 所示,路由选择模块负责选择适当的路径,将一个事件从发布者传送到订阅者,而订阅条件匹配模块则负责高效地找到与给定的事件相匹配的所有订阅条件,并把相应的订阅条件传送给复杂事件处理引擎查询定制模块,由该模块将订阅条件编写为相应的复杂查询EPL 语句,进而由复杂事件处理引擎对发布的事件进行处理,最终将处理结果发送给相应的订阅者。
4 实验仿真
实验部署
实验操作平台为三台内存为4G 且安装 64 位Linux操作系统的PC,其中CEP 引擎由java 编写的开源工具Esper,通过相关的java 编码实现发布订阅机制,部署在一台PC 上,作为基于CEP 发布订阅中间件系统,而其余两台PC 分别模拟发布者和订阅者系统,具体仿真部署如图2。其中发布者系统所使用数据集为2012 年Enernoc 公司采集的美国国内100 个匿名工商业用户电力负荷数据集。该数据集包括自2012 年1 月1 日~2012 年12 月31 日每天288 点的负荷数据,该数据集具有典型的电力负荷特征,能够很好的表现仿真的真实性能。
实验结果
实验对100 个匿名工商业用户用电情况进行了监控,同时利用复杂事件处理引擎对动态变化用户组(用户利用订阅发布模式随进随出)的用电均值、总值进行了计算,实现了用户组的基于复杂事件订阅模式的用电情况监控,如图3。
5 结语
本文提出了一种支持对“复合事件”或“事件模式”进行订阅的基于CEP 的订阅发布中间件,即当各发布者所发布的一系列事件所组成的事件序列满足某一条件时,才通知订阅者客户端。这种新型Pub/Sub 系统可以改善传统的基于内容的Pub/Sub 系统性能,并且在实际应用领域有较好的应用效果