CN109669821A - 消息中间件的集群部分故障恢复方法、服务器及存储介质 - Google Patents

消息中间件的集群部分故障恢复方法、服务器及存储介质 Download PDF

Info

Publication number
CN109669821A
CN109669821A CN201811373650.5A CN201811373650A CN109669821A CN 109669821 A CN109669821 A CN 109669821A CN 201811373650 A CN201811373650 A CN 201811373650A CN 109669821 A CN109669821 A CN 109669821A
Authority
CN
China
Prior art keywords
message
cluster
node
malfunctioning node
partial fault
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
CN201811373650.5A
Other languages
English (en)
Other versions
CN109669821B (zh
Inventor
陈滨
陈子文
李玉龙
邓硕灵
彭世雄
俞瑾
郭未
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.)
SHENZHEN STOCK EXCHANGE
Original Assignee
SHENZHEN STOCK EXCHANGE
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 SHENZHEN STOCK EXCHANGE filed Critical SHENZHEN STOCK EXCHANGE
Priority to CN201811373650.5A priority Critical patent/CN109669821B/zh
Publication of CN109669821A publication Critical patent/CN109669821A/zh
Application granted granted Critical
Publication of CN109669821B publication Critical patent/CN109669821B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2023Failover techniques
    • G06F11/2025Failover techniques using centralised failover control functionality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Abstract

本发明公开了一种消息中间件的集群部分故障恢复方法,包括:在消息中间件的集群发生部分故障时,集群的故障节点处理本地持久化消息;在本地持久化消息处理完成后,故障节点向集群内的其他节点广播历史消息请求;在集群的主节点接收到历史消息请求时,主节点获取本地持久化存储的历史消息,并发送至故障节点;在主节点发送至故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向故障节点发送内部消息通知,以使故障节点在接收到内部消息通知时,加入集群。本发明还公开了一种服务器及计算机可读存储介质。本发明可以在消息中间件的集群发生部分故障时,通过将故障节点加回到集群以提高集群的可用性。

Description

消息中间件的集群部分故障恢复方法、服务器及存储介质
技术领域
本发明涉及互联网金融技术领域,尤其涉及一种消息中间件的集群部分故障恢复方法、服务器及计算机可读存储介质。
背景技术
消息中间件利用高效可靠的消息传递机制进行平台无关的消息交换,是分布式环境下应用组件间通信的重要基础系统。集群是一种计算机系统,它通过一组松散集成的计算机软件、硬件连接起来,高度紧密地协作完成计算工作,在某种意义上,它们可以被看作是一台计算机。消息中间件集群是指通过消息中间件接收或发送相同消息的一组应用程序或节点,这些节点互为主备,进行相同的运算逻辑,得到相同的计算结果。集群(假设有N个冗余节点)中任意N-1节点故障不影响整个集群的功能。集群部分故障指的是集群中部分节点发生故障,如机器掉电、磁盘设备损坏等。
传统的消息中间件(如Kafka、RabbitMQ等)通常都有中央消息服务器(Broker,简称代理节点),消息发送者和接收者都连接到这个代理节点,依赖该代理节点进行消息分发,而不是彼此间直接通信。多个代理节可以组成代理集群以增加消息中间件可用性,发送者和接收者亦可以组成集群,增强应用程序可用性。基于代理节点的消息中间件主要的问题是所有消息都必须通过代理节点转发,时延较高,无法满足超低时延环境如证券交易系统的需求。
为解决这种问题,现有方案采用无代理节点的消息中间件(如ZeroMQ的非中间件模式、ActiveMQ的P2P模式),应用程序彼此间可以直接通信,无需通过中间代理节点,因此,非常适合在超低时延的场景下使用。但由于没有代理节点,消息中间件只能分别在发送者和接收者实现集群以增强可用性,在集群部分故障(如机器掉电、磁盘设备损坏等)的场景下,可能会造成整个系统的不可用,不适合证券交易系统等高可靠的应用场景。
发明内容
本发明的主要目的在于提供一种消息中间件的集群部分故障恢复方法、服务器及计算机可读存储介质,旨在消息中间件的集群发生部分故障时,通过将故障节点加回到集群,从而可以提高系统的可用性。
为实现上述目的,本发明提供一种消息中间件的集群部分故障恢复方法,包括以下步骤:
在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息;
在所述本地持久化消息处理完成后,所述故障节点向所述集群内的其他节点广播历史消息请求;
在所述集群的主节点接收到所述历史消息请求时,所述主节点获取本地持久化存储的历史消息,并将所述历史消息发送至所述故障节点;
在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。
优选地,所述在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息的步骤包括:
在消息中间件的集群发生部分故障时,所述故障节点从本地持久化存储中读取历史消息以及每个发送主题的已应答消息序列号,并将所述历史消息发送至应用;
获取所述应用提交的每条消息的发送消息序列号;
若所述发送消息序列号小于或等于对应所述发送主题的所述已应答消息序列号,则抛弃与所述发送消息序列号对应的消息。
优选地,所述获取所述应用提交的每条消息的发送消息序列号的步骤之后还包括:
若所述发送消息序列号大于对应所述发送主题的所述已应答消息序列号,则缓存与所述发送消息序列号对应的消息。
优选地,所述消息中间件的集群部分故障恢复方法还包括:
所述主节点在将所述历史消息发送至所述故障节点时,向所述故障节点发送每个发送主题的发送序列号。
优选地,所述主节点在将所述历史消息发送至所述故障节点时,向所述故障节点发送每个发送主题的发送序列号的步骤之后还包括:
所述故障节点在接收到所述历史消息时,将所述历史消息发送至应用,并将接收到的所述发送序列号进行更新。
优选地,所述在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复的步骤之后还包括:
所述主节点在检测到有新成员加入所述集群时,调用获取同步状态回调函数,关闭消息发送功能和接收功能;
所述主节点再次调用所述同步状态回调函数,将已不再变化的每个发送主题的所述发送序列号,以及接收到的所述实时消息的数量发送至所述故障节点,以完成同步。
优选地,所述主节点再次调用所述同步状态回调函数,将已不再变化的每个发送主题的所述发送序列号,以及接收到的所述实时消息的数量发送至所述故障节点,以完成同步的步骤之后还包括:
所述故障节点调用设置同步状态回调函数,接收所述发送序列号,并进行更新。
为实现上述目的,本发明还提供一种服务器,所述服务器包括处理器以及存储在所述处理器内并可在所述处理器上运行的消息中间件的集群部分故障恢复程序,其中,所述消息中间件的集群部分故障恢复程序被所述处理器执行时实现如上所述的消息中间件的集群部分故障恢复方法的步骤。
为实现上述目的,本发明还提供一种服务器,所述服务器包括:
处理模块,用于在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息;
广播模块,用于在所述本地持久化消息处理完成后,所述故障节点向所述集群内的其他节点广播历史消息请求;
获取模块,用于在所述集群的主节点接收到所述历史消息请求时,所述主节点获取本地持久化存储的历史消息,并将所述历史消息发送至所述故障节点;
发送模块,用于在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。
为实现上述目的,本发明还提供一种所述计算机可读存储介质上存储有消息中间件的集群部分故障恢复程序,所述消息中间件的集群部分故障恢复程序被处理器执行实现如上所述的消息中间件的集群部分故障恢复方法的步骤。
本发明提供的消息中间件的集群部分故障恢复方法、服务器及计算机可读存储介质,通过在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息,并在所述本地持久化消息处理完成后,向所述集群内的其他节点广播历史消息请求,然后在所述集群的主节点接收到所述历史消息请求时,所述主节点获取本地持久化存储的历史消息,并将所述历史消息发送至所述故障节点,再在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。这样,在消息中间件的集群发生部分故障时,通过将故障节点加回到集群,从而可以提高系统的可用性。
附图说明
图1为本发明实施例方案涉及的硬件运行环境的服务器的结构示意图;
图2为本发明消息中间件的集群部分故障恢复方法第一实施例的流程示意图;
图3为图2中步骤S1的细化流程示意图;
图4为本发明消息中间件的集群部分故障恢复方法第二实施例的流程示意图;
图5为本发明消息中间件的集群部分故障恢复方法第三实施例的流程示意图;
图6为本发明服务器一实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明的服务器包括:处理器1001,例如CPU,用户接口1002,存储器1003,通信总线1004。其中,通信总线1004用于实现这些组件之间的连接通信。用户接口1002可以包括显示屏(Display)、输入单元。存储器1003可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1003可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1003中可以包括操作系统、网络通信模块、用户接口模块以及消息中间件的集群部分故障恢复程序。
在图1所示的服务器中,用户接口1002主要用于接收用户通过触摸显示屏或在输入单元输入指令触发用户指令;服务器的消息中间件发送者和接收者对应设有基于共享内存的异步持久化组件,处理器1001用于调用存储器1003中存储的消息中间件的集群部分故障恢复程序,并执行以下操作:
在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息;
在所述本地持久化消息处理完成后,所述故障节点向所述集群内的其他节点广播历史消息请求;
在所述集群的主节点接收到所述历史消息请求时,所述主节点获取本地持久化存储的历史消息,并将所述历史消息发送至所述故障节点;
在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。
进一步地,处理器1001可以调用存储器1003中存储的消息中间件的集群部分故障恢复程序,还执行以下操作:
在消息中间件的集群发生部分故障时,所述故障节点从本地持久化存储中读取历史消息以及每个发送主题的已应答消息序列号,并将所述历史消息发送至应用;
获取所述应用提交的每条消息的发送消息序列号;
若所述发送消息序列号小于或等于对应所述发送主题的所述已应答消息序列号,则抛弃与所述发送消息序列号对应的消息。
进一步地,处理器1001可以调用存储器1003中存储的消息中间件的集群部分故障恢复程序,还执行以下操作:
若所述发送消息序列号大于对应所述发送主题的所述已应答消息序列号,则缓存与所述发送消息序列号对应的消息。
进一步地,处理器1001可以调用存储器1003中存储的消息中间件的集群部分故障恢复程序,还执行以下操作:
所述主节点在将所述历史消息发送至所述故障节点时,向所述故障节点发送每个发送主题的发送序列号。
进一步地,处理器1001可以调用存储器1003中存储的消息中间件的集群部分故障恢复程序,还执行以下操作:
所述故障节点在接收到所述历史消息时,将所述历史消息发送至应用,并将接收到的所述发送序列号进行更新。
进一步地,处理器1001可以调用存储器1003中存储的消息中间件的集群部分故障恢复程序,还执行以下操作:
所述主节点在检测到有新成员加入所述集群时,调用获取同步状态回调函数,关闭消息发送功能和接收功能;
所述主节点再次调用所述同步状态回调函数,将已不再变化的每个发送主题的所述发送序列号,以及接收到的所述实时消息的数量发送至所述故障节点,以完成同步。
进一步地,处理器1001可以调用存储器1003中存储的消息中间件的集群部分故障恢复程序,还执行以下操作:
所述故障节点调用设置同步状态回调函数,接收所述发送序列号,并进行更新。
参照图2,在第一实施例中,本发明提供一种消息中间件的集群部分故障恢复方法,包括以下步骤:
步骤S1、在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息;
本实施例中,消息中间件集群是指通过消息中间件接收相同消息的一组应用程序或节点,这些节点互为备份,进行相同的运算逻辑,得到相同的计算结果。集群(假设有N个冗余节点)中任意N-1节点出现故障时,不会影响整个集群的功能。集群部分故障指的是集群中部分节点发生故障,如机器掉电、磁盘设备损坏等。
集群中包括一个主节点,其他均为备节点,发生故障的节点称为故障节点。集群内的每个节点包括接收者和发送者,其中,接收者用来接收来自上游集群的消息;发送者用来发送处理后的输出消息给下游集群,每个集群通过多节点冗余部署,以保证各自的可用性。集群的部分故障恢复包含接收者恢复和发送者恢复。在对集群的部分故障进行恢复时,通过将故障节点加回集群,可以提高集群的可用性。
可以理解的是,本发明在消息中间件的发送者和接收者两个方向分别放置基于共享内存的异步持久化组件。消息中间件的发送者将消息发送至网络后,将所述消息放入对应的共享内存,并在对应的异步持久化组件的作用下,将所述消息写入所述异步持久化组件的磁盘;消息中间件的接收者从网络上接收到消息之后,先将消息放入对应的共享内存供异步持久化进程,再递交给应用进行处理,此时本地的异步持久化进程会将该消息写入磁盘。
步骤S2、在所述本地持久化消息处理完成后,所述故障节点向所述集群内的其他节点广播历史消息请求;
步骤S3、在所述集群的主节点接收到所述历史消息请求时,所述主节点获取本地持久化存储的历史消息,并将所述历史消息发送至所述故障节点;
本实施例中,所述故障节点在本地持久化消息处理完毕后,消息中间件通过内部消息通道向集群内其他节点广播历史消息请求。所述集群的主节点在收到历史消息请求后,会从本地持久化存储读取历史消息,并通过内部消息通道发送给所述故障节点;而其他非主节点在收到历史消息请求时,则会直接忽略。
步骤S4、在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。
本实施例中,所述主节点在将所述历史消息发送至所述故障节点时,还会接收实时消息,因此,可以记录所述主节点发送至所述故障节点的历史消息的数量,以及接收到的实时消息的数量,并计算二者的差值,若所述差值小于预设阈值,表明所述故障节点即将追赶上所述主节点,此时,所述主节点通过内部消息通道向所述故障节点发送内部消息通知,并继续向所述故障节点发送历史消息。而所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。
可以理解的是,集群发生部分故障时,不会影响整个集群的功能;而当所述故障节点加回到所述集群时,也不影响整个集群的功能,但所述故障节点加回集群可以提高集群的可用性。
本发明通过故障节点先处理本地持久化消息,再处理主节点提供的历史消息,然后加入集群,最终成为集群成员,可以不需要集群中其它应用的协助。消息中间件将会从系统中的持久化组件或集群中其它消息中间件处获取历史消息,应用则需要根据历史消息进行重演。在这个过程中集群中其它组件正常工作,而故障节点的消息中间件负责将历史消息和实时消息合并成一个没有冗余的消息序列递交给应用。
本发明提供的消息中间件的集群部分故障恢复方法,通过在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息,并在所述本地持久化消息处理完成后,向所述集群内的其他节点广播历史消息请求,然后在所述集群的主节点接收到所述历史消息请求时,所述主节点获取本地持久化存储的历史消息,并将所述历史消息发送至所述故障节点,再在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。这样,在消息中间件的集群发生部分故障时,通过将故障节点加回到集群,从而可以提高系统的可用性。
参照图3,在第二实施例中,基于第一实施例,所述步骤S1包括:
步骤S11、在消息中间件的集群发生部分故障时,所述故障节点从本地持久化存储中读取历史消息以及每个发送主题的已应答消息序列号,并将所述历史消息发送至应用;
本实施例中,在消息中间件的集群发生部分故障时,所述故障节点从本地持久化存储中读取历史消息以及每个发送主题的已应答消息序列号,其中,在读取到所述历史消息时,会将所述历史消息放入重传队列,并由消息递交器递交至应用。
可以理解的是,消息中间件会维护两个消息队列:实时队列和重传队列;以及一个用于递交给应用的消息指针队列。收到的实时消息将放入实时队列,消息中间件重传的历史消息将放入重传队列。消息提取线程将从正确的消息队列上取出消息放入消息指针队列。而消息中间件在将接收到的消息放入消息指针队列之前时,会先将其进行持久化处理。
步骤S12、获取所述应用提交的每条消息的发送消息序列号;
步骤S13、若所述发送消息序列号小于或等于对应所述发送主题的所述已应答消息序列号,则抛弃与所述发送消息序列号对应的消息。
步骤S14、若所述发送消息序列号大于对应所述发送主题的所述已应答消息序列号,则缓存与所述发送消息序列号对应的消息。
本实施例中,所述故障节点获取所述应用提交的每条消息的发送消息序列号,并通过消息中间件比较所述发送消息序列号与对应所述发送主题的所述已应答消息序列号的大小。在所述发送消息序列号小于或等于对应所述发送主题的所述已应答消息序列号时,表明与所述发送消息序列号对应的消息已经被所述主节点发出,因此,可以直接抛弃该消息;若所述发送消息序列号大于对应所述发送主题的所述已应答消息序列号,表明与所述发送消息序列号对应的消息未被所述主节点发出,因此,可以缓存该消息。可以理解的是,所述消息中间件会定期将每个发送主题的已应答消息序列号进行持久化处理。
参照图4,在第三实施例中,基于上述任一实施例,所述消息中间件的集群部分故障恢复方法还包括:
步骤S5、所述主节点在将所述历史消息发送至所述故障节点时,向所述故障节点发送每个发送主题的发送序列号。
步骤S6、所述故障节点在接收到所述历史消息时,将所述历史消息发送至应用,并将接收到的所述发送序列号进行更新。
本实施例中,主节点在向所述故障节点发送历史消息的同时,也将自身在各个发送主题的发送序列号发送给所述故障节点。而所述故障节点在接收到所述历史消息,并将所述历史消息发送至应用的同时,将接收到的所述发送序列号进行更新,这样可以过滤重复消息,使小于所述发送序列号的消息被抛弃。
可以理解的是,所述步骤S5与步骤S3可以同时发生,所述步骤S5也可以在所述步骤S3之后执行。本实施例并不限定具体顺序。
参照图5,在第四实施例中,基于第三实施例,所述步骤S4之后还包括:
步骤S7、所述主节点在检测到有新成员加入所述集群时,调用获取同步状态回调函数,关闭消息发送功能和接收功能;
本实施例中,基于应用对消息的重演处理,所述应用需注册两个回调函数:获取同步状态回调函数和设置同步状态回调函数。所述故障节点在接收到所述内部消息通知时,会加入所述集群。而所述主节点检测到有新成员加入所述集群时,会两次调用获取同步状态回调函数,在第一次调用时,关闭消息发送功能和接收功能,也即消息中间件暂停接收消息,同时锁住所有发送主题的输出,之后应用向所述主节点的消息中间件提交的消息将被缓存。
步骤S8、所述主节点再次调用所述同步状态回调函数,将已不再变化的每个发送主题的所述发送序列号,以及接收到的所述实时消息的数量发送至所述故障节点,以完成同步。
本实施例中,所述主节点再次调用所述同步状态回调函数,在回调函数中,消息中间件将已不再变化的每个发送主题的所述发送序列号,以及接收到的所述实时消息的数量发送至所述故障节点,以完成同步。此时,还会通知所述消息中间件同步结束。
步骤S9、所述故障节点调用设置同步状态回调函数,接收所述发送序列号,并进行更新。
本实施例中,所述故障节点调用设置同步状态回调函数,接收所述发送序列号,并进行更新,以过滤重复消息,使小于所述发送序列号的消息被抛弃。所述故障节点成为集群成员状态,加入接收组播组,收到的消息将被放入实时队列。
本发明还提供一种服务器,所述服务器包括处理器以及存储在所述处理器内并可在所述处理器上运行的消息中间件的集群部分故障恢复程序,其中,所述消息中间件的集群部分故障恢复程序被所述处理器执行时实现如上所述的消息中间件的集群部分故障恢复方法的步骤。
本发明还提供一种服务器10,参照图6,在一实施例中,所述服务器10包括:
处理模块101,用于在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息;
本实施例中,消息中间件集群是指通过消息中间件接收相同消息的一组应用程序或节点,这些节点互为备份,进行相同的运算逻辑,得到相同的计算结果。集群(假设有N个冗余节点)中任意N-1节点出现故障时,不会影响整个集群的功能。集群部分故障指的是集群中部分节点发生故障,如机器掉电、磁盘设备损坏等。
集群中包括一个主节点,其他均为备节点,发生故障的节点称为故障节点。集群内的每个节点包括接收者和发送者,其中,接收者用来接收来自上游集群的消息;发送者用来发送处理后的输出消息给下游集群,每个集群通过多节点冗余部署,以保证各自的可用性。集群的部分故障恢复包含接收者恢复和发送者恢复。在对集群的部分故障进行恢复时,通过将故障节点加回集群,可以提高集群的可用性。
可以理解的是,本发明在消息中间件的发送者和接收者两个方向分别放置基于共享内存的异步持久化组件。消息中间件的发送者将消息发送至网络后,将所述消息放入对应的共享内存,并在对应的异步持久化组件的作用下,将所述消息写入所述异步持久化组件的磁盘;消息中间件的接收者从网络上接收到消息之后,先将消息放入对应的共享内存供异步持久化进程,再递交给应用进行处理,此时本地的异步持久化进程会将该消息写入磁盘。
广播模块102,用于在所述本地持久化消息处理完成后,所述故障节点向所述集群内的其他节点广播历史消息请求;
获取模块103,用于在所述集群的主节点接收到所述历史消息请求时,所述主节点获取本地持久化存储的历史消息,并将所述历史消息发送至所述故障节点;
本实施例中,所述故障节点在本地持久化消息处理完毕后,消息中间件通过内部消息通道向集群内其他节点广播历史消息请求。所述集群的主节点在收到历史消息请求后,会从本地持久化存储读取历史消息,并通过内部消息通道发送给所述故障节点;而其他非主节点在收到历史消息请求时,则会直接忽略。
发送模块104,用于在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。
本实施例中,所述主节点在将所述历史消息发送至所述故障节点时,还会接收实时消息,因此,可以记录所述主节点发送至所述故障节点的历史消息的数量,以及接收到的实时消息的数量,并计算二者的差值,若所述差值小于预设阈值,表明所述故障节点即将追赶上所述主节点,此时,所述主节点通过内部消息通道向所述故障节点发送内部消息通知,并继续向所述故障节点发送历史消息。而所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。
本发明通过故障节点先处理本地持久化消息,再处理主节点提供的历史消息,然后加入集群,最终成为集群成员,可以不需要集群中其它应用的协助。消息中间件将会从系统中的持久化组件或集群中其它消息中间件处获取历史消息,应用则需要根据历史消息进行重演。在这个过程中集群中其它组件正常工作,而故障节点的消息中间件负责将历史消息和实时消息合并成一个没有冗余的消息序列递交给应用。
本发明提供的服务器,通过在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息,并在所述本地持久化消息处理完成后,向所述集群内的其他节点广播历史消息请求,然后在所述集群的主节点接收到所述历史消息请求时,所述主节点获取本地持久化存储的历史消息,并将所述历史消息发送至所述故障节点,再在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。这样,在消息中间件的集群发生部分故障时,通过将故障节点加回到集群,从而可以提高系统的可用性。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有消息中间件的集群部分故障恢复程序,所述消息中间件的集群部分故障恢复程序被处理器执行实现如上所述的消息中间件的集群部分故障恢复方法的步骤。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,被控终端,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种消息中间件的集群部分故障恢复方法,其特征在于,所述消息中间件的集群部分故障恢复方法包括以下步骤:
在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息;
在所述本地持久化消息处理完成后,所述故障节点向所述集群内的其他节点广播历史消息请求;
在所述集群的主节点接收到所述历史消息请求时,所述主节点获取本地持久化存储的历史消息,并将所述历史消息发送至所述故障节点;
在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。
2.如权利要求1所述的消息中间件的集群部分故障恢复方法,其特征在于,所述在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息的步骤包括:
在消息中间件的集群发生部分故障时,所述故障节点从本地持久化存储中读取历史消息以及每个发送主题的已应答消息序列号,并将所述历史消息发送至应用;
获取所述应用提交的每条消息的发送消息序列号;
若所述发送消息序列号小于或等于对应所述发送主题的所述已应答消息序列号,则抛弃与所述发送消息序列号对应的消息。
3.如权利要求2所述的消息中间件的集群部分故障恢复方法,其特征在于,所述获取所述应用提交的每条消息的发送消息序列号的步骤之后还包括:
若所述发送消息序列号大于对应所述发送主题的所述已应答消息序列号,则缓存与所述发送消息序列号对应的消息。
4.如权利要求1至3中任一项所述的消息中间件的集群部分故障恢复方法,其特征在于,所述消息中间件的集群部分故障恢复方法还包括:
所述主节点在将所述历史消息发送至所述故障节点时,向所述故障节点发送每个发送主题的发送序列号。
5.如权利要求4所述的消息中间件的集群部分故障恢复方法,其特征在于,所述主节点在将所述历史消息发送至所述故障节点时,向所述故障节点发送每个发送主题的发送序列号的步骤之后还包括:
所述故障节点在接收到所述历史消息时,将所述历史消息发送至应用,并将接收到的所述发送序列号进行更新。
6.如权利要求4所述的消息中间件的集群部分故障恢复方法,其特征在于,所述在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复的步骤之后还包括:
所述主节点在检测到有新成员加入所述集群时,调用获取同步状态回调函数,关闭消息发送功能和接收功能;
所述主节点再次调用所述同步状态回调函数,将已不再变化的每个发送主题的所述发送序列号,以及接收到的所述实时消息的数量发送至所述故障节点,以完成同步。
7.如权利要求6所述的消息中间件的集群部分故障恢复方法,其特征在于,所述主节点再次调用所述同步状态回调函数,将已不再变化的每个发送主题的所述发送序列号,以及接收到的所述实时消息的数量发送至所述故障节点,以完成同步的步骤之后还包括:
所述故障节点调用设置同步状态回调函数,接收所述发送序列号,并进行更新。
8.一种服务器,其特征在于,所述服务器包括处理器以及存储在所述处理器内并可在所述处理器上运行的消息中间件的集群部分故障恢复程序,其中,所述消息中间件的集群部分故障恢复程序被所述处理器执行时实现如权利要求1至7中任一项所述的消息中间件的集群部分故障恢复方法的步骤。
9.一种服务器,其特征在于,所述服务器包括:
处理模块,用于在消息中间件的集群发生部分故障时,所述集群的故障节点处理本地持久化消息;
广播模块,用于在所述本地持久化消息处理完成后,所述故障节点向所述集群内的其他节点广播历史消息请求;
获取模块,用于在所述集群的主节点接收到所述历史消息请求时,所述主节点获取本地持久化存储的历史消息,并将所述历史消息发送至所述故障节点;
发送模块,用于在所述主节点发送至所述故障节点的历史消息的数量,与接收到的实时消息的数量之差小于预设阈值时,向所述故障节点发送内部消息通知,以使所述故障节点在接收到所述内部消息通知时,加入所述集群而使所述集群完成部分故障恢复。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有消息中间件的集群部分故障恢复程序,所述消息中间件的集群部分故障恢复程序被处理器执行实现如权利要求1至7中任一项所述的消息中间件的集群部分故障恢复方法的步骤。
CN201811373650.5A 2018-11-16 2018-11-16 消息中间件的集群部分故障恢复方法、服务器及存储介质 Active CN109669821B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811373650.5A CN109669821B (zh) 2018-11-16 2018-11-16 消息中间件的集群部分故障恢复方法、服务器及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811373650.5A CN109669821B (zh) 2018-11-16 2018-11-16 消息中间件的集群部分故障恢复方法、服务器及存储介质

Publications (2)

Publication Number Publication Date
CN109669821A true CN109669821A (zh) 2019-04-23
CN109669821B CN109669821B (zh) 2022-04-05

Family

ID=66141909

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811373650.5A Active CN109669821B (zh) 2018-11-16 2018-11-16 消息中间件的集群部分故障恢复方法、服务器及存储介质

Country Status (1)

Country Link
CN (1) CN109669821B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111258764A (zh) * 2020-01-16 2020-06-09 山东汇贸电子口岸有限公司 一种为数据中心提供多租户持久化任务记录的方法及系统
CN111338848A (zh) * 2020-02-24 2020-06-26 深圳华锐金融技术股份有限公司 故障应用副本处理方法、装置、计算机设备和存储介质
WO2022096975A1 (en) * 2020-11-05 2022-05-12 International Business Machines Corporation Delivery of event notifications from distributed file system
CN115250227A (zh) * 2022-06-02 2022-10-28 苏州思萃工业互联网技术研究所有限公司 一种边缘计算场景下实现故障迁移的调度系统
CN115695532A (zh) * 2023-01-04 2023-02-03 深圳竹云科技股份有限公司 利用消息中间件处理消息的方法、装置、计算机设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050237926A1 (en) * 2004-04-22 2005-10-27 Fan-Tieng Cheng Method for providing fault-tolerant application cluster service
CN101183377A (zh) * 2007-12-10 2008-05-21 华中科技大学 一种基于消息中间件的高可用性数据库集群
CN104252466A (zh) * 2013-06-26 2014-12-31 阿里巴巴集团控股有限公司 流计算处理方法、设备和系统
US20170364423A1 (en) * 2016-06-21 2017-12-21 EMC IP Holding Company LLC Method and apparatus for failover processing
CN107608826A (zh) * 2017-09-19 2018-01-19 郑州云海信息技术有限公司 一种存储集群的节点的故障恢复方法、装置及介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050237926A1 (en) * 2004-04-22 2005-10-27 Fan-Tieng Cheng Method for providing fault-tolerant application cluster service
CN101183377A (zh) * 2007-12-10 2008-05-21 华中科技大学 一种基于消息中间件的高可用性数据库集群
CN104252466A (zh) * 2013-06-26 2014-12-31 阿里巴巴集团控股有限公司 流计算处理方法、设备和系统
US20170364423A1 (en) * 2016-06-21 2017-12-21 EMC IP Holding Company LLC Method and apparatus for failover processing
CN107608826A (zh) * 2017-09-19 2018-01-19 郑州云海信息技术有限公司 一种存储集群的节点的故障恢复方法、装置及介质

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111258764A (zh) * 2020-01-16 2020-06-09 山东汇贸电子口岸有限公司 一种为数据中心提供多租户持久化任务记录的方法及系统
CN111338848A (zh) * 2020-02-24 2020-06-26 深圳华锐金融技术股份有限公司 故障应用副本处理方法、装置、计算机设备和存储介质
WO2022096975A1 (en) * 2020-11-05 2022-05-12 International Business Machines Corporation Delivery of event notifications from distributed file system
US11593309B2 (en) 2020-11-05 2023-02-28 International Business Machines Corporation Reliable delivery of event notifications from a distributed file system
GB2615715A (en) * 2020-11-05 2023-08-16 Ibm Delivery of event notifications from distributed file system
CN115250227A (zh) * 2022-06-02 2022-10-28 苏州思萃工业互联网技术研究所有限公司 一种边缘计算场景下实现故障迁移的调度系统
CN115695532A (zh) * 2023-01-04 2023-02-03 深圳竹云科技股份有限公司 利用消息中间件处理消息的方法、装置、计算机设备
CN115695532B (zh) * 2023-01-04 2023-03-10 深圳竹云科技股份有限公司 利用消息中间件处理消息的方法、装置、计算机设备

Also Published As

Publication number Publication date
CN109669821B (zh) 2022-04-05

Similar Documents

Publication Publication Date Title
CN109669821A (zh) 消息中间件的集群部分故障恢复方法、服务器及存储介质
CN100591031C (zh) 实现高可用性光纤信道交换机的方法和装置
EP3543870B1 (en) Exactly-once transaction semantics for fault tolerant fpga based transaction systems
US11729129B2 (en) Message quests for rapid re-hosting of client devices
US7590138B2 (en) System for defining an alternate channel routing mechanism in a messaging middleware environment
CN109743358A (zh) 异步消息接口熔断控制方法、装置、计算机设备及存储介质
CN101605092A (zh) 一种基于内容的负载均衡系统
CN101562543A (zh) 一种缓存数据的处理方法、处理系统和装置
JP4479930B2 (ja) ノードシステム、サーバ切換え方法、サーバ装置、データ引き継ぎ方法、およびプログラム
CN109992433B (zh) 一种分布式tgt通信优化方法、装置、设备及存储介质
US8868862B2 (en) Method and apparatus for synchronization in primary-backup replication schemes
CN103634411A (zh) 一种具有状态一致性的市场数据实时广播系统及方法
CN108228393A (zh) 一种可扩展的大数据高可用的实现方法
EP2817726A1 (en) Systems and methods involving virtual machine host isolation over a network
CN109710421A (zh) 消息中间件的接收者异常处理方法、服务器及存储介质
CN109684128A (zh) 消息中间件的集群整体故障恢复方法、服务器及存储介质
CN108390919A (zh) 一种用于高可靠双机热备的消息同步系统及方法
Kessler et al. A network communication protocol for distributed virtual environment systems
CN110225133A (zh) 消息发送方法、节点、装置、系统及相关设备
JP3655263B2 (ja) 分散システムおよび同システムの多重化制御方法
CN109669941A (zh) 数据异步持久化方法、装置及计算机可读存储介质
CN112306755B (zh) 一种基于微前端架构的高可用性实现方法和系统
CN114598593A (zh) 消息处理方法、系统、计算设备及计算机存储介质
CN114500416A (zh) 用于最多一次消息投递的投递方法和投递系统
KR102195427B1 (ko) 블록체인을 앵커링 하는 장치

Legal Events

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