CN107430606A - 具有并行持久性的消息代理*** - Google Patents

具有并行持久性的消息代理*** Download PDF

Info

Publication number
CN107430606A
CN107430606A CN201580075038.8A CN201580075038A CN107430606A CN 107430606 A CN107430606 A CN 107430606A CN 201580075038 A CN201580075038 A CN 201580075038A CN 107430606 A CN107430606 A CN 107430606A
Authority
CN
China
Prior art keywords
event
message
computer system
master agent
message event
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201580075038.8A
Other languages
English (en)
Other versions
CN107430606B (zh
Inventor
J.A.富吉特
T.肯利
S.霍达
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Information Science LLC
Original Assignee
Information Science LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Information Science LLC filed Critical Information Science LLC
Publication of CN107430606A publication Critical patent/CN107430606A/zh
Application granted granted Critical
Publication of CN107430606B publication Critical patent/CN107430606B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/30Decision processes by autonomous network management units using voting and bidding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/34Flow control; Congestion control ensuring sequence integrity, e.g. using sequence numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • G06Q40/04Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1895Arrangements for providing special services to substations for broadcast or conference, e.g. multicast for short real-time information, e.g. alarms, notifications, alerts, updates
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/06Management of faults, events, alarms or notifications
    • H04L41/0654Management of faults, events, alarms or notifications using network fault recovery
    • H04L41/0668Management of faults, events, alarms or notifications using network fault recovery by dynamic selection of recovery network elements, e.g. replacement by the most appropriate element after failure
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/02Topology update or discovery
    • H04L45/04Interdomain routing, e.g. hierarchical routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/70Admission control; Resource allocation
    • H04L47/78Architectures of resource allocation
    • H04L47/782Hierarchical allocation of resources, e.g. involving a hierarchy of local and centralised entities
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/21Monitoring or handling of messages
    • H04L51/23Reliability checks, e.g. acknowledgments or fault reporting

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Business, Economics & Management (AREA)
  • Accounting & Taxation (AREA)
  • Finance (AREA)
  • Technology Law (AREA)
  • Strategic Management (AREA)
  • Marketing (AREA)
  • Physics & Mathematics (AREA)
  • General Business, Economics & Management (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Economics (AREA)
  • Development Economics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer And Data Communications (AREA)
  • Hardware Redundancy (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

消息代理计算机包括主代理、多个从消息代理和事件储存器。客户端***将用于处理的消息发送到主代理。主代理响应于接收到这样的消息而生成消息事件,并将消息事件并行地分发给从代理和事件储存器。事件储存器中的每一个将消息事件存储在持久性储存器中,并向主代理通知消息事件已经被持久存留。主代理将消息视为在法定数的事件储存器中被稳定化。由于主代理直到消息传递事件被稳定化才采取动作,因此在故障转移的情况下,新主代理能够在不损失数据的情况下重构旧主代理的代理状态。

Description

具有并行持久性的消息代理***
相关申请的交叉引用
本申请要求下述申请的权益:2014年12月1日提交的美国临时申请No. 62/086,111;以及2015年11月30日提交的美国申请No. 14/954,731;每一个申请以其全文通过引用并入本文。
技术领域
本文描述的主题总体上涉及消息代理计算机***,并且具体涉及具有并行持久性的主/从消息代理计算机***。
背景技术
消息速度和可靠性是针对消息传递应用的关键性能要求。例如,金融市场在速度方面竞争,并且高速贸易能力已经变成针对最大金融服务公司和一些投资基金的性能区分因素。存在针对将它们的全球操作相联系的高效、高吞吐量、低等待时间且更安全的方法的需求。当前解决方案一般利用要求共享数据库/文件***的主/从代理架构。然而,共享数据库/文件***远远不是理想的,这是由于其变成单个故障点,使得如果共享数据库/文件***发生故障,则整个***停掉——并且数据(例如,代理业务订单)可能潜在地丢失。
附图说明
图1是图示了根据一个实施例的适于实现消息代理***的联网计算环境的高级框图。
图2是图示了根据一个实施例的代理内的模块的详细视图的高级框图。
图3是图示了根据一个实施例的在发生故障的主代理的情况下确定最后稳定消息事件时的不确定性的时间图表。
图4A-C是根据一个实施例的使用消息代理***以处理消息的方法的交互图。
图5是图示了根据一个实施例的用于从从代理转变到主代理的方法的流程图。
图6A是根据一个实施例的处理消息的消息代理***的复制流和复制事件储存组件的类图。
图6B是根据一个实施例的处理消息的消息代理***的长期储存组件的类图。
图6C是根据一个实施例的处理消息的消息代理***的事件储存器和消息代理之间的接口。
图7是根据一个实施例的适于在图1中描绘的联网环境中使用的计算***的组件的高级框图。
具体实施方式
被配置为使用不分享任何事物的架构的主/从消息代理计算机***的消息代理计算机***结合高可靠性而提供了低等待时间的消息传递。消息代理计算机***包括至少三个代理,其中之一被配置为主代理并且其他代理被配置为从代理。消息代理***包括多个事件储存器。客户端生产者计算机***向主代理发送用于处理的消息。主代理响应于接收到这样的消息而生成消息事件,并与从代理和事件储存器并行地分发消息事件。事件储存器中的每一个将消息事件存储在持久性储存器中,并向主代理通知消息事件已经被持久存留。因为消息事件持久存留在法定数的事件储存器上,所以主代理将消息视为稳定化的,主代理不需要从从代理获得确认。法定数的事件储存器是至少两个事件储存器。在一些实施例中,法定数可以是事件储存器的大多数。在从代理持久存留消息传递事件之后,其分别通知事件储存器。由于主代理直到消息传递事件被稳定化才采取动作,因此在故障转移的情况下,新主代理能够在不损失数据的情况下重构旧主代理的代理状态。
在故障转移(例如,主代理终止操作或针对服务而停掉)的情况下,从代理被配置成从从代理的池中选取新主代理。新选取的主代理能够从事件储存器恢复任何稳定化消息事件。新选取的主代理从事件储存器检索其没有记录的消息事件,并使用消息事件流来识别最大邻接消息事件(MCM)。基于MCM,新主代理使用MCM来识别同步点,该同步点是与MCM相关联的元数据中的反向指针所指向的序列号。新主代理然后重新发布具有高于同步点序列号的序列号的任何消息事件,并将消息代理中的代理状态更新成对应于MCM。随着不同从代理在不同时间处接收到消息事件,从代理可以具有不同代理状态(理想地,它们将是相同的——并反映主代理的代理状态)。重新发布的消息事件包括指示存在新主代理的元数据。从代理被配置成丢弃来自旧主代理的具有比同步点晚的同步号的消息事件。相应地,新主代理能够以不导致稳定化数据的损失的方式在故障之前完全恢复旧主代理的代理状态。
各幅图(各图)和以下描述仅作为说明而描述其中消息代理***被应用于计算机网络的某些实施例。本领域技术人员将从以下描述中认识到,消息代理***可以被应用于相互关联的元件的其他基于计算机的表示,并且,在不脱离本文描述的原理的情况下,可以采用本文说明的结构和方法的可替换实施例。现在将参照若干实施例,其示例在附图中图示。应当注意,在可实践的任何地方,类似或相似的附图标记都可以被用在各幅图中并可以指示类似或相似的功能。
图1是图示了用于促进消息代理计算机***100的环境的实施例的框图。该环境包括生产者客户端110、消费者客户端120、事件储存器130A、130B和130C、以及从代理140B和140C,每一个通过网络110耦合到主代理140A。这里,图示了仅一个生产者客户端110和消费者客户端120,但在实践中,将存在这些实体中的每一个的许多实例,典型地为数千个或更多实例,从而要求用于在它们之间递送消息的高速且可靠的机制。此外,尽管图示了仅两个从代理和三个事件储存器,但一些实施例包括附加的从代理和/或事件储存器。如本领域技术人员领会和理解的那样,***和方法以及本文描述的方法固有地且必要地使用在电编码信号上操作的物理有形计算机***而执行;本文描述的方法和操作在任何情况下都不可以由人类(或人类的组)或通过智力步骤执行。因此,术语“主代理”、“从代理”、“消息代理”、“客户端”和“消息储存器”应被理解为指代物理计算机***,而不是人类或智力过程。
网络105在生产者客户端110、消费者客户端120、事件储存器130A、130B和130C、从代理140B和140C、主代理140A之间提供通信基础设施。网络105典型地是因特网,但可以是任何网络,包括但不限于局域网(LAN)、城域网(MAN)、广域网(WAN)、移动有线或无线网、专用网或虚拟专用网。
生产者客户端110是执行计算机程序模块(例如,客户端应用)的计算设备,该计算机程序模块将消息传达给主代理140A。消息是数字数据。消息可以是例如代理业务订单、银行交易、温度读数、可由消息代理***100复制和持久存留的某其他数据、或其某种组合。生产者客户端110可以例如是在耦合到主代理140A的台式计算机上运行的定制应用,该台式计算机正在企业级服务器上运行。在其他实施例中,生产者客户端110是企业的网络服务器,该网络服务器响应于从访问该网络服务器的用户接收到的指令、使用个人计算机、智能电话等上的浏览器应用来生成消息。在一些实施例中,生产者客户端110可以是超级消息传递排队应用和/或JAVA消息传递服务应用。生产者客户端110将消息(例如,股票的销售订单)提供给主代理140A。在一些实施例中,生产者客户端110可以使用从The ApacheSoftware Foundation™可得的OPENWIRE协议和/或高级消息排队协议(AMQP)来与主代理140A通信。
消费者客户端120是执行计算机程序模块(例如,客户端应用)的计算设备,该计算机程序模块将消息传达给主代理140A。在一些实施例中,消费者客户端120是企业中的后端服务器,其处理其从主代理140A接收到的消息。在一些实施例中,消费者客户端120可以与调节器或将消息发送到调节器的计算设备相关联。在一些实施例中,消费者客户端120可以是超级消息传递接收器应用和/或JAVA消费者应用。在一些实施例中,消费者客户端120可以使用AMQP和/或OPENWIRE协议来与主代理140A通信。如针对与主代理计算机***(例如,与AMQP或OPENWIRE协议)的互操作而配置的那样,客户端110、120的操作和功能扩展超出一般计算机***的基本一般功能。
事件储存器130A、130B、130C是数据储存器,其每一个都包括一个或多个非瞬变计算机可读介质且被配置成存储从主代理140A接收到的消息事件。一旦事件储存器130A、130B、130C已经存储(也被称作持久存留)消息事件,事件储存器130A、130B、130C就向主代理140A通知使用稳定性通知成功地持久存留了消息事件。
在其中代理正在从从代理转变到主代理的实施例中,事件储存器130A、130B、130C还将同步信息提供给新选取的主代理。同步信息包括消息的序列信息,该序列信息包括已在该多个事件储存器130A、130B、130C中的每一个上持久存留的消息事件的最高序列号。事件储存器130A、130B、130C还可以将一个或多个所存储的消息事件提供给新选取的主代理。
代理140A、140B、140C包括一个主代理,并且其余代理是从代理。在该示例中,代理140A是主代理,并且代理140B和140C是从代理。然而,任何代理具有充当主代理或从代理的能力。此外,在主代理140A发生故障的情况下,其余从代理140B、140C之一被从代理选择为新主代理。下面关于图4进一步详细描述主选取过程。如本文描述的操作和功能所配置的那样,代理140提供了扩展超出一般计算机***的基本一般功能的特征和功能。例如,传统一般计算机***不作为其指令集、操作***软件、实用软件或其他应用的一部分而提供用于在现有主代理的故障转移的情况下从多个从代理中选取新主代理的功能。
代理140A、140B和140C中的每一个分别包括持久性储存器142A、142B和142C。持久性储存器142A、142B、142C包括一个或多个非瞬变计算机可读介质,且被配置成存储消息事件。由持久性储存器142A、142B、142C存储的数据包括描述关联代理140的代理状态的信息。例如,持久性储存器142将包括描述主代理140A的代理状态的信息,持久性储存器142B将包括描述从代理142B的代理状态的信息,等等。代理状态是已在该代理处持久存留的消息事件流的表示——且实际上描述每一个消息事件的净状态。
如上所指示,主代理140A生成消息事件。消息事件可以是许多不同类型(例如,入队、指派、消费、交易事件、管理事件(诸如创建或删除目的地队列)等)之一。主代理140A可以响应于接收到来自客户端生产者110、消费者生产者120的消息、来自事件储存器130A、130B、130C中的至少两个的针对特定消息事件的稳定化通知等,生成消息事件。主代理140A将所生成的消息事件分发给从代理140B、140C和事件储存器130A、130B、130C。
消息事件(还可以被称作复制事件)是连同由主代理140A添加的附加元数据一起从生产者客户端110接收到的消息。元数据包括以下数据字段:最后稳定序列号、最后稳定时期、以及序列号。时期和序列号字段表示唯一消息事件标识符。每当新主代理被选取时,时期递增,并且每当新消息事件被该主代理发布时,序列号递增(且在改变时期时重置到0)。“最后稳定”字段指示对主代理来说在其发送“新”消息事件时已知的最后稳定消息事件。例如,假定(时期0,序列号17)处的消息事件是由主代理140A发布的入队消息事件,指示生产者客户端110正在试图将持久性消息添加到代理中的队列。紧接在将该消息事件分发给事件储存器130A、130B、130C和从代理140B、140C之后,主代理140A不具有指示该消息事件在任何地方是否稳定的任何信息。然而,一旦事件储存器130A、130B、130C将稳定性通知发送回到主代理140A,代理140A就将指示(时期0,序列号17)处的消息事件(在盘上)稳定的信息存储在事件储存器130A、130B、130C中的一个或多个处。当其发布其下一个消息事件(时期0序列号18)时,主代理140A会在该下一个消息事件中将最后稳定时期和最后稳定序列号分别设置成0和17,以指示直到(且包括)时期0序列号17的先前事件现在稳定。
主代理140A是消息传递***中的被配置成对消息事件的元数据进行处理且响应于这样的元数据而选择性地实施动作的仅有实体。这简化且减少了可在下述消息传递***中出现的状态的该数目:在该消息传递***中,利用处理逻辑将每一个实体配置成选择性地对消息元数据实施动作。在一个实施例中,由主代理140A进行的每次确定是通过下述操作来作出的:等待至少两个不同事件储存器130A、130B或130C指示已经对事件进行稳定化。一旦至少两个不同消息储存器130A、130B或130C已经指示消息事件被稳定化,主代理140A就被配置成对消息事件采取外部动作并在持久性储存器142A中更新其代理状态。附加地,主代理140A向从代理140B、140C和事件储存器130A、130B、130C分发描述最后消息传递事件的信息,该主代理140A已经通过周期性地发送出稳定性事件来确定该最后消息传递事件为经过稳定化的,该稳定性事件标识已被稳定化的最后消息传递事件的序列号和时期号。在恒定活动的状态中,主代理140A不需要发送出周期性稳定性事件,这是因为其将包括该信息作为每一个传出消息事件的一部分。相应地,从代理140B、140C可以将存储器中保持的消息事件安全地应用于其盘持久性层(即,持久性储存器),并且从代理可以利用该信息以在故障转移过程期间变成主代理时标识清洁切换点。
主代理140A和从代理140B、140C中的每一个维持代理状态。如上所讨论,代理状态是已在该代理处持久存留的消息事件流的表示——且实际上描述每一个消息事件的净状态。例如对于特定消息,入队消息事件、后跟有指派消息事件、后跟有消费消息事件可能导致对于该消息而言总体上为空的代理状态。相比而言,对于第二消息,可能已经生成仅入队消息事件,使得代理状态示出作为与第二消息相关联的当前状态的入队事件。
图2是图示了图1中描绘的代理140A、140B和140C(在该章节中被称作代理140)内的模块的详细视图的高级框图。代理140的一些实施例具有与这里描述的那些模块不同的模块。类似地,可以以与这里描述的方式不同的方式在模块之间分发功能。代理140由包括持久性储存器142、持久性模块220、主选取模块230和恢复模块240的模块组成。
持久性储存器142包括一个或多个非瞬变计算机可读介质,且被配置成在持久存留消息事件时存储代理140所使用的数据。持久性储存器142所存储的数据包括描述代理状态的信息。持久性储存器142的附加功能包括:基于代理状态来存储消息传递事件;周期性地将消息传递事件的流上滚到表示该时间处的快照的状态中,并且然后将该快照存储到持久性储存器;在应用新消息传递事件之前检索消息传递事件的快照;应用来自快照的复制事件或存储在存储器中的事件;以及其他这样的功能。
持久性模块220在作为主代理140A或者从代理140B或140C的操作期间控制代理140的操作。在一个实施例中,持久性模块220可以执行针对主代理的功能。针对主代理的功能包括:生成交易事件,诸如添加、指派或消费消息事件或者添加或删除目的地事件。随着消息事件被生成,主代理持久性模块220将复制事件消息并行地发送到从代理和事件储存器。一旦复制事件消息被发送出,持久性模块220就等待来自事件储存器的稳定性通知。稳定性通知是来自从代理或事件储存器的关于已经在其储存器中持久存留消息事件的确保。在从法定数(即,预定义数目)的事件储存器(例如,2个事件储存器)接收到稳定性通知时,持久性模块220确定消息事件已经被持久存留,并将其传达给消息事件的生产者客户端110。形成法定数的数目是可配置的,即,其可以被设置成3个、4个或任何其他数目的事件储存器。
对于主代理的持久性模块220所生成的每个消息事件,其将与先前稳定化的消息事件相关联的信息应用于消息事件的元数据。附加地,主代理的持久性模块220周期性地生成包括与最后稳定消息事件相关联的信息的稳定性消息事件。
持久性模块220进一步将消息事件发送到消费者客户端120,并等待来自消费者客户端120的关于其已经消费消息的肯定应答。持久性模块220然后生成其向从代理和事件储存器分发的移除消息事件。在接收到针对移除消息事件的稳定性通知时,主代理的持久性模块220从主代理140A的内部存储器中移除消息事件。
在一个实施例中,持久性模块220可以执行针对从代理的功能。在从主代理接收到消息事件时,从代理140B或140C的持久性模块220将其保持在内部存储器中。所接收到的消息事件包括元数据,该元数据包含与对主代理来说已知的最后稳定事件相关联的信息。持久性模块220提取包括在元数据中的信息,以检索指向最后稳定消息事件号的反向指针。从代理的持久性模块220将反向指针连同当前消息事件(也被称为当前消息事件流的快照)一起应用于持久性储存器142。
在从代理破损或必须被重启的情况下,该从代理可能领先于或落后于其他代理且因而具有不一致状态。从代理的持久性模块220有助于当从代理经由复制流协议再次出现回来时实现代理状态的一致性。例如,在从代理在任何其他代理或事件储存器之前接收到复制消息事件的仅部分的情况下,不在从主代理接收到与消息的快照相关的附加信息之前应用消息事件。如果从代理停掉达较小时间段,则从代理处的消息事件流几乎与由主代理分发的复制消息事件流同步。持久性模块220可以从事件储存器之一恢复丢失的消息事件,从而导致从代理与传出的复制消息事件流一致。在从代理停掉达较长时间段的情况下,从代理远远落后于当前复制消息事件流,恢复模块240被用于通过从代理入位过程来恢复从代理的状态。
恢复模块240可以在主代理的故障转移的情况下恢复在先主代理的代理状态,或者在从代理的故障转移或重启的情况下恢复从代理的代理状态。在主代理的故障转移情况下,下面详细描述的主选取模块230将从代理之一选取为新主代理。一旦新主代理被选取,恢复模块240就帮助将从代理状态转变到在先主代理的代理状态。恢复模块240确定复制流切换点,即,来自复制流的定义主代理将其标记为稳定(即,主代理接收到针对复制流中的所确定的消息事件的法定数的稳定性通知)的最后事件的序列号。
由于主代理已经发生故障,因此主代理需要被重启或被修复。这使从主代理检索最后稳定消息事件不方便且耗时。基于复制流协议,主代理关于每一个消息事件生成与最后稳定消息事件相关联的信息。当主代理发生故障时,消息事件可以在飞行中。基于飞行中的消息事件,下面描述确定最后稳定消息事件的实施例。
图3是图示了根据一个实施例的在发生故障的主代理的情况下确定最后稳定消息事件时的不确定性的时间图表。在图3的示例实施例的情况1中,事件储存器UMP3是具有所有飞行中的消息的仅有事件储存器。如果主代理和事件储存器UMP3同时发生故障,则不存在用于确定ms是最后稳定消息310的方式,在上面的情况中,最后良好点315是mx
在示例实施例的情况2中,事件储存器UMP2具有一些飞行中的消息,其所具有的最后消息(消息mk)反向指向最后稳定消息310 ms。事件储存器UMP3具有所有飞行中的消息。如果主代理和事件储存器UMP3同时发生故障,则消息mk是事件储存器UMP守护进程之间的最后可用消息,并且其反向指向最后稳定消息ms。消息[ms+1, mk]的状态将不是已知的。最后良好点是ms
从上面的示例实施例注意到,在确定最后稳定消息时存在不确定性。已知良好点后的消息事件可以被稳定化或可以不被稳定化。为了克服消息事件的状态的不确定性,如果存在间隙(即,没有事件储存器具有特定消息事件),则在已知良好点后可被稳定化或可不被稳定化的消息事件的范围来自直到间隙前的最后消息的已知良好点的下一个消息事件。
因此,为了恢复消息事件流,观察最大邻接消息(MCM),即,在遇到序列号间隙前观察到的最高序列号的消息。同步点进一步被确定为MCM的反向指针。同步点是流切换点。新主代理将利用针对所选取的主代理而确定的新时期号重新发布从同步点直到MCM的所有消息事件。另外,新主代理将在直到MCM的持久性储存器上更新其快照,并将其代理存储器状态重构为与MCM一致。一旦代理状态被恢复,主代理就可以开始生成消息事件并重新开始主代理的角色。
在另一实施例中,恢复模块240在从代理的故障转移或重启的情况下恢复从代理的代理状态。像不具有持久性或代理状态的新从代理那样对待破损的从代理。来自未破损的现有从代理的盘快照被拷贝过去到新的或破损的从代理。不具有状态的新代理将接收实况流且将暂时中止对其盘快照的周期性更新。现有代理将继续接收复制流,且还将暂时中止对其盘快照的周期性更新。现有代理然后将试图将整个盘快照发送到新代理。如果传输成功,则所有两个从代理均将具有相同的盘快照,且均将开始将来自存储器的它们的“经缓存的”事件应用于盘快照,且最终均将赶上实况流。
主选取模块230确定故障转移发生,并将从代理140B、140C之一选取为新主代理。在一些实施例中,主代理以周期性间隔将心跳信号发送到主选取模块230,例如,每毫秒发送心跳。周期性间隔是预定义的且是可配置的。主选取模块230经由缺少心跳信号达预定义超时间隔(例如,如果未接收到信号达一秒)而检测到主代理的故障。
主选取模块230进一步跟踪可被选取为主代理的有资格从代理的列表。在检测到主代理时,主选取模块230从所跟踪的有资格代理列表中选取新主代理。在一些实施例中,主选取模块230利用RAFT协议以从所跟踪的列表中选取新主代理。在主选取模块230选取新主代理的时间中,暂时的代理状态由恢复模块240创建,恢复模块240可以帮助从代理恢复发生故障的主代理的消息事件,并恢复发生故障的主代理的代理状态以将其应用于新选取的主代理。
图4A-C是根据一个实施例的使用消息代理***以处理消息的方法的交互图。在各种实施例中,该方法可以包括与结合图4A-C描述的那些步骤相比不同和/或附加的步骤。附加地,在一些实施例中,可以按与结合图4A-C描述的次序不同的次序执行步骤。
生产者客户端110将消息402发送到主代理140A。主代理140A基于所接收到的消息来生成入队事件。所生成的入队事件包括元数据,该元数据包括最后稳定消息事件的序列号、与发送了最后稳定消息事件的主代理140A相关联的时期号、入队事件的序列号(例如,序列号1)和与主代理140A相关联的时期号。主代理140A将入队事件并行地分发404给从代理140B、140C以及消息传递源130A、130B和130C。在一些实施例中,可以以串行方式或者并行和串行分发的某种组合来进行入队事件的分发。
主代理140A将入队事件保持406在存储器中。类似地,一旦从代理140B、140C接收到所分发的入队事件,它们就还将入队事件保持408、410在存储器中。
事件储存器130A、130B、130C接收入队事件,并将入队事件存储412、414、416在它们相应的永久存储器中。一旦事件储存器将入队事件存储在永久存储器中,其就向主代理140A发送已经持久存留入队事件的通知418。因此,取决于消息储存器130A、130B或130C是否能够成功地持久存留入队事件,主代理140A可能未接收到通知418、接收到通知418中的一个、一些或全部。一旦主代理140A已经接收到至少两个通知418,主代理140A就确定入队事件被稳定化,并且因此,其将入队事件存储420在其长期储存器(即,持久性储存器142)中。响应于确定入队事件被稳定化,主代理140A向生产者客户端110发送消息被持久存留422的通知。
主代理140A生成指派事件。所生成的指派事件包括元数据,该元数据包括最后稳定消息事件(入队事件)的序列号、与发送了最后稳定消息事件的主代理(主代理140A)相关联的时期号、指派事件的序列号(例如,序列号2)和与主代理140A相关联的时期号。主代理140A将指派事件并行地分发424给从代理140B、140C以及消息传递源130A、130B和130C。
主代理140A将指派事件保持426在存储器中。一旦从代理140B、140C接收到所分发的指派事件,它们就更新428、430它们相应的代理状态。具体地,每一个从代理140B、140C持久存留(例如,向持久性储存器142移动)被保持在它们相应的存储器中的入队事件,且然后将指派事件保持在它们相应的存储器中。一旦从代理140B、140C持久存留入队事件,从代理140B、140C就将持久存留的事件的肯定应答432发送到所有事件储存器130A、130B、130C。事件储存器130A、130B、130C存储肯定应答432。
事件储存器130A、130B、130C接收指派事件,并将指派事件存储434、436、438在它们相应的永久存储器中。一旦事件储存器将指派事件存储在永久存储器中,其就向主代理140A发送指派事件已经被持久存留的通知440。一旦主代理140A已经接收到至少两个通知440,主代理140A就确定指派事件被稳定化,且因而将指派事件存储442在其长期储存器中。在可替换实施例中,主代理140A可以利用指派事件简单地盖写442长期储存器中的入队事件。
响应于确定指派事件被稳定化,主代理140A将消息发送444到消费者客户端120(例如,对其从主代理140A接收到的订单进行处理的企业中的后端服务器)。消费者客户端120发送其已接收到消息的肯定应答446。
主代理140A生成消费事件。所生成的消费事件包括元数据,该元数据包括最后稳定消息事件(指派事件)的序列号(例如,序列号2)、与发送了最后稳定消息事件的主代理(主代理140A)相关联的时期号、指派事件的序列号(例如,序列号3)和与主代理140A相关联的时期号。主代理140A将消费事件并行地分发448给从代理140B、140C以及消息传递源130A、130B和130C。
主代理140A将消费事件保持450在存储器中。一旦从代理140B、140C接收到所分发的消费事件,它们就更新452、454它们相应的代理状态。具体地,每一个从代理140B、140C持久存留被保持在它们相应的存储器中的指派事件,且然后将消费事件保持在它们相应的存储器中。在可替换实施例中,从代理140B、140C可以利用指派事件简单地盖写长期储存器中的入队事件。一旦从代理140B、140C持久存留指派事件,从代理140B、140C就将持久存留的事件的肯定应答456发送到所有事件储存器130A、130B、130C。事件储存器130A、130B、130C存储肯定应答356。
事件储存器130A、130B、130C接收消费事件,并将消费事件存储458、460、462存储在它们相应的永久存储器中。一旦事件储存器将消费事件存储在永久存储器中,它就向主代理140A发送消费事件已经被持久存留的通知464。一旦主代理140A已经接收到至少两个通知464,主代理140A就将消费事件视为被稳定化,并将消费事件存储466在其长期储存器中。在可替换实施例中,主代理140A可以简单地从存储器中删除消费事件并从长期储存器中移除466入队事件和/或指派事件。
注意,在处理流程中的该点处,主代理已经移除经稳定化的消费消息事件,但是从代理140B、140C仍然将消费消息事件保持在存储器中。在高活动的时段中,由主代理140A生成且被分发给从代理140B、140C的下一消息事件将使它们更新它们相应的代理状态。然而,如果在消息事件之间存在延迟,则主代理140A可以生成稳定性事件468并将稳定性事件468分发给从代理140B、140C以及事件储存器130A、130B、130C。
稳定性消息包括元数据,该元数据包括最后稳定消息事件(消费事件)的序列号(例如,序列号3)、与发送了最后稳定消息事件的主代理(主代理140A)相关联的时期号、稳定性事件的序列号(例如,序列号4)和与主代理140A相关联的时期号。主代理140A将稳定性事件并行地分发468给从代理140B、140C以及消息传递源130A、130B和130C。
一旦从代理140B、140C接收到所分发的稳定性事件,它们就更新它们相应的代理状态。具体地,每一个从代理140B、140C持久存留被保持在它们相应的存储器中的消费事件。在可替换实施例中,从代理140B、140C可以简单地从存储器中移除消费事件并从长期储存器中移除入队事件和指派事件。从代理140B、140C还可以利用消费事件简单地盖写入队事件和/或指派事件。一旦从代理140B、140C持久存留470、472消费事件,从代理140B、140C就将持久存留的事件的肯定应答474发送到所有事件储存器130A、130B、130C。事件储存器130A、130B、130C存储肯定应答474。
图5是图示了根据一个实施例的用于从从代理转变到主代理的方法的流程图。在一个实施例中,图5的过程由代理140执行。在其他实施例中,其他实体可以执行该过程的步骤中的一些或全部。同样地,实施例可以包括不同和/或附加步骤,或者可以按不同次序执行步骤。
代理140接收505从从代理到主代理的代理状态改变的通知。例如,前一主代理140A可能已经发生故障,并且在自最后通信起已经过去具体时间之后,从代理140B、140C使用它们相应的主选取模块240将从代理之一(例如,140B)选取为新主代理——在该部分中被称作代理140。时期号递增以指示新代理140时期已经被启动。
代理140识别510基本值,该基本值是消息传递代理上的持久性储存器中的消息事件的最高序列号。例如,序列信息可以指示{509}是处于代理140的持久性储存器142中的消息的序列号的最高值。
代理140从多个事件储存器130A、130B、130C检索515序列信息。序列信息描述了已在该多个事件储存器130A、130B、130C中的每一个上持久存留的消息事件的最高序列号。例如,最高序列号可以是分别用于事件储存器130A、130B和130C的值{510, 512, 514}。
代理140基于基本值和序列信息来确定520要检索的消息事件集合。具有低于基本值的序列号的消息已经由代理140跟踪。如果基本值等于在序列信息中描述的最高序列号,则代理140是最新的。然而,典型地是下述这种情况:在旧主代理140A离线之前,存在尚必须被稳定化的一些消息被发送出。相应地,代理140的代理状态同样稍稍落后于旧主代理140A的代理状态。通过使用来自各种消息储存器的序列信息,新的所选取的代理140能够恢复更旧的主代理140A的状态。继续以上示例,序列信息包括分别用于事件储存器130A、130B和130C的值{510, 512, 514},并且基本值是{509}。相应地,代理确定其应当从事件储存器130A、130B和130C中的一个或多个检索消息事件{510-514},这是由于该消息集合覆盖了从序列号{509}处的基本值消息到序列号{514}处的最高稳定化消息的整个消息集合。例如,表1图示了哪些消息事件存储在相应事件储存器130A、130B和130C中的每一个中。表1中的单元值指示与消息事件相关联的反向指针和序列号,该反向指针指向最后稳定化消息事件。例如,“509(507)”表示序列号{507}和指向序列号{507}的反向指针,当事件储存器130A、130B和130C存储了与序列号509相关联的消息事件时,该反向指针与最后稳定化消息事件相关联。
事件储存器 序列号(反向指针) 序列号(反向指针) 序列号(反向指针) 序列号(反向指针) 序列号(反向指针) 序列号(反向指针)
130A 509(507) 510(508)
130B 509(507) 510(508) 511(509) 512(510)
130C 509(507) 510(508) 511(509) 512(510) 513(512) 514(512)
表1:消息的示例分配——序列号中无间隙。
代理140从该多个事件储存器中的一个或多个检索525消息事件集合。在一些实施例中,代理140以循环方式检索消息事件集合,使得代理140从特定事件储存器检索一个消息,从不同的事件储存器检索下一消息事件,且从不同的事件储存器检索下一消息事件,等等,从而减小任何一个储存器上的负载。如果所请求的消息事件具有比存储在事件储存器上的消息事件中的任一个的序列号高的序列号,则代理140不从消息代理130请求消息事件。继续以上示例,代理140将仅从事件储存器130C请求消息事件{513}和{514},这是由于事件储存器130A和130B仅分别具有最多{510}和{511}的消息事件,从而在事件储存器130A、130B和130C之间分发负载。在该示例中,所检索的消息集合可以包括具有序列号{511-514}的消息事件。注意,与序列号509相关联的消息事件不需要被请求,这是由于基本号是509——相应地,代理140的代理状态已经被更新到与序列号509相关联的消息传递事件。在可替换事件中,可以从单个储存器(例如,消息储存器130C)检索所有消息事件。
代理140至少部分地基于所检索的消息事件集合来组装530消息事件流。代理140通过按所接收到的集合中的消息事件相应的序列号对这些消息事件进行排序来创建消息事件流。例如,可以将可能的消息事件流排序为{510, 511, 512, 513, 514}。对消息事件进行排序以标识序列号中的任何间隙。注意,在一些实例中,如果所请求的消息集合中的一个或多个丢失,则在从多个消息储存器130A、130B、130C接收到的序列号中可能存在间隙。例如,包括间隙的可能消息事件流可以是{510, 512, 513, 514},其丢失消息传递事件{511}。如果例如一个或多个消息储存器未能从主代理140接收到消息事件,则间隙可能出现。
代理140使用消息事件流来识别535最大邻接消息事件(MCM)。MCM是代理140可在遇到序列号中的间隙之前恢复的具有最高序列号的稳定化消息事件。在不存在间隙的情况下,MCM简单地是消息事件流中具有最高序列号的稳定化消息事件。例如,假定不存在间隙,则与序列号{512}相关联的消息事件是MCM,这是由于其为也被稳定化(存储在至少两个事件储存器上)的具有最高序列号的消息事件。可替换地,如果消息事件流包括了间隙——例如,如表1中描绘的相同流——除了不存在针对序列号{511}的条目,则MCM将是与序列号{510}相关联的消息事件,这是由于其为在序列号中出现间隙之前的最高稳定化消息。
代理140使用MCM来识别540同步点。MCM包括元数据,该元数据包括指向最后稳定消息的反向指针(即,最后稳定消息的序列号)。消息传递事件的同步号由MCM的反向指针所指向。继续其中MCM具有序列号{512}的以上示例,代理140将检索与该消息相关联的元数据中的标识最后稳定消息(例如,具有序列号{510}的消息事件)的反向指针。相应地,同步点将是序列号{510}。
代理140重新发布545具有高于同步点序列号的序列号的任何消息事件。代理140通过下述操作来重新发布消息事件:使用新时期号和新同步号重新生成具有高于同步点序列号的序列号的消息事件;以及然后将重新生成的消息事件分发给所有从代理和所有事件储存器130A、130B、130C。例如,假定同步点是具有序列号{503}的消息,则代理140会将具有序列号{504, 506, 507}的消息事件重新发布给所有事件储存器130A、130B、130C和其余从代理140C。从代理(例如,140C)响应于接收到具有不同时期号的重新发布的消息事件,丢弃同步点后的所有消息事件并忽视来自在先主代理的任何未来消息。并行地,代理140将其代理状态更新550直到MCM。在此时,所有代理140A、140B和140C以及所有消息储存器130A、130B和130被完全同步。即使不存在一个共享中央消息储存库,也实现了这一点。
图6A是根据一个实施例的处理消息的消息代理***的复制流和复制事件储存器组件的类图。复制流事件储存器组件包括UMPersistenceAdapter(UM持久性适配器)类605、ReplicatingMessageStore(复制消息储存器)类610、ReplicationStream(复制流)类615和ReplicatingTransaction Store(复制交易储存器)类620。UM PersistenceAdapter 605实现ReplicatingMessageStore 610和Replicating Transaction Store 620,以确保首先使用UMP接口来复制被写入到盘的持久性数据消息以在没有集中式储存库的情况下支持主/从消息代理***。随着生产者或消费者客户端与主代理交互以发送消息事件,ActiveMQ代理将调用ReplicatingMessageStore的方法(即,addMessage(添加消息)、removeMessage(移除消息)等)。ReplicationStream类615方法被UM PersistenceAdapter 605的所有ReplicatingMessageStore 620使用。例如,来自代理的“addMessage”命令将在ReplicatingMessageStore 620中创建AddMessageReplicationEvent(添加消息复制事件),并且事件被发送到ReplicationStream 615类的“复制”方法。ReplicationStream 615中的复制方法会将来自源的消息事件分发给***中的从代理和该多个事件储存器。因此,ReplicationStream类615用于发送/接收在主代理中出现的经复制的事件。
主代理通过标准事件储存器接口(诸如“创建新队列目的地”或“移除现有队列目的地”)来执行被复制到从代理的各种管理事件。将通过复制流协议来对由主代理作出的决定进行定序和复制。
实际盘持久性由于从ReplicationStream 615接收到复制事件而发生。长期储存器接口被实现以允许不同实现方式将数据写入到盘。图6B图示了根据一个实施例的处理消息的消息代理***的长期储存器组件的示例类图。长期储存器组件包括ReplicationStreamLongTermStorage(复制流长期储存器)类635、PersistenceAdapterBasedLongTermStorage(基于持久性适配器的长期储存器)类640和LongTermStorageReplicationStreamListener(长期储存器复制流***)645类。一旦复制事件消息被发送到每一个从代理,从代理处的接收器就将消息事件发送到ReplicationStreamListerner(复制流***)645。ReplicationStreamListener之一(即,LongTermStorageReplicationStreamListener 645)将取得每一个消息事件并将其传递到长期储存器持久性适配器,即,PersistenceAdapterBasedLongTermStorage 640。PersistenceAdapterBasedLongTermStorage 640类将使用addMessage方法来执行消息事件到长期储存器的实际持久存留。
图6C是根据一个实施例的处理消息的消息代理***的消息代理和事件储存器之间的接口650的示例。如图6C中所示,消息传递队列复制接口被持久性适配器以及其他消息传递和事件储存器组件用于执行与复制流协议相关的方法。例如,RepublishReplicationEvent(重新发布复制事件)方法655被复制流在将从代理转变到主代理的情况下使用,以便一旦同步点被确定就重新发布消息事件。类似地,复制接口中描述的其他方法被消息传递***组件之一在执行复制流协议时使用。
图7是图示了用于实现图1中所示的实体的示例计算机700的高级框图。所图示的是耦合到芯片集710的至少一个处理器705。还耦合到芯片集710的是存储器715、储存设备720、键盘725、图形适配器730、指点设备735和网络适配器740。显示器745耦合到图形适配器530。在一个实施例中,芯片集710的功能由存储器控制器中枢750和I/O控制器中枢755提供。在另一实施例中,存储器715直接耦合到处理器705而不是芯片集710。
储存设备720是任何非瞬变计算机可读储存介质,诸如硬盘驱动器、致密盘只读存储器(CD-ROM)、DVD或固态存储器设备。存储器715保持处理器705所使用的指令和数据。指点设备735可以是鼠标、轨迹球或其他类型的指点设备,且结合键盘725而使用以将数据输入到计算机700中。图形适配器730在显示器745上显示图像和其他信息。网络适配器740将计算机700耦合到网络(例如,图1的网络105)。
如本领域中已知的那样,计算机700可以具有与图7中所示的组件相比不同和/或其他的组件。附加地,计算机700可以缺少某些所图示的组件。例如,计算机700可以缺少键盘725、指点设备735、图形适配器730和/或显示器745。作为另一示例,被配置成显示体育场视图可视化的计算机700可以是具有触摸屏界面的平板或智能电话,且因而缺少键盘725和指点设备735。此外,储存设备720可以是本地的和/或对计算机700来说远程的。
如本领域中已知的那样,计算机700被适配成执行用于提供本文描述的功能的计算机程序模块。如本文所使用,术语“模块”指代被用于提供指定功能的计算机程序逻辑。因此,可以以硬件、固件和/或软件实现模块。在一个实施例中,程序模块存储在储存设备720上、被加载到存储器715中以及由处理器705执行。
本文描述的物理组件的实施例可以包括与这里描述的模块相比其他和/或不同的模块。附加地,在其他实施例中,归于模块的功能可以由其他或不同模块执行。此外,出于清楚和方便的目的,该描述偶尔省略术语“模块”。
附加配置考虑
以上描述的一些部分在算术过程或操作方面描述了实施例。这些算术描述和表示普遍被数据处理领域技术人员使用以将他们的工作的实质有效地传达给该领域其他技术人员。这些操作在功能上、计算上或逻辑上描述时被理解为由计算机程序实现,该计算机程序包括供处理器或等效的电路、微代码等等执行的指令。此外,将功能操作的这些布置称作模块有时也已证明是方便的,而不失一般性。所描述的操作及其关联模块可以以软件、固件、硬件或其任何组合体现。
如本文所使用,对“一个实施例”或“实施例”的任何引用意味着:结合该实施例描述的特定元件、特征、结构或特性被包括在至少一个实施例中。短语“在一个实施例中”在说明书中各处的出现不必然全部指代相同实施例。
可以使用表述“耦合”和“连接”连同其派生词来描述一些实施例。应当理解,这些术语不意图作为彼此的同义词。例如,可以使用术语“连接”来描述一些实施例,以指示两个或更多个元件彼此直接物理或电气接触。在另一示例中,可以使用术语“耦合”来描述一些实施例,以指示两个或更多个元件直接物理或电气接触。然而,术语“耦合”还可以意味着:两个或更多个元件不彼此直接接触,但仍彼此协作或交互。实施例在该上下文中不受限制。
如本文所使用,术语“包含”、“包含有”、“包括”、“包括有”、“具有”、“具有着”或其任何其他变形意图覆盖非排他的包括。例如,包含元件列表的过程、方法、物件或设备不必然限于仅那些元件,而是可以包括未明确列出或者对这样的过程、方法、物件或设备来说固有的其他元件。另外,除非明确地相反声明,“或”指代包括性的或,且不指代排他性的或。例如,条件A或B被以下各项中的任何一个满足:A为真(或存在)且B为假(或不存在);A为假(或不存在)且B为真(或存在);以及A和B均为真(或存在)。
附加地,“一”或“一个”的使用被采用以描述本文的实施例的元件和组件。这仅是为了方便且为了给出本公开的一般意义而进行的。该描述应当被解读成包括一个或至少一个,并且单数也包括复数,除非明显以其他方式意指。
在阅读本公开后,本领域技术人员将领会用于消息代理***的另外附加可替换结构和功能设计。因此,尽管已经说明和描述了特定实施例和应用,但应当理解,所描述的主题不限于本文公开的精确构造和组件,并且,可以在本文公开的方法和设备的布置、操作和细节中作出对本领域技术人员来说将显而易见的各种修改、改变和变形。本发明的范围不应仅受所附权利要求限制。

Claims (28)

1.一种供消息代理计算机***处理消息的方法,所述方法包括:
主代理计算机***从客户端生产者接收消息;
所述主代理计算机***响应于从所述客户端生产者接收到消息而生成消息事件,所述消息事件唯一地标识具有与所述主代理计算机***相关联的时期值和与消息相关联的序列号的消息,所述消息事件进一步包括指针,所述指针指向由关联的持久性储存器***中的多个事件储存器中的至少两个存储的最后消息;
所述主代理计算机***将所述消息事件分发给多个事件储存器和多个从代理计算机***,其中每一个事件储存器具有关联的持久性储存器***,并且每一个从代理计算机***具有关联的存储器;
每一个从代理计算机***将所述消息事件保持在其关联的存储器中;
从所述主代理计算机***接收到所述消息事件的每一个事件储存器将所述消息事件存储在其关联的持久性储存器***中,其中一旦所述消息事件被存储,每一个事件储存器就向所述主代理计算机***发送指示所述消息事件已经存储在所述事件储存器中的稳定化通知;
所述主代理计算机***响应于从至少两个事件储存器接收到稳定化通知而将所述消息事件存储在关联的持久性储存器中,并将通知发送到所述客户端生产者;
所述主代理计算机***生成指示所述消息事件已经被稳定化的第二消息事件;
所述主代理计算机***将所述第二消息事件分发给所述多个事件储存器和所述多个从代理计算机***;以及
每一个从代理计算机***响应于接收到所述第二消息事件而将来自其存储器的消息事件存储到相应的持久性储存器***。
2.如权利要求1所述的方法,进一步包括每一个消息传递代理计算机***的代理计算机***状态,其中代理计算机***状态是已在代理计算机***处持久存留的消息事件流的表示。
3.如权利要求2所述的方法,进一步包括:在从所述主代理计算机***接收到消息事件时,更新每一个消息传递代理计算机***的代理计算机***状态,其中更新代理计算机***状态包括执行下述至少一项:从所述持久性储存器中移除消息事件;或者利用从所述主代理计算机***接收到的消息事件盖写所述消息事件。
4.如权利要求1所述的方法,进一步包括:一旦所述消息事件被稳定化,所述主代理计算机***就从所述主代理计算机***的内部存储器中移除所述消息事件。
5.如权利要求1所述的方法,进一步包括:在接收到来自所述主代理计算机***的第二消息事件或来自所述主代理计算机***的稳定性消息事件中的至少一个时,从从代理计算机***的内部存储器中移除所述消息事件,其中稳定性消息事件包括与所述主代理计算机***处的最后已知稳定消息事件相关联的信息。
6.如权利要求1所述的方法,其中第二消息事件包括消息事件、与所述最后稳定消息事件相关联的序列号、与发送了所述最后稳定消息事件的主代理计算机***相关联的时期号、与所述消息事件相关联的序列号以及与所述主代理计算机***相关联的时期号。
7.如权利要求1所述的方法,其中所述主代理计算机***将所述消息事件并行地分发给所述多个从代理计算机***和所述多个事件储存器。
8.一种在消息传递***中供代理计算机***将其状态从从代理计算机***改变到主代理计算机***的方法,所述消息传递***包括主代理计算机***、多个从代理计算机***和多个事件储存器,所述方法包括:
在持久性储存器中存储多个消息事件,每一个消息事件包括从客户端生产者接收的消息以及元数据,所述元数据唯一地标识具有与在先主代理计算机***相关联的时期值和与所述消息事件相关联的序列号的消息,且包括反向指针,所述反向指针指向已由关联的持久性储存器***中的所述多个事件储存器中的至少两个存储的最后消息;
接收将状态从从代理计算机***改变到主代理计算机***的通知;
针对所述多个消息事件识别基本值,所述基本值是由代理计算机***存储的消息事件的序列号中最高的一个;
从所述多个事件储存器检索序列信息,所述序列信息描述已在所述多个事件储存器中的每一个上持久存留的消息事件的最高序列号;
基于所述基本值和所述序列信息来确定要检索的消息事件集合;
从所述多个事件储存器中的一个或多个检索所述消息事件集合;
部分地基于所检索的消息事件集合来组装消息事件流;
使用所述消息事件流来识别最大邻接消息事件(MCM),其中MCM是具有在遇到序列号间隙之前观察到的最高序列号的消息事件,MCM消息事件的元数据包括反向指针;
使用MCM来识别同步点,所述同步点是由与MCM相关联的元数据中的反向指针所指向的序列号;
利用针对新主代理计算机***而确定的新时期号,将具有高于同步点序列号的序列号的任何消息事件重新发布给所述事件储存器中的每一个以及多个从代理计算机***;以及
将新主代理计算机***中的代理计算机***状态更新成对应于MCM,其中代理计算机***状态指示在故障之前旧主代理计算机***的状态,所述状态包括与对应于MCM的稳定化消息事件相关联的信息。
9.如权利要求8所述的方法,进一步包括:在将从代理计算机***的状态更新到主代理计算机***时,递增时期号,其中递增时期号指示新代理计算机***时期已经被启动。
10.如权利要求8所述的方法,进一步包括:确定主代理计算机***的故障,其中响应于一个或多个从代理计算机***未从主代理计算机***接收到消息达预定时间阈值而检测到故障。
11.如权利要求8所述的方法,其中识别MCM事件进一步包括:
识别所检索的稳定化消息事件集合的序列号之间的间隙;以及
确定最大邻接消息事件(MCM),其中MCM是代理计算机***能够在遇到所述序列号中的间隙之前恢复的具有最高序列号的稳定化消息事件。
12.如权利要求8所述的方法,其中重新发布任何消息事件进一步包括:
通过使用与所述主代理计算机***相关联的新时期号以及新同步号,来重新生成具有高于同步点的序列号的消息事件;以及
将重新生成的消息事件并行地分发给多个从代理计算机***和多个事件储存器。
13.如权利要求12所述的方法,进一步包括:由多个从代理计算机***忽视与在先主代理计算机***相关联的任何消息事件。
14.如权利要求12所述的方法,进一步包括:由多个从代理计算机***丢弃具有所述同步点后的序列号的消息事件。
15.一种消息代理计算机***,包括:
主代理计算机***,被配置成从客户端生产者接收消息;
所述主代理计算机***响应于从所述客户端生产者接收到消息而生成消息事件,所述消息事件唯一地标识具有与所述主代理计算机***相关联的时期值和与消息相关联的序列号的消息,所述消息事件进一步包括指针,所述指针指向由关联的持久性储存器***中的多个事件储存器中的至少两个存储的最后消息;
所述主代理计算机***将所述消息事件分发给多个事件储存器和多个从代理计算机***,其中每一个事件储存器具有关联的持久性储存器***,并且每一个从代理计算机***具有关联的存储器;
每一个从代理计算机***将所述消息事件保持在其关联的存储器中;
从所述主代理计算机***接收到所述消息事件的每一个事件储存器将所述消息事件存储在其关联的持久性储存器***中,其中一旦所述消息事件被存储,每一个事件储存器就向所述主代理计算机***发送指示所述消息事件已经存储在所述事件储存器中的稳定化通知;
所述主代理计算机***响应于从至少两个事件储存器接收到稳定化通知而将所述消息事件存储在关联的持久性储存器中,并将通知发送到所述客户端生产者;
所述主代理计算机***生成指示所述消息事件已经被稳定化的第二消息事件;
所述主代理计算机***将所述第二消息事件分发给所述多个事件储存器和所述多个从代理计算机***;以及
每一个从代理计算机***响应于接收到所述第二消息事件而将来自其存储器的消息事件存储到相应的持久性储存器***。
16.如权利要求15所述的计算机***,进一步包括每一个消息传递代理计算机***的代理计算机***状态,其中代理计算机***状态是已在代理计算机***处持久存留的消息事件流的表示。
17.如权利要求16所述的计算机***,其中所述消息代理计算机***进一步被配置成:在从所述主代理计算机***接收到消息事件时,更新每一个消息传递代理计算机***的代理计算机***状态,其中更新代理计算机***状态包括执行下述至少一项:从所述持久性储存器中移除消息事件;或者利用从所述主代理计算机***接收到的消息事件盖写所述消息事件。
18.如权利要求15所述的计算机***,其中所述主代理计算机***被配置成:一旦所述消息事件被稳定化,就从所述主代理计算机***的内部存储器中移除所述消息事件。
19.如权利要求15所述的计算机***,其中所述主代理计算机***被配置成:在接收到来自所述主代理计算机***的第二消息事件或来自所述主代理计算机***的稳定性消息事件中的至少一个时,从从代理计算机***的内部存储器中移除所述消息事件,其中稳定性消息事件包括与所述主代理计算机***处的最后已知稳定消息事件相关联的信息。
20.如权利要求15所述的计算机***,其中第二消息事件包括消息事件、与所述最后稳定消息事件相关联的序列号、与发送了所述最后稳定消息事件的主代理计算机***相关联的时期号、与所述消息事件相关联的序列号以及与所述主代理计算机***相关联的时期号。
21.如权利要求15所述的计算机***,其中所述主代理计算机***将所述消息事件并行地分发给所述多个从代理计算机***和所述多个事件储存器。
22.一种供代理计算机***将其状态从从代理计算机***改变到主代理计算机***的消息传递***,所述消息传递***包括主代理计算机***、多个从代理计算机***和多个事件储存器,所述消息传递***进一步包括:
持久性储存器,存储多个消息事件,每一个消息事件包括从客户端生产者接收的消息以及元数据,所述元数据唯一地标识具有与在先主代理计算机***相关联的时期值和与所述消息事件相关联的序列号的消息,且包括反向指针,所述反向指针指向已由关联的持久性储存器***中的所述多个事件储存器中的至少两个存储的最后消息;
计算机处理器,被配置成:
接收将状态从从代理计算机***改变到主代理计算机***的通知;
针对所述多个消息事件识别基本值,所述基本值是由代理计算机***存储的消息事件的序列号中最高的一个;
从所述多个事件储存器检索序列信息,所述序列信息描述已在所述多个事件储存器中的每一个上持久存留的消息事件的最高序列号;
基于所述基本值和所述序列信息来确定要检索的消息事件集合;
从所述多个事件储存器中的一个或多个检索所述消息事件集合;
部分地基于所检索的消息事件集合来组装消息事件流;
使用所述消息事件流来识别最大邻接消息事件(MCM),其中MCM是具有在遇到序列号间隙之前观察到的最高序列号的消息事件,MCM消息事件的元数据包括反向指针;
使用MCM来识别同步点,所述同步点是由与MCM相关联的元数据中的反向指针所指向的序列号;
利用针对新主代理计算机***而确定的新时期号,将具有高于同步点序列号的序列号的任何消息事件重新发布给所述事件储存器中的每一个以及多个从代理计算机***;以及
将新主代理计算机***中的代理计算机***状态更新成对应于MCM,其中代理计算机***状态指示在故障之前旧主代理计算机***的状态,所述状态包括与对应于MCM的稳定化消息事件相关联的信息。
23.如权利要求22所述的消息传递***,其中所述计算机处理器进一步被配置成:在将从代理计算机***的状态更新到主代理计算机***时,递增时期号,其中递增时期号指示新代理计算机***时期已经被启动。
24.如权利要求22所述的消息传递***,其中所述计算机处理器进一步被配置成:确定主代理计算机***的故障,其中响应于一个或多个从代理计算机***未从主代理计算机***接收到消息达预定时间阈值而检测到故障。
25.如权利要求22所述的消息传递***,其中识别MCM事件进一步包括:
识别所检索的稳定化消息事件集合的序列号之间的间隙;以及
确定最大邻接消息事件(MCM),其中MCM是代理计算机***能够在遇到所述序列号中的间隙之前恢复的具有最高序列号的稳定化消息事件。
26.如权利要求22所述的消息传递***,其中重新发布任何消息事件进一步包括:
通过使用与所述主代理计算机***相关联的新时期号以及新同步号,来重新生成具有高于同步点的序列号的消息事件;以及
将重新生成的消息事件并行地分发给多个从代理计算机***和多个事件储存器。
27.如权利要求26所述的消息传递***,其中多个从代理计算机***被配置成:忽视与在先主代理计算机***相关联的任何消息事件。
28.如权利要求26所述的消息传递***,其中多个从代理计算机***被配置成:丢弃具有所述同步点后的序列号的消息事件。
CN201580075038.8A 2014-12-01 2015-11-30 具有并行持久性的消息代理*** Active CN107430606B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201462086111P 2014-12-01 2014-12-01
US62/086111 2014-12-01
PCT/US2015/063034 WO2016089787A1 (en) 2014-12-01 2015-11-30 Message broker system with parallel persistence

Publications (2)

Publication Number Publication Date
CN107430606A true CN107430606A (zh) 2017-12-01
CN107430606B CN107430606B (zh) 2021-06-29

Family

ID=56079883

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580075038.8A Active CN107430606B (zh) 2014-12-01 2015-11-30 具有并行持久性的消息代理***

Country Status (6)

Country Link
US (2) US10904155B2 (zh)
EP (1) EP3227801B1 (zh)
JP (1) JP6602866B2 (zh)
CN (1) CN107430606B (zh)
CA (1) CA2969210C (zh)
WO (1) WO2016089787A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110519343A (zh) * 2019-08-13 2019-11-29 创新奇智(北京)科技有限公司 一种基于日志的事件同步方法
CN111212100A (zh) * 2018-11-22 2020-05-29 财团法人工业技术研究院 消息队列发布与订阅的同步方法及其***

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6899837B2 (ja) * 2016-03-09 2021-07-07 アリババ・グループ・ホールディング・リミテッドAlibaba Group Holding Limited リージョン間にわたるデータ送信
US10263661B2 (en) 2016-12-23 2019-04-16 Sierra Nevada Corporation Extended range communications for ultra-wideband network nodes
US10523498B2 (en) 2016-12-23 2019-12-31 Sierra Nevada Corporation Multi-broker messaging and telemedicine database replication
US10917458B2 (en) 2018-11-12 2021-02-09 Pivotal Software, Inc. Message broker configuration
US10999392B2 (en) * 2019-03-01 2021-05-04 Accenture Global Solutions Limited Message recovery system for computing nodes with replicated databases
US11563709B2 (en) 2020-03-31 2023-01-24 Snap Inc. Messaging system of partial and out-of-order events
EP3905606A1 (en) * 2020-04-30 2021-11-03 KONE Corporation Safety communication in an elevator communication system
US11310187B2 (en) * 2020-09-22 2022-04-19 International Business Machines Corporation Cooperative messaging environments
US11803496B2 (en) * 2021-10-29 2023-10-31 Lenovo (Singapore) Pte. Ltd. Systems, apparatus, and methods for electing a new broker for a channel on an MQTT bus
CN114827145B (zh) * 2022-04-24 2024-01-05 阿里巴巴(中国)有限公司 服务器集群***、元数据的访问方法及装置

Citations (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6175876B1 (en) * 1998-07-09 2001-01-16 International Business Machines Corporation Mechanism for routing asynchronous state changes in a 3-tier application
EP1359518A2 (en) * 2002-02-27 2003-11-05 AT&T Corp. Pre-loading content to caches for information appliances
US6691245B1 (en) * 2000-10-10 2004-02-10 Lsi Logic Corporation Data storage with host-initiated synchronization and fail-over of remote mirror
US20050289198A1 (en) * 2004-06-25 2005-12-29 International Business Machines Corporation Methods, apparatus and computer programs for data replication
CN1798168A (zh) * 2004-12-20 2006-07-05 三星电子株式会社 用于在无线终端中处理应用程序相关事件的设备及方法
CN101044462A (zh) * 2004-06-04 2007-09-26 奥普蒂尔有限公司 多层计算环境中用于性能管理的***和方法
CN101305389A (zh) * 2005-11-07 2008-11-12 微软公司 独立消息存储和消息传输代理
CN101459690A (zh) * 2008-12-25 2009-06-17 哈尔滨工程大学 一种无线公共对象请求代理结构应用中的容错方法
CN101490651A (zh) * 2006-07-01 2009-07-22 国际商业机器公司 管理持久性的方法、装置和计算机程序
CN101836200A (zh) * 2007-10-23 2010-09-15 微软公司 基于模型的合成应用程序平台
CN102246107A (zh) * 2009-04-17 2011-11-16 西门子公司 在自动化***模型中提供代理步骤
CN102449980A (zh) * 2009-05-29 2012-05-09 微软公司 使用用户定义的代理来递送消息
US8413250B1 (en) * 2008-06-05 2013-04-02 A9.Com, Inc. Systems and methods of classifying sessions
CN103425462A (zh) * 2012-05-14 2013-12-04 阿里巴巴集团控股有限公司 一种工作流数据持久化的方法和装置
US20140143215A1 (en) * 2007-08-15 2014-05-22 Emc Corporation Assured federated records management
US20140214891A1 (en) * 2013-01-28 2014-07-31 Hadronex, Inc. Hierarchical user interface and functional apparatus
US20150381708A1 (en) * 2014-06-27 2015-12-31 Amazon Technologies, Inc. Failure management in a distributed strict queue

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5481694A (en) * 1991-09-26 1996-01-02 Hewlett-Packard Company High performance multiple-unit electronic data storage system with checkpoint logs for rapid failure recovery
US6401120B1 (en) * 1999-03-26 2002-06-04 Microsoft Corporation Method and system for consistent cluster operational data in a server cluster using a quorum of replicas
US7689560B2 (en) * 2000-10-13 2010-03-30 Miosoft Corporation Persistent data storage techniques
US6820098B1 (en) * 2002-03-15 2004-11-16 Hewlett-Packard Development Company, L.P. System and method for efficient and trackable asynchronous file replication
US20110276636A1 (en) * 2010-03-29 2011-11-10 Konaware, Inc. Efficient transactional messaging between loosely coupled client and server over multiple intermittent networks with policy based routing
GB0323780D0 (en) 2003-10-10 2003-11-12 Ibm A data brokering method and system
US7143123B2 (en) * 2004-01-09 2006-11-28 Microsoft Corporation Well-known transactions in data replication
US20080288659A1 (en) * 2006-11-09 2008-11-20 Microsoft Corporation Maintaining consistency within a federation infrastructure
US7689535B2 (en) * 2007-05-30 2010-03-30 Red Hat, Inc. Method for providing a unified view of a domain model to a user
US8169856B2 (en) * 2008-10-24 2012-05-01 Oracle International Corporation Time synchronization in cluster systems
US8117156B2 (en) * 2008-10-26 2012-02-14 Microsoft Corporation Replication for common availability substrate
US9417977B2 (en) * 2008-12-31 2016-08-16 Sap Se Distributed transactional recovery system and method
US9519555B2 (en) * 2011-05-23 2016-12-13 Microsoft Technology Licensing, Llc Synchronous replication in a distributed storage environment
US8909996B2 (en) * 2011-08-12 2014-12-09 Oracle International Corporation Utilizing multiple storage devices to reduce write latency for database logging
US8843441B1 (en) * 2012-01-17 2014-09-23 Amazon Technologies, Inc. System and method for maintaining a master replica for reads and writes in a data store
US9529626B2 (en) * 2012-09-12 2016-12-27 Salesforce.Com, Inc. Facilitating equitable distribution of thread resources for job types associated with tenants in a multi-tenant on-demand services environment
US9319267B1 (en) * 2012-10-04 2016-04-19 Solace Systems, Inc. Replication in assured messaging system
KR101486546B1 (ko) * 2013-05-15 2015-01-27 주식회사 한국거래소 장애 대비를 위한 복제 시스템 및 그 방법
US9183103B2 (en) * 2013-05-31 2015-11-10 Vmware, Inc. Lightweight remote replication of a local write-back cache
US9411869B2 (en) * 2013-07-09 2016-08-09 Red Hat, Inc. Replication between sites using keys associated with modified data
US9639589B1 (en) * 2013-12-20 2017-05-02 Amazon Technologies, Inc. Chained replication techniques for large-scale data streams
US9405483B1 (en) * 2014-03-11 2016-08-02 Amazon Technologies, Inc. Optimized write performance at block-based storage during volume snapshot operations

Patent Citations (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6175876B1 (en) * 1998-07-09 2001-01-16 International Business Machines Corporation Mechanism for routing asynchronous state changes in a 3-tier application
US6691245B1 (en) * 2000-10-10 2004-02-10 Lsi Logic Corporation Data storage with host-initiated synchronization and fail-over of remote mirror
EP1359518A2 (en) * 2002-02-27 2003-11-05 AT&T Corp. Pre-loading content to caches for information appliances
CN101044462A (zh) * 2004-06-04 2007-09-26 奥普蒂尔有限公司 多层计算环境中用于性能管理的***和方法
US20050289198A1 (en) * 2004-06-25 2005-12-29 International Business Machines Corporation Methods, apparatus and computer programs for data replication
CN1798168A (zh) * 2004-12-20 2006-07-05 三星电子株式会社 用于在无线终端中处理应用程序相关事件的设备及方法
CN101305389A (zh) * 2005-11-07 2008-11-12 微软公司 独立消息存储和消息传输代理
CN101490651A (zh) * 2006-07-01 2009-07-22 国际商业机器公司 管理持久性的方法、装置和计算机程序
US20140143215A1 (en) * 2007-08-15 2014-05-22 Emc Corporation Assured federated records management
CN101836200A (zh) * 2007-10-23 2010-09-15 微软公司 基于模型的合成应用程序平台
US8413250B1 (en) * 2008-06-05 2013-04-02 A9.Com, Inc. Systems and methods of classifying sessions
CN101459690A (zh) * 2008-12-25 2009-06-17 哈尔滨工程大学 一种无线公共对象请求代理结构应用中的容错方法
CN102246107A (zh) * 2009-04-17 2011-11-16 西门子公司 在自动化***模型中提供代理步骤
CN102449980A (zh) * 2009-05-29 2012-05-09 微软公司 使用用户定义的代理来递送消息
CN103425462A (zh) * 2012-05-14 2013-12-04 阿里巴巴集团控股有限公司 一种工作流数据持久化的方法和装置
US20140214891A1 (en) * 2013-01-28 2014-07-31 Hadronex, Inc. Hierarchical user interface and functional apparatus
US20150381708A1 (en) * 2014-06-27 2015-12-31 Amazon Technologies, Inc. Failure management in a distributed strict queue

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
卢欣荣 等: "基于XML和工作流的消息代理设计与实现", 《计算机与信息技术》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111212100A (zh) * 2018-11-22 2020-05-29 财团法人工业技术研究院 消息队列发布与订阅的同步方法及其***
CN111212100B (zh) * 2018-11-22 2022-07-19 财团法人工业技术研究院 消息队列发布与订阅的同步方法及其***
CN110519343A (zh) * 2019-08-13 2019-11-29 创新奇智(北京)科技有限公司 一种基于日志的事件同步方法
CN110519343B (zh) * 2019-08-13 2020-12-04 创新奇智(北京)科技有限公司 一种基于日志的事件同步方法

Also Published As

Publication number Publication date
EP3227801B1 (en) 2020-01-08
JP6602866B2 (ja) 2019-11-06
WO2016089787A1 (en) 2016-06-09
EP3227801A1 (en) 2017-10-11
EP3227801A4 (en) 2018-05-02
WO2016089787A8 (en) 2017-01-26
US10904155B2 (en) 2021-01-26
US20160156502A1 (en) 2016-06-02
US20210112013A1 (en) 2021-04-15
CA2969210A1 (en) 2016-06-09
CN107430606B (zh) 2021-06-29
JP2018504670A (ja) 2018-02-15
CA2969210C (en) 2024-02-20

Similar Documents

Publication Publication Date Title
CN107430606A (zh) 具有并行持久性的消息代理***
US10127077B2 (en) Event distribution pattern for use with a distributed data grid
EP2575045B1 (en) Distributed computing backup and recovery system
CN110795503A (zh) 分布式存储***的多集群数据同步方法及相关装置
CN102652423A (zh) 用于集群选择和协作复制的集群族
CN102591744A (zh) 从任何群集节点的数据的备份和还原
CN106294009A (zh) 数据库归档方法及***
CN104965850A (zh) 一种基于开源技术的数据库高可用实现方法
CN103827832B (zh) 用于在事务中间件机器环境中持久化事务记录的***与方法
CN104021200B (zh) 一种数据库的数据同步方法和装置
CN105493474A (zh) 用于支持用于同步分布式数据网格中的数据的分区级别日志的***及方法
WO2019020081A1 (zh) 分布式***及其故障恢复方法、装置、产品和存储介质
US20160110438A1 (en) Data cube high availability
CN101930463B (zh) 一种基于内存数据库的仿真网格节点快速迁移方法
CN109901948A (zh) 无共享数据库集群异地双活容灾***
CN115202929B (zh) 数据库集群备份***
CN103384266A (zh) 一种基于文件级实时同步的Parastor200管理节点高可用方法
JP2008546110A (ja) 企業情報システムとクライアントとの間の通信に役立つ装置、システム、方法、およびコンピュータプログラム(企業情報システムとクライアントとの間の通信に役立つ装置、システム、および方法)
CN103384267B (zh) 一种基于分布式块设备的Parastor200并行存储管理节点高可用方法
CN102946407A (zh) 在重新连接时传递非预期协作服务器响应
JP2021119461A (ja) バックアップ管理方法、システム、電子機器、及び媒体
Lin et al. ReHRS: A hybrid redundant system for improving MapReduce reliability and availability
CN110019065B (zh) 日志数据的处理方法、装置及电子设备
CN111800485B (zh) 适应战术机动网络环境的服务节点抗毁接替方法
CN115238005B (zh) 一种基于消息中间件集群的数据同步方法及***

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant