用于处理批工作单元的设备的制作方法

文档序号:6361120阅读:665来源:国知局
专利名称:用于处理批工作单元的设备的制作方法
技术领域
本发明涉及用于处理批工作单元(batched unit of work)的设备。
背景技术
在消息驱动的事务处理应用中,当已经计算了提交决定(commitdecision)时,月艮务器执行用于消息事务的磁盘强制(disk force)。 磁盘强制成本高且引起延迟。利用消息驱动的事务处理,可以通过批处理(batching)提高效率,使得单一事务处理与预定数目的消息相关联。这样,对于与预定数目的消息相关联的大量的提交决定执行磁盘强制,而不是对于每个消息的提交决定执行磁盘强制。然而,批处理导致例如这样的问题如果存在导致一个消息失败的错误,将会退出(back out)(批处理)事务中与所有消息相关联的工作。因此,在本领域中存在解决上述问题的需要。

发明内容
根据第一个方面,提供了一种用于处理与多个消息相关联的批工作单元的设备,用于与数据存储一起使用,所述数据存储用于存储退出计数,与退出与所述批工作单元相关联的工作的多个实例相关联;退出阈值,与所述退出计数相关联;以及提交计数,与响应于对预定数目的多个消息的成功提交而提交所述批工作单元相关联,所述设备包括检验器,用于检验所述退出计数是否大于零并小于所述退出阈值;以及撤销元件,响应于所述退出计数大于零且小于所述退出阈值,对所述多个消息的子集撤销所述退出计数,并提交所述批工作单元。根据第二个方面,提供了一种用于处理与多个消息相关联的批工作单元的方法,用于与数据存储一起使用,所述数据存储用于存储退出计数,与退出与所述批工作单元相关联的工作的多个实例相关联;退出阈值,与所述退出计数相关联;以及提交计数,与响应于对预定数目的所述多个消息的成功提交而提交所述批工作单元相关联,所述方法包括步骤检验所述退出计数是否大于零且小于所述退出阈值;以及响应于所述退出计数大于零且小于所述退出阈值,对所述多个消息的子集撤销所述退出计数,并提交所述批工作单元。从第三个方面来看,本发明提供了一种用于处理与多个消息相关联的批工作单元的计算机程序产品,用于与数据存储一起使用,所述计算机程序产品包括可以由处理电路读取、并存储指令的计算机可读存储介质,所述指令用于由所述处理电路执行,实施如本发明的各步骤的方法。从第四个方面来看,本发明提供了一种存储在计算机可读介质上并且可加载到数字计算机的内部存储器中的计算机程序,包括软件代码部分,当所述程序在计算机上运行时,用于执行本发明的各步骤的方法。


现在将参考优选实施例,仅通过示例的方式描述本发明,所述优选实施例如在下列图中所示图I是其中可以实施优选实施例的系统的框图;图2是优选实施例的设备的框图;以及图3是示出根据优选实施例的过程中涉及的操作步骤的流程图。
具体实施方式

在详细描述优选实施例之前,对于消息队列、消息代理(broker)和消息流的介绍将会有帮助。迅速采用、整合以及扩展新的和现有数据处理技术的能力已经成为许多企业成功的要素。数据处理网络中的异构性(heterogeneity)和变化已经成为惯例,其需要在不同系统之间实现互操作性(interoperabi I ity )的通信解决方案。经由智能中间件产品的应用程序到应用的消息接发(messaging)提供了这个问题的解决方案。例如,已知丨BM WebSpliere MQSerier (IBM、WebSphere 和 MQSeries 是国际商业机器公司在全球许多司法管辖区注册的商标)消息接发和队列产品系列,以支持分布式异构环境中的不同系统上运行的应用程序之间的互操作。某些消息接发产品提供事务处理消息接发支持,根据消息接发协议同步工作逻辑单元内的消息,所述消息接发协议即使在系统或消息失败的事件中也给出确定的一次且仅一次的消息传递。某些产品通过直至确认其被接收器系统安全存储为止、不从发送器系统上的存储最终删除消息来提供确定的传递,并且通过精密恢复设备的使用来提供确定的传递。在当确认成功存储时承诺消息转移之前,从发送器系统处的存储删除消息、和插入到接收器系统的存储中这二者保持“存在疑问”,并且可以在失败事件中不可分地(atomically)退出。例如由IBM WebSphere MQSeries产品提供的消息队列程序间的通信支持使每个应用程序能够将消息发送到任何其它目标应用程序的输入队列,并且每个目标应用程序可以异步地从其输入队列采用这些消息用于处理。这提供了应用程序之间消息的确定的传递,其可以遍布分布式异构计算机网络,而不要求应用程序之间的专用逻辑终端到终端的连接,但是在应用程序之间可能的互连的映射(map)中可能存在巨大的复杂性。这种复杂性可以通过在网络架构中包括其它系统连接到的通信枢纽代替具有所有系统之间的直接连结而被大大地简化。接着可以在通信枢纽处提供消息代理能力,从而提供智能消息路由(routing)和应用的整合。消息代理功能一般包括使用消息报头(header)中包含的消息“主题”信息,根据不同应用程序的信息需求的业务规则和知识智能地路由消息的能力,以及使用目标应用或系统的消息格式需求的知识转换消息格式的能力,以协调系统和应用之间的差异。某些代理能力(诸如例如通过IBM WebSphere Message Broker所提供的)提供用于使用消息接发产品在应用程序之间交换的消息的智能路由和转换服务。可以在消息代理架构中实施用于消息代理应用的管理和开发这二者的支持,以提供包括发布/订阅消息传递、消息转换、数据库集成、消息入栈(warehousing)和消息路由的功能。现在将参考图I描述现有技术的更多详细描述,所述图I中示出系统(100),包括具有基础消息支持的环境(120)(包括队列管理器(130);输入队列(135);输出队列(140);失败队列(145))以及数据处理系统的例如具有数据库表(127)的数据库管理器(125)的计算机程序(125)。系统(100)还包括运行(hosting)执行组(110)的消息代理(105),所述执行组
(110)转而运行消息流(115)。消息流是由消息代理的处理逻辑所执行的操作序列的直观表示,作为输入和目标(例如,输入队列和目标队列)之间的定向图(消息流图)。消息流图由作为处理元件的表示的消息处理节点、以及节点之间的消息流连接器组成。在此处的示例中,消息流(115)表示输入队列(135)、输出队列(140)、失败队列(145)和数据库管理器(125)的处理逻辑。一般地,在第一个现有技术的示例中,处理逻辑从输入队列(135)获得消息(这开始了事务处理);更新数据库表(127);并且将消息放置到输出队列(140)—通常在事务处理中执行该工作,并且在从输入队列(135)获得下一个消息之前提交(commit)该工作。如果存在错误,则退出工作并且在输入队列(135)上“放回”消息——在这种情况下,将退出计数(BackoutCount)增加 I。一般地,也定义了用于队列的退出阈值(Backout Threshold),其表示在将消息放置到失败队列(145)之前允许退出该消息的次数。换句话说,例如,如果退出计数大于退出阈值,则将消息放置到失败队列(145)。上述第一个现有技术示例的问题是性能提交工作导致相关联的事务协调器和资源所有者一在该示例中,资源所有者是队列管理器(130)和数据库管理器(125)—强制写入到日志,导致延迟。通过第二个现有技术示例提供该问题的解决方案。如在背景技术中所述,可以通过成批处理提高效率,使得单一事务与预定义数目的消息相关联。在该示例中,在对预定义数目的消息的提交之后,提交事务,而不是对每个消息提交工作。在第二个现有技术示例的一种实施方式中,使用被称为提交计数(Commit Count)的消息流属性。在该实施方式中,在处理之前,消息计数(Message Count)被初始设置为零。下面,处理逻辑从输入队列(135)获得消息(这开始了事务处理)。 将消息计数增加I。进行检验以确定退出计数是否大于退出阈值——如果是,则将消息放置到失败队列(145)。如果退出计数不大于退出阈值,则更新数据库表(127),并且将消息放置到输出队列(140)。进行进一步的检验以确定消息计数是否大于或等于提交计数。如果消息计数不大于或等于提交计数,则处理逻辑从输入队列(135)获得另一个消息,并且重复上述步骤。如果消息计数大于或等于提交计数,则对于每个消息提交事务处理(对于该事务处理强制进行日志写入),并且将消息计数设置为零。存在与第二个现有技术示例相关联的许多问题。首先,尽管所实施的提交计数大大加速了处理,但是其存在缺点如果存在导致会退出事务处理的错误,则整批消息都被影响。例如,如果将提交计数设置在“300”并且第200个消息导致异常(exception),则将会退出当前批次中的所有200个消息,并且随后放置在失败队列中。第二,数据库管理器可能在重负载下采取“锁升级(lock escalation)”,其甚至当不存在应用错误时也可能引起提交失败。具体地,即使当处理具有相同信息的较小批量的消息时会成功,当处理大批消息时,提交也可能失败。通过第三个现有技术示例提供该问题的解决方案——在实施方式中,提供了第二个“克隆”消息流,其以提交计数=1运行。当在退出计数〉退出阈值时第一个消息流读取消息时,其将它放置到第二个“克隆”消息流的输入队列,而不是将它放置到失败队列(在退·出计数=0时将消息放置到输入队列)。当在退出计数=0时第二个“克隆”消息流读取消息时,其将它以与第一个消息流相同的方式处理。当在退出计数〉退出阈值时第二个“克隆”消息流读取消息时,其将消息放置到失败队列。返回到前面的示例中,如果一批次的第200个消息失败,则第二个“克隆”消息流将成功处理第I到199个消息,并且第200个消息将再次失败并且被放置到失败队列。第三个现有技术示例引入更多问题。首先,第三个现有技术示例创建额外的管理开销,因为其中存在要部署和操作的消息流的两个拷贝。第二,消息序列丢失——例如,如果消息在大批量的中间失败,则将通过与第一个(原始)流并行的第二个(克隆)流处理该批次中的每个消息。这对于只能按顺序处理消息的应用可能是不可接受的。通过优选实施例解决这些问题,将参考图2和图3描述该优选实施例。根据该优选实施例,提供在图2中描绘的控制器(200)。控制器(200)包括检验器(205)和撤销(override)元件(210)。检验器(205)可操作为访问存储消息计数、提交计数、退出计数以及退出阈值的值的值的数据存储(215)。控制器(200)可操作为与图I的系
统一起使用。控制器(200)可操作为有条件地使用提交计数如果退出计数大于零(但低于退出阈值),则控制器(200)忽略提交计数并且对于每个消息提交事务处理(类似于提交计数为I)。现在将参考图3描述优选实施例的处理。在步骤300,在处理之前,消息计数被初始设置为零。在步骤305,从输入队列(135)获得消息(这开始了事务处理)。将消息计数增加I。由检验器(205)通过访问数据存储(215)进行检验(步骤310),以确定退出计数是否大于退出阈值一如果是,则将消息放置(步骤315)到失败队列(145)。如果退出计数不大于退出阈值,则将数据库表(127)更新(步骤320),并且将消息放置(步骤325 )到输出队列(140 )。
由检验器(205)通过访问数据存储(215)进行进一步检验,以确定消息计数是否大于或等于提交计数,或者退出计数是否大于零。如果消息计数不大于或等于提交计数,或者退出计数不大于零,则从输入队列(135)获得另一个消息。 如果消息计数大于或等于提交计数,则提交事务处理(步骤335)(并且强制进行日志写入),并且将消息计数设置为零(步骤340)。也注意到,如果退出计数大于零(但低于退出阈值),则撤销元件(210)忽略提交计数,并且对于每个消息提交事务处理(步骤335)(类似于提交计数为I)。将消息计数设置(步骤340)为零。现在将描述一个示例。在该示例中,退出阈值为“ I ”,并且提交计数为“ 5 ”。在步骤300,在处理之前,消息计数被初始设置为零(也注意到,对于该示例,退出计数为零)。在步骤305,从输入队列(135)获得消息M_1 (这开始了事务处理,例如T_l)。将消息计数增加1,并且存储在数据存储(215)中。由检验器(205)进行检验(步骤310),以确定退出计数是否大于退出阈值。在该示例中,没有发生失败,导致退出计数停留在“O”。由于退出计数(“0”)不大于退出阈值(“ I ”),因此更新(步骤320)数据库表(127),并且将消息M_1放置(步骤325)到输出队列
(140)。由检验器(205)进行进一步检验,以确定消息计数(“I”)是否大于或等于提交计数(“5”),或者退出计数(“0”)是否大于零一如果这两个条件都不真,则从输入队列(135)获得另一个消息。在步骤305,从输入队列(135)获得另一个消息M_2 (注意另一个消息M_2与较早开始的T_1的相同事务处理相关联)。将消息计数增加1,导致消息计数为“2”并存储在数据存储(215)中。由检验器(205)进行检验(步骤310),以确定退出计数是否大于退出阈值。在这点上,在该示例中,发生失败(为了清晰,未在图3中示出)导致退出工作(事务处理T_l),并且将这两个消息^_1和12) “放回”输入队列(135)中。此外,将退出计数增加1,导致退出计数为“I”。将消息计数设置为“0”(215)并且存储在数据存储(215)中。过程返回到步骤305,其中从输入队列(135)再次获得第一个消息M_l。这开始了新事务处理T_2。将消息计数增加1,导致消息计数为“I”(215)。由检验器(205)进行检验,以确定退出计数(“I”)是否大于退出阈值(“I”)。在该示例中,检验器(205)确定退出计数(“I”)不大于退出阈值(“I”)。结果,更新(步骤320)数据库表(127),并且将第一个消息M_1放置到输出队列(140)。由检验器(205)进行进一步检验(步骤330),以确定消息计数(“I”)是否大于或等于提交计数(“5”)一这个条件不真。检验器(205)也确定退出计数(“ I ”)是否大于零(但低于退出阈值“ I ”)一这个条件真。结果,撤销元件(210)忽略提交计数“5”(其意味着一般在提交事务处理之前,消息计数必须大于或等于提交计数)。相反,撤销元件(210)使得事务处理(T_2 )被提交(步骤335 )(该结果类似于提交计数为“I”)。将消息计数设置(步骤340)为“O” (215)并存储在数据存储(215)中。过程返回到步骤305,其中从输入队列(135)再次获得第二个消息Μ_2。这开始了新事务处理Τ_3。将消息计数增加1,导致消息计数为“I”(215)。由检验器(205)进行检验(步骤310),以确定退出计数(“I”)是否大于退出阈值(“I,,)。在该示例中,检验器(205)确定退出计数(“I”)不大于退出阈值(“I”)。在这点上, 再次发生失败(为了清晰,未在图3中示出),导致退出工作(事务处理Τ_3),并且将第二个消息Μ_2 “放回”输入队列(135)中。此外,将退出计数增加1,导致退出计数为“2”。将消息计数设置为“O”(215),并存储在数据存储(215)中。过程返回到步骤305,其中从输入队列(135)再次获得第一个消息M_l。这开始了新事务处理Τ_4。将消息计数增加1,导致消息计数为“I”(215)。由检验器(205)进行检验(步骤310),以确定退出计数(“2”)是否大于退出阈值(“I,,)。在该示例中,检验器(205)确定退出计数(“2”)大于退出阈值(“I”)。此时,将第二个消息1_2放置(步骤315)到失败队列(145),并且提交事务处理Τ_4。将消息计数设置(步骤340)为零。如果发生更多处理,则过程返回到步骤305,否贝U,过程结束。尽管可以具有启用或禁用优选实施例行为的配置属性,但是这并非绝对必要。优选地,每当输入队列的退出阈值属性大于O时,优选实施例提供默认行为。从而,退出阈值=0有效地禁用了优选实施例。这是因为,当退出阈值=0时,已经退出的任何消息将会被发送到失败队列(145)。有利地,通过有条件地使用提交计数,优选实施例确保了仅将导致错误的消息放置到失败队列(145)中。由于在与错误消息相同的批次中而退出的消息被成功地重新处理,并且当再次获得它们时提交其事务处理。此外,有利地,通过有条件地使用提交计数,优选实施例确保了如果一批消息例如由于数据库中由大批量的使用(诸如如上所述的锁升级)引起的短暂问题而失败,则其将自动重新处理工作,并且当按每个事务处理提交一个消息时,其可以成功(这就时当退出计数大于零时本发明所执行的方法)。此外,有利地,通过有条件地使用提交计数,优选实施例确保了如果需要,为不存在错误的所有消息保留消息序列。本领域普通技术人员将清楚的是,可以将本发明优选实施例的所有或部分方法在逻辑设备或多个逻辑设备中适当并有效地实施,所述逻辑设备或多个逻辑设备包含布置为执行该方法的步骤的逻辑单元、并且这种逻辑单元可以包含硬件部件、固件部件或其组合。本领域技术人员将同样清楚的是,可以将根据本发明优选实施例的全部或部分逻辑布置在逻辑设备中适当并有效地实施,所述逻辑设备包括逻辑单元以执行所述方法的步骤,并且这种逻辑单元可以包含例如可编程逻辑阵列或专用集成电路中的诸如逻辑门的部件。这种逻辑布置可以进一步通过使这些单元能够用于暂时或永久地在这种阵列或电路中建立逻辑结构而实施,所述阵列或电路使用例如虚拟硬件描述语言,其可以使用固定或可发送的载体介质存储或发送。将认识到的是,也可以适当地在运行于一个或多个处理器上的软件中全部或部分地执行上述方法和布置(未在图中示出),并且可以以在诸如磁盘或光盘等的任何适当数据载体(同样未在图中示出)上承载的一个或多个计算机程序单元的形式提供该软件。数据传输通道同样可以包含所有描述的存储介质以及信号承载介质,诸如有线或无线信号承载介质。本发明可以进一步作为用于与计算机系统一起使用的计算机程序产品而适当地 实施。这种实施方式可以包含一系列计算机可读指令,其固定在诸如计算机可读介质(例如磁盘、⑶_R0M、R0M、或硬盘)的有形介质上、或者可以经由调制解调器或其它接口装置,通过有形介质(包括但不限于光学或模拟通信线路)、或者无形地使用无线技术(包括但不限于微波、红外线或其它传输技术),发送到计算机系统。这一系列计算机可读指令实施本文前述的所有或部分功能性。本领域技术人员将认识到,这种计算机可读指令可以以多种编程语言编写,用于与许多计算机架构或操作系统一起使用。此外,可以使用现有或将来的任何存储技术(包括但不限于半导体、磁、或光)存储这种指令,或者使用现有或将来的任何通信技术(包括但不限于光、红外线、或微波)而被发送。可以设想的是,这种计算机程序产品可以作为具有伴随印刷或电子文档的可移除介质(例如,收缩封装软件)而被分发,例如与计算机系统一起预安装在系统ROM或固定磁盘上,或者从例如互联网或万维网的网络上的服务器或电子公告板来分发。在备选方案中,本发明的优选实施例可以以部署服务的计算机执行的方法而实现,所述方法包含部署计算机程序代码的步骤,所述计算机程序代码可操作为当部署到计算机基础设施并在其上执行时,使所述计算机系统执行所述方法的所有步骤。本领域技术人员将清楚的是,在不脱离本发明的范围的情况下,可以对前述示例性实施例进行各种改进和修改。
权利要求
1.一种用于处理与多个消息相关联的批工作单元的设备,用于与数据存储一起使用,所述数据存储用于存储退出计数,与退出与所述批工作单元相关联的工作的多个实例相关联;退出阈值,与所述退出计数相关联;以及提交计数,其与响应于对预定数目的多个消息的成功提交而提交所述批工作单元相关联,所述设备包括 检验器,用于检验所述退出计数是否大于零并小于所述退出阈值;以及 撤销元件,响应于所述退出计数大于零且小于所述退出阈值,对所述多个消息的子集撤销所述退出计数,并提交所述批工作单元。
2.如权利要求I所述的设备,进一步包括响应于所述退出计数大于零且大于所述退出阈值而将所述多个消息的子集放置到失败队列的装置。
3.如权利要求I或2所述的设备,其中所述退出阈值大于零。
4.一种用于处理与多个消息相关联的批工作单元的方法,用于与数据存储一起使用,所述数据存储用于存储退出计数,与退出与所述批工作单元相关联的工作的多个实例相关联;退出阈值,与所述退出计数相关联;以及提交计数,与响应于对预定数目的所述多个消息的成功提交而提交所述批工作单元相关联,所述方法包括步骤 检验所述退出计数是否大于零且小于所述退出阈值;以及 响应于所述退出计数大于零且小于所述退出阈值,对所述多个消息的子集撤销所述退出计数,并提交所述批工作单元。
5.如权利要求4所述的方法,进一步包括 响应于所述退出计数大于零且大于所述退出阈值,将所述多个消息的子集放置到失败队列。
6.如权利要求4或5所述的方法,其中所述退出阈值大于零。
7.一种用于处理与多个消息相关联的批工作单元的计算机程序产品,用于与数据存储一起使用,所述计算机程序产品包括 可以由处理电路读取、并存储指令的计算机可读存储介质,所述指令由所述处理电路执行,用于实施如权利要求4至6中任意一项所述的方法。
8.一种存储在计算机可读介质上并且可加载到数字计算机的内部存储器中的计算机程序,包括软件代码部分,当所述程序在计算机上运行时,用于执行如权利要求4至6的任意一项所述的方法。
全文摘要
一种用于处理与多个消息相关联的批工作单元的设备,用于与数据存储一起使用,所述数据存储用于存储退出计数,与退出与所述批工作单元相关联的工作的多个实例相关联;退出阈值,与所述退出计数相关联;以及提交计数,与响应于对预定数目的多个消息的成功提交而提交所述批工作单元相关联,所述设备包括检验器,用于检验所述退出计数是否大于零并小于所述退出阈值;以及撤销元件,响应于所述退出计数大于零且小于所述退出阈值,对所述多个消息的子集撤销所述退出计数,并提交所述批工作单元。
文档编号G06F9/54GK102971711SQ201180033407
公开日2013年3月13日 申请日期2011年6月28日 优先权日2010年7月2日
发明者J.E.加尔扎, S.J.霍布森, T.C.多尔拜, M.E.格尔比-柯克 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1