实现高可用性光纤信道交换机的方法和装置转让专利

申请号 : CN02828193.4

文献号 : CN100591031C

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 马尔科迪·贝内代托约翰·B·麦克尤恩拉马纳·梅拉谢吕乌乌梅什·马哈詹

申请人 : 思科技术公司

摘要 :

可以使用冗余监控器来实现存储区域网络中的光纤信道交换机的高可用性。活动监控器可以识别与消息相关联的高可用性特性,并确定所述消息是否应被镜像映射到冗余监控器上、记入日志和/或设为持久。消息可被记日志到待处理事务缓冲区中,并使用持久性存储服务来存储。可以使用同步队列来执行镜像映射,所述同步队列使得消息能够被异步地传递到冗余监控器,同时保持监控器之间的完全同步并几乎不对活动监控器的操作造成延迟。

权利要求 :

1.一种用于在存储区域网络中的光纤信道交换机中实现高可用性的方 法,该方法包括:在第一应用处识别消息,所述第一应用运行在光纤信道交换机中的活 动监控器上;

确定与所述消息相关联的高可用性特性,其中高可用性特性提供用于 使第二应用与所述第一应用同步的信息,所述第二应用运行在所述光纤信 道交换机中的备用监控器上;

当高可用性特性指示出所述消息应被镜像映射时,将所述消息提供给 运行在所述备用监控器上的所述第二应用。

2.如权利要求1所述的方法,还包括确定与所述消息相关联的预订者 特性,其中预订者特性提供下述信息,该信息用于确定运行在所述活动监 控器上的哪些应用已经预订要接收所述消息。

3.如权利要求2所述的方法,还包括将所述消息提供给运行在所述活 动监控器上的多个预订者。

4.如权利要求3所述的方法,其中将所述消息提供给所述多个预订者 包括将所述消息拷贝到第一监控器共享缓冲区。

5.如权利要求3和4中任一项所述的方法,其中将所述消息提供给所 述多个预订者包括向所述预订者提供对所述第一监控器共享缓冲区中的所 述消息的引用。

6.如权利要求3所述的方法,还包括将所述消息提供给运行在所述备 用监控器上的多个预订者。

7.如权利要求3所述的方法,其中将所述消息提供给所述多个预订者 包括将所述消息拷贝到第二监控器共享缓冲区。

8.如权利要求7所述的方法,其中所述消息是从所述第一监控器被异 步地拷贝到所述第二监控器。

9.如权利要求8所述的方法,其中在所述消息被拷贝到所述第二监控 器之前,由所述第一应用发送对所述消息的确认。

10.如权利要求3所述的方法,其中,将所述消息提供给运行在所述 备用监控器上的所述多个预订者包括向所述预订者提供对所述第二监控器 共享缓冲区中的所述消息的引用。

11.如权利要求3所述的方法,其中高可用性特性涉及镜像映射、持 久性和记日志。

12.如权利要求11所述的方法,还包括如果高可用性特性指示出所述 消息应被记入日志,则维护第一监控器事务日志。

13.一种光纤信道交换机,包括:

耦合到外部光纤信道网络实体的光纤信道线路卡;

通过背板耦合到所述光纤信道线路卡的第一监控器,其中所述第一监 控器是活动监控器;

耦合到所述第一监控器的第二监控器,其中所述第二监控器是备用监 控器;

其中所述第一监控器被配置为识别与来自所述外部光纤信道网络实体 的、变更所述第一监控器状态的消息相关联的高可用性特性,并在所述消 息被传递到所述第二监控器之前向所述外部光纤信道网络实体发送确认。

14.如权利要求13所述的光纤信道交换机,其中所述第一监控器还被 配置为在将所述消息传递到所述第二监控器之前,将与所述消息相关联的 提前通知发送到所述第二监控器。

15.如权利要求14所述的光纤信道交换机,其中所述提前通知是与所 述消息相关联的序号。

16.如权利要求14所述的光纤信道交换机,其中在向所述外部光纤信 道网络实体发送确认之前,同步地发送所述提前通知。

17.如权利要求16所述的光纤信道交换机,其中在所述消息被确认之 后,异步地发送所述消息。

18.如权利要求14所述的光纤信道交换机,其中所述第二监控器被配 置为使用所述提前通知来验证其内部状态的一致性。

19.如权利要求14所述的光纤信道交换机,其中所述第一监控器包括 第一待处理事务缓冲区。

20.如权利要求19所述的光纤信道交换机,其中将所述消息拷贝到所 述第一待处理事务缓冲区中,并将对所述消息的引用提供给运行在所述第 一监控器上的第一组应用。

21.如权利要求20所述的光纤信道交换机,其中运行在所述第一监控 器上的所述第一组应用是所述消息的预订者。

22.如权利要求20和21中任一项所述的光纤信道交换机,其中所述 第二监控器包括第二待处理事务缓冲区。

23.如权利要求22所述的光纤信道交换机,其中将所述消息拷贝到所 述第二待处理事务缓冲区中,并将对所述消息的引用提供给运行在所述第 二监控器上的第二组应用。

24.如权利要求23所述的光纤信道交换机,其中运行在所述第二监控 器上的所述第二组应用是所述消息的预订者。

25.如权利要求23所述的光纤信道交换机,其中如果所述消息的高可 用性特性指示出所述消息应被镜像映射,则将所述消息拷贝到所述第二待 处理事务缓冲区中。

26.一种用于在存储区域网络中的光纤信道交换机中实现高可用性的 设备,该设备包括:用于在第一应用处识别消息的装置,所述第一应用运行在所述光纤信 道交换机中的活动监控器上;

用于确定与所述消息相关联的高可用性特性的装置,其中高可用性特 性提供用于使第二应用与所述第一应用同步的信息,所述第二应用运行在 所述光纤信道交换机中的备用监控器上;

用于在高可用性特性指示出所述消息应被镜像映射时,将所述消息提 供给运行在所述备用监控器上的所述第二应用的装置。

说明书 :

技术领域

本发明涉及光纤信道网络交换机。更具体而言,本发明涉及为存储区 域网络(storage area network)中的光纤信道交换机实现高可用性(high availability)的方法和装置。高可用性包括诸如镜像映射、记日志、持久 性、应用的重初始化,以及切换(switchover)之类的服务。

背景技术

存在于光纤信道网络中的高可用性服务是非常有限的。光纤信道存储 区域网络的高可用性的一种形式是路由冗余。当一个诸如服务器之类的第 一存储区域网络实体试图将一条消息发送到一个诸如光纤信道结构(fiber channel fabric)中的磁盘阵列之类的第二存储区域网络实体时,所述消息 传送通过所述光纤信道结构中的多个交换机。如果一个特定的交换机发生 故障,则相邻的交换机可以识别出该故障,并沿替代路由传送所述消息。 替代路由可绕过发生故障的交换机以维持网络操作。然而,不是总可以绕 过发生故障的交换机。在一个例子中,发生故障的交换机可能直接连接到 目标磁盘阵列,而可能没有到目的地的替代路由。绕过发生故障的交换机 还可能扰乱光纤信道网络的操作。通过当前不得不承载额外流量的那些交 换机的流量可能会减慢。整个结构的总带宽可能会降低。
许多其它高可用性服务无法保留状态信息,这导致网络操作缓慢,或 导致应用的重初始化。
因此,希望提供用于在光纤信道交换机中提供高可用性、并且针对上 述局限性中的一些或全部而改进高可用性服务的方法和装置。

发明内容

可以使用冗余监控器来实现存储区域网络中的光纤信道交换机的高可 用性。活动监控器可以识别与消息相关联的高可用性特性,并确定所述消 息是否应被镜像映射到冗余监控器上、记入日志和/或设为持久性的。消息 可被记日志到待处理事务缓冲区中,并使用持久性存储服务来存储。可以 使用同步队列来执行镜像映射,所述同步队列使得消息能够被异步地传递 到冗余监控器,同时保持监控器之间的完全同步并几乎不对活动监控器的 操作造成延迟。
根据一个实施例,提供了一种用于在存储区域网络中的光纤信道交换 机中实现高可用性的方法。在第一应用处识别消息,所述第一应用运行在 光纤信道交换机中的活动监控器上。确定与所述消息相关联的高可用性特 性。高可用性特性提供用于使第二应用与所述第一应用同步的信息,所述 第二应用运行在所述光纤信道交换机中的备用监控器上。当高可用性特性 指示出所述消息应被镜像映射时,将所述消息提供给运行在所述备用监控 器上的所述第二应用。
在一个例子中,还确定与所述消息相关联的预订者特性。预订者特性 所提供的信息用于确定运行在所述活动监控器上的哪些应用已经预订了要 接收所述消息。
在另一实施例中,提供了一种光纤信道交换机。该光纤信道交换机包 括耦合到外部光纤信道网络实体的光纤信道线路卡,通过背板耦合到所述 光纤信道线路卡的第一监控器以及耦合到所述第一监控器的第二监控器, 其中所述第一监控器是活动监控器且所述第二监控器是备用监控器。所述 第一监控器被配置为识别与来自所述外部光纤信道网络实体的、用于变更 所述第一监控器状态的消息相关联的高可用性特性,并在所述消息被传递 到所述第二监控器之前向所述外部光纤信道网络实体发送确认。
在本发明说明书的以下部分和附图中,将更详细地介绍本发明的这些 及其它特征和优点,在附图中示例性地图示了本发明的原理。

附图说明

通过结合附图来参照以下描述,可以最好地理解本发明,附图是对本 发明具体实施例的图示。
图1示出了可使用本发明技术的一个网络。
图2示出了可实现本发明技术的一个交换机。
图3示出了在光纤信道交换机上运行多种应用的活动监控器和冗余监 控器。
图4示出了MTS(Message Transaction Services,消息事务服务)组 件。
图5A-5B是示出活动监控器和备用监控器之间的事务的处理流程图。
图6是以前后紧接(lockstep)的方式示出活动监控器和备用监控器之 间的消息传递的事务处理图。
图7是示出根据各个实施例,在活动监控器和备用监控器之间的消息 传递的事务处理图。
图8是示出活动监控器上应用的重初始化的处理流程图。
图9是示出备用监控器上应用的重初始化的处理流程图。
图10示出了运行在监控器上的应用的可能状态。

具体实施方式

本发明涉及光纤信道结构中的安全性。更具体而言,本发明涉及在光 纤信道结构中提供高可用性交换机的方法和装置。
接下来将详细介绍本发明的一些具体实施例,其中包括发明人所构思 的用于实施本发明的最佳模式。在附图中图示了这些具体实施例的例子。 尽管本发明是结合这些具体实施例而描述的,但应当理解到,这并非意在 将本发明局限于所描述的实施例。相反,希望覆盖被包括在由所附权利要 求所定义的本发明的精神和范围之内的替代物、修改物和等同物。
例如,将会在特定的光纤信道交换机体系结构的上下文中对本发明的 技术进行描述。然而应当注意的是,本发明的技术可被应用于具有许多不 同的组件和系统的多种不同的交换机体系结构。在以下描述中,阐述了大 量具体细节以提供对本发明的透彻理解。没有这些具体细节中的一些或全 部也可实施本发明。此外,并未详细描述公知的处理操作,以免不必要地 模糊了本发明。
图1示出了可使用本发明技术的一个网络。光纤信道结构131可包括 多个网络实体,例如交换机111和113以及一般服务提供者115,一般服 务提供者115也可以是另一个交换机。这些交换机可被用来互连节点 101、103、105和107。节点101、103、105和107可以是下述实体,例如 服务器、磁带库、RAID(独立磁盘冗余阵列)、磁盘阵列或简单磁盘捆 绑(JBOD)。图1所示的光纤信道体系结构是一种基于交换机的体系结 构。然而应当注意的是,可以使用诸如仲裁环(arbitrated loop)和点到点 之类的多种不同的体系结构来实现光纤信道网络。
在一个实施例中,光纤信道结构131是一个存储区域网络,其通过一 个诸如光纤信道到IP网关121之类的设备连接到传统的IP网络141。光纤 信道存储区域网络中的高可用性一般是通过使用替代性路由来保证的。当 一个特定交换机发生故障时,被配置为穿过发生故障的交换机的流量被重 路由到替代交换机。然而,将流量路由到替代交换机会造成扰乱,并降低 存储区域网络中的可用带宽。根据各个实施例,提供了多种用于在单个光 纤信道交换机中提供高可用性的技术。在此将用于使交换机变为高度可用 的诸如冗余之类的机制称为高可用性。
图2示出了可被用来实现本发明技术的一个光纤交换机。光纤信道交 换机201可包括一个或多个监控器(supervisor)211和213。在此将下述 系统称为监控器,所述系统包括处理器及其自身的地址空间,所述地址空 间可被用来在光纤信道结构中对消息进行定向。在一种具体实现中,监控 器211被配置为活动的或主要的监控器,而监控器213被配置为备用的或 备份的监控器,用于光纤信道交换机的高可用性。备份监控器可被配置为 在活动监控器发生故障时承担光纤信道交换机201的操作。根据各个实施 例,每个监控器都具有其自身的处理器、存储器和存储资源。
在一个实施例中,活动监控器211可以通过一个与背板(backplane) 215无关的直接链路而与备用监控器213相连,或者这两个监控器可以通 过与线路卡(line card)203、205和207共享的一个公共背板而相连。活 动监控器211可通过背板接口逻辑231而连接到背板215,而备用监控器 213可通过背板接口逻辑233而连接到背板215。根据各个实施例,背板 215是以太网型的网络。线路卡203、205和207可以通过接口电路223、 225和227以及背板215而与活动监控器211通信。背板215可为线路卡 与监控器之间的所有流量提供通信通路。单独的线路卡203和207还可通 过光纤信道(FC)端口243和247而耦合到外部光纤信道网络实体251和 253。外部光纤信道网络实体251和253可以是下述节点,例如其它光纤 信道交换机、磁盘、RAID、磁带库或服务器。
应当注意的是,交换机可以支持任意数量的线路卡和监控器。在一个 实施例中,只有一个监控器连接到背板215,并且这一个监控器与许多不 同的线路卡通信。
图3示出了图2所示的活动监控器和备用监控器。虽然活动监控器 211和备用监控器213不一定相同,但是监控器211和213可包括多种类 似的模块和组件。为避免混淆,接下来将更详细地描述与活动监控器211 有关的各个组件和模块,应当理解到这些描述也适用于备用监控器213的 相应组件和模块。
根据一个具体实施例,活动监控器211可被配置或设计为运行多个应 用,例如路由应用321、域管理器应用325、系统管理器应用327和公用 应用323。根据一个实施例,路由应用321被配置为提供消息转发和路由 功能。公用应用323可被配置为提供系统时钟和时间截功能。域管理器应 用325可被用来在光纤信道存储区域网络中分配域。各种监控器应用还可 被配置为对于多个光纤信道协议层提供诸如服务质量(QoS)之类的功 能。
系统管理器可被配置为发起并监视各个应用。根据各个实施例,系统 管理器应用被用来发起监控器中的各种其它应用。系统管理器还可以是唯 一的清楚一个应用是位于活动监控器中还是备用监控器中的应用。在一种 具体实现中,系统管理器负责实现所述各个应用的高可用性策略。系统管 理器可以产生(spawn)进程,监视进程健康状况,并且只要有一个应用 发生故障就重启动各个应用。系统管理器还可以负责确定何时可能倾向于 切换到备用监控器而非重启动应用。也就是说,系统管理器可以确定故障 的严重性,以确定是重启动应用还是将控制权从活动监控器转移到备用监 控器。在一个例子中,任何希望启动应用的组件都通过系统管理器来启动 所述应用。
根据各个实施例,通过系统管理器启动应用的请求包括应用到该特定 应用上的高可用性策略。高可用性策略的一个例子是当进程或应用终止时 不进行任何操作。这样,系统管理器就无需在应用终止时重启动该应用。 高可用性策略的另一个例子是重启动应用。如果对应用的重启动未持续长 于预定秒数的时间,则停止重启动的尝试,转而尝试切换。系统管理器随 后可以将活动性切换到备用监控器。应当注意的是,应用可由系统管理器 在各种时刻启动,所述时刻例如是在引导序列(boot sequence)期间,或 者是在接收到来自其它应用的显式请求的时候。
活动监控器211还可包括耦合到存储器315的处理器313。应当注意 的是,为清楚起见而将组件描述成单数。本领域技术人员应当意识到,在 此上下文以及其它上下文中,可以使用多个处理器和多种存储器格式,而 仍落入本发明的范围当中。存储器315可以包括可由处理器313寻址的同 步静态随机访问存储器(SDRAM)存储单元,用于存储可由组件访问的 软件程序和数据结构。
监控器不仅包括存储器,而且还可包括持久性存储服务317,用于保 存应用信息或系统信息,例如状态信息,或者其它应用专用数据或系统数 据。应当注意的是,在此将任何被配置为提供对各个应用的持久性存储的 服务都称为持久性存储服务。根据各个实施例,任何应用都可绑定到 (bind to)与持久性存储服务317相关联的持久性表。在此将用于在光纤 信道交换机中持久性地维护诸如状态信息之类的信息的数据结构和机制称 为持久性表。
每个持久性表318都可与一个唯一的标识符相关联。当一个应用的第 一实现版本(incarnation)试图绑定到一个与所述应用相关联的特定表 时,该表可能还不存在,而是随后由持久性存储服务317创建。然后,与 所述特定应用相关联的持久性表318可在所述应用的运行期间被填充。如 果应用崩溃(crash)或以其它方式终止,则持久性表318可以保持不变。 然后,所述应用的下一实现版本可以试图绑定到同一个表。所述绑定的结 果是,新产生的应用可以访问由所述应用的先前实现版本存储在现有的持 久性表318中的数据。
在一个例子中,持久性表使得新产生的应用可以立即访问由所述应用 的先前实现版本所存储的状态信息。这可以允许新产生的应用继续操作而 不会中断。应当注意的是,持久性表无需具有特定的表格式。例如,持久 性表可以是文本数据文件或原始数据文件。此外,持久性存储服务317本 身不需要知道存储在持久性表318中的是什么。应当注意的是,可以用不 同于每个应用的运行时数据库的方式来组织持久性表。根据各个实施例, 持久性表可以提供用于对多个运行时数据库的信息进行补充的信息。
活动监控器211还可包括耦合到冗余和高可用性(HA)管理器311的 冗余驱动器335。冗余驱动器335可耦合到备用监控器中的冗余驱动器 385。可使用各种硬件信号来传达每个系统的可用性。
根据各个实施例,活动监控器还可包括MTS 331。在此,用于在活动 监控器的多个应用之间传递消息,以及用于在活动监控器和备用监控器之 间传递消息的任何机制都被称为MTS。
本领域技术人员将会意识到,多个应用可以使用一般称为套接口 (socket)和消息队列的现有机制来彼此通信。在一种使用套接口的实现 中,在内核存储器空间中分配了一个缓冲区。希望向另一应用发送消息的 应用将所述消息从应用空间拷贝到内核空间中的所述缓冲区。然后,将所 述消息从所述内核缓冲区拷贝到与目的地相关联的目标缓冲区中。然而, 套接口有若干缺点。从应用空间到内核空间以及回到应用空间的消息拷贝 是一种资源密集型的处理。此外,套接口是一种点到点的机制,其一般只 允许单个应用与另外一个应用通信。而且套接口是临时的。即,如果套接 口存在任何问题,信息就丢失了。在套接口体系结构中,难以恢复由于各 个套接口的问题而导致丢失的消息。
多个应用彼此通信的另一种机制一般被称为消息队列。在内核空间中 分配了一个全局缓冲区。来自应用的消息被拷贝到该全局缓冲区中。如果 一个应用终止,则只要所述全局缓冲区存在,所述消息就存在。然而,消 息队列仍旧只允许单个应用与另外一个应用通信。
根据各个实施例,本发明的技术提供了MTS 331,该MTS 331为一个 应用与一个或多个目标应用之间的任何通信分配了一个消息队列339。 MTS 331还允许各监控器之间的通信。消息队列339可以是一个允许多个 目标应用进行访问的全局队列。在一个例子中,消息队列339提供了到域 管理器325和公用应用323的引用,允许这两个应用访问消息队列339中 的消息。消息队列339中的所述消息无需被拷贝到目标应用。MTS 331还 提供了一个待处理事务缓冲区337,用于保存下述消息,所述消息已在消 息队列339中被访问,但还未被与应用相关联的特定线程所处理。
在一个例子中,待处理事务缓冲区337保存下述消息,所述消息已从 消息队列339中出队,但还未在应用空间中被所有能够访问所述消息的应 用所处理。MTS 331还包括同步队列333,其使得在活动监控器211中处 理的消息可以异步地与备用监控器213同步。即,消息被同步到备用监控 器,而没有引起活动监控器上的操作延迟。在典型的实现中,如果活动监 控器从外部实体接收到一条消息,则活动系统在所述消息被转发到备用系 统,并且活动系统从备用系统接收到响应之前,不会对所述外部实体进行 响应。然而,这种纯同步技术在等待来自备用系统的响应的期间延迟了活 动系统的操作。
根据本发明的技术,活动监控器可以立即对外部实体进行响应,而不 必等待来自备用监控器的响应,同时仍通过使用同步队列在活动监控器和 备用监控器之间提供同步。下面将提供关于MTS和同步队列的更多细 节。
如上所述,MTS 331被配置为允许一个应用与监控器内的多个应用通 信,还允许不同的监控器彼此通信。MTS 331还可被配置为提供高可用性 服务。例如,为了提供高可用性服务,MTS 331识别每条消息的高可用性 特性。图4示出了消息401可能具有的高可用性特性。消息可能是持久性 的403、被记入日志的405以及被镜像映射的407。在此将用于提供高可 用性服务的任何特性称为高可用性特性。
持久性消息一般是导致状态改变的消息。例如,域无效化消息可能导 致运行在活动监控器上的各个应用的状态发生改变。如果在消息仍处于消 息队列中期间,一个应用将要崩溃,则希望所述消息能持久到足以通过所 述应用的崩溃和重启动的过程。如果所述消息不是持久性的,那么应用将 会崩溃,而该应用的下一实现版本将无法接收状态变更事件,并因而可能 具有与其它实体不同的状态。
日志消息一般是导致持久性表更新的消息。在一条消息从消息队列中 出队之后,该消息可能不会被立即处理并提交给持久性表。如果一个应用 在一条消息出队之后但在对持久性表进行更新之前崩溃,则该持久性表可 能与外部实体的持久性表不一致。根据各个实施例,可被用来更新持久性 表的消息被标记为日志。当应用终止时,日志消息保持不变,并且所述应 用的将来实现版本可以访问所述已出队的消息并更新所述持久性表。
消息还可能具有镜像映射这一高可用性特性。如果一条消息可被镜像 映射,则活动监控器上的MTS组件可以试图将该消息传递给备用监控器 的MTS组件。而且,具有镜像映射这一高可用性特性的消息一般是导致 状态改变或导致对持久性表进行更新的消息。具有持久性但不被镜像映射 的消息的例子包括任何“获得”消息的请求。根据各个实施例,当一个应 用将对某些数据的“获得”请求发送到一个服务器时,该服务器可能不得 不应答,从而使所述消息成为持久性的,但该服务器不必同步所述信息。 所获取的数据可被客户端用来更新表。被镜像映射但不被记入日志的消息 可包括不改变服务器状态的消息。应当注意的是,对于同一消息,持久性 和日志的选项对于服务器和客户端来说是独立存在的。
MTS组件还可被配置为识别被设置来接收消息队列中的某一消息的应 用。如上所述,应用预订(subscribe to)感兴趣的特定消息。例如,公用 应用可能预订与域更新有关的任何消息。MTS组件对与每个消息或消息类 型相关联的有关的预订者特性进行跟踪。在此,用于识别哪些预订者被配 置为接收特定消息的数据和信息被称为预订者特性。当接收到的通信具有 特定的预订者特性,例如属于特定的消息类型时,MTS组件就将该消息转 发给任何预订者。
图5A和5B是示出活动监控器和备用监控器之间的事务的处理流程 图。图5A示出了发送者处的处理流程。在501,在共享的消息池中创建 一条消息。在503,识别出全局和局部的发送者高可用性特性。根据各个 实施例,消息与诸如上述的镜像映射、记日志和持久性之类的特性相关 联。如果在505确定出所述消息具有镜像映射特性,则在521将所述消息 异步地传递到备用监控器的MTS组件。根据一个实施例,使用同步队列 来传递消息。下面将提供关于使用同步队列将消息传递到备用监控器的更 多细节。
在509,确定所述消息是否具有记日志特性。如果确定出所述消息具 有记日志特性,则在所述消息出队但还未被提交给持久性表时,在525将 日志信息写入到待处理事务缓冲区中。在511,可以通过在预订者队列中 创建到消息池中所述消息的引用,而将所述消息传递给各个预订者。
图5B示出了接收者处的处理流程。在551,抽取预订者队列中的第一 引用。该引用使得预订者可以访问共享消息池中的一条消息。在553,识 别诸如持久性和日志特性之类的高可用性特性。如果在557所述消息具有 持久性特性,则在573将所述引用保持在所述队列中。如果在559所述消 息具有记日志特性,则在575写日志信息,并且预订者可以继续在561使 用所述消息来执行应用专用处理。在563,所述消息被丢弃。
图6是以前后紧接的方式示出活动监控器和备用监控器之间的消息传 递的事务处理图。在601,诸如外部光纤信道交换机之类的外部实体将一 条消息发送到活动监控器(在611)。为了保持同步操作,活动监控器并 不向所述外部实体立即发送应答。相反,活动监控器在613处将所述消息 转发给备用监控器(在621),以使备用监控器与活动监控器同步。在 623,备用监控器将对所述消息的确认或应答发送到活动监控器(在 615)。当接收到确认或响应时,活动监控器在617将确认或响应发送到 外部实体(在603)。虽然此事务序列保持了活动监控器和备用监控器的 完全同步,但因为活动监控器在向外部实体发送响应之前等待来自备用监 控器的响应,所以增加了活动监控器的响应时间。对于外部实体来说,活 动监控器的响应时间可能显得很长。
图7是示出根据本发明的技术,在活动监控器和备用监控器之间的消 息传递的事务处理图。在701,外部实体将一条消息发送到活动监控器 (在711)。活动监控器可在713生成MTS消息,并将其发送到同步队列 (在721)。然后,活动监控器可以继续在715同步地将一个序号发送到 备用监控器(在731)。
应当注意的是,当活动监控器将MTS消息发送到同步队列时,同步 队列中可能有其它消息。同步队列保持来自活动监控器的消息的顺序。
在733,备用监控器可将对所述序号的确认发送到活动监控器(在 717)。无需等待对接收到MTS消息的确认,活动监控器在719就可确认 来自所述外部实体的消息(在703)。然后,可在一个稍后的时间将该 MTS消息从同步队列(在723)转发到备用监控器(在735)。
虽然这减少了活动监控器的响应时间,但如果在外部实体接收到对消 息的确认的时间和备用监控器接收到所述消息前的中间发生故障的话,则 该方案可能导致结果不一致,。
这段故障期741可能导致状态的不一致,因为外部实体可能会以为备 用监控器已接收到并确认了一条消息,而实际上备用监控器还未接收到该 消息。为了解决故障期741的问题,活动监控器在713向备用监控器731 发送提前通知,告诉备用监控器期待一条消息。在一个实施例中,活动监 控器在715向备用监控器731发送序号,告诉备用监控器期待一条消息。 如果一直未在735处接收到消息,则备用监控器可以执行某些维护操作。 在一个例子中,备用监控器可以让外部实体重新发起序列。
图8是示出一个应用的带状态(stateful)初始化的处理流程图。在 801,确定对于一个特定应用是否有可用的持久性信息或持久性表。如果 确定出没有可用的持久性表,则在821,在没有状态信息的情况下将所述 应用初始化。如果有可用的持久性表,则所述应用在803绑定到持久性 表。应当注意的是,这里的持久性表是由所述应用的早先实现版本创建 的。在805,从待处理事务缓冲区获取待处理事务。在807,纠正持久性 表中的不一致。在809,可以用来自持久性表的信息来填充一个运行时数 据库。在811,可以提交待处理的事务。然后在813,可以将消息队列中 的消息出队。
图9是示出在备用系统上的一个应用的带状态初始化的处理流程图。 在901,确定持久性信息是否可用。如果没有可用的诸如持久性表信息之 类的持久性信息,则在921,所述应用在没有状态信息的情况下初始化。 在903,用活动系统上的持久性数据库的快照来填充与所述应用相关联的 运行时数据库。在905,可以用初始同步(initial synchronization)来填充 备用系统上的运行时数据库。在907,所述应用可以登记或预订以得到消 息或事件。在一个例子中,所述应用向MTS组件登记或预订以得到消息 或事件。在931,等待切换(switchover)。在切换时,所述应用可在909 接收关于待处理事务的信息,并可在911完成或异常终止(abort)待处理 事务。此时,备用系统上的所述应用可在913进入活动状态。图9示出了 一个能进行切换的应用的处理流程。根据各个实施例,一个应用可以落入 几种高可用性状态中,所述高可用性状态例如是备用、等待恢复和活动状 态。
图10示出了能进行切换的应用的可能状态。当一个应用运行在备用 监控器上时,所述应用从备用模式1001开始。当应用处于备用模式1001 时,其负责更新运行时上下文,使得其在发生切换时可用。根据各个实施 例,所述更新是由与所述应用相对应的活动应用所驱动的。
可以使用活动持久性数据库的快照来构建初始运行时数据库,所述活 动持久性数据库应请求而由持久性存储服务来同步。为了使快照一致,用 到了相对应的活动应用。相对应的活动应用告诉持久性存储服务何时适于 进行初始同步。从初始快照出发,备用模式中的应用可以使用事件来更新 运行时数据库并更新持久性数据库。在一个实施例中,不允许对持久性数 据库进行额外的同步。
当发生切换时,进入等待恢复状态1003。等待恢复状态1003是所有 备用应用的同步点。如果活动监控器崩溃,则该活动监控器可能留下了一 些待处理的工作。消息事务服务组件利用相关的相对应的活动应用来通知 每个应用,还剩下何种未决的事务。备用应用可以确定是有足够的可用信 息可用于向前执行并完成事务,还是事务已经失败。在此阶段中还可提交 已完成的待处理事务。
当已在所有应用队列中排队了一个恢复完成事件时,每个备用应用就 可进入近似活动状态1005。在此状态下,应用基本上是活动的,但其并非 完全活动,因为在某些时间,所述应用将会接收到在生成者转到活动状态 之前已生成的事件。在一个诸如后切换(post-switchover)事件之类的事件 之后,所述应用进入活动状态1007。
在任何时候,应用都可能会具有迫使其终止的故障条件。当一个应用 终止时,系统管理器可以采取不同的动作。如果应用从备用状态1001终 止,则备用系统管理器可以尝试重启动该应用。如果给定数量的重启动尝 试失败,则禁止高可用性。如果应用从等待恢复状态1003终止,则该应 用的恢复阶段失败,并且所述应用无法对与其交互的其它应用进行适当的 清理(clean up),因此整个系统的状态可能变得不一致。系统可以杀死
(kill)所有高可用性应用并全部重启动,或者可以重启动单个应用。如果 应用从近似活动状态1005或活动状态1007终止,则可以使用可重启动应 用的通常行为。
因为可以采用这种信息和程序指令来实现这里所描述的系统/方法,所 以本发明涉及包括用于执行这里所描述的各种操作的程序指令、状态信息 等在内的机器可读介质。机器可读介质包括但不局限于:诸如硬盘、软 盘、随机访问存储器(RAM)和磁带之类的磁介质;诸如CD-ROM盘之 类的光介质;诸如光盘之类的磁光介质;以及被专门配置用来存储和执行 程序指令的硬件设备,例如只读存储器设备(ROM)和RAM。本发明还 可被包含在通过诸如无线电波、光路、电线等适当的介质传播的载波中。 程序指令的例子既包括诸如由编译器生成的机器码,又包括含有可由使用 解释器的计算机来执行的高级代码的文件。
尽管已经特别示出并参照其具体实施例而描述了本发明,但本领域技 术人员将会理解到,在不脱离本发明的精神和范围的情况下,可以对所公 开的实施例的形式和细节做出改变。因此,希望将本发明解释为包括落入 其真正精神和范围之内的所有变形和等同物。