管理、录入或重放执行应用进程时的非确定性操作的方法

文档序号:6566464阅读:150来源:国知局
专利名称:管理、录入或重放执行应用进程时的非确定性操作的方法
技术领域
本发明涉及一种特别地通过记录或者外部监视来进行的用于软 件操作的管理方法,该软件操作是在执行在计算机上执行的应用进
程的过程中进行的。这一管理特别地应用于以录入数据(logging data)的形式来记录操作或者根据与先前已录入的执行相对应的给定 执行来重放操作。
该方法特别有利地适用于执行这 一 进程的内部事件的操作,该 进程本身可以是多进程和/或多计算机软件应用的 一部分。
本发明还涉及一种系统,该系统在它所执行的软件应用的运作 管理中实施这样的方法。
本发明的领域是独立的或者在网络中的计算机或者是由 一起工 作的多个计算机形成的计算机"集群"的领域。这些集群用来执行向 用户提供一个或者多个服务的软件应用。这样的应用可以是单进程 或者多进程,并且在单个计算机上执行或者例如作为MPI ("消息传 递接口")型或者"共享式存储器"型的分布式应用而分布于多个计算 机上。
特别地,本发明实现了例如通过称为中间应用的另 一软件应用 (例如"中间件"型的应用)在集群内进行对称为主应用或者主要应 用的这种应用的运作管理。这一运作管理除可以包括其它操作之外 还可以包括如下操作在主要节点内或者与称为辅节点的其它节点 相协作,对这一应用的全部或者一部分进行复制、重新分布、可靠 化(reliabilization )或者跟踪或调试。
背景技术
在这一操作管理的背景下,通常有用的是录入主要应用或者它 的进程之一的运作,即记录代表这一运作的数据,使得能够重构执 行。随同主要应用执行一起,这一数据随后以录入数据的形式来生 成并且被发送到一个或者多个辅节点以供存储和备份。
例如为了具体地跟踪和研究主要应用的运作,于是有可能在受
一运作。
另外作为例子,如果主要应用经历故障、特别是硬件故障,则 有可能在辅节点上创建新的备用应用以便替换主要应用所提供的服 务。然后可以在已知状态下、例如在先前记录的重启点状态下创建 这一备用应用。根据主要应用的录入数据,于是有可能强制备用应 用重构直到故障时刻为止主要应用的执行。在这一重构或者重放之 后,备用应用在与直到最后事件为止的应用相同的状态下,其录入 数据已经在主要节点外部被接收。如果已经录入和发送在故障之前 的所有事件直到发生故障为止,则备用应用随后可以进行接管而对
用户的服务几乎没有中断或者完全没有中断。
然而目前很多现有应用不具备这样的管理功能,并且修改它们 以便向它们添加这些功能将过于复杂和昂贵。
包括在计算机或者主要节点的系统软件中实施这些功能的解决 方案呈现出一些严重的缺陷,比如错误风险、在网络内的不稳定或 者不兼容以及对于系统软件领域特殊技能的要求。
此外,本发明的发明人提出 一 种包括由如下中间应用接管这些 管理功能的解决方案,该中间应用主要在用户存储器空间中执行并 且在系统软件本身内仅需少量修改。
然而,在这类解决方案中,除其它方面之外,就主要应用本身 的执行以及所用通信网络而言,录入数据的创建和处理以及它从主 要节点传输到辅节点代表了繁重的计算量。在现有技术中,主应用
于是经历这样的性能损失通常不能在开发利用情形下令人满意地 使用这一运作管理。
事实上,为了能够以连贯的方式或者甚至完整的方式来表现主
要应用的执行,待记录和待传输的事件通常非常之多。另外,大多 数这些事件对应于执行起来很快的操作,特别是在主要节点的硬件 或者软件资源内部的事件,例如系统调用,该调用请求分配信号标
志(semaphore)或者读取存储器中的数据项。
对照而言,对于这些事件中的各事件,录入数据的生成和存储 以及传输是时间长得多的操作,特别是对于内部事件更是如此。
事实上,录入各事件就其本身而言是一种需要至少一个并且通 常是多个软件操作的过程,各软件操作构成了至少与已录入事件本 身相等的负荷和工作时间。根据内部事件的类型和实施方式,对于 各事件,该录入使有所增加的负荷或者工作时间增加100至IO,OOO 倍。
另外,用于向计算机外部进行传输的硬件和软件协议具有相对 于已录入事件的数目而言通常不良的性能,这也是对网络使用的干 护G以及主应用的性能瓶颈。
存在某些解决方案,其允许特别是通过不录入非确定型事件来 减少待录入的事件数目。
如果事件或者构成该事件的操作、特别是软件操作的执行结果 ^f又耳又决于在它的初始时刻存在的初始状况,则它可以纟皮限定为确定 性的。更特别地,在如这里描述的管理单一操作或者执行或者运作 的背景下,如果操作从发起它的进程的观点来看是确定性的,即如 果它向这 一 进程发送的结果仅取决于这 一 进程的初始状态,则可以 将该操作称之为确定性的。类似地,连续一串确定性操作可以将其 自身构成为确定性序列。
在运行应用进程时,所执行的很多操作是确定性的,特别是在 内部操作之中更是如此。例如,如果数学或者逻辑内部操作仅影响 如下这些资源,则它们往往是确定性的,这些资源形成这一进程的 初始状态的 一 部分并且该进程独自就可以修改这些资源。
反言之,向共享式资源应用的一些操作相比于这样的进程而言 通常是非确定性的。例如,如下请求可能是非确定性的,该请求针
对覆盖与其它进程共享的存储器区的"lock (锁定)"或者共享式信
号标志的归属。事实上,其结果,即是否获得这一锁定或者这一归 属可能取决于有时已经保留或者还没有保留这 一 资源的其它进程的 状态或者动作。
然而,非确定性事件的重放以及特别是录入仍然构成性能损失, 而减少该性能损失可能是有用的。特别地,在运行主应用的同时, 录入操作代表了操作节点的工作量,并且可能是由于中间应用的动 作而造成性能下降的起因。

发明内容
本发明的一个目的在于克服这些缺陷中的所有或者一些缺陷。
特别地,本发明的目的在于获得
-减少因内部事件的录入或者处理而生成的工作量;
-减少待传输的录入数据的数量;
-减少非确定性事件的数目,在该非确定性事件中必须存储结果 以便能够产生赋予同一结果的重放。
本发明提出 一种用于管理非确定性软件操作的方法,该非确定 性软件操作是在由至少 一 个计算机执行的称为受管理的进程的应用 进程的单一操作内的程序指令所发起的,在该情况下所述操作的表 现在于向所述受管理的进程发送称为实际结果的至少一个结果数 据。
这一方法包括如下步骤
-基于受管理的进程的状态或者如它在所述操作之前所属于的 应用的状态来进行称为预测函数的确定性软件处理,以便提供很可 能与实际结果相对应并且构成针对所述操作的预测结果的值;
-进行比较测试以确定预测结果的值是否对应于实际结果的值;
-针对所述受管理的操作执行补充管理阶段,这一补充管理视先 前测试的结果而定。
本发明因此提出执行对非确定性操作的管理,该管理取决于这
些操作是否顺应已知或者可计算的确定性预测,该预测能够被视为 一类可再现顺应性网格。因此有可能在操作结果顺应这一 网格的情 况下减少管理工作量。
这 一 收益关于录入操作而言特别地敏感,这些操作必须不但被 记录于主要节点中而且通常被发送到外界,并且在利用主要应用的 过程中也是如此。
本发明由此产生一种待录入的操作或者事件的预测性或者试探 性压缩形式,并且可以减少需要整体管理的这些操作或者事件的比 例。事实上,如果操作如预测的那样表现,则它发送的结果实质上 不再需要被录入,因为可以根据可以在适当的时候重新使用的已知 方法在以后找到它的值。
本发明特别地提出管理在已录入进程的执行序列中包括的称为 已录入操作的操作,该已录入进程在称为主要节点的计算机中被执 行,这一管理以录入数据的形式来记录所述已录入操作,该录入数 据实现辅节点所执行的重启进程以重放与已录入操作相对应的称为 重放操作的操作,并且这一管理向重启进程发送与已录入操作的结 果相对应的结果,
在实际结果与预期结果不对应即非预测操作的情况下,补充管 理阶段于是包括存储录入数据,该录入数据包括结果数据,该结果 数据代表了用于已录入操作的实际结果的值的结果数据。
因此有可能在非预测结果的情况下在这一录入数据的将来的使 用过程中重构该序列的准确寺丸行。
在序列的录入过程中,用以测试操作以确定它们的确定性性质 或者非确定性性质的阶段代表了附加的负荷。然而,根据在这一序 列内正确预测的某 一 比例的操作,不言而喻由于不录入所预测的结 果而实现的节省可能变得显著地大于由于这一测试而带来的超负 荷。
在相反情况下,即就其而言实际结果对应于预期结果的预测操 作,本发明实现了避免将来自预测操作的结果的数据存储和/或发送
到外界,而这种发送会造成工作量增加。
可选地,有可能提供对录入数据的存储,该录入数据例如以排 序号的形式包括用于已录入操作的标识数据。这一标识数据可以保 持对这一操作的执行的跟踪以便能够在这一 录入数据的将来使用中 包括这一操作。
由于预测函数是确定性和已知的,所以可以根据操作的初始状 况在重放过程中确定地重新计算结果。如果在重放过程中的结果没 有不符合该同 一预测,则这一预测的结果可以用来对#:作的结果进 行"强制",使得重启进程实际上收到与在录入过程中相同的结果。
根据本发明,可以录入确定性操作而无需存储或者发送操作的 结果,这在主要节点的工作量方面是一种节省。
更特别地,该方法可以记录已录入进程操作的称为已录入序列 的序列,所述序列包括发送与预测结果不对应的实际结果的称为非 预测操作的至少一个操作。这一记录于是包括存储至少一个日志文 件,该日志文件使重启进程能够重放与已录入序列操作相对应的操 作的称为重放序列的序列。在这一背景下,所述日志文件包括如下 数据,该数据代表所述非预测操作的称为已录入结果的实际结果、 并且在与所述非预测操作相对应的重放操作完成时可以用来使重启 进程包括与所述录入结果相对应的结果。
根据一个实施例,在已录入进程序列的录入过程中,通过递增 与至少 一 个预测和非确定性的操作相对应的标识数据来录入这 一 预
测操作而不在日志(JSeml)内存储如下录入数据,该录入数据代表 所述预测和非确定性的已录入操作(EVInD)的实际结果(DR)。
可选地,可以在对非预测操作所进行的补充管理阶段过程中重 置递增序列。
用于录入至少 一个非预测操作的、在日志中存储的录入数据由 此可以包4舌
- 一方面包括标识数据,该标识数据代表与所述非预测操作相对 应的排序数据的值;以及
-另一方面包括结果数据,该结果数据代表所述已录入操作所发 送的实际结果。
有利的是,本发明特别地提出在日志中记录至少一个已录入序 列,对于构成所述序列内至少一个类型的非确定性内部事件的各已
录入操作,这一记录包括如下步骤的迭代重复
-基于进程或者它的应用在所述操作之前的状态来进行确定性 软件处理以提供很可能与实际结果相对应并且构成针对所述操作的 预测结果的值;
-进行比较测试以确定预测结果的值是否对应于实际结果的值;
-在非预测结果的情况下,在日志中存储如下录入数据,该录入 数据 一 方面以关联方式包括与在进行中的操作相对应的排序数据的 值而在另 一方面包括结果数据,该结果数据代表由在进行中的操作 向已录入进程发送的实际结果的值。
有利地,只有非预测结果才引起对结果的存储。
根据一种变型,排序数据可以仅在具有预测结果的操作的情况 下才被递增而在具有非预测结果的操作过程中被重置。
与录入相并行或者相独立,根据本发明的方法实现了对如下操 作的称为重放序列的序列的管理,这些操作形成称为辅节,^的计算 机中执行的重启进程的一部分。
通过使用与录入的预测函数相同或者相对应的重》文预测函凄t, 本发明由此产生无数据丢失的预测性或者试探性压缩/解压缩形式, 该形式可以在重放过程中提供与在录入过程中相同的结果以及减少 待存储和发送的录入数据的数量。由此可以使用录入数据来以重启 进程所重放的操作形式执行对已录入操作的重放。
这 一 重启进程可以例如从它的 一 个或者多个可执行文件来自行 起动、然后执行。在这一重放的执行过程中,由此每当重放操作的 特性要求这样做时重放操作就向它们自己提供结果。
根据本发明的管理由此可以使用录入数据以便在非确定性重放 操作的各情况下使重启进程将与在录入过程中返回的结果相对应的
称为强制结果的结果纳入考虑之中。
根据本发明,对于在录入时间处的至少 一 个非预测非确定性操
作,补充管理阶段由此包括
-在录入数据中读取称为已录入结果数据的结果数据,该结果数 据代表了与正在重放的操作相对应的在操作的录入过程中返回的结
果;
-截获重放操作的结果并且将强制结果而不是源自于重放操作 的结果转发到重启进程。
因此,每当重启进程在它的可执行文件内执行如下指令、该指 令执行在录入过程中的非预测操作时,补充管理阶段然随后实现对 结果的检查或者强制以便使它顺应于录入数据并且由此产生与已录 入进程的执行相顺应的重启进程的执行。
另一方面,当在录入过程中已经正确地预测操作的结果时,即 使该操作为非确定性的并且它的实际结果不确定,录入数据仍然可 以不含结果数据。
对于已经在录入过程中预测过的至少 一 个非确定性操作,补充
管理阶^殳因此可以包括如下步骤
-进^f于与用于录入所述才喿作的预测函数相对应的称为重》丈预测 函数的确定性软件处理,并且提供针对重放操作的预测结果;
-截获重放操作的结果并且将预测结果作为强制结果而不是源 自于重放操作的结果转发到重启进程。
因此有可能即使没有存储在录入过程中已经获得的实际结果也 仍可找到该实际结果、并且有可能检查重放结果是否顺应实际结果 或者如果不顺应则对该重放结果进行强制。
此外,对于就其而言录入数据不包括已录入结果的各操作,补 充管理阶段包括递增代表所述重放操作的排序值。
因此,该递增实现了监视重启进程的进度而不干预它的运行, 只要对于维持顺应的运行既没有用也没有必要。因此,"如果没有 必要就不会干预,,这一事实对于进程或者对于管理重放的应用或者
对于执行它们的计算机而言是一种工作节省。
特别地,在序列包括预测操作和非预测操作的情况下,有可能
相同,并使用数量减少并且其存储需要较低工作量的录入数据。
根据本发明的方法可以特别地被实施用来管理在受管理的序列 内产生至少一个类型的事件的所有操作。
由此有可能执行如下录入或者重》文,该录入或者重放代表了进 程相对于某些特定项如另一进程、用户或者特定资源而言的所有执 行。
另外,这一方法可以用来管理所有如下4喿作,这些操作被标识 为本质上为非确定性或者发送被标识为本质上为非确定性的结果。
4b方法相组合。
例如,在只有确定性操作才不被录入的解决方案内,由此有可 能通过仅录入其余操作的 一部分、即仅录入非确定性和非预测的操 作来甚至更多地优化工作量。
更特别地,根据本发明的方法管理所有如下操作,这些操作在 受管理的序列内产生在受管理的进程或者它的应用或者执行它们的 计算机内部的非确定性事件。
与对外部事件的管理相配合,本发明因此可以管理进程的整个
执行,特别地以便在开发利用过程中实现录入、同时限制受管理的 应用的任何减緩。
这样的管理如录入或者重放有利地应用于至少一个如下操作, 该操作由从可执行文件执行的指令来发起并且包括对在所述可执行 文件外部的称为原例程的例程的调用。
根据该方法的一个实施例,为了实现灵活的并且4又略带侵入式 的实施方式,所述指令的执行随后产生对称为修改例程的例程而不 是所述原例程的调用,这一修改例程产生或者发起对该方法的实施。
修改的例程可以特别地包括至少 一 个如下指令,该指令在系统
软件内被执行并且对至少一个录入或重放软件代理进行调用、保证 该方法的实施并且在受管理的进程或者目标进程的计算机用户存储 器空间中被执行。
由此有可能例如以如下方式基本上在用户空间内产生对这一管 理的实施,该方法是为了最小化在系统软件中的干预并且限制错误 风险以及在网络内的不同计算机之间的异质性风险。
具体而言,修改例程包括测试指令,该测试指令检验已调用该 测试指令的指令是否是在录入或者重放的背景下执行的,这一测试 由此分别影响对录入类型的或者重放类型的管理代理的调用。
因此可以通过相同代理以提高的灵活性,例如对于录入或者重 放都通过单个中间应用和/或单个内核模块,来产生根据不同的使用 而进行的对管理的实施。
预测函数可以使用不同类型的软件处理,特别是以进程、它的 应用或者它们独自就可以修改的资源的状态为基础的软件处理。
因此,在一个特定实施例中,根据本发明的方法使用至少一个 如下预测函数,该预测函数包括视先前在受管理的进程的执行过程 中发生过的至少一个类型的一个或者多个外部事件的特征而定的确 定性软件处理。
根据 一 个特定特征,根据本发明的方法通过使用第 一预测函数 来录入至少一个第一操作而通过使用第二预测函数来录入第二操作。
通过使用数个不同预测函数,于是有可能使录入方法适应于环 境以便通过针对各操作的重放而使用与用于录入对应操作的预测函 凄史相同的预测函数来优化效率。
才艮据一个变型,该方法^f吏用通过在多个给定函凄史内的确定性选 择或者组合、特别是根据受管理的操作的类型(例如根据它的性质 或者根据所涉及到的资源)而选择的预测函数。在重放过程中,由 Jt可以与 数的这一选择' 根据另 一 变型,对所用预测函数的选择取决于在录入进程的执 行过程中测量或者计算的变量的变化,例如在录入过程中预测函数 成功率的变化可以确定这一函数或者它的一些参数的变化。
根据本发明,日志文件于是可以包括如下数据,该数据代表对 预测函数的至少 一 个选择或者对影响这种选择的参数的选择。
在录入过程中存储这一变化的特征和/或时刻于是将实现在重放 过程中同一执行点产生同一变化。
与仿真或者重放函数的改进相联系,本发明的另一目的在于改 进对应用或者这些进程中至少 一个进程的运作管理。
进程的运作管理,并且包括如下步骤
-录入在所述已录入进程从称为重启点的给定点开始 一直到称 为中断点的点之间的执行过程中发生的至少 一个给定类型的所有事
件,并且存储源自于所述录入的日志;
-从在与已录入进程的重启点状态相对应的状态下的重启进程 开始,重放来自所述重启进程的所述日志中的所述事件,由此使重 启进程达到与已录入进程在中断点处的状态相对应的状态。
特别地,可以捕获并且以重启点数据的形式存储已录入进程在 重启点处的状态,该重启点数据用来将重启进程恢复到重启点在向 该重启进程应用重放步骤之前的状态。
根据本发明的方法可以特别地用来产生对包括外部事件以及内 部事件的 一 连串事件的重放。本发明由此提出通过将这些外部事件 各自注入或者仿真到重启进程中来进行外部事件的重放。在执行重 放时跟随各外部事件的内部事件由此响应于紧接在它们之前的外部 事件的发生和/或处理而由重启进程主动地来执行。重启进程由此实 现响应于外部重放代理所发起的外部事件的发生来重放至少一个已 录入的内部事件序列。
利用运作管理函数,本发明的一个目的还在于改进应用运作的 至少一部分或者来自这一应用的至少一个进程的调试工具或者分析
工具或者再现工具。
运作管理因此可以进行例如与称为"被跟踪的应用,,的应用的 调试相联系的对这一应用的寺丸行的监视。这一监一见随后应用于纟皮跟
踪的应用的至少一个进程并且包括如下步骤
-从被跟踪的应用的给定状态起,录入多个连续和相邻的已录入
序列,这些序列构成执行被跟踪的应用时的被研究序列;
-产生受控制的一连串重放步骤,由此产生对一连串已录入序列 的受控制的执行,因此根据受控制的节奏来产生对被研究序列的重 放。
在运作管理函数内,本发明的一个目的还在于改进用于4吏应用 或者这些进程中至少一个进程的工作可靠化的工具。
可以从应用向它的客户端所提供的服务的观点来看、特别地通 过维护该应用的操作的已改进的连续性来获得这样的可靠化。在发 生故障时,这一连续性可能是整体上的,即客户端不必重启最少操 作以获得同一服务。这样的连续性还可以是部分的,即通过尽可能 地减少客户端为了获得同一服务或者这一服务的一部分而将必须重 复或者额外实现的操作的数目和/或复杂度。
在这一目的内,本发明提出实施如下运作管理,该运作管理用 以使在称为集群的通信多计算机架构的称为操作节点的至少 一个主 要节点中执行的称为可靠化应用的第一应用的运作可靠化。
这一可靠化包括在称为备用节点的第二集群节点内将称为备用 应用的第二应用恢复到与可靠化应用在重启点处的状态相对应的状态。
一见实施例而定或者一见情形而定,可以在没有任何故障时并且作 为预防措施来完成恢复,或者可以在检测到故障之后根据先前存储 的数据来执行恢复。
这一可靠化还包括如下步骤
-录入可靠化应用从重启点起的执行,并且在操作节点外部在至 少一个日志文件中存储已录入事件;
-检测在操作节点内的故障;
-使用所述日志文件在备用应用中重放自重启点起在可靠化应 用中录入的事件,由此将备用应用恢复到与可靠化应用在最后的已 录入事件之后的状态相对应的状态。
本发明还提出如下系统,该系统包括实施这样的管理方法的计 算机或者在一起工作并且包括至少一个这样的计算机的计算机网 络。
更特别地,本发明提出这样一种使用如下中间件型应用的网络, 该中间件型应用实施根据本发明的方法以管理在所述网络内执4亍的 至少一个应用的运作。
本发明特别地适用于如下"中间件"型环境,该"中间件"型环境例 如产生分布于一个或者多个网络中的网络和/或应用管理系统。


根据绝非限制性的对方法实施例的具体描述以及附图,本发明
的其它特征和优点将变得明显,在附图中
-图1是图示了实施本发明的中间应用的功能架构的符号-图2是概括了用于在操作节点上录入事件的组织的符号-图3是图示了从操作节点录入外部事件并且在辅节点上对其 进行备份的操作的符号-图4是图示了从操作节点录入内部事件并且在辅节点上对其 进行备份的操作的符号-图4a和图4b图示了对来自内部事件序列的录入数据的聚集式 传输的 一种机制的两个操作版本;
-图5是图示了在辅节点上在更新重启应用的同时对已录入外 部事件的重放运作的符号-图6是图示了在辅节点上在更新重启应用的同时对内部事件 的重放运作的符号-图7是在对系统例程的调用过程中使用插入技术将补充指令
插入到所述例程的执行中的符号-图8是图示了用于两个并发进程的内部事件重放的进度的时 间图,其中利用在系统例程中添加补充指令来获得与在录入过程中 相同的进度;
-图8a和图8b图示了为了仅处理非确定性事件而录入和重放内 部事件的操作;
-图8c和图8d是分别图示了通过试探性压缩和解压缩对内部录 入的优化的示-图9和图IO是图示了如下例子的符号图,该例子在操作节点 上的数个并发进程中在两个外部事件之间的内部事件的不同调度过 程中通过试探性压缩来优化非确定性内部事件的录入;
-图11是图示了在"Unix"型的系统中"读"例程的读取操作的非 确定性的符号例程的一个行为的符号-图13和图14是图示了在"Unix"型的系统中"选择"例程和"轮 循"例程从操作系统的两个竟争信道而进行的在应用中的数据接收 操作的非确定性的符号-图15是图示了通过动态语义改变而变得具有确定性的该同一 例程的一个行为的符号-图16是图示了语义变化所用交互的示图。
具体实施例方式
图1图示了实施本发明的中间应用的功能架构。 在集群内,AOP主应用如事务应用特别是通过不同形式的数据 输入和输出向用户或者客户端提供某一数目的服务。在该集群内, 这一应用可以是单任务或者多任务(多进程或者多线程)并且使用 某一数目的资源。特别地,这些资源可以是例如形式为工作存储器 空间、共享式存储器或者数据文件的数据,或者可以是例如形式为信号标志或者互斥体(mutex)的状态指示符。
在一个或者多个计算机上执行主应用,这些计算机形成称为操 作节点OP或者主要节点的节点。在一个或者多个集群节点中的一个 或者多个部分中扭J亍称为中间应用INT的运作管理应用。
才艮据实施例,这一 中间应用可以处理在集群内运作的主应用的 不同方面。这样的中间应用INT可以特别地与"中间件"型的中间集 群管理软件相并行地工作、与这样的中间件相集成或者本身是中间 件形式。
通过这里描述的功能,中间应用INT可以特别地用来产生对集 群内主应用的全部或者一部分的复制。对主应用的复制可以提供可 称为重放应用的另一应用。
特别是与这样的复制相联系的这里描述的功能还允许实施针对 主应用的可靠性特征,或者跟踪或研究这一应用以实施"调试"、调 节或者开发任务。针对可靠性实施的用途将例如包括作为备份或者 替换应用的重启应用。在跟踪或者调试中的用途将例如包括如下文 描述的根据已录入事件的减缓或者受控节奏的事件的录入JOP和/或 重放RSB。
因此,应用于可靠性特征的实施例在这里仅作为非限制性例子 来描述。
在有规律的或者基于事件的、运行将变得可靠的AOP主应用时 的不同点(称为重启点或者"检查点")处,中间应用INT创建或者 更新在称为辅节点或者"备用"SB节点的节点上执行的至少一个重启 应用ASB。
这 一 重启应用例如通过 一 种捕获和恢复应用的复制方法(称为 重启方法)来创建或者更新。所述复制方法包括主应用状态的捕获 操作CAP、接着是这一状态(即它的进程的状态和它所使用的全部 或者部分资源的状态)的恢复操作RES。
在这样的捕获操作CAP过程中,以形成检查点状态EPR的数据 的形式来备份AOP主应用的状态。
主应用的 一 些资源、特别是代表了存储装置如硬盘上的大量数 据的数据文件可以立刻被更新成在数个不同存储介质上的数个副 本,这些副本构成了在镜像盘或者共享盘上的重启数据文件。在这 一情况下,形成检查点状态的数据可以包括构成对这些重启数据文 件的引用的信息。
当检查点设置或者复制是基于直接地或者通过引用重放数据文 件而包括全部执行环境和主应用资源的捕获状态时,所述检查点或 者所述复制可以称为整体性的。
根据检查点状态EPR的数据,中间应用INT可以通过创建或者 更新重启应用ASB来实施恢复RES。可以有*见律地或者在发起事件 时(例如在管理员或者在用于管理集群工作量的机制的请求下)实 施所述恢复。这 一 恢复还可以在借助检测而检测至'j的操作节,泉的故 障之后来实施,重启应用随后能够用作永久或者非永久备份应用。
到一个或者多个重启应用。为了对于客户端而言透明地进行这一切 换,中间应用可以4吏用如下插入方法,该方法通过"元进程
应用迁移到这些重启应用。中间应用还可以z使用如下插入方法,该 方法通过"元进程"来管理虚拟进程标识(虚拟PID),从而允许与这 些重启或者克隆进程的原进程的通信相同地恢复用于这些重启或者 克隆进程的通信。
这些才支术例如可以是在专利FR2 843 210中描述的那些4支术。 除了任何故障之外还可以实施在部分或者全部切换之后的恢复 以便例如分散主应用的工作量或者允许维护操作节点或者网络的某 些单元。
为了使这一故障和/或者切换从客户端的观点来看尽可能地透 明,中间应用记录影响主应用数个检查点的所有或者部分事件,并 且以一个或者数个"日志"的形式来备份它们。
在从检查点状态完成恢复时,重启应用处于在建立所述检查点
时的主应用的状态下。乂人这一状态开始,中间应用^f吏用自所述4企查 点起备份过的日志来使重启应用重新执行或者重放自这一检查点起 在主应用中已经发生的事件。实施这一重新执行或者重放,使得重 启应用达到主应用在最后备份的事件之后这一状态,例如达到紧接 在故障之前的状态。
中间应用还可以针对重启应用例如在这些资源自已恢复的检查 点起已经有变化时来实施这些资源的虚拟化,以便允许该重启应用 运行它的重新执行而不千扰这些资源的实际状态,只要它尚未返回 到与所述实际状态相对应的状态。
在将要在操作节点上录入并且将要在辅节点上重放的事件之 中,在称为外部事件的事件与称为内部事件的事件之间有区别。
在主应用发生时,外部事件被定义为在所讨论的应用外部。因 此,外部事件一皮定义为在应用中通过从这一应用之外而来(即特别 是从它所不控制的硬件或者软件单元而来)的动作或者信息来发起 的那些事件。这些外部事件可以采取数据或者信号输入的形式,例 如硬件接口输入如键盘或者鼠标,或者经由网络到达并且从外界(比 如在客户端-服务器应用的情况下是客户端)而来的数据。最常见地,
不能从该应用的环境来推断或者重新创建这些外部事件。这些外部 事件由主应用加以录入并且可以由重启应用加以重放。
如果所讨论的应用(有时称为目标应用)并入有在除主要节点 以外的节点上执行的单元,则在所述应用中但是在主要节点外部的 事件也可以作为外部事件来处理。
内部事件;^皮定义为在主应用内部或者在执行它的节点内部,例
如形式为由这一应用的进程所接收并且乂人也作为该应用的 一部分的 另 一进程而来的数据或者信号输入。这些内部事件可以直接地或者
代理来^妄收,例如通过配对应用(partner application )或者才喿作系统 的一部分(比如来自Unix型系统的"进程间通信"(IPC)代理)来 接收。这些内部事件可以包括"消息传递事件"或者"套接字"型的接
口 ,该"消息传递事件"例如来自"管道"、"信号队列"或者"消息队列"。 这些内部事件还可以包括"共享式存储器存取"事件,例如信号标志
或者"互斥体"。
在应用正在运行的同时,内部事件例如相比于外部事件而言特 别地多。另外,尤其当录入操作包括网络传输或者在永久介质如硬 盘上存储时,特别是与用于录入操作的时间相比,内部事件对应于 快速执行或者低延时的操作。例如,录入操作可以代表内部事件持
续时间的10至10,000倍的持续时间。
如图2中所示,自检查点起已经发生的事件的录入JOP以与针 对外部和内部事件不同的方式来实施并且#皮分别地备^f分。
通过网络连接到集群的操作节点OP包括支持系统空间的硬件 空间,该系统空间本身支持称为"用户空间"的空间。可以通过参照 OSI模型的 一个或者多个低层来定义的硬件空间特别地包括用于执 行进程、实际存储器和处理器以及通信的硬件设备,比如网卡。通 常,很多外部事件以经由网络而传递的通信的形式经由硬件空间来 中转。
可以参照OSI模型的一个或者多个中间层来定义的系统空间特
别地包括操作系统。这一 系统空间包括各种软件机制和代理,这些
软件机制和代理管理例如形式为Unix系统中的套接字的从应用经由 硬件空间与外界的通信或者管理例如形式为Unix系统中的"管道"或 者IPC的在数个应用进程之间的通信。
可以参照OSI模型的一个或者多个最高层来定义的用户空间包 括作为由节点才丸4亍的如主应用和中间应用之类的各种应用的一部分 的进程。在这一用户空间中执行作为如主应用之类的 一个或者多个 应用的一部分的数个进程Pl、 P2和Pn。这些进程通过来自系统空 间的一个或者多个"套接字"与外部交换信息以及通过来自系统空间 的一个或者多个"管道"在它们自己之间交换信息。这些进程中的一 些进程还同时以受状态资源(未示出)管理的方式来访问"共享式存 储器"资源SHM。
当设置检查点时,中间应用可以起动一个或者多个新日志或者
在正在运行的记录中记录"检查点标记"。
应当注意,术语"用户,,(特别是在"用户空间"或者内部事件日志
("用户日志,,)(稍后描述)的情况下)在这里取"系统空间用户"
的意思。这意味着即使用户空间不可直接地为个人或者与使用节点
的应用通信并且于是将被定义为"客户端"的计算机所访问,这一用 户空间也可为这些应用以及它的才乘作系统所访问。
在称为"内核日志"(参见图2)的由一个或者多个文件KL组 成的日志中备份外部事件。为了实施这一备份,在OSI国际分类的 低级层处在代表这些事件的数据到达节点之后读取它。优选地,在 被解复用之前并且在被"协议栈"处理之前,在系统空间中、例如在 内核中读取这些事件。由于直接地从系统空间内部进4亍这一录入, 所以有可能避免由于对緩冲器的写入以及不必要的上下文改变所造 成的性能损失。
图3更特别地图示了特别是当外部事件采取TCP-IP协议消息的 形式时录入外部事件的操作。主应用在操作节点OP上^L执行并且包 括至少一个进程P1。中间应用首先包括"IplogOP"模块,该模块包括 在操作节点OP上执行的控制进程CtlOP,其次包括"IPlogSB"模块, 该模块包括在辅节点SB上执行的控制进程CtlSB。在这些节点OP 和SB中的各节点上,控制进程配置和管理在所讨论的节点的系统空 间中执行的软件机制或者代理"disp" (DISPP, DISPS)的操作。
在Unix型系统的情况下,所述"disp"代理特别地包括加载到系 统空间中的内核模块。这一 内核模块在系统被引导时或者甚至在起 动待管理或者待变得可靠的应用之前被动态地加载到内核中。乂人功 能结构的观点来看,例如参照OSI层,在IP层之下、特别是在IP 层与视硬件空间而定的"网络设备"层之间插入这一模块。
在根据需要进行发送或者接收的操作下,这一 "disp"代理可以在 消息文件QOP和QSB中截获和存储从网络接收并且发往TCP层的 消息。
在步骤1中,来自客户端、发往进程Pl的消息由在操作节点
OP的系统空间中的"disp"代理接收,该代理在消息队列QOP中保持 它。
在步骤2中,代表接收消息的录入消息由"DISPP"代理从主要节 点发送到辅节点SB,其中DISPS代理在接收消息队列QSB中接收 它。
操作节点OP可以特别地通过使用与用来与客户端通信的网络 设备不同的网络设备、通过分立局域网(LAN)与一个或者多个辅 节点SB通信。
这些辅节点中的数个节点还能够根据RFC 1112标准预订"多播" 型的地址以j更与操作节点OP通信。例如按照RFC 1112的定义("Host Extensions for IP Multicasting")(针对IP多播的主扩展),将多播 地址用作范围在224.0.0.0与239.255.255.255之间的IP地址,由此 允许操作节点仅发送一次同时发往多个辅节点的消息而不会因向网 络中的所有地址发送的传输而使网络超负荷。优选地,从节点OP发送到另一节点SB的录入消息应当以它们
的原有形式包含在物理层级接收的所有一个或者多个分组。也就是 说,它包含发往主应用的所有数据以及网络数据如以太网、IP和TCP 报头。
在步骤3中,辅节点SB将确认消息发送到操作节点OP。
在步骤4中,在操作节点OP上并且一旦已经接收到对应的确认, 就从消息队列QOP获取消息并且将该消息发送到TCP层。
在并行步骤4,中,辅节点SB在日志如内核外部事件日志KL中 记录消息并且从接收消息队列QSB中取出它。
在步骤5中,在操作节点OP中,主应用的PI进程读取"套接字" 单元中的消息,然后对它进行处理以便进行它的纟乘作。
由于主应用在辅节点SB的确认之后才考虑进入消息,所以本发 明保证了未录入的消息不能被应用所处理。例如,因此这样的未读 消息可以通过TCO协议的重新传输功能来获取。
如果要在内核日志中设置检查点标记,则在辅节点中的控制进
程CtlSB就在那里记录代表所述检查点标记的数据。
内部事件的内容直接地取决于局部环境,即在节点内取决于先 前外部事件的内容以及取决于在处理器内调度的问题或者管理在节
点内并行工作的多个处理器或者计算机的问题。事实上,在多数情 况下,只有这些事件的次序才影响应用的后续行为。
中间应用INT被约束为录入这些内部事件的次序而不记下各内 部事件的细节或者参数。这一选择由此允许减少将要为这些内部事 件的录入JOP而存储的数据量并且由此最小化因这一录入而在操作 节点和主应用中引起的性能损失。
在称为"用户日志"的由一个或者多个文件组成的日志(见图2) 中备份内部事件。
如图4中所示,主要节点OP和辅节点SB经由硬件和/或软件高 速互连(HSI)来通信。所述HSI系统允许在主要节点的OP录入进 程PlogOP与辅节点的SB录入进程PlogSB之间的数据传送,而这直 接地通过旁路这两个节点的所有或者部分操作系统来实现。可以通 过使用现有网络接口控制器如网卡及其控制软件、遵循已知的手段 来实施这样的HSI系统。还可以通过与在集群内部的网络的其余部 分相并行或者相组合地使用高性能网络设备来实施这样的HSI系 统。
由中间应用的录入进程PlogOP在操作节点的OP用户空间中详 查和读取内部事件。这一进程随后经由高速连4妄系统HSI向辅节点 的录入进程PlogSB发送代表这些内部事件和/或它们的发生次序的 数据。然后在形成"用户日志"的一个或者多个文件中备份这一数据。
如果将要在"用户日志"中设置检查点标记,则辅节点的控制进程
PlogSB就在那里记录代表这一4企查点标记的数据。
优选地,录入进程PlogOP在内部事件"返回"时、即当它的结果 已经产生但是尚未发送到请求它的执行的主应用进程时读取它们。
例如通过截获输入/输出系统调用(例如对"管道的"访问)以及
对用以锁定共享式存储器段SHM的操作的响应来完成这一读取。
可以通过在由系统提供并且由应用调用的所有或者部分例程的 内容中插入记录指令("记录探针")来实施这一截获。如稍后具体 说明的,通过使用运用"元进程"的动态插入技术,以附加指令的形 式来添加这些记录探针,在如图7中所示原例程代码的结尾处形成 结尾部分(epilogue)。
内部事件日志"用户日志"由此包括各自代表内部事件的一连串 记录。这些记录可以在单个文件中被录入,并且于是将包括所讨论 的资源和/或进程的标识。它们还可以记录于数个文件中,例如4十对 每个资源或者每个进程或者这二者的每个组合记录一个文件。
对于与给定资源相对应的文件,这些记录中的每一个特别地包 括如下字段
-所讨论的事件在各资源所特有的序列中的序号,该序号随着各 新事件或者在所述资源上的操作而递增;
-时间戳信息,例如代表自关于这一资源的最后事件起的逝去时
间;
-事件类型,例如针对输入/输出资源("I/O")的"读"或者"写" 或者针对信号标志的"锁定"或者"解锁";
-结果,即在输入/输出操作的情况下为一个值或者在"锁定"的 情况下为获得独占性访问的 一个进程的标识。
这一结果将特别地用来例如在辅节点中所恢复的重启或者备用 应用对日志中的事件的重放过程中实施资源虚拟化。所存储的结果 随后将构成将被强制作为在重放过程中进行的I/O操作请求之结果 的值或者构成在获得"锁定"的任务的情况下的进程的虚拟标识(虚 拟ID )。
为了限制由于从操作节点发送录入数据到一个或者多个辅节点 而造成的性能损失,聚集对代表数个内部事件的数据的发送是有用 的。
为此,中间应用可以4吏用例如由操作节点OP的称为主要录入进
程的录入进程PlOgOP实施的数个不同方法的组合。
应当理解,应用的内部变化对外界而言(例如对它的客户端而 言)是不重要的,只要这一操作没有发送任何信息到外界。如果曰 志不包括自已录入主应用所发送的最后的外部消息起已经发生的内 部事件,则从检查点和所述日志恢复的重启应用将不会造成它为外 界提供的服务的任何中断。
根据第 一方式,这一主要录入进程PlogOP如内部录入数据出现
的那样但是在异步模式下并且根据传输可用性来发送它而不阻断主 应用运作,只要主应用运作不发送外部消息。在主应用接下来发送 外部消息时,检测装置向主要录入进程警告这一点,该主要录入进 程随后阻断或者挂起这一外部消息的发送并且可能阻断或者挂起主 应用的一个或者多个进程的执行。然后维持这一阻断直至所有内部 录入数据都已经通过这一异步传输来发送或者直至它已经收到针对 所述数据的回执。
根据第二方式,主要录入进程PlogOP在緩沖器或者"高速緩存" 中存储代表数个连续内部事件的内部录入数据而不立即将这些数据 发送到辅节点的录入进程PlogSB。它仅在这些数据的数目达到i殳定 阈值时或者当应用必须发送称为外部消息的消息到外界(例如发往 客户端或者外部进程的数据或者信号)时才发送它们。在主应用接 下来发送外部消息的过程中,检测装置向主要录入进程警告这一 点, 该主要录入进程随后阻断或者挂起这一外部消息的发送并且可能阻 断或者挂起主应用的一个或者多个进程的执行。然后维持这一阻断 直至主要录入进程已经向辅节点发送高速緩存中的其余录入数据或 者直至它已经收到针对这一数据的回执。
在这两种方式下,已经发送外部消息这一事实构成了发出事件, 该事件构成了可以称为阻断的 一类事件,即该事件类型要求在这一 事件的执行之前关闭先前事件的录入。根据实施例,最常见地,除 了外部发出事件之外,也可以将其它类型的事件类型选择为阻断。
图4a图示了在主要节点OP外部的传输之前通过聚集用于多个
内部事件EVI的录入数据DJ来进行的对事件日志的操作。
在步骤1中,录入进程PlogOP在已录入进程Pl的运行过程中 检测事件EVI的发生。
在步骤2中,录入进程PlogOP检查所检测的事件EVI是否为必 须浮见为阻断的类型。
在步骤3中,如果事件EVI不是阻断类型,则这一事件的录入 产生录入数据项DJ。
在步骤4中,这一录入数据项DJ在等待下一事件的检测之前以 构成緩冲器日志JSlLocal的有序结构而存储于主要节点OP中。
在阶段5中,如果检测的事件EVI是阻断类型,则录入进程 PlogOP实施如下阶段,该阶段关闭先前在緩沖器日志JSlLocal中录 入的内部事件的运行序列。
这一阶段5包括步骤6,其中挂起已录入进程PI的执行,从而 使关闭阶段5令人满意的执行未决。
这一阶段5还包括步骤7,其中主要节点的录入进程PlogOP将 緩沖器日志JSlLocal的内容发送到辅节点的录入进程PlogSB,该录 入进程PlogSB将它存储于与检测的事件EVI有关的日志JSeml中, 接着是先前的数据。主要录入进程PlogOP随后继续直接录入所检测 的事件EVI,如果这一事件也是内部事件则重启缓冲器序列。
在图4b中所示的变型中,内部事件的緩冲可以通过可能不同于 阻断型事件的多种类型的事件来发起。这于是涉及到发起类型的事 件。单一类型的事件可以选择为仅阻断类型或者仅发起类型或者兼 而有之。
在这一变型中,在检测事件的步骤1之后是步骤bl。在这一步 骤M中,如果检测的事件EVI是被视为发起的类型,则主要录入进 程PlogOP检查用于在緩冲器存储器中录入的当前序列SEQC是否在 进行中,而如果不是这种情况则发起一个序列SEQC。
在后续步骤b2中,它测试用于在緩沖器存储器中录入的这样的 当前序列SEQC对于检测的事件EVI而言是否在进行中。
在步骤b3中,如果没有当前緩冲器序列SEQC对于这一EVI事 件而言是活动的,则它的结果作为录入数据项DJ来录入。
在步骤b4中,于在前录入数据项之后,所述录入lt据项DJ被 发送到辅录入进程PlogSB,该录入进程将它存储在那些在与检测的 EVI事件有关的日志文件JSeml中在前的内容之后。主要录入进程 PlogOP随后等待新事件的^r测。
根据步骤b2,如果当前序列对于检测的事件EVI而言是活动的, 则这一事件的录入如图4a中所示那样继续。
当中间应用想要将所有或者 一 些服务从主应用切换到重启应用 时,它通过在脱离4全查点状态的辅节点中重启这一重启应用来开始, 随后实施自这一在后检验点起录入的事件的重放。
特别地,对于由事件驱动(即因发起事件(外部)而驱动)的 主应用,例如事务应用,以对于外部事件和内部事件来说不同的方 式来实施恢复重》文。
这样的运作对于应用而言意味着它包括至少 一 个进程,该进程 可以保持等待接收外部事件并且在此时通过实施包括内部事件的梯: 作来进4于反应。
重放由此包括向应用主动提供已录入的外部事件,以及进行响 应于在重放过程中由重启应用自身创建的内部事件而提供已录入答 复的纟皮动响应。
图5图示了在构成外部文件或者"内核日志"的一个或者多个文 件KL中录入的TCP消息型外部事件的重放RSB的才喿作。
所述内核日志KL由重i文进程PRE使用,该重》文进程属于中间 应用并且在辅节点SB的用户空间中被执行,以i更将先前已录入的 TCP消息重新注入到重启应用的进程PB1中。
为了实施这一重新注入,中间应用INT包括或者4吏用例如以软 件机制或者代理"ipfilter"的形式插入于TCP消息接收层中的软件机 制或者代理,该软件机制或者代理包括在IP层与TCP层之间的功能 内核模块。辅节点还包括用于BL网络的本地环路功能,其中对该功
能的访问通过接口来"映射"到系统中,以便可由用户空间进程访问。
与在操作系统如Unix中由软件实施的虚拟环回接口相对照,这一环 路BL可以特别地包括在硬件空间内的物理设备,这允许它在IP层 的底部重新注入数据。
在步骤1中,重放进程PRE读取在"内核日志"KL的文件中录入 的消息。
在步骤2中,重放进程PRE将这一消息注入到网络本地环^各BL中。
在步骤3中,这一消息由IP层接收,该IP层经由"ipfilter"代理 的i某介作用将它发送到TCP层以供处理。
在步骤4中,如果TCP层向网络发送回执,则网络将被"ipfilter" 代理过滤或者阻断。
在步骤5中,在已经发送消息到TCP层之后,在已经收到它的 回执(如果有的话)之后,"ipfilter"代理向重放进程PRE发送如下 信号该消息确实已经被TCP层接收或者处理。
在步骤6中,重启应用进程PB1从TCP层接收消息,并且实施 对该消息中包含的 一 个或者多个分组的异步读取。
在整个重放过程中,"ipfilter"代理将重启应用与网络相隔离,同 时防止所有外部消息一直到达TCP层并且同时防止重启应用所发送 的所有消息到达IP层,这些对于这一应用而言是透明地进行的。
在重放应用内,为了实施在两个重放的外部事件之间发生的内 部事件的重放,中间应用允许重启应用自行运行,同时为它虚拟化 有关资源,由此实施被动重放。重放进程PRI随后检测关于给定资 源而言构成内部事件的各操作,由此强制所述资源采取已经被录入 的行为,由此向重放应用发送在这一录入过程中为所述事件而存储 的结果。
图6至图8图示了在如下情况下内部事件的重放RSB例子,其 中该例子包括来自重启应用的两个进程PB1和PB2的操作,该操作 请求信号标志SEM1以便获得对共享式资源如共享式存储器区的相
互独占性访问。
在辅节点SB上的恢复过程中,这两个进程PB1、 PB2基于构成 用户日志的文件来实施重^:。在它们的重》文过程中,重启应用的执 行使这些进程中的各进程进行对与在内部事件日志-"用户日志"中包 含的日志文件JSEM1相对应的单个信号标志SEM1的调用。
通过使用借助"元进程"的动态插入技术在由系统所提供并且由 应用所调用的所有或者部分例程的内容中添加附加指令来实施这些 访问操作的检测以及呈现它们的响应。这样的技术例如可以是在专 利FR 2 843 809中描述的技术。特别地,可以在实施来自原例程的 功能的代码之前聚集这些指令,并且这些指令由此形成前序程序 (prologue),或者在这一代码之后聚集这些指令,并且这些指令形 成收尾程序(epilogue)。
图7由此图示了在例程R内插入前序程序和收尾程序,由此给 出1奮改的例程RM。在这一例子中,应当注意,同一》务改的例程RM
在应用的可执行文件的执行过程中,进程P执4亍一行调用例程R (例如来自"P0SIX.4"标准的例程"sem-wait")的代码,该代码-清求 对给定信号标志的定位以便获得对共享式存储器中给定区域的相互 独占性访问。在多线程应用的情况下,这可以包括实现相似作用的 指令,即来自"POSIX线程"标准的"pthreacLmutex—lock"。
在系统被引导时或者在应用的可执行文件之前加载到系统中的 插入代理META截获对系统的原例程R的调用并且将它转发到修改 的例程RM。这一修改的例程包括在实施前序程序的指令之后并且在 实施收尾程序的指令之前的实施或者调用原例程R -"sem一wait"-的 指令。
这些补充指令可以特别地包括来自如下类型的算法
对于前序程序
if (replay) check(Jseml)
对于收尾程序
if (replay) endcheck(Jseml) else record(result, Jseml)
指令"if(replay)"测试如下条件,该条件表明应用是否在实施重放 的过程中。
在相反情况("else")下,这意p未着应用正在正常地纟皮纟丸行并且 因此必须视为主应用。收尾程序随后执行函数-"record(result, Jseml)"-该函数是如先前提到的记录探针并且参与内部事件的录入, 同时在日志"Jseml"中存储结果"result"。
当"sem—wait"例程在使用"Jseml"日志的重放过程中被重启应用 调用时,在实施系统的原"sem—wait"例程之前执行前序程序。
图8代表了时间流程图,该流程示了这一修改的例程RM 的如下操作,该操作用以实施根据在内部事件日志"用户日志"中包 含的JSEM1日志来重放两个进程PB1、 PB2。根据所讨论的信号标 志SEM特有的递增序列弁OP来对在JSEM1日志中录入的各事件进 行编号。与这些编号弁op中的各编号相关联,JSEM1日志包含在录 入过程中已经调用与所述JSEM1相对应的4言号标志的进程的标识 (PID)。
由于并行^l行两个进程PB1和PB2,没有必要以在信号标志的 日志JSEM1中存储的次序来进行它们使用"sem—wait"功能对SEM1 信号标志的相应调用。
当标识符为"id2"的进程PB2在重放过程中调用SEM1信号标志 时,前序程序随后在步骤21中以所述同一进程PB2的名义来执行指 令"check(Jseml),,。这一函数-"check(Jseml)"-在JSEM1日志中读取与 序号OPSEM1的当前值相对应的行,也就是行"#1: idl"。
这一"检查"函数将PIDlog所读取的值或者"idl"与发出调用的 PB2进程的标识符或者"id2"进行比较。如果它注意到这些值不同, 则这一"检查"函数例如通过在连续循环中重新执行该同一比较步骤 21来挂起发出调用的PB2进程的执行。
随后,当标识符为"idl"的进程PB1也在重放过程中调用SEM1
信号标志时,前序程序也在步骤11中执行"check(Jseml)"指令,但 是这次是以新的PB1调用进程的名义。如果它注意到所述PB1调用 进程确实就是其标识符"idl"在日志中被存储于与在活动序列中的当 前编号(即值"#1")相对应的行处的那一进程,则"检查"函数授权继 续PB1调用进程的执行。
在步骤12中,修改的例程RM随后实施原例程R即"sem—wait" 指令的功能,该原例程随后向它分配SEMI信号标志并且返回PB1 调用进程的值"idl"。
在步骤13中,收尾程序随后以PB1调用进程的名义执行 "en(^check(Jseml)"指令。所述"end—check"函数随后关闭PB1进程的 "sem一wait"调用并且解除对已经处于保持中的PB2进程的执行的阻 断。这一操作可以特别地包括递增这一 SEM1信号标志的序号 OPSEM1,使它移到下一个值"#2"。
在这一情况下,当再次在步骤22中执行PB2进程所调用的 "check"函数时,它读取JSEM1日志的下一行"#2: id2"并且让它的 PB2调用进程继续它对修改的例程RM的执行。
在步骤23中,修改的例程RM随后实施原例程R或者"sem—wait" 指令的函数,该原例程或者指令随后向它分配SEMI信号标志并且 返回PB2调用进程的值"id2"。
在步骤24中,收尾程序随后以PB2调用进程的名义^l行 "end—check(Jseml)"指令,再次递增SEMI信号标志序列并且^f吏它可 用以继续重方文。
无论各种重放的进程请求分配SEM1信号标志的次序如何,不 言而p俞它们只能以在它的JSEM1日志中存储的准确次序并且因此以 与在生成这一 日志的主应用的运行过程中相同的次序来获得。
由于这些附加指令由在主应用外部的META代理来添加并且添 加到操作系统而不对操作系统进行任何改变,所以不言而喻这些录 入和重方文:燥作对于主应用而言被透明地和非4曼入式地实施而不改变 系统的预先存在的单元。
给定大量内部事件,有用的是对录入和/或重放它们的功能进行 优化,特别是用以避免会大大减少从前述特征获得的益处的任何性 能下降。
在发生于两个外部事件之间的多种类型的内部事件之中,多数 内部事件可以分类为确定性的,即仅并入有如下操作,这些操作的
结果完全取决于应用在这些操作之前的状态。
另一方面,特别是在多任务操作或者分布于数个节点上的那些 操作的过程中, 一些内部事件是非确定性类型的,因为它们包括如 下操作,这些操作可能提供视应用或者主节点外部的因素而定的结 果。
通过仅录入或者重放非确定性类型的内部事件,因此有可能限 制操作节点的超负荷,并且由此限制由于将中间应用用于使主应用 变得可靠或者管理主应用而引起的性能下降。
如图8a和8b中所示,可以特别是通过针对其中行为不是确定性 的内部事件来仅录入结果并且仅在重放时预设置结果来加速录入和重放。
对于所有事件并且特别是内部事件(EVI),如前所述的META 插入机制(图7 )调用实施了所规定的操作的修改例程RM而不是原 例程R。这一修改的例程RM包括如下功能,即能够根据这一事件 EVI的发生发起或者通知录入进程PlogOP或者重放进程PRI,并且 如有必要则等待它同意继续处理这一事件或者将它移交给已经调用 了它的Pl或者PB1进程。
无论这涉及到录入还是重放,管理这一事件EVI于是都包括对 这一事件的发生的反应步骤,接着是附加的管理步骤GC(图8a、8b), 该管理步骤的内容取决于这一内部事件的确定性或者非确定性的性 质。
图8a图示了录入内部事件的操作。在通过已录入(图1的JOP) 的运行来执行P1进程的同时,执行指令会实施应用于共享式资源如 SEM1信号标志的内部事件EVI。
在步骤1中,与待录入的事件EVI相对应的修改例程RM通知 或者发起录入进程PlogOP,该进程由此检测这一事件EVI的发生。
在步骤2中,与事件EVI相对应的修改例程RM对SEMI信号 标志实施在原例程R中规定的操作并且接收或者计算发往已录入进 程P1的结果数据DR。
在步骤3中,录入进程PlogOP递增与4企测的事件EVI在PI录 入序列中的位置相对应的例如向SEMI信号标志分配的序号SQ。
在步骤4中,所述进程PlogOP进行用以确定检测的内部事件EVI 是否为确定性的测试。这一测试可以例如应用于在修改的例程RM 的调用过程中从它接收的参数或者应用于与这一调用 一起发送的结 果数据DR或者应用于先前存储于主要OP节点中的指令或者事件标 识。
在步骤5中,如果检测的事件EVI是非确定性的,则PlogOP进 程将结果数据DR发送到辅节点的PlogSB录入进程。这存储了与事 件EVI相对应的结果数据DR和序号SQ,使得它们关联在与信号标 志SEMI相对应的日志文件JSeml中先前已录入事件的结果之后。 根据录入条件,在JSeml日志中存储的数据还可以由PlogOP录入进 程直接地存储于主要节点中的永久介质上的日志文件中。
在完成用于已录入进程P1的内部事件序列时,JSeml日志包含 与用于涉及到序号的事件的序号相关联的由SEMi信号标志向所述 PI进程发送的所有结果数据的有序集。
图8b图示了在存储于JSeml日志中并且与SEMI信号标志相对 应的事件的由重放进程PRI (见图6)控制的被动重放阶段RSB (图 1 )过程中在重启进程PBl中用于这一内部事件EVI的重放操作。在 PBl进程正在运行的同时并且在来自JSeml日志的事件的重》文过程 中,执行指令会实施应用于SEMI信号标志的非确定性类型的内部 事件EVI。
在步骤1中,与待录入的事件EVI相对应的修改例程RM通知 或者发起重》文进程PRI,该进程由此检测和识别这一事件的发生。
在步骤2中,与事件EVI相对应的修改例程RM对SEMI信号 标志实施在原例程R中规定的操作并且接收或者计算与实际重放结 果相对应的结果数据。修改的例程RM随后挂起重启进程PB1的执 行并且等待来自重放进程PRI的信号以将这一结果RRJ发送到重启 进程PBl。
在步骤3中,重放进程PRI在JSeml日志中读取用于重放的下 一未用值RLi以及与它相关联的序号SQi。
在步骤4中,该进程用于与检测的事件EVI在PB1重放序列PB1 中的位置相对应的例如向SEMI信号标志分配的递增序号SQ。
在步骤5中,重放进程PRI对当前序号SQ和日志中的读取序号 SQi进行测试以确定正在进行的重放事件EVI是否对应于已录入事 件。
在预设置步骤7中,如果这些事件相对应,则重放进程PRI将 日志中的读取结果RLi发送到修改的例程RM,该例程存储它而不是 来自原操作R的结果PRJ。修改的例程RM随后将这一结果RLi返 回给重启进程PB1并且让它继续它的执行。
可选地,在预设置步骤7之前是步骤6,其中重放进程PRI从修 改的例程RM接收实际重》文结果RRJ,并且将它与在录入过程中同 一事件的结果相对应的读取结果RLi进行比较。如果所述两个结果 RRJ和Rli相对应,则进程直接释放修改的例程,该例程将它的结果 返回纟会重启进程PB1并且让它继续它的扭J亍。
因此不言而p俞,可以如实和准确地记录和重i文非确定性事件, 从而为重启进程PB1确保将与目标进程Pl在录入过程中的运行相一 致的重放运行。
由于仅录入或者重放某些事件,并且由于用以实施本发明的补 充内部操作比用于录入的存储或者传输快得多,所以减少了因中间 应用INT的才喿作而造成的开销。
可选地,当i殳想原例程R ^f又记录确定性的事件时,与它相对应 的修改例程RM可以不提供对录入或者重放进程的任何调用。类似地,当"i殳想原例程R仅实施非确定性事件时,它的^f奮改例程RM可 以包括对录入或者重放进程的系统调用。在录入过程中,因此可以 通过收到的呼叫的类型或者甚至通过收到呼叫这一事实来隐式地产 生用以测试确定性的性质的步骤4 (图8a)。
而为确定性的或者不为确定性的情况下,修改的例程RM还可以在 它的前序程序中和/或它的收尾程序中包括评价这一 类型的应用或者 这些执行状况的指令。
序号SQ的使用还可以是可选的。在这一情况下,录入进程 PlogOP (图8a)被约束为记下当事件EVI是非确定性类型时的结果 数据量。对于这一部分,重放进程PRI (图8b)被约束为读取下一 录入结果RLi,并且认为这是针对被检测为非确定性的下一事件EVI 而要强制的结果。
另外,试探性或者预测性的优化方法允许不系统地录入所有内 部非确定性事件。可以独自地或者与其它优化方法相结合地实施这 一方法。
由于就录入和重放操作而言的成本,特别是关于节点内部操作 的成本,如果实施某一数目的附加内部操作允许减少录入操作的数 目,则实施这些附加内部操作可能确实是有用的。
这一试探性的优化技术包括通过中间应用来实施试探性压缩, 该试探性压缩通过预测结果并且应用于在主应用的操作过程中检测
的所有或者部分内部事件来进行操作。
在操作节点中的录入过程中,这一试探性压缩可以例如通过内
部录入进程PlogOP来实施。
图8c图示了利用这一试探性压缩CH来录入非确定性事件的功能。
在通过JOP已录入运行来执行P1进程时,执行指令会实施应用 于共享式资源如S EM1信号标志的非确定性类型的内部事件EVInD 。 在步骤1中,与待录入的事件EVInD相对应的〗务改例程RMnD
通知或者发起录入进程PlogOP,该进程由此4企测所述事件EVInD的 发生。
在步骤2中,与事件EVInD相对应的修改例程RMnD对SEM1 信号标志实施在原例程RnD中设想的操作并且接收或者计算发往录 入进程Pl的结果数据DR。
在步骤3中,进程PlogOP递增与检测事件EVInD相联系的SEM1 资源所对应的录入序号SQ。
有利地,所述序号SQ存储于主要节点OP中的工作存储器中。 因此,与发送结果数据到辅节点相比或者与将它存储在永久介质上 的日志文件中相比,它的管理表现出很低的开销。
与SEM1信号标志和它的日志JSEM1相关联的序号SQ的这一 递增由此在避免结果数据DR的系统存储将表现出的开销同时允许 记录对预测函凄t FH所正确预测的非确定性事件EVInD的传递。
在步骤4中,进程PlogOP实施软件操作FH,该才喿作包括形式 为预测结果RP的对这一内部事件EVInD的结果的预测。优选地, 这一预测是由以已录入进程Pl或者主应用在这一事件EVInD之前 的状态为基础的 一个或者多个确定性函数组成的确定性软件进程。
在步骤5中,进程PlogOP将预测结果RP与从检测的事件EVInD 的运行RnD输出的实际结果DR进行比较。
在步骤6中,如果这两个结果DR和RP不同,贝'JPlogOP进程 将实际结果DR和序号SQ的对应值转发到辅节点进程PlogSB,该 辅节点进程通过将它们关联为在与所讨论的资源SEM1相对应的日 志文件Jseml中的下一4亍来记下它们。
在这一步骤过程中,有可能设想重新发起用于录入所讨论的 SEM1资源的序号SQ。在这一情况下,序号SQ代表了自已经录入 其结果的最后事件起正确预测的事件数目。
在完成用于已录入进程P1的内部事件序列时,JSeml日志包含 SEM1信号标志向所述P1进程发送的并且尚未通过预测函数FH来 正确预测的所有结果数据的有序集。
在已经通过使用这样的试探性优化来实施内部事件的录入情况 下,中间应用随后当在辅节点中重放时实施试探性解压缩。这一试 探性解压缩使用与用于压缩的预测相同的预测并且应用于与在通过 试探性压缩进行录入的过程中相同的事件。
图8d因此图示了基于应用于SEMI信号标志的日志JSeml在由 内,部重放进程PRI(参见图6)控制的重启进程PB1的被动重放中利 用这一试探性解压缩DH针对非确定性事件的重放操作。
在来自JSeml日志的事件的重放过程中,执行指令会实施应用 于SEM1信号标志的非确定性类型的内部事件EVInD。
在步骤1中,与待重放的事件EVInD相对应的^f奮改例程EMnD 通知或者发起重i文进程PRI,该进程由此纟全测和识别这一事件EVInD 的发生。
在步骤2中,与事件EVInD相对应的修改例程RMnD对SEM1 信号标志实施在原例程RnD中设想的操作并且接收或者计算与实际 重放结果RRJ相对应的结果数据。修改的例程RMnD随后挂起重放 进程PB1的执行。它随后等待来自重放进程PRI的信号以将所述结 果RRJ转发到重启进程P1并且让它继续它的执行。
在步骤3中,进程PRI读取和递增与信号标志SEM1相对应的 序号SQ的值。
在步骤4中,内部重放进程PRI将这一序号SQ与未从与这同一 资源SEM1相对应的日志文件Jseml中存储的那些序号中重放的下 一序号SQi进行比较。
在步骤5中,如果这些序号SQ和SQi对应,则内部重放进程 PRI在这一日志中读取针对这一序号SQi的存储结果RLi,并且存储 它作为将要由检测的事件EVInD返回的强制结果RF。内部重放进程 PRI随后存储已经重放在日志JSeml中的行SQi所代表的事件这一 事实,并且激活这同一日志的下一行SQj以便处理所检测的下一事 件。
在这一步骤过程中,有可能设想重新对用于重放所讨i仑的SEM1
资源的序号SQ进行初始化。
在步骤6中,如果这些序号SQ和SQi不对应,则内部重》文进程 PRI实施软件操作FH,该操作包括形式为预测结果RPJ的与在这一 内部事件的录入过程中产生的结果预测相同的结果预测。内部重放 进程PRI随后存储这一预测的结果RPJ作为将要由检测的事件 EVInD返回的强制结果RF。
在步骤8中,内部重放进程PRI将强制结果RF转发给修改的例 程RMnD,该例程将它施加于重启进程PB1而不是内部事件EVInD 所返回的实际重放结果RRJ。修改的例程随后让重启进程PB1继续 它的执行。
可选地,在这一预设置之前可以是测试步骤7,该步骤用以将这 两个结果RRJ和RF进行比较并且如果这些结果对应则避免在重启 进程PB1中起作用。
应当注意,在这一预测优化方法中4吏用的排序数据SQ的标识可 以由不同于先前所述变量(图8a和图8b)的变量组成或者与这些参 数相联合地加以组织和处理。
因此不言而喻,即使没有录入所有确定性事件的结果,仍然可 以如实和准确地记录和重放这些事件。在这一方式下,因此有可能 在确保运行与目标进程Pl在录入过程中的运行相一致的重启进程 PB1 d的重放运行的同时优化这些录入和重放操作。
假设在录入操作与节点内部的简单计算操作之间有速度差异, 即使所用预测函数没有很高的成功率,但是这一试探性优化技术仍 然可以是有用的。如果这一差异很大,则即使小于50%的预测成功 率仍然可以允许有用的优化。
些函数是为了用于录入并且随后重放单个事件或者多组内部事件。 可以根据应用的状态或者它的环境(例如从知识数据库或者规则开 始)来进行对待使用的预测函数的选择。这一变化随后可以存储于 中间应用所存储的录入数据中。还可以通过在录入过程中评^介这一
试探性优化技术的成功率并且通过基于这一成功率的值或者基于它 的变化来发起所述函数的改变从而自动自适应地^使用该:技术。
在这 一 试探性优化技术中使用的预测函数的 一 个例子包括基于 来自不同客户端的内部事件的次序来预测内部事件的发生次序。
图9和图10图示了参与三个进程ProcA、 ProcB、 ProcC的外部 事件和内部事件的发生,这些进程具有分别标定为"a"、 "b"和"c"的 标识符,例如执行分别由三个不同客户端起动的三个任务Ta、 Tb、 Tc。这些不同4壬务各自例如包括第一外部事件Eal、 Ebl、 Ecl和第 二外部事件Ea2、 Eb2、 Ec2。在这些第 一与第二外部事件之间,这 些任务各包括发起两个内部非确定性事件。在图9和图IO中,用于 任务Ta的连续内部事件记作Ial和Ia2,用于任务Tb的连续内部事 件记作Ibl和Ib2,而用于任务Tc的连续内部事件记作Icl和Ic2。 这些内部事件Ia至Ic2可以-波此不同或者甚至涉及到单个确定资源, 例如对单个共享式存储器区集合的锁定分配。
的部分和/或具有相似的执行时间时,预测函数包括预测中间内部事 件Ial、 Ibl、 Icl的发生次序将与在它们之前的外部事件的发生次序 相同。
在主应用正在运行的同时,第一外部事件Eal、 Ebl、 Ecl在操 作节点OP上的发生次序由中间应用例如记录在内部录入进程 PlogOP中。例如,外部事件的这一次序包括与这些外部事件相关联 的进程的一连串标识符,或者值序列"abc"。
在每次检测到关于这一资源的新内部事件时,预测函数做出对 这 一 内部事件的结果的预测,即对将要获得对这 一 资源的锁定的进 程(即刚请求过该资源的进程)的身份的预测。然后将通过将已经 获得这一 资源的锁定的最后进程的身份与外部事件的这一 次序进行 比较来计算这一预测结果。
由此,预测函数将得到预测集Pel至Pe6,各预测以虚线示出而 其结果在它的右手端处示出。
图9图示了在这些内部事件遵循外部事件的次序的情况下针对
内部事件的每次发生而做出的预测的值。根据外部事件"a b c"的次序
以及根据发生过的最后内部事件,预测函数将做出如下预测,该预
测形成仅在这六种情况下才显现的值序列"a b c a b c"。在试探性优 化的背景下,内部录入进程PlogOP将因此不要求转发针对这些内部 事件的录入数据,因为它们已经被预测函数正确地预见。
图10图示了在这些内部事件没有严格地遵循外部事件的次序的 情况下针对内部事件的每次发生而做出的预测值,其中用于标识"b" 的进程PrB的任务Tb比其它两个任务被更快地执行。根据外部事件 "a b c"的次序以及根据发生过的最后内部事件,预测函数将做出如下 预测,该预测形成ii序列"a b c c a b"。看起来两个预测Pe3和Pe6 将显现为错误,这将造成内部录入进程PlogOP在两种场合转发录入 数据。这一 录入数据因此将包括在完成已经显现为不正确的第三预 测Pe3时在传输Ll中的值"c"、然后是在完成也已经显现为不正确 的第六预测P6时在传输L2中的值"c"。
尽管有这些不正确的预测Pe3和Pe6,但是不言而喻这一试探性 优化已经允许内部录入进程PlogOP影响仅两个传输Ll和L2而不是 在没有该优化时可能已经发生的六个传输。在六个传输之中节省了 四个传输表现了基本上比在需要用来实施这一优化技术的内部计算 和操作中更大的工作时间,并且因此可以提供特别是操作节点中性 能 的显著增加。
另外,对于其中操作系统的标准实施会产生非确定性行为的一 些内部事件,有可能使用一种借助语义改变的优化技术。这一技术
包括修改这些事件在节点中的实施,以便赋予它们以将是确定性的 行为。中间应用与在操作节点和一个或者多个辅节点中相同地进行 这一修改,这使得三个改变的内部事件的结果可预测。对实施的这 一》多改将通过一种插入技术来动态地进行,该插入纟支术通过"元进 程,,以如下修改的例程RM来取代原事件实施例程R,其中该例程RM 针对这一事件来实施修改的行为。用来实施这一修改的技术与用于
在前序程序和收尾程序中添加记录探针的上述技术(参见图7)相似, 但是可以包括修改用于所修改的例程的中心部分的代码。这 一 实施 修改对于主应用而言是透明地产生的并且没有更改^^乘作系统的预先 存在的单元。通过永久地或者至少在确定和存储的"^丸行间隔中在主 应用中使用这些修改的例程之一,由此有可能录入主应用的进展而 无需存储所述改变的事件的结果。在与用于执行重放应用的间隔相
时提高录入和重放的性能。
例如通过进行如下规划来设计这 一 修改的行为以便符合与原行
为相同的规范并且完全与它相兼容从原例程可能已经发送多个不 同结果的给定情形起,修改的例程仅提供可能已经被原例程提供过 并且因此为主应用和操作系统所设想到的结果。
这一借助语义变化的优化技术实现了减少非确定性内部事件的 数目,其中这些事件的结果必须被录入在操作节点中以能够在重启 应用的恢复过程进行重放。
在图16中通过图形图示了不同方的操作和交互的例子。
例如在系统软件中的处理代理AT进行如下操作,该操作将把结 果DR转发到进程如已录入进程Pl。对于很多操作或者事件、特别 是内部事件,所述操作由操作进程TO来实施,该操作进程TO就其 性质而言与资源集RDet相比是确定性的(称为决定性的)。
在可由进程Pl访问的资源中, 一些资源根据对这一进程Pl的 状态的了解而可以称为可再现资源RRepr。所述可再现资源特别地包 括其状态唯一地视它而定的资源。
在处理代理AT的操作中,处理TO操作可以包括关于进程PI 的可再现资源RRepr而言是确定性的处理部分TD,例如因为它4叉使 用来自所述可再现资源的DER数据。
在才乘作进程TO包括使用了来自在进程Pl的可再现资源RRepr 中没有包含的SEMI资源的个人数据的另一处理部分的情况下,这 一 TnD部分的结果并且由此所有TO处理的结果关于调用它的进程
Pl而言通常不是确定性的。
在这样的情形下,这一语义变化技术可以包括使用管理代理AG
修改所获得的操作相比于可再现资源RRepr而言是确定性的。
这一管理代理可以Y吏用运作修改处理TMF来修改TO才喿作进程 的内部操作。
它还可以使用从决定性的但是关于进程PI而言不是可再现的 (RRepr)资源RDet中输出的输入凄t据DE来补偿对于所述同一进 程P1而言能够构成非确定性源的结果DR的变化。可以通过TC1将 输入数据DE修改成经补偿的输入数据DEC或者通过TC2将结果数 据DR修改成经补偿的结果数据DRC来进行这样的补偿。
这一管理代理AG还可以根据一个或者多个语义变化参数PCS 来选择或者调节它所进行过的修改TMF、 TC1、 TC2以-使优化全局 处理AT和AG的效率。为了在录入JOP与重放RSB之间保持可再 现,仅按照来自可再现资源RRepr的数据来确定这一语义变化参数 PCS的变化或者在录入过程中将它的变化存储于日志UL、 KL中并 且在重放RSB过程中以同一方式来读取和应用这些变化就足够了 。
这 一 行为变化可以特另'J地涉及影响对竟争给定资源的数个进程 的管理的方面。
图11和图12图示了一个例子,该例子使用这一借助语义变化 的优化技术来使如下操作具有确定性,该操作用以通过在Unix型环 境中使用"读"例程来读取接收的信息。
在它的标准实施中,由应用发起的"读"例程使用緩沖器存储器B 的区域来读取在输入信道ICH中的消息并且将这些消息转发到所述 应用。以连续数据的形式在系统中接收消息,随着这些消息的到达 并在它们到达时,这些消息被存储于形成输入信道的存储器区域中。 根据"读"操作的配置,"读"操作可以使用不同大小的緩沖器,但是这 一緩沖器就它的整体而言用于在输入信道中的每次读取。
在这 一 例子中,应用针对大小为"50"的緩冲器使用 一 连串"读" 操作以接收通过输入信道ICH连续地到达该存储器的三个消息Ml、 M2、 M3。这三个消息代表了分别等于"20"、 "30,,和"50,,的数据量。 然而, 一 方面数据到达输入信道的速度以及另 一 方面读取操作的速 度可能以在录入或者重放阶段不能预测的方式相对于彼此而变化。
图11由此代表了用于使用原"读"例程来读取同样三个消息的两 种不同的可能方案。
在第一方案SCA中,仅当来自大小为"20"的第一消息Ml的数 据已经到达时才进行第一次读取RA1。緩冲器B未被完全地填充, 并且该操作返回与内容"M1"和数据大小"20"相对应的结果。然后在 第二消息M2独自到达之后进行第二次读取RA2,该读取返回与内 容"M2"和数据大小"30"相对应的结果。然后在第三消息M3到达之 后进行第三次读耳又RA3,该读取返回与"内容M3"和数据大小"50"相 对应的结果。例如,对于应用所接收的数据的大小,该第一方案A 由此返回等于"20、 30和50,,的三个结果的集合。
在第二方案SCB中,当同样的第一和第二消息Ml、 M2已经到 达时进行第一次读取RB1,该读取返回与内容"M1、 M2"和数据大小 "50"相对应的结果。然后在第三消息M3到达之后进行第二次读取 RB2,该读取返回与内容"M3"和数据大小"50"相对应的结果。对于 应用所接收的数据的大小,该第一方案SCA由此返回等于"50、 50" 的两个结果的集合,这是就读取相同消息而言。
这两个方案因此返回不同结果对于一个方案是"20、 30、 50" 而对于另一方案是"50、 50"。就此而言,实施"读"操作的标准系统例 ,呈/人用于录入主应用以及用于重i文重启应用的应用的5见点来看实施 了非确定性事件。
针对与图11中相同的情形,图12代表了将通过使用修改的"读 M"例程而不是原"读"例程来获得的单个方案ScU。
在这一例子中,修改的例程识别所接收的各消息的实际长度并 且在输入信道ICH中仅读取与单个消息相对应的数据,即使緩沖器 B未被填充并且在输入信道ICH中仍有数据要读取也是如此。在录
入主应用的情况下,修改的例程使用与消息Ml、 M2、 M3的接收相 对应的外部事件录入机制(例如IPlogOP模块)来识别这些消息的 实际长度。在正在恢复重启应用的同时的重放情况下,修改的例程 使用与消息M1、 M2、 M3的接收相对应的外部事件重》文机制(例如 IPlogSB模块)来识别这些消息的实际长度。
这两个不同的到达方案SCA、 SCB由此在发生就应用所^接收的 数据的大小而言等于"20、 30, 50"的三个结果的单个集合时针对读 取操作给出单一行为。
类似地,对于緩冲器B的其它大小,可能有产生不同结果集的 原"读"例程。
由此,针对緩冲器大小"20"可以获得如下结果,例如"20、 20、 20、 20、 20,,或者"20、 20、 10、 20、 20、 10"。
针对緩沖器大小"100"可以获得如下结果,例如"20、 30、 50"或 者"50、 50"或者"20、 80"或者"100"。
另一方面,对于各緩冲器大小,由此修改的"读M"例程可以仅 给出单个结果集。
由此,对于緩冲器大小"20",获得的结果集将是"20、 20、 10、 20、 20、 10"。
对于緩沖器大小"100",获得的结果集将是"20、 30、 50"。 由此修改的"读M"例程因此针对与这样的读操作相对应的内部 事件实施了确定性行为。
图13至15图示了使用这一借助语义变化的优化技术的另一例 子,该例子用来使如下应用进程所发起的复用读操作具有确定性, 该应用进程实施排队循环并且能够从具体地与多个文件描述符相关 联的多个输入/输出(1/0)信道接收数据。这一例子基于在Unix型 的环境中对"所选"例程的使用,但是还可以应用于对"轮循"例程的使 用。
在这一例子中,由节点操作系统OS接收发往两个不同信道 ICH1、 ICH2的内容分别等于"a"、 "b,,和"c,,的三个消息Ml、 M2、 M3。
这一例子可以特别地应用于由第 一信道ICH1以"流"的形式4妄收 数据以及由第二信道ICH2以TCP型的消息或者分组的形式接收数 据。在操作系统OS中,随后接收其后跟随有"流"分组的两个TCP 分组作为内容分别等于"a"、 "b"和"c"的三个连续消息Ml、 M2、 M3。
当操作系统OS收到这些消息时,操作系统OS根据它的工作量 来在与它们的类型相对应的信道ICH1、 ICH2中处理和分发这一数 据。在应用的执行过程中的给定瞬间,应用调用"选裤:"例程以针对 它可以用来接收消息的不同信道来发起读操作。
在"选择"例程的标准实施中,"选择"例程读取第一信道ICH1中 的排队数据,接着是第二信道ICH2中的排队数据,并且立即以它读 取它们的次序将这一数据转发到应用。
现在, 一方面数据到达操作系统OS的速度、操作系统处理它的 速度以及因此它到达输入信道的速度、而另 一方面应用执行一连串 读操作的速度可能以在录入或者重放阶段不能预测的方式相对于彼 此而变4匕。
在图13中所示的第一方案SCA中,应用在第一实例IA处通过 "选择"例程来发起复用读取,因为三个消息已经到达两个输入信道 ICH1、 ICH2。当"选择"例程读取lt据时,它因此首先读取第一信道 ICH1中包含的第三消息,接着是第二信道ICH2中的前两个消息M1、 M2。"选择"例程随后以读取的次序来转发这一数据,并且读纟喿作由 此产生包括数据集"c、 a、 b"的结果。
在图14中所示的第二方案SCB中,应用在第一实例IB处通过 "选择"例程来发起复用读取,因为只有前两个消息已经到达第二输 入信道ICH2。当"选择"例程读取数据时,它因此仅读取第二信道 ICH2中的前两个消息Ml、 M2并且以读取的次序或者以集合"a b" 的次序将这一数据转发到应用。在下一次读取过程中,在第三消息 M3已经到达第一信道ICH1之后,"选择"例程读取这一第三消息并 且将它转发到应用。在所述第二方案B中,原"选择"例程的读操作
因此产生包括数据集"a b c"的结果。
这两个不同方案SCA、 SCB因此返回不同结果对于一个方案 是"cab"而对于另一方案是"abc"。就此而言,实施"选择"操作的标 准系统例程,人用于录入主应用以及用于对重放应用进4亍重》文的应用 的观点来看实施了非确定性事件。
对于与图13和图14中相同的情形,图15代表了将通过使用修 改的"选择M"例程而不是原"选择"例程来获得的单个结果。
在这一例子中,修改的例程识别消息到达操作系统OS的次序并 且以消息到达的次序来读取它们。另外,为了减少;漠糊性的风险, ^修改的例程每次仅发送单个文件描述符。修改的例禾呈可以例如通过 检查输入信道ICH1、 ICH2中的消息内容或者根据录入或者重》文数 据来获得与消息到达的次序有关的信息。
这两个不同的到达方案SCA、 SCB由此在包括等于"a b c"的三 个结果的单个集合情况下针对复用读取操作给出单一行为。
通过这样修改对在标准环境下不是确定性的内部事件的行为进 行实施的某些例程的操作方法以使它们具有确定性,不言而喻减少 了非确定性事件的数目。当在主应用中的录入过程中和在重启应用 中的重放过程中同样地应用这一修改时,减少了为了能够在重;^丈完 成时获得如下重启应用而必须录入的事件的数目,该重启应用处于
操作连续性。
因此不言而喻,这一借助语义变化的优化技术可以提高录入操 作和重放操作的性能并且由此提高中间应用的性能。
事实上,根据应用这一语义变化技术的例程以及根据对它们所 进行的修改的性质,这相比于所述例程的原行为而言可能仅产生很 少的性能降低。然而,假设录入操作速度緩慢,则在待录入的操作 的数目方面产生的节省可以允许在中间应用的框架内显著提高主应 用的整体性能。
在这 一 说明书中,可以看到中间应用的机制主要由在l乘作节点
或者辅节点的用户空间中执行的进程或者模块来实施。特别地,这 意P木着如下外部或者内部的录入或者重放进程,在这里在中间应用
INT (图1 )中通过标记"Plog"(图2) 、 "IPlogOP,,和"IPlogSB,,(图 3 ) 、 "PlogOP"和"PlogSB"(图4 ) 、 "PRE"(图5 )和"PRI"(图6 )、 "META"(图7)来标识这些进程。
对照而言,在系统空间中执行的机制首先包括从应用才莫块来管 理的插入模块或者用于添加或者修改函数的那些模块。这特别地意 味着在这里通过标记"DISP"(图3 )和"ip过滤器"(图5 )来标识的 模块。还可以根据需要加载或者从应用模块卸载这些内核模块中的 某些模块。
中间应用的执行和"寿命"发生在用户空间中这一事实实现了限 制与不同节点的操作系统的交互。这一特征特别地提供了在部署和
管理上的灵活性、针对操作系统及其可选异质性的某些独立性,限 制了类型或者版本不兼容性的风险,并且可以在部署所述中间应用 时限制未涉及到的节点在系统空间中的干预或者将这些干预仅限于 较低程度。这一针对操作系统的独立性还可以通过避免在系统空间 的预先存在的单元中进行过多深入干预以及通过保持相对于这些操 作系统的规范和变化而言以及相对于管理它们的组织的策略而言的 某些商业和技术独立性来限制开发时间和成本。
可以用不同方式和#4居不同组合来实施如上所述的中间应用以 便为集群的用户或者管理者提供对其它应用的支持或者管理服务。 可以特别地以"中间件"型网络软件产品的形式来获得这样的月良务, 从而允许在集群中管理、优化或者在可靠性上改进原版本("既有版 本")的一个或者多个应用,同时提供适应于集群的性质的灵活性或 者附加安全性或者故障容限这些功能。
其客户端的安全服务的形式。各应用因此将能够被视为主应用并且 根据需要针对它的客户端以重启应用的形式来加以恢复以取代主应 用。
由在给定节点的全部或者一部分上执行的应用所提供的月艮务还
可以通过完全地释;^文它们的原节点来动态地根据需要转移到 一 个或 者多个其它节点。因此,将有可能实施在这一节点上想要的所有硬 件或者软件干预,无论这些干预是维护、试验、升级还是更换。
这样的中间应用可以特别地用来实施"中间件"型的环境,特别 地,根据它的能力、可用性或者它在网络中的地理情况(例如它相 对于它的客户端或者所用数据而言的远程性),该环境包括用于在 不同节点之间分布工作量(负荷平衡)的功能、用以优化对不同硬 件的使用的功能。
不言而喻,本发明不限于已经描述的例子,并且可以对本发明 做出各种修改而不脱离本发明的框架。
权利要求
1.一种用于管理非确定性软件操作(EVINd)的方法,所述非确定性软件操作(EVINd)是在执行由至少一个计算机(OP,SB)执行的称为受管理的进程(P1,PB1)的应用进程时由程序指令发起的,所述操作的表现在于向所述受管理的进程发送称为实际结果(DR,RRJ)的至少一个结果数据,这一方法包括如下步骤-基于所述受管理的进程的状态或者如它在所述操作(EVInd)之前所属于的应用(AOP,ASB)的状态来进行称为预测函数(FH)的确定性软件处理,以便提供很可能与所述实际结果相对应并且构成针对所述操作的预测结果(RP)的值;-进行比较测试以确定所述预测结果(RP)的值是否对应于所述实际结果(DR,RRJ)的值;-针对所述受管理的操作执行补充管理阶段(CH,DH),这一补充管理视先前测试的结果而定。
2. 根据权利要求1所述的方法,其特征在于它管理称为已录入 操作(EVInd;图8c)的操作,该操作形成称为主要节点(OP)的 计算机中执行的已录入进程(PI)的执行的一部分,这一管理以录 入数据的形式来记录所述已录入操作,该录入数据实现辅节点所执 行的重启进程以重放与所述已录入操作相对应的称为重放操作的操 作,并且这一管理向所述重启进程发送与所述已录入操作的结果相 对应的结果,在实际结果(DR)与所述预测结果(RP)不对应的情况下,所 述补充管理阶段(CH)还包括存储录入数据,该录入数据包括结果 数据,该结果数据代表了所述已录入操作(EVInD)的所述实际结果 (DR)的值,所述操作于是称为非预测操作。
3. 根据权利要求1或2所述的方法,其特征在于它管理称为已 录入操作(EVInd;图8c)的操作,该操作形成称为主要节点(OP) 的计算机中执行的已录入进程(Pl)的执行的一部分,这一管理以 录入数据的形式来记录所述已录入操作,该录入数据实现辅节点所 执行的重启进程以重放与所述已录入#:作相对应的称为重放操作的 操作,并且这 一 管理向所述重启进程发送与所述已录入操作的结果 相对应的结果,所述补充管理阶段(CH)还包括计算用于所述已录入操作(EVInD)的标识凄t据(SQ)。
4. 根据权利要求2或3所述的方法,其特征在于它记录所述已 录入进程(Pl)所执行的操作的称为已录入序列的序列(JOP),所 述序列包括发送与所述预测结果(RP)不对应的实际结果(DR)的 称为非预测操作的至少一个操作(EVID),这一记录包括存储至少 一个日志文件(JSeml),该日志文件使所述重启进程能够重放与所 述已录入序列的所述操作相对应的操作的称为重放序列的序列,所述日志文件包括如下数据,该数据代表所述非预测操作的称 为已录入结果(DR)的所述实际结果、并且可用于在与所述非预测 操作相对应的重放操作完成时使所述重启进程将与所述已录入结果 相对应的结果纳入考虑之中。
5. 根据权利要求2至4中任一项所述的方法,其特征在于在已 录入进程序列的录入过程中,录入至少 一个预测和非确定性的操作 而不在所述日志(JSeml)内存储如下录入数据,该录入数据代表所 述预测和非确定性的已录入操作(EVInD)的所述实际结果(DR)。
6. 根据权利要求5所述的方法,其特征在于对于至少一个非预 测操作(EVInD)的录入,在所述日志(JSeml)中存储的所述录入 数据包括- 一个方面包括标识数据,该标识数据代表与所述非预测操作相 对应的排序数据(SQ)的值;-另一方面包括结果数据(DR),该结果数据代表所述已录入 操作所发送的所述实际结果。
7. 根据权利要求3至6中任一项所述的方法,其特征在于它在 日志(JSeml)中记录(JOP)至少一个已录入序列,对于构成所述 序列内至少 一 个类型的非确定性内部事件(EVInd )的各已录入操作, 这一记录包括如下步骤的迭代重复-基于所述进程(Pl )或者它的应用(AOP)在所述操作之前的 状态来进行(4)确定性软件处理(FH)以提供很可能与所述实际结 果相对应并且构成针对所述操作的预测结果(RP)的值;-进行比较测试(5)以确定所述预测结果(RP)的值是否对应 于所述实际结果(DR)的值;陽在非预测结果的情况下,在所述日志(JSeml)中存储(6) 如下录入数据,该录入数据 一 方面以关联方式包括与在进行中的所 述操作相对应的所述排序数据(SQ)的值而另一方面包括结果数据 (DR),该结果数据代表由在进行中的所述操作(EVInD)向所述 已录入进程发送的所述实际结果的值。
8. 根据权利要求1所述的方法,其特征在于它管理如下操作的 称为重放序列的序列,所述操作形成在称为辅节点(SB)的计算机 中执行的重启进程(PB1)的执行的一部分,这一管理使用所述录入 数据(JSeml;图8d)以便在非确定性重放操作的各情况下使所述 重启进程将与在录入(JOP)过程中返回的所述结果相对应的称为强 制结果(RF)的结果纳入考虑之中,对于在所述录入的过程中的至少 一 个非预测非确定性操作 (EVInD),所述补充管理阶段(DH)包括-在所述录入数据中读取(5)称为已录入结果数据(RLi)的 结果数据,该结果数据代表了与正在重放的所述操作(EVInD)相对 应的在所述操作的录入过程中返回的所述结果;-截获所述重放操作的结果(RRJ)并且将所述强制结果(RLi) 而不是源自于所述重放操作的结果(RRJ)转发(8)到所述重启进 程(PB1 )。
9. 根据权利要求1至8中任一项所述的方法,其特征在于它管 理如下操作的称为重放序列的序列,所述操作形成称为辅节点的计 算机中执行的重启进程(PB1 )的执行的一部分,这一管理使用所述 录入数据(JSeml )以便在非确定性重放操作的各情况下使所述重启的结果纳入考虑之中,对于在录入过程中预测过的至少 一个非确定性才喿作,所述补充 管理阶段(DH)包括-进行(6)与用于录入所述操作的所述预测函数相对应的称为 重放预测函数(FH)的确定性软件处理,并且提供针对所述重放操 作的预测结果(RP);-截获所述重放操作的结果(RRJ)并且将所述预测结果(RP) 而不是源自于所述重放操作的结果(RRJ)转发(8)到所述重启进 程。
10. #^居^^又利要求1、 8或9所述的方法,其特4i在于它管理如 下操作的称为重放序列的序列,所述操作形成称为辅节点的计算机 中执行的重启进程(PB1)的执行的一部分,这一管理使用所述录入 数据(JSeml )以便在非确定性重放操作的各情况下使所述重启进程 将与在录入过程中返回的所述结果相对应的称为强制结果(RF)的 结果纳入考虑之中,至少对于就其而言所述录入数据不包括已录入结果的各操作 (EVInD),所述补充管理阶段(DH)包括递增(3)代表所述重放 操作的排序值(SQ)。
11. 根据权利要求4至10中任一项所述的方法,其特征在于它 管理所有如下操作,这些操作被标识为本质上为非确定性或者发送 被标识为本质上为非确定性的结果。
12. 根据权利要求4至11中任一项所述的方法,其特征在于它 管理所有如下操作,这些操作在所述受管理的序列内产生在所述受 管理的进程(Pl, PB1)或者它的应用(AOP, ASB)或者寺丸行它们 的所述计算机(OP, SB)内部的非确定性事件。
13. 根据权利要求1至12中任一项所述的方法,其特征在于它 管理至少一个如下操作(EVInD),该操作由/人可执4亍文件(EXE;例程(R, RnD )的例程的调用,所述指令的执行对称为修改例程(RM, RMnD)的例程而不是所述原例程进行调用,这一修改例程产生或者 发起所述方法的实施。
14,根据权利要求13所述的方法,其特征在于所述修改例程 (RMnD)包括至少一个如下指令,该指令在所述系统软件(OPS, SBS)内执行并且对至少一个管理软件代理(PlogOP, PRI)进行调 用、管理所述方法的实施并且在用于所述受管理的进程的所述计算 机的用户存储器空间(OPU, SBU)中被执行。
15. 4艮据4又利要求13或14所述的方法,其特征在于所述》l"改 例程(RMnD)包括测试指令,该测试指令检验已调用该测试指令的 指令是否是在录入或者重放的背景下执行的,这 一 测试由此分别影 响对所述录入类型的(PlogOP)或者所述重放类型(PRI)的管理代 理的调用。
16. 根据权利要求12至15中任一项所述的方法,其特征在于 它4吏用至少一个如下预测函lt (FH),该预测函li包括S见先前在所 述受管理的进程(PI, PB1 )的执行过程中发生过的至少一个类型的 一个或者多个外部事件的特征而定的确定性软件进程。
17. 根据权利要求4至16中任一项所述的方法,其特征在于它 通过使用第 一预测函数来录入至少 一个第 一操作而通过使用第二预 测函数来录入第二操作。
18. 根据权利要求17所述的方法,其特征在于它使用通过在多 个给定函数内进行确定性选择或者组合而选择的预测函数(FH)。
19. 根据权利要求17或18所述的方法,其特征在于对所用预 测函数(FH)的选择取决于在所述已录入进程(Pl)的执行过程中 测量或者计算的变量的变化。
20. 根据权利要求18或19所述的方法,其特征在于所述日志 文件(UL, KL, JSeml )包括如下数据,该数据代表了对预测函数 (FH )的至少 一个选择或者对影响这种选择的参数的选择。
21. 根据权利要求2至20中任一项所述的方法,其特征在于它 实施对称为已录入进程(Pl)的至少一个应用进程的运作管理,并 且包括如下步骤-录入(JOP)在所述已录入进程从称为重启点的给定点开始一 直到称为中断点的点之间的执行过程中发生的至少 一个给定类型的 所有事件,并且存储源自于所述录入的日志(UL, KL, JSeml);-从在与所述已录入进程的重启点状态相》寸应的状态下的重启 进程(PB1)开始,重放(RSB)来自所述重启进程的所述日志中的 所述事件,由此使所述重启进程达到与所述已录入进程在所述中断 点处的状态相对应的状态。
22. 根据权利要求21所述的方法,其特征在于捕获(CAP)并 且存储所述已录入进程(Pl)在所述重启点处的状态作为重启点数 据(EPR),该重启点数据用来将所述重启进程(PB1)恢复(RES) 到所述重启点在向所述重启进程应用所述重放步骤(RSB)之前的 状态。
全文摘要
本发明涉及一种特别地通过录入和重放来进行的用于软件操作的管理方法,该软件操作是在执行在计算机上执行的应用进程的过程中执行的。这一方法特别地适用于向受管理的进程发送结果数据的内部操作并且包括如下步骤基于受管理的进程的状态或者应用(AOP,ASB)的状态来进行称为预测函数(FH)的确定性软件处理以提供用于所述操作的预测结果(RP);进行比较测试以确定预测结果(RP)的值是否对应于实际结果(DR,RRJ)的值;执行所述受管理的操作的补充管理阶段(CH,DH),这一补充管理视先前测试的结果而定。
文档编号G06F11/34GK101103337SQ200680002105
公开日2008年1月9日 申请日期2006年1月20日 优先权日2005年1月21日
发明者M·韦尔特 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1