用于处理事件流的事件的系统和方法与流程

文档序号:28207177发布日期:2021-12-28 19:03阅读:189来源:国知局
用于处理事件流的事件的系统和方法与流程
用于处理事件流的事件的系统和方法
1.本技术是申请日为2016年6月3日、申请号为201680061633.0、发明名称为“连续查询处理中的事件批量处理、输出排序和基于日志的状态存储”的发明专利申请的分案申请。
技术领域
2.本技术涉及用于处理事件流的事件的技术。


背景技术:

3.在传统的数据库系统中,通常以表的形式在一个或多个数据库中存储数据。然后使用比如结构化查询语言(sql)的数据管理语言查询和操作存储的数据。例如,可以定义和执行sql查询以从数据库中存储的数据标识有关数据。因此关于数据库中存储的数据的有限集合执行sql查询。另外,当执行sql查询时,其关于有限数据集合执行一次且产生有限的静态结果。因此数据库最好配备为在有限的存储的数据集合上运行查询。
4.但是,现代的应用和系统的数目代替有限数据集合,产生以连续数据或者事件流的形式的数据。这种应用的实例包括但不限于传感器信息应用,金融报价机,网络性能测量工具(例如,网络监视和业务量管理应用),点击流分析工具,汽车业务量监视等。这种应用已经引起可以处理数据流的新一代应用的需要。例如,温度传感器可以配置为发出温度读数。
5.管理和处理这些类型的基于事件流的应用的数据涉及建造具有强的时间聚焦的数据管理和查询性能。需要包括在数据的连续无限制集合之上的长期查询的不同种类的查询机制。虽然某些卖方现在提供指向事件流处理的产品套件,这些产品提供仍然缺乏处理当今的事件处理需要所需的处理灵活性。


技术实现要素:

6.提供用于处理事件流的事件的技术(例如,方法,系统,存储可由一个或多个处理器执行的代码或者指令的非瞬时计算机可读介质)。在实施例中,公开了处理事件流的事件和在系统故障的情况下执行事件流中的事件的恢复的事件处理系统。
7.在某些实施例中,公开了包括存储多个指令的存储器和配置为访问存储器的一个或多个处理器的事件处理系统。处理器配置为接收与应用有关的连续输入事件流,处理连续输入事件流以生成与应用有关的输出事件流,并确定输出事件流中的输出事件的输出序列号。处理器进一步配置为发送输出事件流中的输出事件并存储输出事件的输出序列号。在一些实施例中,处理器配置为在正在处理连续输入事件流的同时接收系统的故障的指示。处理器配置为确定输出事件流中的最近发送的输出事件的当前输出序列号,确定与输入事件的最近处理批次对应的输出事件的最后输出序列号,和基于当前序列号和最后输出序列号确定要发送的输出流的一个或多个输出事件的集合。在一些实施例中,处理器进一步配置为发送与应用有关的一个或多个输出事件的集合。
8.在一些实施例中,处理器进一步配置为在要发送的一个或多个输出事件的集合中
排除一个或多个输出事件。在一些实施例中,处理器配置为基于接收系统的故障的指示从输出事件流中的最近发送的输出事件的当前输出序列号开始发送输出事件。
9.在一些实施例中,处理器进一步配置为通过生成检查点标记事件,将检查点标记事件插入到连续输入事件流中和基于检查点标记事件生成一个或多个事件批次的集合,来从连续输入事件流生成一个或多个事件批次的集合。在某些实例中,检查点标记事件表示与连续输入事件流中的输入事件有关的信息。在某些实例中,基于检查点标记事件确定事件批次的大小。
10.在一些实施例中,处理器进一步配置为处理检查点标记事件,基于检查点标记事件的处理发送指示一个或者多个事件批次的集合中的第一事件批次的处理的完成的确认消息和生成系统的当前状态的快照。在某些实例中,系统的当前状态的快照包括与至少关于事件的第一批次的输入队列状态、运算符状态或者输出队列状态中的至少一个有关的信息。在一些实施例中,处理器配置为将输出事件流中的输出事件的输出序列号存储为快照的一部分。
11.以上和以下描述的技术可以以许多方式和在许多背景下实现。如以下更详细地描述的,参考以下附图提供几个示例实现和背景。但是,以下实现和背景仅是其中一些。
附图说明
12.图1示出其中可以实现执行分布事件处理的技术的简化的示例系统或者架构100。
13.图2示出可以包括本公开的实施例的事件处理系统200的简化的高层级图。
14.图3是根据本公开的一个实施例的包括提供事件处理服务的事件处理应用302的事件处理系统300的示例性图示。
15.图4是根据本公开的实施例的事件处理系统可以执行事件的精确恢复的方式的示例性图示。
16.图5是根据本公开的一个实施例的包括提供事件处理服务的事件处理应用502的事件处理系统500的示例性图示。
17.图6图示根据本公开的一个实施例的用于提供事件处理服务的示例处理600的流程图。
18.图7图示根据本公开的一个实施例的用于处理连续事件流中的事件的示例处理700的流程图。
19.图8图示根据本公开的一个实施例的用于确定输出流中要发送的一个或多个输出事件的集合的示例处理800的流程图。
20.图9是根据本公开的一个实施例的包括提供事件处理服务的事件处理应用902的事件处理系统900的示例性图示。
21.图10是根据本公开的实施例的示出用于在事件流中的事件的处理期间标识的连续查询的不同类型的运算符的不同类型的快照的生成的示例性表。
22.图11图示示出了根据本发明的某些实施例的用于提供事件处理服务的处理1100的示例流程图。
23.图12示出用于实现本公开的实施例的分布式系统1200的简图。
24.图13图示可以用于实现本发明的实施例的示例性计算机系统1300。
具体实施方式
25.在下面的描述中,将描述各种实施例。为了说明的目的,提出特定配置和细节以提供实施例的全面的了解。但是,对本领域技术人员很明显可以在没有该特定细节的情况下实践实施例。此外,可以省略或者简化公知的特征以不模糊描述的实施例。
26.复杂事件处理(cep)的概述
27.复杂事件处理(cep)提供基于事件驱动的架构的用于建造应用的模块化平台。在cep平台的核心是允许应用使用说明性的类似sql的语言对于数据流滤波、查询和执行模式匹配操作的连续查询语言(cql)。开发者可以结合轻量级java编程模型使用cql来写应用。仅举几个例子,其他平台模块包括特征富有的ide、管理控制台、聚类、分布式高速缓存、事件储存库和监视。
28.因为事件驱动的架构和复杂事件处理已经成为企业计算景观的显著特征,越来越多的企业开始使用cep技术建造关键任务应用。当今,可以在许多不同产业找到关键任务cep应用。例如,cep技术正用在电力产业中以通过允许公用设施对电力的需求改变即时反应来使得公用设施更有效率。cep技术正用在信用卡产业中以在潜在的欺诈交易实时地发生时检测它们。关键任务cep应用的列表持续增长。使用cep技术建造关键任务应用已经导致要使得cep应用高度可用和容错的需要。
29.当今的信息技术(it)环境对于每件事生成连续数据流,从监视金融市场和网络性能到商务处理执行和跟踪rfid标记的资产。cep提供用于开发事件处理应用以改进商业活动的有效性的丰富的说明性环境。cep可以处理多个事件流以实时地检测模式和趋势,并向企业提供利用显露的机会或者减轻开发危险的所需的可见性。
30.连续数据流(也称为事件流)可以包括本质上是连续或者无限制的而没有明确结束的数据或者事件的流。逻辑上,事件或者数据流可以是数据元素(也称为事件)的序列,每个数据元素具有关联的时间戳。连续事件流逻辑上可以表示为元件的袋子或者集合(s,t),其中“s”表示数据部分,且“t”在时域中。“s”部分通常涉及字节组或者事件。事件流因此可以是盖时间戳的字节组或者事件的序列。
31.在某些方面,与流中的事件相关联的时间戳可以等于时钟时间。但是,在其他实例中,与事件流中的事件相关联的时间可以由应用域定义且可以不对应于时钟时间,但是,例如可以代替地由序列号表示。因此,与事件流中的事件相关联的时间信息可以由数字、时间戳或者表示时间观念的任何其他信息表示。对于接收输入事件流的系统,事件按增加时间戳的次序到达系统。可能有具有相同时间戳的多于一个事件。
32.在某些实例中,事件流中的事件可以表示某些世俗事件的发生(例如,当温度传感器将值改变为新的值时,当股票代码的价格改变时),且当由数据流事件表示的世俗事件发生时可以指示与该事件相关联的时间信息。
33.对于经由事件流接收的事件,与事件相关联的时间信息可以用于保证事件流中的事件以增加的时间戳值的次序到达。这可以使在事件流中接收的事件能够基于它们的关联的时间信息排序。为了使能该排序,时间戳可以以非减小方式与事件流中的事件相关联,以使得较晚生成的事件具有比较早生成的事件更晚的时间戳。作为另一实例,如果序列号正用作时间信息,则与较晚生成的事件相关联的序列号可以大于与较早生成的事件相关联的序列号。在某些实例中,例如,当由数据流事件表示的世俗事件同时发生时,多个事件可以
与相同时间戳或者序列号相关联。属于相同事件流的事件通常可以以由关联的时间信息施加于事件上的次序处理,较早的事件在较晚的事件之前处理。
34.与事件流中的事件相关联的时间信息(例如,时间戳)可以由流的源设置或者替代地可以由接收流的系统设置。例如,在某些实施例中,可以在接收事件流的系统上维持心跳,且与事件相关联的时间可以基于如由心跳测量的在系统的事件到达时间。对于事件流中的两个事件可以具有相同时间信息。应当注意,虽然时间戳排序需要是对一个事件流特定的,不同流的事件可以任意地交织。
35.事件流具有关联的大纲(schema)“s”,该大纲包括时间信息和一个或多个命名的属性的集合。属于特定的事件流的所有事件符合与该特定的事件流相关联的大纲。因此,对于事件流(s,t),事件流可以具有如(<time_stamp>,<attribute(s)>)的大纲“s”,其中<attributes>表示大纲的数据部分且可以包括一个或多个属性。例如,用于股票报价机事件流的大纲可以包括属性<stock symbol(股票代码)>和<stock price(股票价格)>。经由这种流接收的每个事件将具有时间戳和两个属性。例如,股票报价机事件流可以接收以下事件和关联的时间戳:
36.…
37.(<timestamp_n>,<nvda,4>)
38.(<timestamp_n+1>,<orcl,62>)
39.(<timestamp_n+2>,<pcar,38>)
40.(<timestamp_n+3>,<spot,53>)
41.(<timestamp_n+4>,<pdco,44>)
42.(<timestamp_n+5>,<pten,50>)
43.…
44.在以上流中,对于流元素(<timestamp_n+1>,<orcl,62>),事件是具有属性“stock_symbol”和“stock_value”的<orcl,62>。与该流元素相关联的时间戳是“timestamp_n+1”。因此连续事件流是事件的流,每个事件具有相同的属性系列。
45.如注意到的,流可以是cql查询可以作用的数据的主要源。流s可以是元素(s,t)的袋子(bag)(也称为“多集合”),其中“s”在s的大纲中且“t”在时域中。另外,流元素可以是字节组

时间戳对,其可以表示为盖时间戳的字节组插入的序列。换句话说,流可以是盖时间戳的字节组的序列。在有些情况下,可能有具有相同时间戳的多于一个字节组。并且,可以请求输入流的字节组以增加时间戳的次序到达系统。替代地,关系(也称为“随时间变化的关系”,且不要与可能包括来自关系数据库的数据的“关系数据”混淆)可以是从时域到大纲r的字节组的无限制袋子的映射。在某些实例中,关系可以是字节组的无序的随时间变化的袋子(即,即时关系)。在有些情况下,在时间的每个实例,关系可以是有界集合。其也可以表示为可以包括插入、删除和/或更新以捕获关系的改变状态的盖时间戳的字节组的序列。类似于流,关系可以具有关系的每个字节组可以符合的固定的大纲。另外,如在此使用的,连续查询通常能够处理(即,进行查询)流和/或关系的数据。另外,关系可以是流的参考数据。
46.在某些实例中,商业情报(bi)可以帮助驱动和优化特定范围的商业活动(例如,在有些情况下日常地)。该类型的bi通常被称为操作性商业情报,实时商业情报或者操作性情报(oi)。在某些实例中,操作性情报模糊了bi和商业活动监视(bam)之间的界线。例如,bi可
以聚焦于历史数据的周期性查询。因而,它可以具有后向的聚焦。但是,bi也可以位于操作性应用中,且它因此可以从仅战略分析工具扩展到商业操作的前线中。因而,bi系统也可以配置为实时地分析事件流和计算聚合。
47.在某些实例中,连续查询语言服务(cq服务)可以配置为将bi分析服务器延伸到处理连续查询和使能实时警告。在某些方面,cq服务可以提供与bi分析服务器和cql引擎的集成。仅以实例的方式,bi分析服务器可以向cq服务委托连续查询,且cq服务也可以作为用于cql引擎的逻辑数据库(db)网关。以这种方式,cql引擎能够对于其分析性能和语义建模平衡bi分析服务器。
48.在某些实例中,其中,cq服务可以提供以下功能性:
49.·
用于bi分析服务器作为cql引擎网关的远程服务;
50.·
事件源/宿适配器;
51.·
从逻辑sql加cql扩展生成数据定义语言(ddl);
52.·
提供所有类型的连续查询和实现选择的统一模型;
53.·
维护元数据和支持可重开始性;和
54.·
高可用性和可缩放性支持。
55.另外,在某些实例中,oi是可以将可见性和洞察力传递到商业活动中的实时动态的商业分析的形式。在两者都帮助使得大量信息有意义的方面,oi通常链接到或者与bi或者实时bi比较。但是存在某些基本区别:oi可以主要是动作为中心的,而bi可以主要是数据为中心的。另外,与传统地用作标识模式的事实之后和基于报告的方法的bi不同,oi可以更适于检测和响应开发情形(例如,趋势和模式)。
56.在某些实例中,商业事件分析和监测系统可以包括cql引擎以处理和/或接收在途数据。例如,cql引擎可以是配置为查询或者以其他方式处理进入的实时信息(例如,bi或者oi)的存储器内实时事件处理引擎。cql引擎可以利用或者了解时间语义且配置为允许要处理的数据的窗口的定义。在有些情况下,利用cql引擎可能涉及总是运行关于输入数据的查询。
57.在某些方面,cql引擎可以包括充分发展的查询语言。因而,用户可以依据查询指定计算。另外,可以设计cql引擎用于优化存储器,利用查询语言特征,运算符共享,丰富模式匹配,丰富语言构建等。另外,在某些实例中,cql引擎可以处理历史数据和流数据两者。例如,用户可以设置查询以当加利福尼亚销售抨击高于某个目标时发送警告。因此,在某些实例中,该警告可以基于历史销售数据以及进入的实况(即,实时)销售数据。
58.在某些实例中,cql引擎或者以下描述的概念的其他特征可以配置为以实时方式组合历史背景(即,仓库数据)与输入数据。因此,在有些情况下,本公开可以描述存储信息和在途信息的数据库的边界。数据库存储的信息和在途信息两者可以包括bi数据。因而,在某些实例中,数据库可以是bi服务器或者其可以是任何类型的数据库。另外,在某些实例中,本公开的特征可以在用户不知道怎样编程或者以其他方式写代码的情况下使能以上特征的实现。换句话说,可以以特征丰富的用户界面(ui)或者允许非开发者实现历史数据与实时数据的组合的其他方式提供特征。
59.在某些实例中,可以使用以上概念以平衡与复杂事件处理相关联的丰富实时和连续事件处理性能。可以支持几个特征,比如但不限于存档关系。因而,为了平衡这种特征(例
如,丰富、实时和连续事件处理),系统可以配置为透明地处理关系数据的启动状态和运行时间状态。换句话说,系统可以配置为管理在其创建的瞬间非空的查询(即,存档关系)。
60.在某些实例中,可以使用存档关系。因而,当cql引擎看到指示其基于存档关系的查询时,例如,存档关系也可以指示存在它可以调用以查询历史背景的某些实体。在某些实例中,数据定义语言(ddl)可以指示关于存档关系的注释,比如但不限于怎样进行查询,表中的重要的列是什么和/或将其余数据发送到哪里。在某些实例中,一旦在cql引擎中构建查询(例如,作为图表),系统可以分析查询图表。另外,在某些方面,存在有状态的某些运算符,比如“不同的”、“组聚集”、“模式”和/或“分组的”。但是,无状态的运算符可以仅得到输入并将其发送到父母,例如,下游运算符。这样,一个方法是在这里存储整个表。但是,利用存档关系,系统可以分析查询图表和决定它可以使用哪个最低的有状态运算符来查询存档。在某些实例中,系统(或者一个或多个计算机实现的方法)可以在遍历图表的同时在达到的最低的有状态运算符检索状态。例如,可以以从信源的拓扑次序分析查询图表。基于该第一有状态运算符,cql引擎然后可以确定为了对于在存档关系之上定义的查询初始化运算符的状态而要取得的最优数据量。
61.在至少一个非限制实例中,类似源运算符的关系和/或源可以在以查询输出的拓扑遍历中第一个得到和/或根最后得到。例如,如果cql查询看来像:从r1选择sum(c1),其中c2>c25,该查询的计划可能看来像:relationsource(关系源)

select(选择)

groupaggr(组聚集)。因此,遵循拓扑次序,且因为relationsource和select两个都是无状态的,最低的有状态运算符可以是groupaggr。以这种方式,查询的有状态运算符(在该实例中的groupaggr)可以使查询引擎能够以接收流数据之前的来自数据存储的历史数据填充查询引擎。这基于查询正在分析存档关系且已经这样指示存档关系的事实使得是可能的。
62.在某些实例中,用于给定存档关系的窗口大小可以由用户指定。在某些方面,关于存档关系的窗口可以包括分析或者以其他方式估计输入流内容的查询图表中的节点。换句话说,窗口可以定义由查询引擎分析和/或处理的流内容的量和/或将在存档关系中包括的历史数据的量。
63.在高层级(level),一旦关于流应用窗口,它成为relation(关系)且然后可以应用常规关系逻辑,如关系数据库那样。因为字节组到达和离开窗口,考虑中的关系随着相对于它编译的查询改变,该关系同时发射结果。cql可以支持range(范围)(直到纳秒粒度),rows(行),partition by(分区)和可扩展窗口。这些窗口是流到关系运算符的实例。另一方面,istream(即,插入流),dstream(即,删除流)和rstream(即,关系流)是关系到流运算符。在某些实例中,用户、开发者和/或管理者可以设置由查询引擎或者操作或者主管查询引擎的一个或多个计算系统提供的窗口大小(例如,经由ui)。在某些实例中,关于流的窗口可以是基于时间的范围窗口。例如,可以使用窗口大小和关于其计算窗口的属性指定关于存档关系的可配置值窗口。当存在在存档关系的顶部指定的可配置值窗口时,可以计算快照查询且可以输出在窗口限制内的快照字节组。另外,在状态初始化之后,可以关于进入的活跃数据应用值窗口。在某些实例中,仅进入的活跃数据将被插入到窗口中,该窗口的窗口属性的值与对于小于窗口大小的当前事件时间不同。
64.另外,在某些实例中,本公开的特征也可以平衡cql引擎和/或cep引擎的连续查询处理性能以支持实时数据分析。在某些方面,cql引擎和/或cep引擎可以传统地是面向流的
分析引擎;但是,它可以被增强以支持由耐用存储(例如,上面描述的存档关系)支持的面向流的数据。例如,本公开描述可以支持作为耐用存储(数据库和/或表)的数据对象(do)的观念的特征。对do做出的修改可能导致改变通知被广播到事实上创建数据流的感兴趣收听者。该数据流可以由支持任何运行的查询的cql引擎和/或cep引擎消费;但是,可能未设计cql引擎和/或cep引擎以考虑do后备存储中的现有数据。例如,cql引擎和/或cep引擎可以请求在cql引擎和/或cep引擎中运行的查询的初始状态反映包括当前在do后备存储中的所有数据的do的当前状态。一旦这样初始化该查询,则cql引擎和/或cep引擎仅需要以传统的面向流的风格以来自该点的do改变通知的流考虑它自己。
65.在某些方面,cql引擎和/或cep引擎传统上可以处理流或者非存档关系,所以可能没有初始状态。例如,可以加载查询,其中,它可以开始运行和收听改变等。在有些情况下,如果用户要求在条形图中通过状态的销售,且然后某人做出新销售,则可以更新表且用户可以期望看到推送给它们的图表中的改变。但是,如果它们关闭控制盘且一周以后回来并提出某些销售,则用户可能期望具有根据求和的销售数据的销售之和。换句话说,该查询可能需要使得查询直到存档的状态且然后收听有效改变。
66.例如,在某些方面,cql引擎可以以存档数据预初始化。一旦初始化,cql引擎可以对于改变通知(例如,基于调用从档案插入、删除数据等的api)收听java消息传递服务(jms)或者其他消息传递者。因此,服务可以收听,且如果jms关于收听服务正在收听的相同主题发表,它可以接收该数据。该服务不必知道谁正在发表或者它们是否正在发表。收听服务可以仅收听,且如果某些事情发生,则收听服务可以听到它。在某些实例中,例如这是怎样从它的消费者去耦持续性。另外,在某些实例中,警告引擎可以基于警告引擎潜在地听到的发出警告,且另外,sql引擎可以收听关于对收听者的相关性的处理查询。
67.在某些实例中,查询可以在cql、sql和/或cep引擎中开始,且指令可以配置为得到存档数据(例如,采取措施使某事发展)且然后开始收听这些jms消息。但是,对于许多插入、删除等,这可能包括大量信息。另外,可能在消息由收听者听到之前有延迟时间,且在某些实例中,收听可能跳进,查询存档,回来并开始收听。因此,存在丢失和/或重复计数事件的可能性。
68.另外,如果引擎仅运行查询,在它的运行时查询东西可能进入jms并发表到引擎不收听的地方。这样,引擎可配置为首先建立收听者,运行存档查询,且然后回来并实际上开始拉出队列,以使得它不错过任何东西。因此,jms可以将事情排队,且如果在引擎正在进行查询时事情支持就没问题,因为它可以之后赶上且它不需要担心它是否同步。如果不在这里,听,它不会错过它,它仅被排列直到引擎回来,只要它建立它的收听者。
69.另外,在某些实例中,系统列可以添加到用户的数据。该系统列可以用于指示交易id以尝试把手重复计数和/或错失操作问题。但是,在其他实例中,系统可以提供或者以其他方式生成交易背景表。另外,可能有两个附加的列transaction_cid和transaction_tid。背景表可以总是由持续性服务维护从而知道了解最后委托的交易id的线程(背景)。可以保证交易id被以用于线程(背景)的递增顺序委托。例如,当服务器来临时,它可以运行持续性服务。每一个可以分配用于确定预初始化的信息的数据是否包括已经通过jms的所有数据的背景id和交易id的集合。另外,在有些情况下,可以使用多个输出服务器(按照jta和/或实现高可用性(ha),其中,每个服务器可以管理与由其他服务器管理的其他表完全分开的
背景/交易表的单个集合。
70.在一些实施例中,当创建或者登记连续(例如,cql)查询时,它可以经历解析和语义分析,在解析和语义分析的结尾,创建逻辑查询计划。当例如通过发出“改变查询<queryname(查询名称)>开始”ddl而开始cql查询时,逻辑查询计划可以转换为物理查询计划。在一个实例中,物理查询计划可以表示为物理运算符的有向非循环图(dag)。然后,物理运算符可以转换为执行运算符以到达用于该cql查询的最终查询计划。到cql引擎的输入事件达到一个或多个源运算符且最终以关于那些事件执行它们的处理和产生适当的输出事件的方式以运算符向下游移动。
71.以上和以下描述的技术可以以许多方式和在许多背景下实现。如以下更详细地描述的,参考以下附图提供几个示例实现和背景。但是,以下实现和背景仅是其中一些。
72.说明性的系统
73.图1示出其中可以实现执行分布事件处理的技术的简化的示例系统或者架构100。在架构100中,一个或多个用户102可以利用用户计算装置104(1)

(n)(集合地,“用户装置104”)来经由一个或多个网络108访问一个或多个服务提供者计算机106。在某些方面,服务提供者计算机106也可以经由网络108与一个或多个流数据源计算机110和/或一个或多个数据库112通信。例如,用户102可以利用服务提供者计算机106访问或者以其他方式管理流数据源计算机110和/或数据库112的数据(例如,可以相对110,112之一或者两者运行查询)。数据库112可以是关系数据库,sql服务区等,且在某些实例中,可以管理代表用户102的历史数据、事件数据、关系、存档关系等。另外,数据库112可以接收或者以其他方式存储由流数据源计算机110提供的数据。在某些实例中,用户102可以利用用户装置104通过提供用于数据(例如,历史事件数据、流事件数据等)的查询(也称为“查询陈述”)或者其他请求而与服务提供者计算机106交互。这种查询或者请求然后可以由服务提供者计算机106执行以处理数据库112的数据和/或来自流数据源计算机110的输入数据。另外,在某些实例中,流数据源计算机110和/或数据库112可以是与服务提供者计算机106相关联的集成的分布式环境的一部分。
74.在某些实例中,网络108可以包括多个不同类型的网络,比如有线网络、因特网、无线网络、蜂窝网络、内部网系统和/或其他私人和/或公共网络中的任何一个或者组合。虽然图示的实例表示用户102经网络108访问服务提供者计算机106,描述的技术可以相同地应用于用户102通过地线电话,经由信息站或者以任何其他方式经由一个或多个用户装置104与一个或多个服务提供者计算机106交互的实例。还注意到描述的技术可以应用于其他客户端/服务器布置(例如,机顶盒等)以及非客户端/服务器布置(例如,本地存储的应用等)。
75.用户装置104可以是任何类型的计算装置,比如但不限于,移动电话、智能电话、个人数字助理(pda)、膝上型计算机、台式计算机、薄客户端装置、平板pc等。在某些实例中,用户装置104可以经由网络108,或者经由其他网络连接与服务提供者计算机106通信。另外,用户装置104也可以配置为提供用于请求要处理的数据库112(或者其他数据存储)的数据的一个或多个查询或者查询陈述。
76.在某些方面,服务提供者计算机106也可以是任何类型的计算装置,比如但不限于,移动、桌面、薄客户端和/或云计算装置,比如服务器。在某些实例中,服务提供者计算机106可以经由网络108或者经由其他网络连接与用户装置104通信。服务提供者计算机106可
以包括一个或多个服务器,可能以群布置,作为服务器农场,或者作为不彼此关联的独立的服务器。这些服务器可以配置为执行或者以其他方式主管在这里描述的特征,包括但不限于在这里描述的事件处理。另外,在某些方面,服务提供者计算机106可以配置为包括流数据源计算机110和/或数据库112的集成的分布式计算环境的一部分。
77.在一个说明性的配置中,服务提供者计算机106可以包括至少一个存储器114和一个或多个处理单元(或者一个或多个处理器)126。该一个或多个处理器126可以以硬件、计算机可执行指令、固件或者其组合适当地实现。该一个或多个处理器126的计算机可执行指令或者固件实现可以包括以任何适当的程序设计语言所写以执行各种描述的功能的计算机可执行或者机器可执行指令。
78.存储器114可以存储可在该一个或多个处理器126上加载和执行的程序指令,以及在这些程序的执行期间生成的数据。取决于服务提供者计算机106的配置和类型,存储器114可以是易失性的(比如随机存取存储器(ram))和/或非易失性的(比如只读存储器(rom)、闪存存储器等)。服务提供者计算机106或者服务器也可以包括辅助存储128,其可能包括可拆卸存储和/或不可拆卸存储。辅助存储128可以包括,但不限于磁存储、光盘和/或带存储。磁盘驱动器及其关联的计算机可读介质可以提供计算机可读指令、数据结构、程序模块及用于计算装置的其他数据的非易失性存储。在某些实现中,存储器114可以包括多个不同类型的存储器,比如静态随机存取存储器(sram)、动态随机存取存储器(dram)或者rom。
79.可拆卸和不可拆卸的存储器114、辅助存储128是计算机可读存储介质的全部实例。例如,计算机可读存储介质可以包括用于比如计算机可读指令、数据结构、程序模块或者其他数据的信息的存储的、以任何方法或者技术实现的易失性的或者非易失性的,可拆卸的或者不可拆卸的介质。存储器114和辅助存储128是计算机存储介质的全部实例。
80.服务提供者计算机106还可以包括允许其与网络108上的存储数据库、另一计算装置或者服务器、用户终端和/或其他装置通信的一个或多个通信连接130。服务提供者计算机106还可以包括一个或多个输入/输出(代替)装置134,比如键盘、鼠标、笔、语音输入装置、触碰输入装置、显示器、一个或多个扬声器、打印机等。
81.更详细地转到存储器114的内容,存储器114可以包括用于实现在这里公开的特征的操作系统116和一个或多个应用程序或者服务。在实施例中,存储器114可以包括配置为处理与应用有关的输入流以生成与应用有关的输出事件流的事件处理服务118。在实施例中,事件处理服务可以包括一个或多个模块,比如事件批次发生器120、排行(lineage)跟踪模块122、输出序列号发生器124、事件恢复模块126和快照持续时间确定器模块124,以实现在这里描述的事件处理服务。如在此使用的,模块可以指作为服务的一部分的由服务器或者服务器群执行的编程模块。在该特定背景下,模块可以由作为服务提供者计算机106的一部分的服务器或者服务器群执行。
82.在本公开的一些实施例中,服务提供者计算机106可以实现为事件处理系统。图2示出可以包括本公开的实施例的事件处理系统200的简化的高层级图。事件处理系统200可以包括一个或多个事件源(204,206,208),配置为提供用于处理事件流的环境的事件处理服务(eps)202(也称为cq服务202)和一个或多个事件宿(210,212)。事件源生成由eps 202接收的事件流。eps 202可以从一个或多个事件源接收一个或多个事件流。例如,如图2所
示,eps 202从事件源204接收第一输入事件流214,从事件源206接收第二输入事件流216,和从事件源208接收第三事件流218。一个或多个事件处理应用(220,222和224)可以配备在eps 202上和由eps 202执行。由eps 202执行的事件处理应用可以配置为收听一个或多个输入事件流,基于从输入事件流选择一个或多个事件作为显著事件的处理逻辑处理经由一个或多个事件流接收的事件。显著事件然后可以被以一个或多个输出事件流的形式发送到一个或多个事件宿(210,212)。例如,在图2中,eps 202将第一输出事件流226输出到事件宿210,且将第二输出事件流228输出到事件宿212。在某些实施例中,事件源、事件处理应用和事件宿被彼此去耦以使得可以添加或者除去任何这些组件而不导致对其它组件的改变。
83.在一个实施例中,eps 202可以实现为具有共享服务的轻量级java应用容器的java服务器,比如基于equinox osgi的。在一些实施例中,eps 202例如通过使用jrockit real time(实时)可以支持用于处理事件的超高吞吐量和微秒等待时间。eps 202还可以提供包括用于开发事件处理应用的工具(例如,oracle cep可视器和oracle cep ide)的开发平台(例如,完全实时端到端java事件驱动架构(eda)开发平台)。
84.事件处理应用配置为收听一个或多个输入事件流,执行用于从一个或多个输入事件流选择一个或多个显著事件的逻辑(例如,查询),和将所选的显著事件经由一个或多个输出事件流输出到一个或多个事件源。图2提供用于一个这种事件处理应用220的向下钻取。如图2所示,事件处理应用220配置为收听输入事件流218,执行包括用于从输入事件流218选择一个或多个显著事件的逻辑的连续查询230,和将所选的显著事件经由输出事件流228输出到事件宿212。事件源的实例无限制地包括适配器(例如,jms、http和文件)、信道、处理器、表、高速缓存等。事件宿的实例无限制地包括适配器(例如,jms、http和文件)、信道、处理器、高速缓存等。
85.虽然图2中的事件处理应用220被示为收听一个输入流和经由一个输出流输出所选的事件,这不意在限制。在可选实施例中,事件处理应用可以配置为收听从一个或多个事件源接收到的多个输入流,从监视的流选择事件,和将所选的事件经由一个或多个输出事件流输出到一个或多个事件宿。同一查询可以与多于一个事件宿和与不同类型的事件宿相关联。
86.由于其无限制的性质,经由事件流接收的数据量通常非常大。因此,为了查询目的存储或者存档所有数据通常是不实际和不需要的。事件流的处理需要实时的事件处理,因为事件由eps 202接收而不必存储所有接收的事件数据。因此,eps 202提供特定的查询机制,其使能当事件由eps 202接收时执行事件的处理而不必存储所有接收的事件。
87.事件驱动的应用是规则驱动的,且这些规则可以以用于处理输入流的连续查询的形式表示。连续查询可以包括标识对于接收到的事件要执行的处理的指令(例如,商业逻辑),包括作为查询处理的结果,什么事件要被选为显著事件和输出。连续查询可以持续到数据存储和用于处理输入事件流和生成输出事件流。连续查询典型地执行滤波和聚合功能以从输入事件流发现和提取显著事件。结果,输出事件流中的输出(outbound)事件的数目通常比从其选择事件的输入事件流中的事件的数目低得多。
88.与在有限数据集合上运行一次的sql查询不同,已经由应用以eps 202对于特定的事件流登记的连续查询可以每次在该事件流中接收到事件就执行。作为连续查询执行的一部分,eps 202基于由连续查询指定的指令估计接收到的事件,以确定作为连续查询执行的
结果,是否一个或多个事件要被选为显著事件和输出。
89.可以使用不同语言编程连续查询。在某些实施例中,可以使用由oracle公司提供和由oracle的复杂事件处理(cep)产品提供使用的cql配置连续查询。oracle的cql是可以用于编程可以相对于事件流执行的查询(称为cql查询)的说明性语言。在某些实施例中,cql基于具有支持流事件数据的处理的添加结构的sql。
90.在一个实施例中,事件处理应用可以由以下组件类型构成:
91.(1)直接接口到输入和输出流和关系源和宿的一个或多个适配器。适配器配置为理解输入和输出流协议,且负责将事件数据转换为可以由应用处理器查询的规范化形式。适配器可以将规范化的事件数据转发到信道或者输出流和关系宿中。可以对于各种数据源和宿定义事件适配器。
92.(2)作为事件处理端点的一个或多个信道。其中,信道负责排队事件数据直到事件处理代理可以作用于它。
93.(3)一个或多个应用处理器(或者事件处理代理)配置为消费来自信道的规范化的事件数据,使用查询处理它以选择显著事件,和将所选的显著事件转发(或者复制)到输出信道。
94.(4)一个或多个bean配置为收听输出信道,且通过新事件插入到输出信道中而触发。在一些实施例中,该用户代码是简单旧java对象(pojo)。用户应用可以利用外部服务,比如jms、网络服务和文件写入器的集合,以将生成的事件转发到外部事件宿。
95.(5)可以寄存事件bean以收听输出信道,且通过新事件插入到输出信道中而触发。在一些实施例中,该用户代码可以使用oracle cep事件bean api以使得bean可以由oracle cep管理。
96.在一个实施例中,事件适配器将事件数据提供到输入信道。输入信道连接到与关于由输入信道提供的事件操作的一个或多个cql查询相关联的cql处理器。cql处理器连接到查询结果写入到的输出信道。
97.在一些实施例中,可以对于描述事件处理应用、组件怎样连接在一起、由应用处理的事件类型的各种组件的事件处理应用提供装配文件。可以提供分开的文件用于指定用于事件的选择的连续查询或者商业逻辑。
98.应该理解,图2中示出的系统200可以具有图2中示出的那些以外的其他组件。另外,如图2所示的实施例仅是可以包括本公开的实施例的系统的一个实例。在某些其它实施例中,系统200可以具有比如图2所示的更多或者更少的组件,可以组合两个或更多组件,或者可以具有组件的不同配置或者布置。系统200可以是各种类型,包括图1中描述的服务提供者计算机106,个人计算机,便携式装置(例如,移动电话或移动装置),工作站,网络计算机,大型机,信息站,服务器或者任何其他数据处理系统。在某些其它实施例中,系统200可以配置为其中以云跨一个或多个网络分布系统200的一个或多个组件的分布式系统。
99.图2中示出的一个或多个组件可以以软件、硬件或者其组合实现。在一些实施例中,软件可以存储在存储器(例如,非瞬时计算机可读介质)中,存储在存储器装置上,或者存储在某些其它物理存储器中,且可以由一个或多个处理单元(例如,一个或多个处理器,一个或多个处理器核心,一个或多个gpu等)执行。
100.用于在连续查询处理中使用事件批次处理事件的技术
101.如上所述,使用cep技术建造关键任务应用已经导致要使得cep应用高度可用和容错的需要。类似计算机系统中的任何计算资源,cep系统可能经历硬件和软件故障两者,且如果不解决则可能导致数据或者服务丢失。高可用性系统通常通过硬件、软件、管理、监视、策略和计划的组合寻求减轻这种故障的可能性和冲击性。
102.如任何容错系统那样,在故障转移精确地发生什么的细节指示可以提供给系统的保真度层级。取决于终端用户需要和成本、性能和正确性的限制,不同的故障转移机制可以导致不同层级的精确性。最有利的保真度层级是如果没有上游故障发生则下游客户端确切地看到已经产生的相同事件流且没有丢失的事件和允许复制事件的精确恢复。
103.如上所述,事件处理系统(例如,200)可以配置为在潜在地无限制的实时数据流之上以连续方式执行查询。例如,事件处理系统可以接收一个或多个数据流,登记相对于数据流的查询,和当新数据在流中出现时连续地执行查询。因为该类型的连续查询是长期的,所以事件处理系统可以向客户端提供更新结果的连续流。
104.因为事件处理系统典型地接收连续的输入事件流,事件处理系统的状态可能随着输入事件到达快速地改变。因此,期望可靠地和精确地保持该系统状态而不损失系统性能。用于保持系统状态的传统方法典型地涉及复制系统的行为,复制系统状态或者保存生成该状态的事件流。虽然这些方法对于少数资源(例如,机器)很好地工作,当涉及大量资源时,它们趋于导致无效率的资源利用,因为这些资源中的一些可能是空闲的或者以其他方式复制事件的处理。
105.在本公开的一个实施例中,可以通过以一个或多个事件批次处理连续输入事件流来保持事件处理系统的状态。如在此使用的,事件批次可以包括在一时间段内批量或者分组在一起的连续输入事件流的一系列事件。在实施例中,事件处理系统可以以预定时间间隔将检查点标记事件插入到连续输入事件流中以生成事件批次。因此,在实施例中,事件处理系统可以基于检查点标记事件确定事件批次的大小和/或事件批次的间隔。检查点标记事件可以表示包括与连续事件流中的事件有关的信息和/或元数据的事件。在某些实例中,检查点标记事件可以表示心跳事件。在其他实例中,检查点标记事件可以表示特定种类的事件,比如检查点标记、规则事件、比如plus(加)事件、minus(减)事件、心跳事件的事件类型,等等。
106.存在事件处理系统可以确定将检查点标记事件引入连续输入事件流中以生成事件批次的时间的频率和/或间隔的各种方式。在一个实例中,可以基于流应用的类型和由流应用生成事件的频率确定插入检查点标记事件的时间的间隔。例如,事件处理系统可以对于金融应用确定与金融数据有关的流事件,检查点标记每10分钟被插入到事件流中,然而对于传感器应用,确定与网络业务量有关的流事件,检查点标记每5分钟被插入到流中。在其他实例中,事件处理系统可以基于由应用生成的事件的大小,由应用生成的事件的等待时间需要等确定时间的间隔。在某些实例中,事件处理系统可以基于由组织使用的用户信息、采样信息,最好实践等确定时间的间隔。
107.在一些实施例中,事件处理系统可以监视输入事件流并使用查询执行计划计算估计的系统状态的大小。例如,考虑事件流,其中输入事件的平均数是1000/秒的,事件的平均大小是1k,且关于事件流执行比如“从股票[范围1分钟]选择价格”的查询。在该实例中,查询执行计划包括查询运算符rangewindow(范围窗口),且计划和估计的系统状态的大小可
以计算为在一时刻1000*60(秒)*1k=60m,因为系统状态典型地由rangewindow运算符的摘要计算。该估计的系统状态的大小可以使用分组平均进一步平均,且可以与阈值比较以确定何时在事件流中插入检查点标记。
[0108]
在本公开的某些实施例中,事件处理系统可以配置为处理检查点标记事件。当完全处理检查点标记事件时,事件处理系统可以配置为接收指示包括检查点标记事件的事件流的事件集合(即,事件批次)也已经完全处理的检查点确认消息。事件处理系统然后可以配置为触发系统的当前状态的快照的生成。如在这里描述的,快照可以包括关于在时间间隔上已经由连续查询的一个或多个运算符处理的事件集合(例如,来自事件批次)的信息。
[0109]
在如上所述的事件批次中的事件的处理产生改进的系统性能,因为仅处理每个事件批次中的检查点标记事件,而不是处理事件批次中的所有单独事件。在系统故障的情况下,仅需要重新处理在检查点标记事件之后发生的事件。因此,在系统的恢复时,仅在故障之前和使状态与检查点标记事件一致之后已经发生的事件需要被重新处理和重放。关于图3具体地讨论事件处理系统使用检查点标记事件处理事件批次的方式。
[0110]
图3是根据本公开的一个实施例的包括提供事件处理服务的事件处理应用302的事件处理系统300的示例性图示。在实施例中,事件处理应用302可以是由事件处理系统提供的事件处理服务(比如,如图2所示的202)的一部分。在图3中示出的实施例中,事件处理应用302包括输入信道304、cql处理器306和输出信道308。事件处理系统300可以具有图3中示出的那些之外的其他组件。图3所示的实施例是可以包括本发明的实施例的事件处理系统的一个实例。在某些其它实施例中,事件处理系统300可以具有比图3所示的更多或者更少的组件,可以组合两个或更多组件,或者可以具有组件的不同配置或者布置。
[0111]
输入信道304配置为接收与应用有关的连续输入事件流和从连续输入事件流生成一个或多个事件批次的集合。在实施例中,输入信道304可以包括事件批次发生器模块310。事件批次发生器模块310可以配置为通过在时间的预定间隔将检查点标记事件引入到连续输入事件流中而生成事件批次。如上所述,事件批次发生器模块310可以将检查点标记事件插入到事件流中的时间的预定间隔可以基于产生连续事件流的流应用的类型确定。预定间隔还可以基于由流应用生成事件的频率,由应用生成的事件的大小,由应用生成的事件的等待时间需要,用户信息,采样信息,由组织使用的最优实践等确定。另外,和如上所述,检查点标记事件是可以由心跳事件或者具有新事件类型的事件表示的特定事件。
[0112]
cql处理器306可以配置为处理事件批次中的事件的集合。在实施例中,事件的处理可以包括处理每个事件批次中的检查点标记事件。在一些实施例中,cql处理器308可以包括排行跟踪模块312。排行跟踪模块312可以配置为通过执行检查点标记事件的排行跟踪来处理检查点标记事件。如在这里描述的,排行跟踪指的是用于通过处理输入事件的后代事件的有向图(排行)来执行事件流中的事件的可靠数据处理的技术。处理输入事件(例如,检查点事件)的整个事件图保证可靠的数据处理和在故障的情况下重新开始处理的能力。
[0113]
在实施例中,排行跟踪算法可以应用于检查点标记事件。在实例中,检查点标记事件可以指仍然有助于直到生成系统的当前状态的快照之前的时间的状态的每个输入流上的最旧事件的标识符。检查点标记事件可以类似于心跳事件注入到输入流。检查点标记事件可以类似于穿越事件,通过穿越事件,每个运算符可以将检查点标记事件发送到其子运算符。在实施例中,可以使用由公司提供的storm打开源流处理系统使用的技术
执行检查点标记事件的排行跟踪。由storm使用的技术的示例性实现使用事件标识符的异或(xor)操作且可以如下描述:
[0114]
·
由源发射的所有事件由随机标识符(id)标记。对于每个源,框架维护每个初始事件的对(事件id,签名)的集合。签名最初由事件id初始化。
[0115]
·
下游节点可以基于接收到的事件生成零个或更多事件。每个事件携带它自己的随机id和初始事件的id。
[0116]
·
如果事件被成功地接收和由图中的下一节点处理,则该节点通过将签名与(a)输入事件的id和(b)基于输入事件生成的所有事件的id异或来更新相应的初始事件的签名。
[0117]
·
可以基于多于一个输入事件产生事件。
[0118]
·
一旦事件的签名变成零,即,最终节点确认成功地处理了图中的最后事件,则事件被认为被成功地处理。
[0119]
在检测到已经通过排行跟踪模块312完全处理了检查点标记事件时,排行跟踪模块312生成检查点结束标记事件。在接收到检查点结束标记事件时,输出信道308将检查点确认消息发送到输入信道304。这触发系统的当前状态的快照320的生成。在实施例中,系统的当前状态的快照320包括与至少关于事件流中的事件的已处理批次的输入队列状态、运算符状态或者输出队列状态中的至少一个有关的信息。如在这里描述的,输入队列状态指的是输入信道的状态。在一个实施例中,且如以下具体地讨论的,输入信道可以使用存储机制(例如,由公司提供的kafka),且输入信道的状态可以包括从数据存储系统(例如,kafka存储)的读取偏移。在某些实例中,读取偏移可以指示输入事件关联的存储容器(例如,kafka主题)的当前位置。输出队列状态指的是输出信道的状态。在一个实施例中,输出信道的状态可以包括当使用输出整理时的输出序列号。以下描述与输出序列号和输出整理有关的附加细节。运算符摘要指的是在处理事件流中的事件的连续查询的查询计划中标识的运算符对象的状态。在一个实施例中,运算符摘要可以指用于处理事件的运算符的易变状态,比如事件的最后时间戳,和包括用于处理事件的事件总结的实际摘要,比如用于窗口运算符的指定窗口大小的事件的列表或者groupaggr运算符的聚合结果。
[0120]
在某些实例中,与系统的当前状态有关的信息可以以机器的群中的摘要日志的形式存储在基于日志的存储系统322中。在一个实施例中,机器的群可以实现为由公司提供的kafka群。如在此使用的,kafka指的是使能在机器的群上分区的来自数据流的信息的存储的分布式的分区的复制数据存储机制。kafka提供以用户为中心的设计,其提供强耐久性和容错保证,因为它使能在机器的群上数据流的分区以允许数据流大于任何要处理的单个机器的性能。
[0121]
在一些实施例中,系统的当前状态320可以包括与输入队列状态(可以包括读取偏移314),运算符摘要(可以包括摘要日志读取偏移316)和输出队列状态(可以包括输出序列318)有关的信息。在某些实例中,读取偏移314可以包括存储输入事件的存储容器(例如,kafka主题)的当前位置。摘要日志读取偏移316例如可以包括写入到存储容器(例如,kafka主题)的摘要日志的位置。输出序列318可以包括与由事件处理系统处理的事件的输出序列号有关的信息。
[0122]
在一些实施例中,基于日志的存储322可以配置为当摘要改变连续地在背景线程(例如异步地)中存储到容器(例如,kafka主题)的日志时存储与系统的当前状态有关的信息。在某些实例中,基于日志的存储322可以创建摘要的存储器内快照以存储运算符的状态。每个运算符使用用于存储的不同类型的数据结构,且其中某些可以生成相对大的存储器库房。为了不从创建快照引入附加的性能惩罚,在一个实例中,可以使用用于某些运算符的基于连续/异步日志的状态存储。因此,在一些实施例中,基于日志的存储322可以表示用于连续查询的某些运算符的基于连续和/或异步日志的状态存储。通过该方法,可以捕获所有摘要操作(例如,插入、更新和删除操作)作为日志操作。该状态可以被看作为仅附加日志。使用具有内部发表/订阅队列的单独线程,该操作可以异步地执行且可以最小化所有运算符应该停止处理事件的延迟。
[0123]
为了使来自基于日志的存储322的状态一致和/或重构该状态,应该从开始到期望点重放该日志。这种方法可以不期望用于快速恢复。为了提供更有效率的恢复,在本公开的一个实施例中,日志可以包括预定持续时间中的完全快照,且可以生成单独的摘要快照以使来自基于日志的存储的状态一致。在其他实施例中,可以通过重放事件重构用于范围窗口运算符的摘要,因为实质上范围窗口运算符的摘要需要与在重构完全快照之后的输入事件相同的事件集合。该方法还可以减小摘要日志中存储的信息量。
[0124]
如上所述,仅处理每个事件批次中的检查点标记事件而不是处理事件批次的所有单独事件导致增加的系统性能。在系统故障的情况下,仅需要重新处理在检查点标记事件之后发生的事件。因此,在恢复时,仅在故障之前和使状态与检查点标记输入事件一致之后已经发生的输入事件需要被重新处理和重放。
[0125]
在一些实施例中,在恢复时,系统状态倒回故障之前的检查点标记事件。在一个实例中,读取偏移倒回到快照中存储的位置,且读取偏移用于读取故障之前的快照的相同集合的输入事件。
[0126]
因为在故障之前和使到检查点的状态一致之后发生的事件被重新处理,以上技术可以潜在地导致从最后检查点标记事件(在最近处理的事件批次中)到故障点重新处理的事件的复制输出事件的生成。但是,期望实现事件的精确恢复,其中如果没有上游故障发生则下游客户端确切地看到将被产生的相同事件流且没有丢失的事件和允许复制事件。
[0127]
提供精确恢复的一个技术是使用输出队列整理。如在这里描述的,“输出队列整理”指的是当系统确定不再需要恢复事件时由系统主动地丢弃排列的事件。使用这种配置,有效初级服务器将它实际上已经处理的事件传递到一个或多个次级服务器。这使次级服务器能够“整理”它们的输出事件的缓存,以使得它仅包括那些在特定时间点还未由初级服务器发送的事件。这允许次级服务器当存在故障转移时避免丢失任何输出事件,因为仅在事件已经由当前初级服务器发送之后整理它们。
[0128]
有效初级服务器发送队列整理消息到有效次级服务器的频率是可配置的。例如,队列整理消息可以基于事件地转送,例如,每n个事件(0<n)发送,这在故障转移时将复制输出事件的数目限于至多n个事件,或者基于时间地发送,每n毫秒(0<n)。队列整理适配器需要在有效初级和次级当中一致地标识事件的方式。
[0129]
在这种配置中,次级服务器设置为经适配器收听由初级服务器发布的事件流。通过配置适配器用于可靠的传递,由次级服务器看到的事件流精确地是由初级服务器输出的
事件流,且因此故障转移将允许新初级服务器精确地输出没有由旧的初级服务器传递的那些事件。队列整理的优点是从不丢失输出事件。但是,存在用于发送需要传递的整理消息的在有效初级服务器的性能开销,且该开销随着整理的保真度增加而增加。
[0130]
用于在连续查询处理中使用事件批次和输出序列处理事件的技术
[0131]
在本公开的一个实施例中,可以通过与检查点标记一起使用输出序列实现事件的精确恢复。在本实施例中,计数器可以用于由事件处理系统生成的确定性输出事件。由事件处理系统发送的每个输出事件与输出序列号相关联。当生成系统的当前状态的快照时,存储当前输出序列号作为快照的一部分。在某些实例中,存储的输出序列号表示快照的“最后输出序列号”。例如,在一个实例中,输出序列号可以存储为如图3所示的输出状态队列中的输出序列(318)的一部分。在某些实例中,使得当前输出序列号即使在故障之后也可用于系统。当序列号改变时当前输出序列号可以对存储持续。在一些实施例中,当前输出序列也可以存储在分布式散列表中,以使得系统可以在系统故障的情况下从另一机器检索到它。
[0132]
在一个实施例中,事件处理系统可以如下实现系统故障之后的事件的精确恢复。事件处理系统标识最近发送的输出事件的“当前输出序列号”和在与最近处理的事件批次(即,来自最近处理的检查点标记事件)对应的快照中存储的“最后输出序列号”。事件处理系统然后将输出信道的状态设置为“使一致”,并且在系统故障之前,开始重新处理在最近处理的检查点标记事件之后发生的事件。但是,这些事件的重新处理可能导致已经由系统成功地发送的一个或多个输出事件的重新生成。为了避免这些输出事件的重发,在一个实施例中,事件处理系统比较重新处理的事件的下一输出序列号与当前输出序列号。如果重新处理的事件的下一输出序列号小于当前输出序列号,则忽略而不重新输出该事件。当重新处理的事件的下一输出序列号变得等于或者大于当前序列号时,事件处理系统将输出信道的状态改变为“正常”并从与最近发送的输出事件对应的当前序列号开始发送输出事件。
[0133]
图4是根据本公开的实施例的事件处理系统可以执行事件的精确恢复的方式的示例性图示。在图4中示出的实施例中,附图标记400表示从事件处理系统(例如,300)接收到的连续输入事件流。附图标记406、408表示通过在预定时间间隔将检查点标记事件cp1、cp2插入到连续输入事件流中而由事件处理系统生成的事件批次。如上所述,可以通过执行检查点标记事件的排行跟踪来处理检查点标记事件(例如,cp1,cp2)。当完成处理检查点标记事件(例如,cp1或者cp2)时,事件处理系统接收指示已经完全处理包括检查点标记事件(cp1或者cp2)的事件流的事件批次(例如,406或者408)的检查点确认消息。事件处理系统然后触发系统的当前状态的快照(412,414)的生成。
[0134]
附图标记402表示包括作为处理连续输入事件流400的结果而由事件处理系统生成的一个或多个输出事件的集合的输出流。在实施例中,每个输出事件可以布置为oi,其中i是指示以由事件处理系统的输出事件的生成的次序分配给输出事件的输出序列号的整数。因此,输出事件可以标识为o1,其中1是分配给输出事件的序列号。连续输入事件流400中的每个输入事件可以标识为ej,其中j表示输入事件的唯一标识符。例如,输入事件可以标识为e1,其中1是输入事件的唯一标识符。在图5中示出的实施例中,单个输入事件e1的处理假定为导致相应的单个输出事件o1的生成。但是,要理解在某些其它实施例中,可以作为多个输入事件的处理的结果生成输出事件o1。例如,在一个实例中,可以作为处理输入事件e1、e2和e3的结果生成输出事件o1。
[0135]
当在416由事件处理系统检测到系统故障时,事件处理系统标识从最近处理的事件批次(例如,408)的最后检查点标记事件(cp2)开始的在故障之前已经发生的事件并重新处理这些事件。但是,这些事件(例如,e21、e22、e23和e24)的重新处理可能导致一个或多个输出事件o21、o22、o23和o24的复制集合的生成,因为这些输出事件已经被发送到输出流402。为了防止输出事件的复制集合的生成,在一个实施例中,事件处理系统标识从最后检查点标记事件开始的输出事件的最后输出序列号o20和最近发送的输出事件的当前输出序列号o24。事件处理系统然后忽略由于相应的输入事件(e21,e22和e23)的重新处理而可以在最后输出序列号o20和当前输出序列号o24之间生成的任何输出事件(例如,o21 o22和o23)。
[0136]
如上所述,在一个实施例中,事件处理系统比较从最后检查点标记事件开始的相应的重新处理的事件(例如,e21)的下一输出序列号(例如,o21)与当前输出序列号(例如,o24)。如果下一输出序列号(例如,o21)小于当前序列号(例如,o24),则忽略而不重新输出事件。当重新处理的事件的下一输出序列号变得等于或者大于当前输出序列号(例如,o24)时,事件处理系统将输出信道的状态改变为“正常”,并从输出事件流中的最近发送的输出事件的当前输出序列号(例如,o24)开始重新发送输出事件(例如,o25)。因此,通过在要重新发送的一个或多个输出事件的结合中排除一个或多个输出事件,事件处理系统在实现事件的精确恢复的同时防止复制事件的传输。
[0137]
图5是根据本公开的一个实施例的包括提供事件处理服务的事件处理应用502的事件处理系统500的示例性图示。在实施例中,事件处理应用502可以与图3所示的事件处理系统(例如,302)类似或者相同,且可以包括比如如图3所示的输入信道304、cql处理器306和输出信道308的组件。图5所示的实施例是可以包括本发明的实施例的事件处理系统的一个实例。在某些其它实施例中,事件处理系统500可以具有比图5所示的更多或者更少的组件,可以组合两个或更多组件,或者可以具有组件的不同配置或者布置。
[0138]
如上关于图3所述,输入信道304配置为接收与应用有关的连续输入事件流并从连续输入事件流生成一个或多个事件批次的集合。在实施例中,输入信道304中的事件批次确定器模块310可以配置为通过在预定时间间隔将检查点标记事件引入连续输入事件流中而生成事件批次。
[0139]
cql处理器306可以配置为处理事件批次中的事件的集合。如上所述,事件的处理可以包括处理每个事件批次中的检查点标记事件。在检测到已经由排行跟踪模块312完全处理检查点标记事件时,排行跟踪模块312生成检查点结束标记事件。在接收到检查点结束标记事件时,输出信道308将检查点确认消息发送到输入信道304。这触发系统的当前状态的快照320的生成。在实施例中,可以以对机器的群的基于日志的存储322(摘要日志)的形式存储系统的当前状态的快照320。
[0140]
根据某些实施例,输出信道308可以包括输出序列号发生器502和事件恢复模块504。输出序列号发生器502可以配置为生成由事件处理系统生成的每个输出事件的输出序列号。事件恢复模块504可以配置为执行事件处理系统中的事件的精确恢复。当检测到系统故障时,事件恢复模块504标识最近发送的输出事件的“当前输出序列号”和与最近处理的事件批次对应的快照(即,来自最近处理的检查点标记事件)中存储的“最后输出序列号”。事件恢复模块504然后将输出信道的状态设置为“使一致”,且在系统故障之前开始重新处
理在最近处理的检查点标记事件之后发生的事件。但是,如上所述,这些事件的重新处理可能导致已经由系统成功地发送的一个或多个输出事件的重新生成。为了避免这些输出事件的重发,在一个实施例中,事件恢复模块504比较重新处理的事件的输出序列号与当前输出序列号。如果重新处理的事件的输出序列号小于最近发送的输出事件的当前输出序列号,则忽略而不重新发送事件。当重新处理的事件的输出序列号变得等于或者大于最近发送的输出事件的当前序列号时,事件处理系统将输出信道的状态改变为“正常”,并从与最近发送的输出事件对应的当前序列号开始发送输出事件。
[0141]
说明性的处理
[0142]
图6

图8图示了示出根据本发明的某些实施例的提供事件处理服务的各个处理600、700和800的示例流程图。这些处理图示为逻辑流程图,其每个操作可以以硬件、计算机指令或者其组合实现。在计算机指令的背景下,操作可以表示在一个或多个计算机可读存储介质上存储的计算机可执行指令,其当由一个或多个处理器执行时执行所述的操作。通常,计算机可执行指令包括执行特定功能或者实现特定数据类型的例程、程序、对象、组件、数据结构等。描述操作的次序不意在被看作为限制,且任意数目的描述的操作可以以任何次序和/或并行组合以实现处理。
[0143]
另外,可以在一个或多个计算机系统的控制下执行某些、任何或者全部处理,该计算机系统配置有可执行指令且可以实现为在一个或多个处理器上集合地执行的代码(例如,可执行指令,一个或多个计算机程序或者一个或多个应用),由硬件或者其组合实现。如上所述,代码可以存储在计算机可读存储介质上,例如,以包括可由一个或多个处理器执行的多个指令的计算机程序的形式。计算机可读存储介质可以是非瞬时的。在某些实例中,至少在图2、图3、图5(等)中示出的事件处理系统(例如,至少利用输入信道304、事件批次确定器310、排行跟踪模块312、输出序列号发生器502和事件恢复模块504)可以分别执行图6

图8的处理600、700和800。
[0144]
图6图示根据本公开的一个实施例的用于提供事件处理服务的示例处理600的流程图。在600的处理当由事件处理系统接收与应用有关的连续输入事件流时可以开始于602。例如,事件处理系统可以从如图2所示的一个或多个事件源(204,206或者208)接收连续输入事件流。在接收连续输入事件流时,在604,事件处理系统从连续输入事件流生成一个或多个事件批次的集合。如上所述,在一个实施例中,事件处理系统可以通过在预定时间间隔将检查点标记事件引入连续输入事件流中而生成事件批次。
[0145]
在606,事件处理系统处理事件批次中的事件以生成与应用有关的输出事件流。关于图7更具体地讨论事件处理系统处理事件批次中的事件的方式。
[0146]
在608,事件处理系统确定输出事件流中的输出事件的输出序列号。如上所述,输出序列号对应于以由事件处理系统的输出事件的生成的次序分配给输出事件的序列号。在610,事件处理系统发送输出事件。在612,事件处理系统存储输出事件的输出序列号。例如,如上所述,在一个实施例中,输出序列号可以存储为如图3所示的输出状态队列中的输出序列信息(318)的一部分。
[0147]
在一些实施例中,在614,事件处理系统可以在处理连续输入事件流的同时接收系统故障的指示。在616,事件处理系统基于分配给输出事件的输出序列号确定要发送的输出流的一个或多个输出事件的集合。关于图8讨论关于事件处理系统可以确定要发送的一个
或多个输出事件的集合的方式的附加细节。在618,事件处理系统发送与应用有关的一个或多个输出事件的集合。
[0148]
图7图示根据本公开的一个实施例的用于处理连续事件流中的事件的示例处理700的流程图。处理700提供执行图6的处理606的附加细节。在实施例中,该处理可以由事件处理系统中的事件批次确定器310和排行跟踪模块312执行。
[0149]
在一些实施例中,当事件处理系统生成检查点标记事件时处理700开始于702。如上所述,检查点标记事件可以表示包括与连续输入事件流中的事件有关的信息和/或元数据的事件。在某些实例中,检查点标记事件还可以表示心跳事件。
[0150]
在704,事件处理系统以预定时间间隔将检查点标记事件插入到连续输入事件流中。如上所述,预定时间间隔可以基于流应用的类型,由流应用生成事件的频率,由应用生成的事件的大小,由应用生成的事件的等待时间需要,用户信息,采样信息,最优实践等确定。
[0151]
在706,事件处理系统基于检查点标记事件生成第一事件批次。因此,在实施例中,事件流中的事件批次的大小和/或间隔可以基于检查点标记事件插入到事件流中的点(或者时间)确定。
[0152]
在某些实例中,在708,事件处理系统处理检查点标记事件。如上所述,处理检查点标记事件可能涉及执行检查点标记事件的排行跟踪。在检查点标记事件的成功处理时,在某些实例中,在710,事件处理系统可以发送指示包括检查点标记事件的第一事件批次的处理完成的确认消息。在712,事件处理系统生成系统的当前状态的快照。在某些实例中,系统的当前状态的快照包括与至少关于事件流中的事件的第一批次的输入队列状态、运算符状态或者输出队列状态中的至少一个有关的信息。
[0153]
图8图示根据本公开的一个实施例的用于确定输出流中要发送的一个或多个输出事件的集合的示例处理800的流程图。处理800提供执行图6的处理616的附加细节。在实施例中,该处理可以由事件处理系统中的输出序列号发生器502和事件恢复模块504执行。
[0154]
在一些实施例中,当事件处理系统在处理连续输入事件流的同时接收到故障指示时处理800可以开始于802。在804,事件处理系统确定输出事件流中的最近发送的输出事件的当前序列号。在806,事件处理系统确定与最近处理的事件批次对应的输出事件的最后输出序列号。
[0155]
在某些实例中,在808,事件处理系统标识作为系统故障的结果重新处理的一个或多个事件的集合。在810,事件处理系统确定重新处理的事件的下一输出序列号(在与最近处理的事件批次对应的输出事件的最后序列号之后)是否大于或等于输出事件流中的最近发送的输出事件的当前输出序列号。如果事件处理系统确定重新处理的事件的下一输出序列号不大于或等于输出事件流中的最近发送的输出事件的当前输出序列号,则事件处理系统忽略生成的输出事件且不重新发送它,因此防止输出事件的重复传输。一旦重新处理的事件的下一输出序列号变得等于或者大于输出事件流中的最近发送的输出事件的当前输出序列号,则在812,事件处理系统开始再次发送输出事件。
[0156]
连续事件处理中的用于执行用于故障转移的基于日志的快速状态恢复的技术
[0157]
当事件连续地到达事件处理系统时,期望可靠地和精确地保持系统状态而不损失系统性能。在本公开的一个实施例中,可以通过创建系统的当前状态的快照来保存事件处
理系统的状态。如上所述,快照可以包括关于在时间间隔上已经由连续查询处理的事件的集合(例如,来自事件批次)的信息。例如,快照可以包括关于与事件流中的事件有关输入队列状态、运算符状态或者输出队列状态的信息。运算符状态典型地包括关于在处理事件流的事件的连续查询中标识的运算符的状态的信息。因为每个运算符使用用于存储的不同类型的数据结构(即,摘要),使用这些运算符生成的快照可以转换为相对大的存储器库房。这可能潜在地导致每次生成快照需要写入到基于日志的存储(例如,322)的相对大的字节阵列。
[0158]
在本公开的一个实施例中,代替生成系统的当前状态的“完全快照”,事件处理系统可以配置为生成系统的当前状态的“日记快照(journaled snapshot)”。如在这里描述的,“日记快照”指的是基于关于运算符摘要执行的操作的日志逐渐地生成的系统的当前状态的快照。例如,操作的日志可以包括关于“范围窗口”运算符中使用的列表数据结构的插入和删除操作。“日记运算符”指的是支持“日记快照”的创建的运算符。“日记运算符”的实例例如可以包括窗口运算符、groupby运算符等。与连续查询的“日记运算符”的执行对应的“日记快照”的生成导致每次处理事件的集合(例如,事件批次中的)写入到基于日志的存储中的减小的字节阵列。
[0159]
为了本公开的目的,“完全快照”指的是基于关于事件流的事件的集合的连续查询的包括“日记运算符”和“非日记运算符”的一个或多个运算符的执行生成的系统的当前状态的快照。如在此使用的,“非日记运算符”指的是不支持“日记快照”的生成的运算符。非日记运算符的实例例如可以包括中值运算符、最小运算符、最大运算符等。非日记运算符典型地将当前状态存放为完全快照,因为在某些情形下,创建日记快照可能比创建完全快照更昂贵。
[0160]
在本公开的一些实施例中,当事件处理系统确定需要生成系统的当前状态的快照时(例如,一旦已经处理了事件批次中的事件的集合),事件处理系统做出对于事件批次中的已处理的事件要生成系统的当前状态的“日记快照”或者“完全快照”的确定。例如,在一个实施例中,事件处理系统可以对于已处理的事件的第一批次中的所有事件生成系统的当前状态的“完全快照”。对于随后处理的事件批次,事件处理系统可以生成如下的“日记快照”和“完全快照”的组合。例如,在一个实施例中,事件处理系统可以生成与关于事件批次的事件的集合的“日记运算符”的执行对应的系统的当前状态的“日记快照”,和与关于事件批次的事件的集合的包括“日记运算符”和“非日记运算符”的所有运算符的执行对应的系统的当前状态的“完全快照”。
[0161]
与如上所述的连续查询的“日记运算符”的执行对应的“日记快照”的生成导致每次处理事件的集合(例如,事件批次中的)写入到基于日志的存储中的减小的字节阵列。这是由于“日记运算符”需要记录对运算符摘要执行的操作。例如,考虑具有“[范围1分钟]”的rangewindow运算符的连续查询。在该情况下执行处理的“日记运算符”的“状态”当事件在窗口的范围内时是“插入”,且当事件在窗口的范围外时是“删除”且应该从摘要删除。换句话说,范围窗口运算符的“状态”记录对在批次中迄今为止已经执行的摘要执行的所有操作。因此,通过生成与标识为“日记运算符”的连续查询的那些运算符对应的“日记快照”,可以显著地减少需要写入到基于日志的存储的字节阵列。另一方面,“完全快照”将典型地需要要存放到存储器的完全摘要。关于图9具体地讨论事件处理系统生成系统的当前状态的
快照的方式。
[0162]
图9是根据本公开的一个实施例的包括提供事件处理服务的事件处理应用902的事件处理系统900的示例性图示。在实施例中,事件处理应用902可以是由事件处理系统提供的事件处理服务(比如,如图2所示的202)的一部分。在实施例中,事件处理应用902可以分别与图3或者图5示出的事件处理系统(例如,302或者502)类似或者相同,且可以包括比如输入信道304、cql处理器306和输出信道308的组件。图9所示的实施例是可以包括本发明的实施例的事件处理系统的一个实例。在某些其它实施例中,事件处理系统900可以具有比图9所示的更多或者更少的组件,可以组合两个或更多组件,或者可以具有组件的不同配置或者布置。
[0163]
如上关于图3和图5所述,输入信道304配置为接收与应用有关的连续输入事件流并从连续输入事件流生成一个或多个事件批次的集合。在实施例中,输入信道304中的事件批次确定器模块310可以配置为通过以预定时间间隔将检查点标记事件引入连续输入事件流中来生成事件批次。
[0164]
cql处理器306可以配置为处理事件批次中的事件的集合。如上所述,事件的处理可以包括处理每个事件批次中的检查点标记事件。在检测到已经由排行跟踪模块312完全处理检查点标记事件时,排行跟踪模块312生成检查点结束标记事件。在接收到检查点结束标记事件时,输出信道308将检查点确认消息发送到输入信道304。这触发系统的当前状态的快照320的生成。在实施例中,可以以到机器的群的基于日志的存储322(摘要日志)的形式存储系统的当前状态的快照320。
[0165]
在本公开的一个实施例中,事件处理系统可以包括快照持续时间确定器模块904。快照持续时间确定器模块904可以配置为确定要多频繁地生成系统的当前状态的“完全快照”(例如,320)。例如,快照持续时间确定器模块904可以配置为每次处理事件批次中的事件的集合就触发“完全快照”的生成。在某些实例中,快照持续时间确定器模块904可以配置为在已经处理了预定数目的(例如,3个)事件批次之后触发“完全快照”的生成。在某些实例中,快照持续时间确定器模块904可以配置为如上所述地触发系统的当前状态的“完全快照”或者“日记快照”的生成。例如,快照持续时间确定器模块904可以配置为对于已经处理的第一事件批次触发“完全快照”的生成,且然后对于后续事件批次触发“完全快照”和“日记快照”的组合的生成。在其他实例中,快照持续时间确定器模块904可以配置为以预配置的时间间隔(例如,在已经处理了预定数目的(例如,10个)事件批次之后)触发“完全快照”的生成。
[0166]
如上所述,事件处理系统可以生成与在通过连续查询的事件批次中的事件的处理期间已经标识为“日记运算符”的运算符对应的“日记快照”和与在事件的处理期间已经标识为“非日记运算符”的那些运算符对应的“完全快照”。
[0167]
在一些实施例中,事件处理系统可以配置为存储“摘要信息”和“易变状态信息”作为快照的一部分。“摘要信息”和“易变状态信息”对应于与处理事件批次中的事件的连续查询的运算符有关的信息。例如,“摘要信息”可以包括由表示与运算符有关的范围窗口中的事件的rangewindow摘要使用的列表数据结构,同时“易变状态信息”可以包括与运算符有关的运算符维护的最后时间戳以记住已处理事件的最后时间戳。在某些实例中,事件处理系统可以配置为取决于运算符能够生成系统的当前状态的“日记快照”或者“完全快照”,而
存储与运算符有关的“摘要信息”或者“易变状态信息”。在一个实施例中,事件处理系统可以配置为存储与支持系统的当前状态的“日记快照”的生成的运算符有关的“摘要信息”,和与支持系统的当前状态的“完全快照”的生成的运算符有关的“易变状态信息”。
[0168]
在某些实例中,运算符能够生成系统的当前状态的“日记快照”或者“完全快照”。图10是根据本公开的实施例的示出用于在事件流中的事件的处理期间标识的连续查询的不同类型的运算符的不同类型的快照的生成的示例性表。
[0169]
如图10所示,b1、b2、b3和b4表示由事件处理系统生成的示例性事件批次。运算符类型列标识在事件流中的事件的处理期间已经由事件处理系统标识的连续查询的运算符的集合。在图10所示的的实例中,运算符的集合包括窗口运算符、aggr运算符和groupby运算符。如在这里描述的,事件流表示连续事件流。窗口运算符提供选择用于进一步处理的事件的子集(例如,最后n个事件)的方式。从窗口运算符的输出是可以用于进一步处理的事件的集合,比如加入事件流或者计算比如和和平均的聚合函数。例如,窗口运算符可以收集位于上个小时中的所有事件(例如,产品的销售定单)并每小时输出订单的平均值一次。aggr运算符是可以计算关于事件流的事件的集合的比如和、平均、计数、最大值的聚合函数的运算符。groupby运算符指的是可以执行事件流中的事件的分组和聚合的运算符。
[0170]
在本公开的一个实施例中,事件处理系统可以配置为对于第一事件批次b1生成所有标识的运算符的“完全快照”。对于后续事件批次b2和b3,事件处理系统可以配置为生成与非日记运算符(例如,aggr运算符)对应的“完全快照”和与日记运算符(例如,窗口运算符,groupby运算符)对应的“日记快照”。如在以上实例中进一步指示的,在一些实施例中,事件处理系统可以配置为生成在事件批次b4的处理期间标识的所有运算符的“完全快照”,而无论运算符是“日记运算符”或者“非日记运算符”。由图10所示的事件处理系统的四个事件批次的生成用于说明性的目的。在其他实施例中,事件处理系统可以配置为从事件流生成更少或更多数目的事件批次。
[0171]
如上所述,期望的保真度水平是精确恢复,以使得如果没有上游故障发生则下游客户端确切地看到已经产生的相同事件流且没有丢失的事件和允许复制事件。因此,期望提供连续查询的精确恢复而不大幅度地影响性能。典型地,如果关于群中的其他同级机器恢复运算符的状态,则可以提供连续查询的精确恢复。在一个实施例中,事件处理系统定义运算符的状态并在具有低等待时间读写性能的容错存储介质上保存该状态。
[0172]
现有的连续查询系统依赖于单个连续查询在群的两个节点上同步地运行的有效

有效方法(active

active approach)。一个节点通过运行关于相同的输入数据流的相同的连续查询运算符的集合而用作另一节点的备份。这典型地导致群硬件的仅50%利用。
[0173]
在本公开的实施例中,可以通过执行用于在分布式容错存储介质中保存连续查询的运算符的状态的基于日志的快速状态存储来解决以上问题。在实施例中,基于日志的快速状态存储的处理可以由事件处理系统(例如,900)执行。使用基于日志的方法,状态以具有用于后来恢复的有关数据和元数据的仅附加模式存留到存储介质中。
[0174]
连续查询可以表示为连续运行的运算符的图,其中每个有状态运算符以存储器内摘要的形式维护它自己的状态。为了恢复失败的查询,事件处理系统不得不恢复查询图的所有有状态运算符的存储器内摘要。如上所述,系统的当前状态可以表示为三个分量的合成表示:与事件流中的事件有关的输入队列状态、运算符状态或者摘要,或者输出队列状
态。
[0175]
运算符摘要指的是以在这里称为“运算符摘要”的存储器内数据结构的形式定义每个有状态连续运算符的状态。在任何时间t,运算符的摘要维护输入事件的集合和与运算符的操作相关的元数据。运算符摘要定义连续查询的状态且可以用于支持事件处理系统的故障转移语义。因为每个运算符摘要表示存储器内数据结构的提要,事件处理系统将该数据结构映射到仅附加的基于日志的存储。对于关于摘要数据结构的每个操作,事件处理系统使用快速写入性能以将改变事件附加到分布式和故障存储。事件处理系统将每个运算符摘要映射到持续介质的仅附加数据结构。
[0176]
在故障转移之前,事件处理系统连续地接收输入数据流并相应地更新运算符的状态。在完成处理来自用于连续查询的输入流的事件批次之后,事件处理从输入模块接收批次结束通知并开始持续该查询中的所有连续运算符的运算符摘要。对于每个运算符摘要,事件处理系统计算包括摘要的关联数据结构的所有改变事件的交易,并以仅附加方式将其写回到容器(例如,主题)。在某些实例中,事件处理系统可以不尝试更新存留状态中的现有日志条目。
[0177]
在一些实施例中,事件处理系统通过基于故障转移语义需要从以上三个选项选择状态分量来定义查询的状态。可以基于输入事件的处理定义事件处理系统中的故障转移语义a)确切地一次,b)至少一次和c)至多一次。
[0178]
在实施例中,事件处理系统可以确切地处理来自输入流的输入事件一次。连续查询通过在查询图中确切地处理输入事件一次来发射输出事件。为提供确切地一次语义,事件处理系统将连续查询状态定义为运算符摘要、未处理的事件批次和输出序列元数据的组合。
[0179]
在一些实施例中,事件处理系统可以处理来自输入流的输入事件至少一次。连续查询在连续运算符的状态恢复的过程中可以发射与可以多次处理的输入事件对应的复制输出事件。为提供至少一次语义,事件处理系统将连续查询状态定义为运算符摘要和未处理的输入事件批次的组合。因为可以使用该语义允许复制,因此不需要包括输出序列元数据。
[0180]
在一些实施例中,事件处理系统可以处理来自输入流的输入事件至多一次。连续查询可以跳过与在故障转移处理期间未处理的输入事件对应的某些输出事件。为提供至多一次语义,事件处理系统将连续查询状态定义为运算符摘要,因为这些语义允许在故障转移处理期间跳过一些输出事件。
[0181]
在实施例中,事件处理系统可以从基于日志的状态存储执行运算符摘要的重构。该处理包括初始化要在开始处理输入流之前恢复的连续查询的查询计划。例如,在查询计划的初始化期间,事件处理系统可以创建和初始化用于查询计划的直接访问图(dag)中的每个连续运算符的存储器内数据结构。该处理包括读取改变事件的日志以初始化连续运算符的存储器内数据结构。在该处理期间,事件处理系统可以通过从从用于运算符状态的开始标记开始的改变事件的改变事件的持续日志读取消息来初始化运算符摘要。开始标记贡献标记日志中的开始点的持续日志中的偏移,以包括重建连续查询运算符的摘要所需的所有改变事件。在实施例中,事件处理系统可以逐个地读取这些事件和更新存储器内数据结构。在读取日志的结尾,初始化连续运算符的存储器内数据结构。
[0182]
在一些实施例中,该处理进一步包括以拓扑次序遍历连续查询运算符的直接访问图以初始化查询运算符。在遍历的结尾,与初始查询对应的完全dag和运算符摘要恢复的处理是完成的。在完全恢复运算符摘要时,处理可以包括以事件批次的形式处理输入数据。在实施例中,处理可以包括由事件处理系统基于故障转移语义执行关于从哪个批次读取的决定。例如,在一个实施例中,在至多一次的情况下,事件处理系统将从容器(例如,kafka主题)读取与最后偏移对应的批次。因为读取了具有与容器的最后偏移的事件,事件处理系统可能错过在连续查询的恢复时间期间接收的来自输入流的某些事件。在另一实施例中,事件处理系统可以在确切地一次或者至少一次语义的情况下从容器读取首个未处理的或者部分处理的事件批次。为支持确切地一次语义,在某些实例中,事件处理系统可以利用如上所述的输出序列。
[0183]
说明性的处理
[0184]
图11图示了示出根据本发明的某些实施例的用于提供事件处理服务的处理1100的示例流程图。该处理图示为逻辑流程图,其每个操作可以以硬件、计算机指令或者其组合实现。在计算机指令的背景下,操作可以表示在一个或多个计算机可读存储介质上存储的计算机可执行指令,其当由一个或多个处理器执行时执行所述的操作。通常,计算机可执行指令包括执行特定功能或者实现特定数据类型的例程、程序、对象、组件、数据结构等。描述操作的次序不意在被看作为限制,且任意数目的描述的操作可以以任何次序和/或并行组合以实现处理。
[0185]
另外,可以在一个或多个计算机系统的控制下执行某些、任何或者全部处理,该计算机系统配置有可执行指令且可以实现为在一个或多个处理器上集合地执行的代码(例如,可执行指令,一个或多个计算机程序或者一个或多个应用),由硬件或者其组合实现。如上所述,代码可以存储在计算机可读存储介质上,例如,以包括可由一个或多个处理器执行的多个指令的计算机程序的形式。计算机可读存储介质可以是非瞬时的。在某些实例中,至少在图2、图3、图5、图9(等)中示出的事件处理系统(例如,至少利用输入信道304、事件批次确定器310、排行跟踪模块312、输出序列号发生器502、事件恢复模块504和快照持续时间确定器模块904)可以分别执行图6

图8的处理600、700和800。
[0186]
图11图示根据本公开的一个实施例的用于提供事件处理服务的示例处理1100的流程图。当由事件处理系统接收与应用有关的连续输入事件流时,在1100的处理可以开始于1102。例如,事件处理系统可以从如图2所示的一个或多个事件源(204,206或者208)接收连续输入事件流。在接收连续输入事件流时,在1104,事件处理系统使用连续查询处理第一事件批次以生成与应用有关的输出事件流。在1106,事件处理系统标识连续查询的一个或多个运算符。例如,事件处理系统可以标识来自对于查询生成的物理查询计划的连续查询的运算符。如上所述,物理查询计划可以包括连续查询的物理运算符的有向非循环图(dag)。
[0187]
在某些实例中,在1108,事件处理系统确定连续查询的运算符是否是“日记运算符”。然后由快照持续时间确定器904对于第一事件批次生成“日记快照”。如上所述,“日记运算符”指的是能够创建“日记快照”的运算符。如果运算符被标识为“日记运算符”,则在1114,事件处理系统生成与关于事件流的事件的集合(即,事件的第一批次)的“日记运算符”的执行对应的系统的当前状态的“日记快照”。在某些实例中,在1116,事件处理系统存
储系统的当前状态的“日记快照”。如果运算符被标识为“非日记运算符”,则在1116,事件处理系统生成用于事件流的事件的集合(例如,事件的第一批次)的系统的当前状态的“完全快照”。在某些实例中,在1112,事件处理系统存储系统的当前状态的“完全快照”。
[0188]
图12

图13图示根据各种实施例的用于实现本发明的方面的示例环境的方面。图12示出用于实现本公开的实施例的分布式系统1200的简图。在图示的实施例中,分布式系统1200包括一个或多个客户端计算装置2002、2004、2006和2008,且配置为经一个或多个网络1210执行和操作比如网络浏览器、专有客户端(例如,oracle形式)等的客户端应用。服务器1212可以经由网络1210与远程客户端计算装置1202、1204、1206和1208通信地耦合。
[0189]
在各种实施例中,服务器1212可以适于运行一个或多个服务或者软件应用,比如提供身份管理服务的服务和应用。在某些实施例中,服务器1212还可以提供可以包括非虚拟和虚拟环境的其他服务或者软件应用。在一些实施例中,这些服务可以作为基于网络的或者云服务提供,或者在软件即服务(saas)模型提供给客户端计算装置1202、1204、1206和/或1208的用户。操作客户端计算装置1202、1204、1206和/或1208的用户随后可以利用一个或多个客户端应用以与服务器1212交互,以利用由这些组件提供的服务。
[0190]
在图12中示出的配置中,系统1200的软件组件1218、1220和1222示为在服务器1212上实现。在其他实施例中,系统1200的一个或多个组件和/或由这些组件提供的服务也可以由客户端计算装置1202、1204、1206和/或1208中的一个或多个实现。操作客户端计算装置的用户然后可以利用一个或多个客户端应用以使用由这些组件提供的服务。这些组件可以以硬件、固件、软件或者其组合实现。应该理解不同于分布式系统1200的各种不同系统配置是可能的。图12所示的实施例因此是用于实现实施例系统的分布式系统的一个实例而不意在限制。
[0191]
客户端计算装置1202、1204、1206和/或1208可以包括各种类型的计算系统。例如,客户端装置可以包括运行比如microsoft windows和/或各种移动操作系统,比如ios、windows phone、android、blackberry 10、palm os等的软件的便携式手持装置(例如,蜂窝电话、计算平板、个人数字助理(pda))或者可穿戴装置(例如,google头戴式显示器)。装置可以支持各种应用,比如各种有关因特网的应用,电子邮件,短信息服务(sms)应用,且可以各种其他通信协议。客户端计算装置也可以包括通用个人计算机,举例来说,包括运行各种版本的microsoftapple和/或linux操作系统的个人计算机和/或膝上型计算机。客户端计算装置可以是工作站计算机,其运行任意各种商业上可用的或者类似unix的操作系统的,无限制地包括gnu/linux操作系统的变型,例如google chrome os。客户端计算装置也可以包括能够经网络1210通信的比如薄客户端计算机、因特网使能游戏系统(例如,具有或者不具有姿势输入装置的微软xbox游戏主机)和/或个人信息存储装置的电子装置。
[0192]
虽然在图12中示出分布式系统1200具有四个客户端计算装置,可以支持任意数目的客户端计算装置。比如具有传感器的装置等的其他装置可以与服务器1212交互。
[0193]
分布式系统1200中的网络1210可以是本领域技术人员熟悉的可以使用各种可用的协议中的任意支持数据通信的任何类型的网络,协议无限制地包括tcp/ip(传输控制协
议/因特网协议)、sna(系统网络架构)、ipx(因特网分组交换)、appletalk等。仅举例来说,网络1210可以是局域网(lan)、基于以太网的网络、令牌环、广域网、因特网、虚拟网络、虚拟专用网络(vpn)、内部网、外部网、公共交换电话网(pstn)、红外网络、无线网络(例如,在电气与电子工程师协会(ieee)1002.11协议组、和/或任何其他无线协议下操作的网络)和/或这些和/或其他网络的任何组合。
[0194]
服务器1212可以由一个或多个通用计算机、专用服务器计算机(举例来说,包括pc(个人计算机)服务器、服务器、中距服务器、大型计算机、机架安装服务器等)、服务器农场、服务器群或者任何其他适当的布置和/或组合构成。服务器1212可以包括运行虚拟操作系统的一个或多个虚拟机,或者涉及虚拟化的其他计算架构。逻辑存储装置的一个或多个柔性池可以被虚拟化以维护用于服务器的虚拟存储装置。虚拟网络可以由服务器1212使用软件定义网络控制。在各种实施例中,服务器1212可以适于运行前述公开中描述的一个或多个服务或者软件应用。例如,服务器1212可以对应于用于执行如上所述根据本公开的实施例的处理的服务器。
[0195]
服务器1212可以运行包括上面讨论的任意操作系统,以及任何市场上可买到的服务器操作系统的操作系统。服务器1212也可以运行任意各种附加的服务器应用和/或排中应用,包括http(超文本传输协议)服务器、ftp(文件传输协议)服务器、cgi(公共网关接口)服务器、服务器、数据库服务器等。示例性的数据库服务器无限制地包括那些在市场上可从oracle、microsoft、sybase、ibm(国际商业机器公司)等买到的。
[0196]
在某些实现中,服务器1212可以包括一个或多个应用以分析和合并从客户端计算装置1202、1204、1206和1208的用户接收到的数据馈送和/或事件更新。作为示例,数据馈送和/或事件更新可以包括,但不限于从一个或多个第三方信息源和连续数据流接收到的馈送、更新或者实时更新,其可以包括与传感器信息应用有关的实时事件,金融报价机,网络性能测量工具(例如,网络监视和业务量管理应用),点击流分析工具,汽车业务量监视等。服务器1212也可以包括一个或多个应用以经由客户端计算装置1202、1204、1206和1208的一个或多个显示装置显示数据馈送和/或实时事件。
[0197]
分布式系统1200还可以包括一个或多个数据库1214和1216。这些数据库可以提供用于存储比如用户身份信息,及由本发明的实施例使用的其他信息等信息的机制。数据库1214和1216可以位于各种位置。举例来说,一个或多个数据库1214和1216可以位于服务器1212本地(和/或位于服务器1212中)的非瞬时存储介质上。替代地,数据库1214和1216可以远离服务器1212并经由基于网络的连接或者专用连接与服务器1212通信。在一组实施例中,数据库1214和1216可以位于存储区域网(san)中。类似地,用于执行归因于服务器1212的功能的任何需要的文件可以按照需要本地地和/或远程地存储在服务器1212上。在一组实施例中,数据库1214和1216可以包括适于响应于sql格式化的命令存储、更新和检索数据的关系数据库,比如由oracle提供的数据库。
[0198]
图13图示可以用于实现本发明的实施例的示例性计算机系统1300。在一些实施例中,计算机系统1300可以用于实现上面描述的各种服务器和计算机系统中的任意。如图13所示,计算机系统1300包括各种子系统,各种子系统包括经由总线子系统1302与多个外围子系统通信的处理子系统1304。这些外围子系统可以包括处理加速单元1306、i/o子系统
1308、存储子系统1318和通信子系统1324.存储子系统1318可以包括有形的计算机可读存储介质1322和系统存储器1310。
[0199]
总线子系统1302提供用于使得计算机系统1300的各种组件和子系统在需要时彼此通信的机制。虽然总线子系统1302示意性地示为单个总线,总线子系统的可选实施例可以利用多个总线。总线子系统1302可以是几种类型的总线结构中的任意,包括使用各种总线架构中的任意的存储器总线或者存储器控制器,外围总线和本地总线。例如,这种架构可以包括工业标准架构(isa)总线、微通道架构(mca)总线、增强isa(eisa)总线、视频电子标准协会(vesa)本地总线和外围组件互连(pci)总线,其可以实现为对ieee p1386.1标准制造的mezzanine总线等。
[0200]
处理子系统1304控制计算机系统1300的操作,且可以包括一个或多个处理单元1332、1334等。处理单元可以包括一个或多个处理器,包括单核或者多核处理器,处理器的一个或多个核心或者其组合。在一些实施例中,处理子系统1304可以包括比如图形处理器、数字信号处理器(dsp)等的一个或多个专用共同处理器。在一些实施例中,处理子系统1304的某些或者全部处理单元可以使用定制电路,比如专用集成电路(asic)或者现场可编程门阵列(fpga)实现。
[0201]
在一些实施例中,处理子系统1304中的处理单元可以执行系统存储器1310中或者计算机可读存储介质1322上存储的指令。在各种实施例中,处理单元可以执行各种程序或者代码指令,且可以维持多个同时执行的程序或者处理。在任何给定时间,要执行的某些或者全部程序代码可以位于潜在地包括在一个或多个存储装置上的系统存储器1310中和/或计算机可读存储介质1310上。通过适当的编程,处理子系统1304可以提供用于响应于使用模式动态地修改文档(例如,网页)的上面描述的各种功能性。
[0202]
在某些实施例中,可以提供处理加速单元1306用于执行定制处理或者用于卸载由处理子系统1304执行的某些处理,从而加速由计算机系统1300执行的总体处理。
[0203]
i/o子系统1308可以包括用于将信息输入到计算机系统1300和/或用于从计算机系统1300或者经由计算机系统1300输出信息的装置和机制。总的来说,术语“输入装置”的使用意在包括用于输入信息到计算机系统1300的所有可能的类型的装置和机制。用户界面输入装置例如可以包括键盘、比如鼠标或者轨迹球的指向装置、包括在显示器中的触摸板或者触摸屏、滚轮、点击轮、拨号盘、按钮、开关、小键盘、具有语音命令识别系统的音频输入装置、麦克风及其他类型的输入装置。用户界面输入装置还可以包括运动感应和/或手势识别装置,比如使用户能够控制和与输入装置交互的微软运动传感器,微软xbox游戏控制器,提供用于使用手势和讲话命令接收输入的接口的装置。用户界面输入装置还可以包括眼睛姿势识别装置,比如检测来自用户的眼睛动作(例如,在拍照和/或做出菜单选择时“眨眼”)和将眼睛姿势转换为到输入装置(例如,google)中的输入的google眨眼检测器。另外,用户界面输入装置可以包括使用户能够通过语音命令与语音识别系统(例如,导航者)交互的语音识别感应装置。
[0204]
用户界面输入装置的其他实例无限制地包括三维(3d)鼠标、操纵杆或者指向杆、游戏键盘和图板,和音频/视觉装置,比如扬声器、数码相机、数字摄像机、便携式媒体播放机、网络相机、图像扫描仪、指纹扫描仪、条型码读取器3d扫描仪、3d打印机、激光测距仪和
眼睛注视跟踪装置。另外,用户界面输入装置例如可以包括医学成像输入装置,比如计算断层分析、核磁共振成像、位置发射层析成像、医学超声波探测装置。用户界面输入装置例如还可以包括比如midi键盘、数字乐器等音频输入装置。
[0205]
用户界面输出装置可以包括显示子系统,指示灯或者比如音频输出装置等的非视觉显示器。显示子系统可以是阴极射线管(crt)、平板装置,比如使用液晶显示器(lcd)或者等离子体显示器的,投影装置、触摸屏等。总的来说,术语“输出装置”的使用意在包括用于从计算机系统1300向用户或者其他计算机输出信息的所有可能的类型的装置和机制。例如,用户界面输出装置可以无限制地包括视觉地传达文字、图形和音频/视频信息的各种显示装置,比如监视器、打印机、扬声器、头戴耳机、汽车导航系统、绘图仪、语音输出装置和调制解调器。
[0206]
存储子系统1318提供用于存储由计算机系统1300使用的信息的储存库或者数据存储。存储子系统1318提供用于存储提供某些实施例的功能性的基本编程和数据结构的有形非瞬时计算机可读存储介质。当由处理子系统1304执行时提供上面描述的功能性的软件(程序、代码模块、指令)可以存储在存储子系统1318中。软件可以由处理子系统的一个或多个处理单元执行。存储子系统1318还可以提供用于存储根据本发明使用的数据的储存库。
[0207]
存储子系统1318可以包括一个或多个非瞬时存储器装置,包括易失性和非易失性存储器装置。如图13所示,存储子系统1318包括系统存储器1310和计算机可读存储介质1322。系统存储器1310可以包括多个存储器,包括用于程序执行期间的指令和数据的存储的易失性主随机存取存储器(ram)和存储固定指令的非易失性只读存储器(rom)或者闪存存储器。在某些实现中,包括比如在启动期间帮助在计算机系统1300内的元件之间传送信息的基本例程的基本输入/输出系统(bios)典型地可以存储在rom中。ram典型地包括目前由处理子系统1304操作和执行的数据和/或程序模块。在某些实现中,系统存储器1310可以包括多个不同类型的存储器,比如静态随机存取存储器(sram)或者动态随机存取存储器(dram)。
[0208]
举例来说,而不是限制,如图13所示,系统存储器1310可以存储应用程序1312,其可以包括客户端应用、网络浏览器、排中应用、关系数据库管理系统(rdbms)等、程序数据1314和操作系统1316。举例来说,操作系统1316可以包括各种版本的microsoftapple和/或linux操作系统,各种商业上可用的或者类似unix的操作系统(无限制地包括gnu/linux操作系统的变型、googleos等)和/或移动操作系统,比如ios、phone、os、10os和os操作系统。
[0209]
计算机可读存储介质1322可以存储提供某些实施例的功能性的编程和数据结构。当由处理子系统1304执行时提供上面描述的功能性的软件(程序、代码模块、指令)可以存储在存储子系统1318中。举例来说,计算机可读存储介质1322可以包括非易失性存储器,比如硬盘驱动器、磁盘驱动器、比如cd rom、dvd、盘的光盘驱动器或者其他光介质。计算机可读存储介质1322可以包括,但不限于驱动器,闪存存储卡、通用串行总线(usb)闪存驱动器、安全数字(sd)卡、dvd盘、数字视频带等。计算机可读存储介质1322还可
以包括,基于固态驱动器(ssd)的非易失性存储器,比如基于闪存存储器的ssd、企业闪存驱动器、固态rom等,基于ssd的易失性存储器,比如固态ram、动态ram、静态ram、基于dram的ssd、磁阻ram(mram)ssd和使用dram和基于闪存存储器的ssd的组合的混合ssd。计算机可读介质1322可以提供用于计算机系统1300的计算机可读指令、数据结构、程序模块及其他数据的存储。
[0210]
在某些实施例中,存储子系统1300还可以包括可以进一步连接到计算机可读存储介质1322的计算机可读存储介质读取器1320。计算机可读存储介质1322可以与系统存储器1310一起,可选地,与系统存储器1310结合集合地表示远程、本地、固定和/或可拆卸存储装置加用于存储计算机可读信息的存储介质。
[0211]
在某些实施例中,计算机系统1300可以提供用于执行一个或多个虚拟机的支持。计算机系统1300可以执行比如用于促进虚拟机的配置和管理的管理程序的程序。可以向每个虚拟机分配存储器,计算(例如,处理器、核)、i/o和网络资源。每个虚拟机典型地运行它自己的操作系统,可以与由计算机系统1300执行的其他虚拟机执行的操作系统相同或者不同。因此,可以由计算机系统1300潜在地同时运行多个操作系统。每个虚拟机通常独立于其它虚拟机运行。
[0212]
通信子系统1324提供到其他计算机系统和网络的接口。通信子系统1324用作用于从来自计算机系统1300的其他系统接收数据和发送数据到其他系统的接口。例如,通信子系统1324可以使计算机系统1300能够经由因特网建立到一个或多个客户端装置的通信信道以用于从客户端装置接收信息和发送信息到客户端装置。另外,通信子系统1324可以用于将成功登录的通知或者重新输入密码的通知从特许帐户管理器传递到请求用户。
[0213]
通信子系统1324可以支持有线和/或无线通信协议两者。例如,在某些实施例中,通信子系统1324可以包括用于访问无线语音和/或数据网络的射频(rf)收发器组件,例如,使用蜂窝电话技术、先进数据网络技术,比如3g、4g或者edge(用于全局演化的增强数据速率)、wifi(ieee 802.11族标准,或者其他移动通信技术、或者其任何组合)、全球定位系统(gps)接收器组件和/或其他组件。在一些实施例中,通信子系统1324可以除无线接口之外或者代替无线接口提供有线网络连接性(例如,以太网)。
[0214]
通信子系统1324可以以各种形式接收和发送数据。例如,在一些实施例中,通信子系统1324可以以结构化和/或非结构化数据馈送1326、事件流1328、事件更新1330等形式接收输入通信。例如,通信子系统1324可以配置为从社交媒体网络的用户实时地接收(或者发送)数据馈送1326和/或接收(或者发送)其他通信服务,比如馈送、更新、比如富有站点概要(rss)馈送的网络馈送和/或来自一个或多个第三方信息源的实时更新。
[0215]
在某些实施例中,通信子系统1324可以配置为接收以连续数据流的形式的数据,其可以包括本质上可以是连续或者无限制的而没有明确结束的实时事件的事件流1328和/或事件更新1330。生成连续数据的应用的实例例如可以包括传感器信息应用,金融报价机、网络性能测量工具(例如,网络监视和业务量管理应用),点击流分析工具,汽车业务量监视等。
[0216]
通信子系统1324还可以配置为将结构化和/或非结构化数据馈送1326、事件流1328、事件更新1330等输出到可以与耦合到计算机系统1300的一个或多个流数据源计算机
通信的一个或多个数据库。
[0217]
计算机系统1300可以是各种类型之一,包括手持便携式装置(例如,蜂窝电话、计算平板、pda)、可穿戴装置(例如,google头戴式显示器)、个人计算机、工作站、大型机、信息站、服务器机架或者任何其他数据处理系统。
[0218]
由于计算机和网络的不断变化的性质,在图13中示出的计算机系统1300的描述仅意在作为特定实例。具有比在图13中示出的系统更多或者更少组件的许多其他配置是可能的。基于在这里提供的公开和教导,本领域技术人员将理解实现各种实施例的其他方式和/或方法。
[0219]
在某些图中示出的系统可以以各种配置提供。在一些实施例中,系统可以配置为跨一个或多个云基本设施系统中的一个或多个网络分布系统的一个或多个组件的分布式系统。
[0220]
云基本设施系统是一个或多个服务器计算装置、网络装置和/或存储装置的集合。这些资源可以由云服务提供者划分和以某些方式分配给它的顾客。例如,比如加利福尼亚,redwood shores的oracle公司的云服务提供者可以提供各种类型的云服务,包括但不限于在软件即服务(saas)类别下提供的服务,在平台即服务(paas)类别下提供的服务,在基本设施即服务(iaas)类别下提供的服务或者包括混合服务的其他类别的服务中的一个或多个。saas服务的实例无限制地包括建造和传递按需应用,比如oracle fusion应用的套件的性能。saas服务使顾客能够利用在云基本设施系统上执行的应用而不需要顾客购买应用的软件。paas服务的实例无限制地包括使组织(比如oracle)能够在共享的、公共的架构上合并现有的应用的服务,以及建造平衡由比如oracle java cloud service(jcs)、oracle database cloud service(数据库控制系统)等平台提供的共享服务和新应用的能力。iaas服务典型地促进下层计算资源的管理和控制,比如存储、网络及用于用户利用由saas平台和paas平台提供的服务的其他基本计算资源。
[0221]
虽然已经描述了本发明的特定实施例,各种修改、改变、替代结构和等效也包括在本发明的范围内。本发明的实施例不限于某些特定数据处理环境内的操作,而是自由地在多个数据处理环境内操作。另外,虽然已经使用特定的一系列交易和步骤描述了本发明的实施例,对本领域技术人员应该很明显本发明的范围不限于描述的一系列交易和步骤。可以单独地或者联合地使用上述实施例的各种特征和方面。
[0222]
另外,虽然已经使用硬件和软件的特定组合描述了本发明的实施例,应该认可硬件和软件的其他组合也在本发明的保护范围内。本发明的实施例可以仅以硬件,或者仅以软件或者使用其组合实现。在这里描述的各种处理可以以任何组合在相同处理器或者不同处理器上实现。因此,在组件或者模块被描述为配置为执行某些操作的地方,这种配置例如可以提供设计电子电路执行操作,提供编程可编程电子电路(比如微处理器)执行操作,或者以其任何组合实现。处理可以使用各种技术通信,包括但不限于用于处理间通信的传统技术,且不同的处理对可以使用不同技术,或者相同处理对可以在不同时间使用不同技术。
[0223]
根据另一实施例,使用以下条款描述本公开:一种系统,包括用于接收与应用有关的连续输入事件流的装置,用于处理连续输入事件流以生成与应用有关的输出事件流的装置,用于确定输出事件流中的输出事件的输出序列号的装置,用于发送输出事件流中的输出事件的装置,用于存储输出事件的输出序列号的装置,用于在正在处理连续输入事件流
的同时接收系统的故障的指示的装置,用于确定输出事件流中的最近发送的输出事件的当前输出序列号的装置,用于确定与最近处理的输入事件批次对应的输出事件的最后输出序列号的装置,用于基于当前序列号和最后输出序列号确定要发送的输出流的一个或多个输出事件的集合的装置,和用于发送与应用有关的一个或多个输出事件的集合的装置。在一些实施例中,系统包括用于基于接收系统故障的指示从输出事件流中的最近发送的输出事件的当前输出序列号开始发送输出事件的装置。该系统包括用于从连续输入事件流生成一个或多个事件批次的集合的装置。在一些实施例中,该系统包括用于生成检查点标记事件的装置,用于将检查点标记事件插入到连续输入事件流中的装置,和用于基于检查点标记事件生成一个或多个事件批次的集合的装置。
[0224]
因此,说明书和附图要考虑为说明性的而不是限制性的。但是,很明显可以对其做出添加、减去、删除及其他修改和改变而不脱离如在权利要求中提出的较宽精神和范围。因此,虽然已经描述了特定发明实施例,这些不意在限制。各种修改和等效在以下权利要求的范围内。修改和变化包括公开的特征/元件的任何相关组合。
[0225]
相关申请的交叉引用
[0226]
本技术要求于2016年5月20日提交的标题为“event batching,output sequencing,and log based state storage in continuous query processing”的美国非临时申请no.15/161,043的权益和优先权,该美国非临时申请no.15/161,043又要求于2015年10月22日提交的标题为“micro batching with checkpoint marking in continuous query processing”的印度临时专利申请no.5688/che/2015、于2015年10月22日提交的标题为“output sequencing for exact

once semantics in continuous query processing”的印度临时专利申请no.5689/che/2015和于2015年10月22提交的标题为“log based fast state storage for failover in continuous query processing”的印度临时专利申请no.5690/che/2015的权益和优先权,为了全部目的将每个申请的全部内容通过引用包括于此。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1