具体实施方式
在下文中,参考附图给出例子的详细描述。应该知道,可以对例子进行多种修改。具体地,一个例子的要素可以在其他例子中组合并 使用以形成新的例子。
参考图1,示出例示消息处理***。应用10通过诸如因特网的网络1从呼入消息流30接收多个消息。接收的多个消息被从一个或多个客户端11、12、13、14发送到应用10。来自呼入消息流30的呼入消息被存储在存储器内消息队列40中,这些呼入消息可以由处理来自呼入消息流30中消息的至少第一进程100和第二进程200共享。应用10的环境数据被存储在全局数据库20中。全局数据库20可以被第一进程100和第二进程200访问。第一和第二进程至少按两个阶段来处理呼入消息,两个阶段为第一阶段MP和第二阶段DP,按如下方式执行:两个进程100和200中的一个100在执行第一阶段MP的同时,两个进程中的另一个200正在执行第二阶段DP;或者反过来。换句话说,第一进程100和第二进程200交替地执行第一阶段MP和第二阶段DP。在一些实现中,第一和第二阶段MP和DP不能由两个进程100和200(大致)同时地执行。此外,两个进程100和200的每一个具有局部存储器120和220,可用于存储由执行第一阶段MP获得的处理数据,该处理数据在(后续的)第二阶段DP期间被持久地存储在全局数据库20中。
图2示出利用例示(自动化)交替消息处理方法的第一进程100和第二进程200来得到和释放第一信标和第二信标的例示序列。第一和第二进程100和200是应用10或业务的两个实例,用于通过交替地负责自动处理应用10的呼入消息流30来处理呼入消息流30。第一和第二进程100和200(基本上)并行地执行消息处理方法的两个独立阶段MP和DP(也就是,第一进程100和第二进程200交替地执行第一阶段MP和第二阶段DP)。换句话说,第一和第二进程100和200中的一个100排他地执行第一阶段MP,而两个进程中的另一个200排他地执行第二阶段DP,反之亦然。因此,由第一和第二进程100和200执行的第一和第二阶段MP和DP的处理不重叠。
例如,用来处理(可能)大量的呼入消息(请求和/或数据)的应用10包括这样的应用,这些应用用来管理呼入定单和数据库管理***中相应的定货薄,或大航空公司多个航班的座位预订(例如在线的)的基于网络的管理。在一个例示方面,该应用10具有环境数据(也就是应用环境),包括例如在给定时间点的定货薄状态或关于各航班预订的座位数的状态。不论何时,当呼入消息被处理时(例如做出定单,或预订航班XYZ座位),处理结果对于应用10的环境数据(其自身的应用环境)有影响,也就是,定货薄已经根据做出的定单进行改变,或航班XYZ的空余座位数已经根据请求预订减少一个。此外,呼入消息随后根据它们的时间戳和/或顺序次序来处理,因为一个消息的处理结果可能对于将如何处理后续消息产生(直接)影响。例如,在预订了航班XYZ的座位之后,后续的预订所述航班上座位的请求可能由于现在订购出的航班XYZ而失败。
在一些实现中,应用10的呼入消息通过利用协助应用10被(自动地)置于全局存储区域中的内消息队列40中,该协助应用10例如是路由服务器或调度服务器。
通常,路由服务器做前向引导,把逻辑寻址的(数据)分组,例如消息和/或(数据)请求,朝着它们的目的地传送(在一个例示方面,该目的地为应用10的内消息队列40)。该(数据)分组可以路由经过一个或多个中间节点(接入点)。可以从计算机内的应用到该计算机中另一应用的存储器空间执行路由。替换地,可以从客户端计算机到用来宿主自动消息处理应用10的服务器计算机上的指定存储器空间执行路由。客户端可以是这样的计算机,该计算机与那些例如使用诸如HTTP/IP的网际协议经由万维网对宿主应用10的服务器具有访问权的用户相关。在整个万维网广泛使用动态路由。类似地,调度服务器原则上负责接收和传送消息(例如从客户端计算机,用户在客户端计算机经由电子邮件程序向宿主在服务器计算机上的基于网络的座位预订应用10的内消息队列40请求他/她的航班),并且可以根据该消息把 附加(重要)信息记录在服务器的保留存储区域中。
例如,内消息队列40是一种数据结构,其具有先进先出存储器结构。此外,整个应用环境被维持在全局存储段中,并且全局数据库20根据应用环境来存储审计和应用环境数据,这些数据可用于检查应用环境的完整性和持久性。另外,应用10可以具有应用逻辑,用来定义处理呼入消息的方法,包括消息验证和根据预定处理规则(可以存储在某个库中并可从库中检索)的应用环境的环境数据上的改变。
在一个例示方面,应用逻辑可以描述功能算法,用来处理在客户端和服务器之间的信息管理***中的信息和/或数据交换。应用逻辑可以包括:各种处理规则,这些规则可以表示当自动处理呼入消息、数据和/或请求时需要考虑的政策;以及一个或多个工作流,工作流可以组织和/或排序在应用10中的任务,从而将数据、消息、请求和/或信息从应用10的一个***组件传送到另一个。处理规则可以规定在处理呼入消息和/或请求时应该考虑的操作、定义和约束。例如,当在座位预订应用10上处理在线请求,而该在线请求包括请求给定航班上的头等舱升级,则应由消息处理应用10施加这样的处理规则,该处理规则说明:如果座位有空余,且乘客支付增加的费用,则乘客可以升级到头等舱机票。可使用诸如XACML的基于web的语言以及相应的诸如SAML的消息协议,和/或诸如JAVA的编程语言以及诸如J2EE的被设计来实现面向服务器的计算应用的基于Java的体系结构,在面向服务的体系结构(SOA)中,实现应用逻辑和所包括的处理规则。
在一些实现中,资源,诸如存储器内消息队列40和包括审计和环境数据的应用环境,被存储在至少一个全局存储段和/或由第一和第二进程100和200共享的(全局)数据库20中。
换句话说,应用的环境(context),也就是应用环境(applicationcontext),驻留于全局存储区域以及内消息队列中。因此,环境数据 可以利用第一和第二进程在它们的第一阶段期间来访问和/或修改。对应用的环境数据所做的修改,在第一阶段期间被分别地保存在第一和第二进程的局部存储区域中,然后在第二阶段被保存在全局数据库中。在应用启动和初始化期间,存储在全局数据库中的数据被用于设置应用的环境的全局存储区域。因此,在第一阶段期间,执行第一阶段的进程可以从存储区域访问所有需要的数据而不需要做任何盘I/O。
除了通常共享的资源之外,第一和第二进程100和200被设计和实现为使得(自动或半自动)消息处理可以被划分为至少两个独立的阶段MP和DP。第一阶段MP被称为存储器阶段,而第二阶段DP被称为盘阶段。第一进程100和第二进程200交替地执行存储器阶段MP和盘阶段DP,也就是当第一进程正在执行消息处理方法的第一阶段MP时,第二进程正在(基本上同时地)执行消息处理方法的第二阶段DP,反之亦然。这意味着,如果第一进程执行其存储器阶段MP,则第二进程执行其盘阶段DP,反之亦然。换句话说,两个进程100和200基本上并行地执行它们的第一和第二阶段MP和DP,其中,两个进程100、200中的一个执行其第一阶段MP(分别地,其第二阶段),而(同时)两个进程中的另一个执行其第二阶段DP(分别地,其第一阶段)。下面更详细介绍存储器阶段MP和盘阶段DP。
图2示出第一和第二进程100和200可以如何被协调和同步的例子,从而使得,第一和第二进程100和200不会同时执行相同的(存储器或盘)阶段MP、DP,并且应用10的新的审计和环境数据只有在提交了旧的审计和环境数据之后才被写入全局数据库20中。因为第一和第二阶段MP和DP的处理时间不同(也就是,第一阶段MP或第二阶段DP中的一个较之另一个可能需要更多的时间来执行),可能发生这样的情况,在第二进程200已经提交(一个或多个数据库事务)之前,第一进程100已经执行了其存储器阶段MP并且准备好提交其处理后的数据(也就是处理后的消息的一个或多个结果,以及根据处理后的消息的应用10的环境数据的修改和/或改变)。在一些实现中,这种 情况要避免。
如图2所示,第一进程100和第二进程200的协调和同步可以通过使用至少两个信标也就是第一信标和第二信标来实现。第一信标可以称为存储器信标,而第二信标可以称为盘信标。在一些实现中,分别地,存储器信标由进程100、200在被允许进入存储器阶段MP之前拥有,而盘信标则由进程100、200在被允许进入盘阶段DP之前拥有。
在S101,第一进程100等待存储器信标。在第二进程200已经释放了存储器信标之后(S202),第一进程获得或分配存储器信标(S103)并且可以开始执行其存储器阶段MP(S104),而基本上同时地第二进程200执行其盘阶段DP(S204)。在第一进程100的存储器阶段MP结束时,第一进程100等待盘信标(S105)。在第二进程200已经释放了盘信标之后(S206),第一进程100也获得或分配盘信标(S107)。因为第一进程100在释放存储器信标之前还等待盘信标,这样确保第二进程200在开始其后续的存储器阶段MP之前已经提交了其盘阶段DP。接下来,现在拥有了两个信标的第一进程100释放第二进程200正在等待(S208)的存储器信标(S109)。接着,第二进程200从第一进程接收存储器信标(S210)。第一进程100可以现在执行它的盘阶段DP(S111)。基本上并行地,第二进程200执行它的存储器阶段MP(S211)。在完成盘阶段DP之后,第一进程100释放第二进程200在已经结束了其存储器阶段MP之后正在等待(S212)的盘信标(S213)。在该时间点,第一进程100等待存储器信标,进入其下一个处理周期,也就是随后处理其存储器和盘阶段MP和DP的下一个序列。因此,第二进程200基本上同时地等待盘信标以进入其下一个处理周期,也就是随后处理其盘和存储器阶段DP和MP的下一个序列。
通过使用存储器信标和盘信标,由第二和第二进程100和200交替地处理存储器和盘阶段MP和DP,协调和同步第一和第二进程100和200的处理,如图2所示,这样避免了死锁并且确保具有较大呼入 消息吞吐量的基本应用10的环境数据的数据(更新)的一致性。
在原理上,死锁可以指这样的特定情况,当两个或多个进程的每个都等待另一个释放对于诸如共享存储段或共享数据库的资源的存取,以传送消息处理结果和在应用10的环境数据上的相应修改。例如,如果两个进程的第一进程获得第一资源,而两个进程的第二进程获得第二资源,则当已经存取第一资源的第一进程另外还需要第二资源来继续处理而同时第二进程在可以释放第二资源之前另外还需要第一资源的时候,则发生死锁。由此,两个请求都不能被满足,从而发生死锁。
在原理上,数据一致性可以涵盖各应用和/或服务的相关数据和/或信息的有效性、准确性、可用性和完整性。换句话说,数据一致性可以基本上确保,例如,来自用户的对管理大航空公司的多个航班的座位预订应用的每个请求,在服务器上观察到关于环境数据(也就是当前座位空余情况)的一致视图,包括由以前的坐位预定请求以及所述变化的事务对于存储预订应用的环境数据的数据库20的可见改变。因此,所处理的消息对于应用的全局数据库20的事务需要是一致的,从而使得根据处理后的呼入消息流30,数据库20在很多不同的事务流的范围内是一致的。
参考图3,示出用来交替地利用两个阶段MP和DP处理呼入消息流30的两个进程中的一个300的例示处理流,该两个阶段为存储器阶段MP和盘阶段DP。在S302,进程300进入存储器阶段MP并等待从第二进程100、200接收或获得存储器信标(S304)。在接收到存储器信标之后,进程300,具有对包括应用10的呼入消息的存储器内消息队列40的全局存储区域的无限制(也就是完全)访问权,检查在存储器内消息队列40中是否还有任何消息等待被处理(S306)。在存储器内消息队列40中没有消息的情况下,该进程等待某个(可能是预定的)时段并再一次重新检查消息队列40(S308)。在消息队列40中具有一 个或多个消息的情况下,第一个等待消息由进程300获得,并基本上立即由进程300处理(S312)。在存储器阶段MP中的至少一个消息的处理期间,进程300应用(或遵循)为应用10定义的处理逻辑。在已经处理了消息之后,所处理消息的结果被存储在进程300的局部存储区域中(S313)。在已经处理了消息并且在已经将相应结果存储在局部存储区域中之后,进程300检查,是否在存储器阶段MP中获得可能预定数量的经处理的消息(S314)。如果所述数量还没有达到,则进程300检查在存储器内消息队列40中是否还有任何消息剩余(S316)。根据测试和相应判定,进程300通过返回到S310从消息队列40获得并处理后续的消息或终止它的存储器阶段MP处理(S318)。进程300然后根据所处理消息的结果把应用10的环境数据的改变和/或修改保存和/或存储在其局部存储区域中(S318)。换句话说,进程300把修改后的应用环境保存在它的局部(也就是私有)存储区域中。在准备后续的盘阶段DP时,进程300等待,直到它从它的互补进程200获得(或接收)盘信标(S320)。
互补进程200基本上在进程300处理其存储器阶段MP的同时处理其盘阶段DP。在接收到盘阶段DP之后,现在拥有了两个信标(也就是存储器信标和盘信标)的进程300,释放存储器信标(S322)(对应于图2中的步骤S109和S209)并进入它的盘阶段DP(S324)。在S326,进程300打开到应用10的全局数据库20的数据库事务,该全局数据库20存储应用10的审计和应用环境数据。接着,来自在之前的存储器阶段MP中处理的每个消息的结果,被逐个从进程300的局部存储区域写入或传送到应用10的全局数据库20(S328)。另外,根据处理后消息的应用10的修改后的(或改变后的)环境数据也被写入(或传送)到全局数据库20中(S330)。最终,进程300提交数据库事务(S332)。在提交之后,进程300释放盘信标(S334)并准备好开始其下一个存储器阶段MP。
换句话说,在第一和第二进程100和200中的一个100处理图3 所示的消息处理方法300的S302到S322的同时,第一和第二进程100和200的另一进程200处理消息处理方法300的S324到S334。第一和第二进程100和200的处理使用第一和第二信标来协调。存储器阶段MP S302到S322以及盘阶段DP S324到S334由第一和第二进程100和200来迭代,如图2所示。
在例示应用10中,管理大航空公司的在线座位预订可以使用用于根据图2和3自动处理呼入消息的交替处理方法。在线预订应用10可以驻于服务器上,并且到应用10的消息和/或请求可以经由诸如互联网的网络1从一个或多个客户端11、12、13、14接收。在线预订应用10可以包括两个进程100和200,以通过交替地处理存储器阶段MP和盘阶段DP来处理呼入的消息、数据和/或请求。此外,在线预订应用10可以包括存储器内消息队列40,其存储在服务器的全局存储区域中或可从服务器访问,以及存储在服务器的全局数据库20或可从服务器访问。另外,在线预订应用的环境被存储在全局存储区域中。全局数据库20存储在线预订应用10的审计和应用环境数据。
负责的进程300在其存储器阶段MP期间根据座位预订的应用10的基本处理逻辑来处理从一个或多个客户端11、12、13、14中的一个呼入的请求(也就是消息),该处理逻辑包括座位空余情况的当前状态。在线座位预订应用10的处理逻辑可以被存储在服务器或可以从服务器全局访问。处理逻辑可以包括规则,规则例如指定如何对预订某个航班的至少一个座位的请求进行服务。在已经处理了消息之后,结果(例如在具体航班上可以预订的座位)被存储在进程300的局部存储区域中。此外,在进程300的存储器阶段MP期间处理了一个或多个消息之后,根据可能改变的座位空余情况的应用环境的(也就是座位预订应用10的环境数据)的对应改变和/或修改被存储在进程300的局部存储区域中。如果进程300已经终止了它的存储器阶段MP,这取决于是否已经达到处理消息的可能预定数量和/或在存储器内消息队列40中是否不再有消息,进程300等待盘信标来进行它的盘阶段DP。在已 经接收到盘信标并接着释放了存储器信标之后,进程300打开到座位预订应用10的全局数据库20的事务,并逐个地传送关于预订不同航班座位的请求的处理结果。此外,进程300将应用10的修改后的环境数据,也就是根据处理后的消息的航线的一个或多个航班的改变的座位空余情况,传送到座位预订应用10的全局数据库20中。换句话说,更新后的应用环境(根据处理后的消息)被保存(或存储)在全局数据库20中。在进程300已经传送处理后的消息结果和更新后的环境数据后,进程提交数据库事务。当然,当进程300正在处理其存储器阶段MP(分别地,盘阶段DP)时,其配对进程(counterpart process)100、200基本上并行地处理其盘阶段DP(分别地,存储器阶段MP)。
在另一例示方面,如参考图2和3介绍的用于处理大量呼入消息的交替处理方法可以被应用于在信息和/或数据库管理***中实现的大容量交易引擎。来自一个或多个客户端11、12、13、14的呼入消息流30可以包括例如用于为由包括至少一个数据库的服务器服务的某个数据库驱动可买卖金融工具添加指令的定单。交易引擎根据处理逻辑,相对于存储在定单簿中的那些定单来对呼入定单进行匹配,该处理逻辑包括诸如定单应该根据最佳价格和/或时间约束条件来处理的规则。与处理逻辑不匹配的定单被存储在定单簿中。因此,对于定单的任何动作(也就是正在处理的定单的结果,以及存储的定单不匹配处理逻辑所导致的对于定单簿的改变和/或修改)被审计。此外,为了结算目的期望得到的交易安全,并且期望定单簿也安全。因此,当使用两个消息处理进程100和200处理呼入定单时,可以满***易引擎的那些条件,这两个消息处理进程100和200具有两个阶段MP和DP,也就是存储器阶段MP和盘阶段DP。两个阶段MP和DP由两个进程100和200交替地执行。具体地,呼入定单流可以连续地由当前正在执行其存储器阶段MP的两个进程100和200中的任何一个进程进行处理。在这种情况下,当前占有存储器信标并由此执行存储器阶段MP的进程100、200中的一个具有到存储在数据库中的定单簿的独占访问。审计数据、交易完成以及定单簿的改变和/或修改后的情况,通过当前占有 盘信标并由此执行盘阶段DP的两个进程100和200中的一个,被传送并存储在交易引擎的全局数据库20中。
如之前参考图2和3描述的方法包括两个阶段MP和DP,也就是存储器阶段MP和盘阶段DP,这些阶段可以由两个进程100和200交替地执行。两个进程100和200中的一个进程100可以执行其存储器阶段MP,同时(基本上同时地)两个进程100和200中的另一进程200执行其盘阶段DP,反之亦然。因为以下理由这种处理方法可以被称为优化算法:如图2所示,两个进程100和200中的一个进程100可以在两个进程100和200中的另一进程200提交其数据库事务到应用10的全局数据库20之前,进入并执行其存储器阶段MP(也就是处理呼入消息并改变和/和修改应用10的对应环境数据)。因此,如果正在执行其盘阶段DP的进程200未能成功执行其盘阶段DP,则其自身的动作(也就是在其前一个存储器阶段MP期间处理的结果和环境数据修改)以及在基本上并行执行的存储器阶段MP期间由另一进程100执行的动作(也就是处理后的呼入消息和应用10的环境数据的改变)要回滚(rollback)。原则上,当数据库事务被确定为已经失败时,回滚可以包括对部分完成的数据库改变的撤消。
根据具有较大消息吞吐量并由此需要消息处理的应用10的可用性(availability)需求,当根据图2和3的交替处理方法用于应用10时,在失败情况下,可以使用一个或多个策略。该一个或多个出错处理策略可以包括在交替执行第一和第二阶段MP和DP的第一和第二进程之间的互锁机构。该机构在下面更详细进行描述。
可用性可以指由应用和/或***提供的服务的水平。高度可用的***可具有最小的停工时间(不管是否是计划的)。***、应用、数据库和/或服务器的可用性可以从***和/或应用可用的时间百分比的方面来表示。可用性需求可以在***和/或应用中通过实现容错机构来屏蔽或最小化***和/或应用的组件和依赖性的故障的影响。容错可以通 过对故障组件的单个点实现冗余来获得。
在一些实现中,应用10具有非常低的可用性需求(例如,小于70%的时间需要应用10是可用的)。在这种情况下,如果处理存储器阶段MP或盘阶段DP的第一进程100检测到,交替执行盘阶段DP或存储器阶段MP的第二进程200分别地交替执行如图2和3所示的替换消息处理方法,则第一进程100基本上立即停止依然进行的阶段的处理。因此,第一进程100从第二进程200接收到指示该第二进程已经失败的信号中断由依然进行的第一进程100执行的阶段的处理,基本上是立即地退出。
在一些实现中,应用10具有较低可用性需求(例如小于80%的时间需要应用10可用)。在这种情况下,如果正在执行盘阶段DP的第一进程100检测到第二进程200(其正在执行存储器阶段MP)失败,则第一进程100在已经提交了处理中的数据后(例如在已经提交了传送到应用10的全局数据库20的应用10的消息结果和环境数据之后)停止处理。由此,第一进程100从第二进程200接收指示该第二进程已经失败和/或死亡(die)的信号由第一进程100来排队。在第一进程100进入新阶段时检查该信号。换句话说,如果当前正在处理存储器阶段MP的第二进程200失败,第一进程100完成盘阶段DP,并且当进入存储器阶段MP时由于在完成盘阶段DP后检查的信号导致检测到第二进程200的失败。在这种情况下,第一进程100被迫使退出存储器阶段MP。
在一些实现中,应用10具有较高的可用性需求(例如多于90%的时间需要应用10可用)。在这种情况下,如果第一进程(正在执行存储器阶段MP或盘阶段DP)检测到第二进程200(其相应正在执行盘阶段DP或存储器阶段MP)失败或死亡,则第一进程100基本上立即停止处理并回滚所有已处理但还未提交的数据(诸如来自处理后的消息的结果和应用10的环境数据的相应修改和/或改变)。为此,另外的 日志(logging)数据被写入到当执行存储器阶段MP的第一和第二进程100和200的局部存储器中,从而使得可以回滚那些存储在相应进程100、200的局部存储器中的来自处理的消息的结果和/或应用10的环境数据的修改。向一个进程100、200指示相应进程100、200已经死亡或失败的信号由该进程来排队,并在进程100、200进入新阶段之后被检查。换句话说,两个进程100和200的每一个依然使得其自己用来存储应用10(处于较高可用性需求的情况下)的环境数据的修改的私有存储区域是其全局的,并由此可以从进程100和200访问,从而允许由相应死亡的配对进程来执行回滚动作。根据进程100、200是在存储器阶段MP、还是盘阶段DP期间失败或死亡,执行以下的行为或操作:当进入存储器阶段MP时,进程100检测到对应的进程200已经死亡或失败。由此,对应的进程200在失败时已经在存储器阶段MP中。因此,进程100回滚由对应进程200完成的动作(也就是处理步骤),并继续处理在存储器内消息队列40中等待的未处理的消息。由此,由已经失败的对应进程200所处理的消息被撤消处理,并因此再次在存储器内消息队列40中等待被处理。
进程100当进入盘阶段DP时检测到对应的进程200已经死亡或失败。因此,对应的进程200在其失败时已经处于盘阶段DP中。因此,由对应的进程200起动和/或结束的从其局部存储区域到全局数据库20的事务还未被提交。因此,进程100(还在进行)执行以下的动作和/或操作:
(1)回滚其自己的动作(在其前一个存储器阶段MP期间所执行的);
(2)回滚由对应的进程200执行的动作,这些动作在失败的盘阶段DP期间已经被执行,以及包括对应的进程200之前执行的存储器阶段MP的动作;
(3)基本上立即退出盘阶段DP(没有数据可能被提交);和/或
(4)进入新的存储器阶段MP来执行未执行的消息并继续,这些消息在回滚期间已经被撤消处理。
参考图4到6,将关于根据图2和3的自动交替消息处理方法的效率的益处与传统处理方法进行比较,传统处理方法不能由两个进程交替地执行两个不同的阶段。在一些实现中,可以做出以下假设的一个或多个:
(1)在存储器中执行的动作具有(也就是需要)1个时间单位的开销。
(2)将数据写入数据库20需要2个时间单位。
(3)打开到数据库20的事务需要1个时间单位。
(4)提交写入到数据库20中的数据需要5个时间单位。
(5)进程在数据库20事务中处理10个消息。
(6)时间单位可以表示通常使用的单位,诸如毫秒、秒、分钟等。
如图4所示,利用传统方法处理10个消息需要78个时间单位。参考图5,示出,在交替处理方法的简化而非优化实现中(如图2和3所示),还有交替处理方法暗示总共更长的处理时间(99个时间单位),第一和第二进程100和200可以每51个时间单位(也就是处理10个消息所需要的两个阶段MP和DP的较长的时间)处理10个消息,与图4所示的传统应用的78个时间单位形成对比。
图6示出传统方法和交替处理方法的相应消息处理率作为时间的函数。例如,在500个时间单位期间,交替处理方法可以处理98个消息,但是传统方法在相同量的时间内只能处理64.1个消息。因此,交替消息处理方法可以提供在处理来自呼入消息流30的消息方面的提高效率,这些消息对于基本应用10的环境数据有影响。此外,优化可以将存储器阶段MP的处理时间减少到盘阶段DP的处理时间(也就是48个时间单位)以下,这表示了数据处理吞吐量的限制因素。
在盘阶段DP期间把已经在存储器阶段MP的执行期间存储在两个进程100和200中的某一个的局部存储器内的数据非逐个地而是作为 整体地写入到全局数据库20,可能还另外增加消息处理的吞吐量。由此,使用根据图2和3的自动化交替处理方法,以使用交替执行第一阶段MP和第二阶段DP的两个进程来处理较大呼入消息流,可以获得接近理论可能吞吐量的消息吞吐量。理论吞吐量可以是如果不执行输入/输出操作可以由应用10处理的每时间单位的消息的最大数量。
图7示出包括采用传统计算环境420的形式的通用计算装置(例如个人计算机)的***。个人计算机420包括:至少一个处理单元422,其具有至少双核性能,从而至少两个进程可以同时运行;或者至少两个处理单元,所述处理单元又包括双核性能。个人计算机420还包括***存储器424,以及包括***总线426,该***总线426把包括***存储器424的多个***部件耦合到处理单元422。处理单元422可以通过访问***存储器424来执行算术、逻辑和/或控制操作。***存储器424可以存储信息和/或指令以与处理单元422结合使用。***存储器424可以包括易失性和非易失性存储器,诸如随机存取存储器(RAM)428和只读存储器(ROM)430。例如在开机期间帮助在个人计算机420中的元件之间传送信息的包含基本例程的基本输入/输出***(BIOS),可以被存储在ROM 430中。***总线426可以是多种类型的总线结构的任何一种,这些类型包括存储器总线或存储器控制器、***总线以及使用多种总线结构的任何结构的局部总线。
个人计算机420可以进一步包括:硬盘驱动器432,用于从硬盘(未示出)读取和向硬盘写入;以及外部盘驱动器434,用于从可移动盘436读取或向可移动盘436写入。可移动盘可以是针对磁盘驱动器的磁盘或针对光盘驱动的诸如CD ROM的光盘。硬盘驱动器434和外部盘驱动器434分别地利用硬盘驱动接口438和外部盘驱动接口440连接到***总线426。驱动器及其相关联的计算机可读介质为个人计算机420提供计算机可读指令、数据结构、程序模块和其他数据的非易失行存储。数据结构可以包括如前面更详细描述的用于处理呼入消息流30的交替处理方法的实现的相关数据。相关数据可以以例如关系数 据库或对象数据库的数据库来组织。
虽然这里所述的例示环境采用硬盘(未示出)和外部盘442,本领域技术人员应知道,可以存储可由计算机访问的数据的其他类型的计算机可读介质,诸如磁带、闪存卡、数字视频盘、随机存取存储器、只读存储器等,也可以被用于例示操作环境中。
一些程序模块可以被存储在硬盘、外部盘442、ROM 430或RAM428上,这些程序模块包括操作***(未示出)、一个或多个应用程序44、其他程序模块(未示出)以及程序数据46。应用程序可以包括如图1到6详细示出的功能性的至少一部分。
用户可以通过诸如键盘448和鼠标450的输入装置将命令和信息输入到个人计算机420中,如下所述。其他输入装置(未示出)可以包括麦克风(或其他传感器)、操纵杆、游戏键盘、扫描仪等。这些和其他输入装置可以通过耦合到***总线426的串行端口接口452连接到处理单元422,或可以利用其他接口来收集,其他接口诸如是并行端口接口454、游戏端口或通用串行总线(USB)。此外,信息可以使用打印机456来打印。打印机456以及其他并行输入/输出装置可以通过并行端口接口454连接到处理单元422。监视器458或其他类型的显示装置也经由诸如视频输入/输出460的接口连接到***总线426。除了监视器之外,计算环境420可以包括诸如扬声器或其他音频输出的其他***输出装置(未示出)。
计算环境420可以与诸如计算机、电话(有线或无线)、个人数字助理、电视机等的其他电子装置进行通信。为了通信,计算环境420可以使用到一个或多个电子装置的连接在联网环境中操作。图7示出与远程计算机462联网的计算机环境。远程计算机462可以是诸如服务器、路由器、网络PC、对等装置或其他共用网络节点的另一计算环境,并且可以包括关于计算环境420的上述的很多或所有元件。在图7 中示出的逻辑连接包括局域网(LAN)464和广域网(WAN)466。该联网环境是办公室内的共用地方、企业范围的计算机网络、内联网和互联网。
当在LAN联网环境中使用时,计算环境420可以通过网络I/O 468连接到LAN 464。当在WAN联网环境中使用时,计算环境420可以包括调制解调器470或用于经由WAN 466建立连接的其他装置。调制解调器470,可以在计算环境240内部或外部,经由串行端口接口452被连接到***总线426。在联网环境中,关于计算环境420描述的程序模块或其部分,可以被存储在驻于远程计算机462上或对于远程计算机462可访问的远程存储装置中。此外,关于保险索赔管理评估方法的应用的其他数据可以驻于远程计算机462上或经由远程计算机462可访问。该数据例如可以存储在对象数据库或关系数据库中。将知道,所示网络连接是示例性的,并且可以使用建立在电子装置之间的通信连接的其他方法。
以下在本说明书中广泛使用的技术术语可以表示但是不限于接着给出的解释。例如,如在本说明书中描述的应用或应用程序可以指一类计算机软件,用于将计算机和/或计算机网络的功能(直接)应用于多个用户期望执行的一个或多个任务。在这里的环境中,术语应用(application)可以指应用软件(也就是使得用户受益的一个或多个程序)及其在计算机和/或计算机网络中的实现。
如在本说明书中描述的消息可以指一组数据,诸如在服务器上从客户端接收(或传送到服务器)的请求。数据当经由(计算机)网络传送时可以变成消息。消息的例子可以是经由因特网接收的电子邮件,电子邮件包含文本还可能包含其他文件附件。消息的另一例子可以是使用例如IP语音经由网络接收的语音邮件。消息流可以是经由网络从一个或多个客户端传送到服务器的消息的连续流。因此,消息流暗示从一个或多个客户端发送数据到服务器。该服务器可以是例如基于IP 的网络服务器。处理消息流可以包括在计算机中操纵来自消息流的消息。处理自身可以暗示利用计算机或基于计算机的装置来执行或进行工作。
如在本说明书中描述的队列或数据队列可以指数据结构,用来将数据存储在计算机的存储区域中。队列可以基于先进先出或先到先服务的方式。换句话说,先进入队列中的数据被先处理,下一个接着进入的则等待第一个完成,等等。例如,应用的呼入消息流可以被存储在存储器内消息队列中,并且可以按所处理的一个或多个来服务。
如在本说明书中描述的吞吐量可以表示由计算机或应用在给定时段内完成的工作或处理的总量。例如,处理来自呼入消息流的呼入消息的应用可以具有每时间单位(例如毫秒、秒、分钟等)需要被处理的某个呼入消息的吞吐量。具有高消息吞吐量的应用可以具有每秒10,000到20,000个消息的呼入消息率。进程在一个时间单位期间可以执行的理论吞吐量可以指应用如果不执行I/O操作可以处理的消息的最大数量。
如在本说明书中描述的应用逻辑可以表示一个或多个功能算法,用来处理在客户端和服务器之间的信息管理***中的信息和/或数据交换。应用逻辑可以包括多个处理规则,规则可以表示当(自动地或半自动地)处理呼入消息和一个或多个工作流时要考虑的政策,可以在应用中对任务进行组织和/或排序,从而将消息、请求和/或信息从(应用的)一个***组件传送到另一个组件。处理规则可以指定当处理呼入消息和/或请求时应该被考虑的操作、定义和约束条件,例如,当在座位预订应用上处理包括对于给定航班上的头等舱升级的在线请求时,规定如果座位有空余并且乘客付出增加费用则乘客可以升级到头等舱机票的处理规则需要由消息处理应用来施加。
如在本说明书中描述的,应用的审计(audit)和环境(context) 数据可以包括允许评估所处理消息和基本(全部)应用环境的数据。审计可以指生成、记录和查阅消息处理的时序记录以确保它们的准确性并维持数据完整性的进程。应用环境可以描述某个时间点的应用的状态,例如在线航班预订应用的当前座位空余情况。因此,当一个或多个消息已经被处理后,例如由于预订出去的航班XYZ导致航班XYZ上的座位不再空余时,可以改变和/或修改环境数据和应用环境。当(自动地)处理后续的消息时,需要考虑该环境数据。
如在本说明书中描述的,(数据库)事务(transaction)可以是程序或进程与数据库管理***或类似***的交互的单位,事务独立于其他事务按连贯且可靠的方式处理,要么完成,要么放弃。事务可能要求几个查询,每个查询在数据库中读/写数据。在这样的事务期间,重要的是,确保不使数据库仅仅执行一些查询。例如,当执行资金转账时,当资金从一个账户划出,重要的是,该资金要被存入到储蓄账户。为了使得暂定的数据库事务在数据库中持久,可以提交事务。提交使得由于前一事务导致的数据库上执行的改变对于访问该数据库的其他进程和/或应用可见。
本说明书中描述的信标(semaphore)可以是用于协调和同步进程的锁定变量。在具有需要对共享资源(例如存储器和/或处理器)的受控访问的多个进程的应用和/或***中,提供机制以决定哪个进程得到信标并且提供锁定信标的操作。在简单的情况下,这可能是将信标设置为1(真)或0(假)的原子交换操作,也就是设置为真或假的标志。
本发明主题的实施例以及本说明书中所述的功能操作可以利用数字电子电路、或计算机软件、固件或硬件实现,包括利用本说明书中公开的结构以及它们的结构等效、或者在它们的一个或多个的组合来实现。在本说明书中描述的主题的实施例可以作为一个或多个计算机程序产品实现,该计算机程序产品也就是在实有程序载体上编码的计算机程序指令的一个或多个模块,由数据处理设备来执行或控制数据 处理设备的操作。实有程序载体可以是传播的信号或计算机可读介质。传播的信号是人工生成的信号,例如机器生成的电、光或电磁信号,生成这种信号来编码信息以传送到适当的接收器设备从而由计算机执行。计算机可读介质可以是机器可读存储装置、机器可读存储板、存储器装置、影响机械可读传播信号的物质成分或者它们的一个或多个的组合。
术语“数据处理设备”包括所有用于处理数据的设备、装置和机器,包括例如可编程处理器、计算机或多个处理器或计算机。该设备除了硬件之外还可以包括为所考虑计算机程序创建执行环境的代码,也就是构成处理器固件、协议栈、数据库管理***、操作***或它们的一个或多个的组合。
计算机程序(也已知为程序、软件、软件应用、脚本或代码)可以用任何形式的编程语言来书写,包括编译型或解释型语言,或者说明性或进程性语言,并且其可以以任何形式部署,包括如孤立程序或适用于计算环境中的模块、组件、子例程或其他单位。计算机程序不一定对应于文件***中的文件。程序可以存储在保持其他程序或数据(例如存储在标记语言文档中的一个或多个脚本)的文件的部分中、专用于所考虑程序的单个文件中、或者多个协作的文件(例如存储一个或多个模块、子程序或代码部分的文件)中。计算机程序可以被部署为在一个计算机或多个计算机上执行,这些计算机位于一个站点处或者跨多个站点分布并且利用通信网络互连。
本说明书中描述的进程和逻辑流可以利用一个或多个可编程处理器来执行,该可编程处理器执行一个或多个计算机程序,通过在输入数据上操作并生成输出来执行功能。还可以利用专用逻辑电路来执行进程和逻辑流,并且可以将设备实现为专用逻辑电路,该专用逻辑电路例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。
适于执行计算机程序的处理器包括例如通用和专用微处理器,以及任何类型的数字计算机的一个或多个处理器的任何一个。通常,处理器从只读存储器或随机存储存储器或两者接收指令和数据。计算机的重要元件是用于执行指令的处理器和用于存储指令和数据的一个或多个存储装置。通常,计算机还将包括或操作地耦合到用于存储数据的一个或多个大容量存储装置以从这些大容量存储装置接收数据或向其传送数据,这些大容量存储装置例如磁盘、磁光盘或光盘。然而,计算机不一定具有这样装置。此外,计算机可以嵌入另一装置中。
适于存储计算机程序指令和数据的计算机可读介质包括非易失性存储器、介质和存储装置的所有形式,包括例如:半导体存储装置,例如EPROM、EEPROM以及闪存装置;磁盘,例如内部硬盘或可移动盘;磁光盘;以及CD ROM和DVD-ROM盘。处理器和存储器可以由专用电子电路来补充或包含在专用电子电路中。
为了提供与用户的交互,本说明书中所述的主题的实施例可以在计算机上实现,该计算机具有:显示装置,例如CRT(阴极射线管)或LCD(液晶显示)监视器,以向用户显示信息;键盘和指示装置,例如鼠标或轨迹球,利用它们,用户可以向计算机提供输入。可以使用其他类型的装置来提供与用户的交互;例如,来自用户的输入可以以任何形式接收,包括声学、语音或触觉输入。
本说明书中所述的主题的实施例可以在计算***中实现,该计算***包括:后端组件,例如数据服务器;或者中间件组件,例如应用服务器;或者前端组件,例如具有图形用户界面或网络浏览器的客户端计算机,用户可以通过该图形用户界面或网络浏览器来与本说明书中描述的主题的实现进行交互;或者该后端、中间件或前端组件的一个或多个的任何组合。***的组件可以利用任何形式的数字数据通信或数字数据通信的介质例如通信网络来互连。通信网络的例子包括局域网(“LAN”)和例如因特网的广域网(“WAN”)。
计算***可以包括客户端和服务器。客户端和服务器通常彼此远离并且通常通过通信网络交互。客户端和服务器的关系通过在相应计算机上运行的计算机程序发生,并且具有相互的客户端-服务器关系。
虽然本说明书包含了细节,这些不应解释为对于本发明的范围或权利要求范围的限制,而是可能是具体发明的具体实施例特定特征的描述。各个实施例的环境中在本说明书中描述的某些特征也可以在单个实施例中结合实现。相反地,在单个实施例的环境中描述的多个特征也可以分别在多个实施例中或者在任何子组合中实现。此外,虽然特征可以如上描述为在某些实施例中起作用,但是最初权利要求使得来自要求权利的组合的一个或多个特征可以在一些情况下从组合去除,并且所要求权利的组合可以表示子组合或者子组合的变体。
类似地,虽然在附图中按特定次序示出操作,这不应被理解为要求这些操作以所示或以顺序的次序来执行,也不应理解为要执行所有示出操作来获得期望结果。在某些环境下,多任务化和并行处理可以是有利的。此外,上述实施例中的多个***组件的分离不应理解为在所有实施例中需要这些分离,并且应该知道,所示程序组件和***通常可以一起集成到单个软件产品中或包装到多个软件产品中。
上述计算***仅仅是可用于实现用于处理呼入消息流30的交替处理方法的计算***类型的一个例子。其他实现、增强和变化可以基于本申请中的描述和说明而做出。