论文部分内容阅读
随着计算机平台及其相关处理的技术迅猛发展,尤其是近两年来在数据处理方向的发展,人们已经迈入大数据时代,数据持久化后的分析模式很难满足实时应用的需求。在数据处理领域中出现了一种新的数据模式——流式数据。数据流中的数据元素具有数量无限性、时间连续性、快速易逝性、难以预测性等特点。复杂事件处理引擎可以从数据流中检测出匹配的数据序列,在流式数据处理和实时响应方面非常出色,近些年得到了越来越广泛的应用。Esper是非常出色的一款复杂事件处理引擎。基于Esper引擎的事件处理系统可用于复杂事件处理和数据分析,适合用于处理大量实时的消息和事件流。由于近些年多核处理器已经成为主流,应用已经非常普遍,因此在多核处理器上研究Esper的性能表现非常有必要。Esper官方提供的文档以及绝大多数其它Esper资源大多是在关注Esper如何使用,很少有Esper性能分析和并发工作机制的分析文档。现有研究工作表明,Esper并未能充分利用多核平台的计算能力。为此,本文首先通过源码分析,对Esper引擎的查询工作机制进行了分析总结,具体包括:设计测试用例,利用调试工具跟踪Esper对用例中事件的处理流程,分析处理流程中关键数据结构,总结Esper中查询语句和事件的处理逻辑等。接着,分析了Esper在整个查询过程中涉及到的两种重要的锁结构——ManagedReadWriteLock和Statement AgentInstanceLock,并分析两种锁的获取和释放行为以及其对并发机制的影响。最后,对Esper原有线程池模型的工作机制进行研究,分析了线程池对并发任务的处理流程,并指出了Esper不能很好地支持多核平台的原因所在。针对Esper不能支持多核平台的问题,本文提出了一种支持多核平台的线程处理框架,并在Esper核心系统中进行了实现。新线程框架使用基于事件类型的请求队列,按照一定的调度策略调度工作线程存储结构,获取事件进行查询处理。本文针对提出的线程处理框架进行了Java语言的实现,详细介绍了工作线程的工作流程、调度策略、请求处理,以及重要数据结构如请求队列,事件存储结构。最后为了验证新的线程处理框架的性能,本文在实验上对Esper原有线程池框架和本文设计的线程池框架进行多方面的性能对比。实验结论表明,无论是在CPU利用率还是查询吞吐量上,本文设计的线程池框架皆比原有线程处理模型都有着显著地提升,最好情况下响应时间可以提高20倍。实验结论进一步验证本文分析的锁机制和查询策略是Esper引擎多核平台下不亲和的主要症结所在。这些工作可以帮助开发者更好地了解Esper引擎工作机制,以便于多核平台下数据流系统的研发。