冯 娟
(上海申通地铁集团有限公司技术中心,201103,上海∥高级工程师)
ZooKeeper在复杂事件处理系统中的应用
冯 娟
(上海申通地铁集团有限公司技术中心,201103,上海∥高级工程师)
复杂事件的分布式计算处理与协调一直是分布式计算的难题,尤其是基于低成本的高可用性技术实践。提出了把Zoo Keeper应用于以Esper为核心的复杂事件处理系统的一种技术解决方案。该方案通过Zoo Keeper协调多个复杂事件处理引擎,并作为控制台和复杂事件处理引擎的交互媒介,能够实现复杂事件处理分布式计算的集群技术应用,可提高系统的可用性和实时性。所提出的方案在3台PC机搭建的仿真实验平台进行了验证,说明是可行的。
自动售检票系统;设备监控;数据流处理;分布式计算;集群技术;
Author'saddressTechnology Center of Shanghai Shentong Metro Group Co.,Ltd.,201103,Shanghai,China
敏捷企业的一个基本要求就是事件驱动业务(Event-driven Business)。事件驱动业务就是在连续业务过程中进行决策的一种业务管理方式,即根据不同时间出现的一系列事件而执行相关任务,并调度可用的资源执行任务。在软件开发中,事件驱动编程能够带来强大的功能和更灵活的交互性,而在企业中,事件驱动业务依托于比较成熟的信息化建设,能够将业务的灵活性和效率大幅度提高。在各个业务应用系统连续不断地产生数据流的同时,根据预先定义的条件生成一些“业务事件”,按照策略对这些业务事件进行分析处理,触发新的业务事件或者业务流程,即实现了业务的事件驱动[1]。事件驱动业务要求能够快速(毫秒级)、不间断地处理连续、海量的数据,具备灵活的规则或策略设置,从而具备迅速识别、捕获、响应实时业务数据的能力。而传统的企业IT架构通常在业务应用系统中处理业务操作遵循固定的业务流程处理跨系统事务,并且这些流程很少变化,基于数据仓库进行海量数据的存储及事后分析的这种IT架构远远达不到事件驱动业务的要求[2]。事件驱动业务能够应用的业务领域很多,凡是需要快速处理连续性数据、需要能够灵活制定策略的业务,都可以采用事件驱动的业务模式。例如,轨道交通票务数据在线交易处理、轨道交通AFC(自动售检票)系统设备运行状态实时监控、证券行业常见的风险分析及预警(事前及事中风险控制)、投资决策中的程序化交易、经纪人绩效计算等。
Zoo Keeper是Hadoop的正式子项目,是一种用于提供配置信息维护、命名服务、分布式同步和组服务等的集中式协调系统,所有这些服务都以一种或多种形式被分布式系统使用[3-4]。
Zoo Keeper本质上是一个分布式的小文件存储系统,具有下述应用特性:
(1)简单。Zoo Keeper允许通过分布式程序共享方式,组织成类似标准文件系统层级命名空间协调的分布式程序。这个命名空间包含类似文件和目录的数据寄存器,不像一个典型的用于存储的文件系统。Zoo Keeper的数据保存在内存中,可实现高吞吐量和低延迟访问。
(2)冗余。ZooKeeper本身和其自身协调的程序一样,设计为冗余的,在拥有许多主机集合的主机组上运行。组成Zoo Keeper服务群的所有服务器都已知对方,只要所有服务器中的主服务器可用,ZooKeeper服务就是可用的。客户端链接的一个Zoo Keeper服务器通过发送请求、获取响应、监听事件、发送心跳维持一个TCP(传输控制协议)链接,如果链接中断,客户端将连接到另外一个服务器[5]。
(3)有序。Zoo Keeper用一个反映所有Zoo Keeper事务顺序的数字,标记每一个更新。以后的操作可以使用这个顺序数字标记。
(4)快速。ZooKeeper在读取占主要地位的负载环境下,在读取操作比写入操作更频繁的情况下,读取速度非常快。
(5)丰富的API(应用程序编程接口)。ZooKeeper为开发人员提供了一套丰富的API,减轻了开发人员编写通用协议的负担[6]。
在传统的IT架构中,已经实现了业务事件的处理。比如在传统的轨道交通自动售检票系统的票务处理中,通常将票务交易数据经检验和合法性判断后存储在联机数据库中,进一步的数据分析需在轨道交通晚间停运后或通过应用系统的操作界面由既定的报表处理模块完成各类业务报表或响应联机查询。又如在AFC系统中,所有的AFC终端设备自动根据预设定时间间隔,把大量设备自检状态数据发送至线路中央计算机系统或票务清分中心。为实时监视和控制AFC终端设备,需要处理程序快速鉴别设备状态的海量数据及其与上一帧设备运行监视屏数据的差异,若存有差异需要实时自动刷新设备运行监视屏信息[7]。上述两个应用举例,都存在着CEP(复杂事件处理)需求。传统的CEP方式通常存在2个问题:一是速度慢,大量复杂事件的处理顺序是基于交易数据写入数据库后的后续处理顺序确定,易造成数据访问的I/O瓶颈,处理效率低;二是对于复杂或异常情况的处理,需要人工介入处理,操作人员的经验很大程度上确定了复杂事件的处理方法和效果。如AFC终端设备上传的票务交易数据发生飘移和发现某AFC终端设备运行状态异常,相应的后续处理步骤都需要人工介入。解决这两个问题的有效技术方法,需要松耦合的多处理机(服务器)集群技术解决方案,以部署复杂事件并行处理的协调步骤并提高处理系统的可用性。实现一个松耦合、集群、具有分布式并行处理特征应用软件系统的关键技术之一是,使用消息队列(Message Queue,简为MQ)实现复杂事件处理步骤间相关数据和状态签名在不同处理设备之间的传递,以有效地减少访问数据库的相关入库数据、降低I/O和避免人工干预。
传统的商业智能(Business Intelligence,简为BI)技术通过数据仓库将数据整合到一起,并用专门的工具在数据模型的基础上进行分析,解决应对复杂性。在技术和用途上,显然MQ和BI是正交的。MQ不适合处理复杂性,而BI主要适应于结构化的历史数据分析,无法处理“即时”的情况,CEP技术的出现解决了上述2个方面的问题,在实时性和复杂性方面都得到了很好的解决[8]。
事件处理的2个主要模型是数据流处理(Data Stream Processing,简为DSP)模型[8]和CEP模型[9]。Esper是纯Java开发的用于CEP和DSP应用程序的组件,可以监测事件流,并在特定事件发生时触发某些动作。Esper引擎是为满足对事件进行分析并做出反应等针对CEP应用需求而产生的组件。CEP应用要求实时或者接近实时处理事件(或消息)。这类应用具有高吞吐量、低响应时间和复杂计算等特点[10]。由于Esper本身不支持集群环境,无法实现在线生产系统的高可用性。针对这一问题,本文研究和提出使用Zoo Keeper作为管理控制台与多个复杂事件处理引擎的交互媒介,从而扩展复杂事件处理系统的集群能力,并为控制台和处理引擎间提供一种新的交互方式。
本文设计和提出的以Esper为CEP引擎的CEP系统,主要由规则部署包开发环境、CEP分析引擎、运维控制台、ZooKeeper和数据库服务器(Database Server,简为DBS)等组成,是一个集规则部署包开发、系统控制运维管理和事件分析处理等的集成应用系统。该系统为松耦合关系,各子系统只遵循相应的约定,可以单独实现并运行。其系统间的交互关系图如图1所示。
图1中,CEP Studio是基于开源集成开发环境Eclipse开发的插件,用于开发规则部署包。运维控制台和业务控制台是基于Nutz等技术开发的Web应用,用于集群管理、规则管理、状态监控等,通过控制台配置的集群配置选项、规则实例参数等信息存储在数据库中。Zoo Keeper用于扩展系统的集群能力,防止单点故障并提供分布式的同步,使系统具有高可靠性;其可靠性技术指标应能够达到99.99%,并作为控制台和引擎间的交互媒介。
图1 子系统间的交互关系图
3.1 软件系统总体结构
设计基于Zoo Keeper的软件系统的总体结构如图2所示。
图2 基于ZooKeeper的软件系统总体结构视图
图2中,控制台与CEP引擎不直接交互,系通过Zoo Keeper间接交互,Zoo Keeper是整个系统的核心。只要将开发完成的规则部署包上传到运维管理控制台,运维管理控制台就将规则模板的相关信息和规则模板存放到对应数据库和模板库(文件系统)。业务人员通过运维管理控制台进行规则实例的维护操作,每次的维护结果存储在对应数据库和Zoo Keeper中;多个CEP引擎监听到Zoo Keeper中的实例出现变化时,会从模板库下载规则模板到本地文件系统,用于维护引擎中的规则实例。
3.2 系统的主要设计思路
系统的主要设计思路是灵活运用了Zoo Keeper的发布与订阅特性以及发送更新通知的机制。对应本系统设计,可设计为3种角色,即业务逻辑、Zoo Keeeper和规则管理。业务逻辑主要是监听对应自己规则的Zoo Keeeper节点,1个业务逻辑对应1个规则;Zoo Keeeper提供发布、订阅和更新通知的功能;规则管理对应于图2中的运维、业务控制台。系统的业务处理流程如图3所示。
图3 系统的业务处理流程图
业务处理流程概述如下:①业务逻辑服务监听对应的Zoo Keeper节点;②用户通过运维管理控制台更新规则;③Zoo Keeper通知各逻辑节点;④各个逻辑节点(CEP引擎)下载新规则到本地,并更新规则实例。
3.3 系统实现
系统实现的主要工作,对应图3的业务流程,利用ZooKeeper提供的编程接口进行:
(1)创建Zoo Keeper节点;
(2)设置Watcher回调方法,在本系统中为下载规则的名称、参数名称、状态和操作结果等,从而使得各个CEP引擎能够同步更新本地的规则实例。
相关实现的关键代码如下:
∥Watcher实例,回调方法为下载规则;
Watcher wh=new Watcher()﹛
public void process(WatchedEvent event)﹛
download rule;
﹜;
∥创建一个Zoo Keeper实例,第一个参数为目标服务器地址和端口,第二个参数为Session超时时间,第三个参数为节点变化时的回调方法;
ZooKeeper zk=new ZooKeeper("10.15. 82.166:3351",500000,wh);
∥创建一个节点root,数据是mydata,不进行ACL权限控制,节点为永久性的(即客户端shutdown了也不会消失)
zk.exists("/root",true);
zk.create("/root","mydata".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode. PERSISTENT);
3.4 仿真试验示例及其分析
限于时间和资源的限制,本文采用3台PC机进行的仿真试验示例及其分析简洁描述如下。
3.4.1 ZooKeeper的集群配置
用3台机器构成ZooKeeper集群,具体机器名和IP地址对应如下:
ZK01 192.168.0.1
ZK02 192.168.0.2
ZK03 192.168.0.3
Zoo Keeper的版本为3.3.4。以ZK01机器为例(ZK02和ZK03的配置文件与ZK01完全相同),具体相关配置示例说明如下:
(1)/etc/hosts
ZK01 192.168.0.1
ZK02 192.168.0.2
ZK03 192.168.0.3
(2)ZooKeeper配置文件
tick Time=2000
dataDir=/home/hadoop/storage/zookeeper
clientPort=2181
init Limit=5
sync Limit=2
server.1=ZK01:2888:3888
server.2=ZK02:2888:3888
server.3=ZK03:2888:3888
3.4.2 Esper处理规则的测试用例
以统计轨道交通5 min内乘客出站扣款票价等于某币值的总人数为例,可表示为:
EPL:count*from transaction_exit.win. time(5 minute) where ticket_price=400;
EPL:count*from transaction_exit.win. time(5 minute) where ticket_price=500;
price=400和price=500分别表示币值单位为“分”的出站扣款,在这里仅为表示复杂事件处理中的某种规则变化示例。
3.4.3 系统的可靠性和实时性
由于Zoo Keeper采用了分布式集群的方式,所以保证了系统可靠性(Zoo Keeper集群中的服务器越多,其可靠性越高)。多个ZooKeeper采用选举的方式选出一个leader,同时Zoo Keeper采用了事件通知方式,所以系统的实时性也有了较大的提高,基本上达到了完全同步的状态。
本文提出和完整描述了基于Zoo Keeper且以Esper为核心的复杂事件处理系统的一种技术解决方案,包括实现该技术方案的系统软件构架、系统总体结构、业务处理流程、系统实现和仿真试验示例及其分析。
结合ZooKeeper的适合分布式计算集群协调及管理的高可用性能力和Esper适用于CEP、DSP应用组件的优势,提出了一种适合CEP和DSP应用的高可用性的技术解决方案,目前仍鲜见。
由于受到时间、资源和其它因素的限制,本文对系统的实现方法仅在3台PC机上进行了仿真验证。仿真结果证明本文的研究方法和给出的技术解决方案是可行的。
[1] 汤玲丽.复杂事件处理引擎关键技术研究[D].哈尔滨:哈尔滨工程大学,2012.
[2] 史喜阳,孙棣华,宋潇潇.基于CEP的RFID数据处理模型研究[J].自动化技术与应用,2008,27(4):73.
[3] 刘卓杨.复杂事件处理中时间窗口的改进[J].计算机工程,2010(10):50.
[4] 李汝光,赵俊.基于ZooKeeper的分布式缓存的设计与实现[J].绵阳师范学院学报,2011,30(11):116.
[5] Robinson H,王旭.Observer:让ZooKeeper更具可伸缩性[J].程序员,2010(2):91.
[6] Tan Xuehou.Shortest zookeeper's roles in simple polygons[J].Information Processing Letters,2001(1):25.
[7] 赵时旻.轨道交通自动售检票系统[M].上海:同济大学出版社,2007.
[8] 蔡昭权,索剑,汪华斌,等.基于Esper和Nagios的网络监控系统设计与实现[J].计算机工程与科学,2012,34(9):8.
Application of ZooKeeper in Complex Event Processing System
Feng Juan
Distributed calculation processing and coordinating of the complex event processing has been a difficult problem for distributed calculation,especially for a high availability technical practice based on low cost.A technical solution is proposed,in which Zoo Keeper is put into complex event processing application in terms of the core of Esper.This solution can coordinate multiple complex event processing engines and operate as an interactive medium among control consoles and complex event processing engines,realize a cluster technical practice for distributed calculating of complex event processing,raise system availability and real-time performance.The solution proposed in this paper has been validated by the construction of a simulation experiment platform of 3 PCs,and the result proves to be practical.
AFCsystem;device monitor;data stream processing;distributed calculation;cluster technology
TP 274
2014-06-17)