CN111638980A - 基于内存映射的消息处理方法、装置、***和存储介质 - Google Patents

基于内存映射的消息处理方法、装置、***和存储介质 Download PDF

Info

Publication number
CN111638980A
CN111638980A CN202010448217.4A CN202010448217A CN111638980A CN 111638980 A CN111638980 A CN 111638980A CN 202010448217 A CN202010448217 A CN 202010448217A CN 111638980 A CN111638980 A CN 111638980A
Authority
CN
China
Prior art keywords
message
storage
file
memory mapping
disk
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.)
Pending
Application number
CN202010448217.4A
Other languages
English (en)
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.)
Beijing Qingyun Science And Technology Co ltd
Original Assignee
Beijing Qingyun Science And Technology Co ltd
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 Beijing Qingyun Science And Technology Co ltd filed Critical Beijing Qingyun Science And Technology Co ltd
Priority to CN202010448217.4A priority Critical patent/CN111638980A/zh
Publication of CN111638980A publication Critical patent/CN111638980A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于内存映射的消息处理方法、装置、***和存储介质其中,该方法包括:将消息存储到存储主文件,其中,所述存储主文件唯一;基于内存映射将所述消息刷入磁盘以及发送到从节点;根据所述内存映射内所述消息生成响应信息并反馈。本发明实施例基于内存映射的消息处理,降低了文件分区导致的消息处理性能下降,通过内存映射提高文件与磁盘之间的消息交互处理,可提高处理效率。

Description

基于内存映射的消息处理方法、装置、***和存储介质
技术领域
本发明实施例涉及数据处理技术领域,尤其涉及一种基于内存映射的消息处理方法、装置、***和存储介质。
背景技术
随着互联网的技术进步,数据逐渐遍布生活的方方面面,因此对数据如何快速安全的存储成为当前研究的重点。基于消息队列对数据进行存储,存储过程符合顺序写的特点,支持批量操作,使得数据的读取效率更高。消息队列的存储特点是新数据为热点数据,老数据为冷数据,内存中存储的数据需要定时刷盘实现持久化存储。
然而现有kafka等消息队列存储方法,在处理数据存储时存在一些问题,存储分区过多,导致数据存储效率会随着存储分区的增多而快速下行,负载平衡消费抖动过大,并且在负载平衡过程中集群节点不可用。
发明内容
本发明提供一种基于内存映射的消息处理方法、装置、***和存储介质,以实现数据的快速存储,提高存储效率,减少数据存储过程的负载均衡时间,提高数据存储的可用性。
第一方面,本发明实施例提供了一种基于内存映射的消息处理方法,应用于主节点,该方法包括:
将消息存储到存储主文件,其中,所述存储主文件唯一;
基于内存映射将所述消息刷入磁盘以及发送到从节点;
根据所述内存映射内所述消息生成响应信息并反馈。
第二方面,本发明实施例提供了一种基于内存映射的消息处理方法,应用于从节点,该方法包括:
获取主节点发送的消息,并将所述消息存储到存储主文件;
生成所述消息的反馈信息,并将所述反馈信息发送到所述主节点。
第三方面,本发明实施例提供了一种基于内存映射的消息处理装置,应用于主节点,所述装置包括:
文件存储模块,用于将消息存储到存储主文件,其中,所述存储主文件唯一;
内存映射模块,用于基于内存映射将所述消息刷入磁盘以及发送到从节点;
信息反馈模块,用于根据所述内存映射内所述消息生成响应信息并反馈。
第四方面,本发明实施例提供了一种基于内存映射的消息处理装置,应用于从节点,所述装置包括:
消息同步模块,用于获取主节点发送的消息,并将所述消息存储到存储主文件;
反馈信息模块,用于生成所述消息的反馈信息,并将所述反馈信息发送到所述主节点。
第五方面,本发明实施例提供了一种***,该***包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例中任一所述的基于内存映射的消息处理方法。
第六方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行实现如本发明实施例中任一所述的基于内存映射的消息处理方法。
本发明实施例,通过将接收到的消息存储到同一个存储主文件,基于内存映射实现存储主文件内消息数据的刷盘和从节点同步,基于内存映射生成消息的响应信息并反馈,实现了基于内存映射的消息处理,降低了文件分区导致的消息处理性能下降,通过内存映射提高文件与磁盘之间的消息交互处理,可提高处理效率。
附图说明
图1是本发明实施例一提供的一种基于内存映射的消息处理方法的流程图;
图2是本发明实施例二提供的一种基于内存映射的消息处理方法的流程图;
图3是本发明实施例二提供的一种基于内存映射的消息处理的示例图;
图4是本发明实施例二提供的一种故障恢复的示例图;
图5是本发明实施例三提供的一种基于内存映射的消息处理方法的流程图;
图6是本发明实施例四提供的一种基于内存映射的消息处理装置的结构示意图;
图7是本发明实施例五提供的一种基于内存映射的消息处理装置的结构示意图;
图8是本发明实施例六提供的一种***的结构示意图;
图9是本发明实施例六提供的一种***的架构示例图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构,此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
实施例一
图1是本发明实施例一提供的一种基于内存映射的消息处理方法的流程图,本发明实施例可适用于分布式集群中快速处理消息的情况,该方法可以由基于内存映射的消息处理装置来执行,该装置可以采用硬件和/或软件的方式来实现,一般应用于分布式集群中的主节点,参见图1,本发明实施例提供的方法通常包括如下步骤:
步骤101、将消息存储到存储主文件,其中,所述存储主文件唯一。
其中,消息是分布式集群中待存储的数据,可以由分布式集群中的主节点接收。主节点是分布式集群中根据Raft或者LibraBFT共识协议确定出的执行节点。存储主文件是主节点中存储消息的数据文件,存储主文件可以位于主节点的内存中,在本发明实施例中,存储主文件在主节点中有且仅有一个,消息均存储在该存储主文件中,存储主文件具体是Linux***中的Journal文件。
具体的,主节点接收消息,并将该消息存储到存储主文件中,可以理解的是,由于主节点中存储主文件唯一,主节点接收的消息都扇入保存到同一个存储主文件。主节点不会因为分区增多增加存储主文件的数量,防止存储主文件数量过多导致消息读写性能下降。
步骤102、基于内存映射将所述消息刷入磁盘以及发送到从节点。
其中,内存映射是将消息从文件映射到内存空间的方法,文件中的消息与内存空间中的消息存在一一对映关系,实现这种关系后,可以采用指针的方式对消息进行读写操作,并将相应的操作写到文件中,不必再调用read和write等***函数。磁盘是实现文件持久化存储的介质,当消息刷入磁盘后实现持有化存储。从节点是分布式集群中同步消息存储的主机,从节点和主节点在集群中可以处于平等位置,仅在进行消息存储时,通过Raft或者LibraBFT共识协议确定出的执行节点为主节点,其他执行节点为从节点。
在本发明实施例中,可以将存储主文件内的消息基于内存映射写入到内存空间,主节点直接根据内存空间中的消息刷入磁盘和发送到从节点,可以理解的是,为了进一步提高消息的存储效率,消息刷入磁盘和发送到从节点分别由不同的线程执行,各线程之间可以实现异步操作。
步骤103、根据所述内存映射内所述消息生成响应信息并反馈。
其中,响应消息可以是消息存储成功的反馈信息,一个响应消息可以对应一个消息或者一批消息,当消息存储成功后,可以通过响应消息向消息发送方进行反馈。
具体的,读取基于内存映射写入内存空间的消息,并生成消息对应的响应信息,可以一个消息对应生成一个响应消息,也可以一批消息生成一个响应消息,一批消息中至少包括两个消息。并将生成的响应消息反馈到消息发送方。可以理解的是,在消息写入内存空间后可以直接生成响应消息,等待发送时机的到来。在本发明实施例中,反馈响应信息的时机可以包括主节点内消息刷入磁盘成功和/或从节点内消息刷入磁盘成功。
本发明实施例,通过接收到的消息存储到同一个存储主文件,基于内存映射实现存储主文件内消息数据的刷盘和从节点同步,根据内存映射生成消息的响应信息并反馈,实现了基于内存映射的消息处理,降低了文件分区导致的消息处理性能下降,通过内存映射提高文件与磁盘之间的消息交互处理,可提高处理效率。
实施例二图2是本发明实施例二提供的一种基于内存映射的消息处理方法的流程图,本发明实施例是在上述实施例基础上的具体化,通过建立分区索引加快存储主文件读写操作,并基于预设长度将存储单元从磁盘还原到存储主文件,参见图2,本发明实施例的基于内存映射的消息处理方法包括如下步骤:
步骤201、根据接收到的存储请求将消息存储到存储主文件。
其中,存储请求是消息进行存储的请求,具体可以由Store线程单独进行接受存储请求。
具体的,由Store线程对存储请求进行监测,接受到存储请求时,根据存储请求将消息存储到存储主文件中,在分布式集群中主节点仅包括一个存储主文件,Store线程接收到的所有消息均存储到该存储主文件,不会因为消息对应的存储文件增多而降低读写性能,同时保障了消息的读写顺序。
步骤202、根据所述消息在所述存储主文件的存储位置生成分区索引。
其中,存储文件可以包括至少一个分区,分区为逻辑意义的分区,各分区内消息的存储位置位于存储主文件的存储区域内,为了加快存储主文件的读写效率,可以为存储主文件生成分区索引,各分区索引对应存储主文件内的一个或者多个存储位置。
在本发明实施例中,基于内存映射读取到中存储主文件中消息的存储位置,根据存储位置创建各消息对应的分区索引,例如,可以根据存储位置的存储地址进行求余计算,不同的余数划分到不同的分区,可以将对应的余数作为对应的分区索引。可以理解的是,分区索引的创建过程与消息在主存储文件中的存储过程为异步过程,可以由单独的线程执行步骤202生成分区索引的过程,不对其他事务产生影响,提高处理性能。
步骤203、从内容映射中读取存储主文件内的消息,将所述消息按照预设规则刷入磁盘。
其中,预设规则可以是将消息输入磁盘的触发条件,磁盘是持有化存储消息的存储介质,分布式集群断电后磁盘中存储的消息不会被丢失。
具体的,基于内容映射从存储主文件中读取存储的消息,并根据预设规则将消息刷写入磁盘。
进一步的,在上述发明实施例的基础上,预设规则包括以下至少一种:
待刷入磁盘的消息数量超过阈值数量时,将各所述消息刷入磁盘;待刷入磁盘的消息等待时间超过阈值时间时,将所述消息刷入磁盘;将所述消息立即刷入磁盘。
其中,阈值数量是触发磁盘刷写的数量临界值,等待刷入磁盘的消息数量超过阈值数量时,触发磁盘刷写。阈值时间是触发磁盘刷写的最大等待时间,消息等待刷盘的时间超过阈值时间时,触发磁盘刷写。
具体的,根据等待的消息的数量、消息的等待时间控制消息刷入磁盘的时机,当满足等待刷入磁盘的消息数量超过阈值数量时,可以将消息刷入磁盘,当消息等待时间超过阈值时间时,可以将消息刷入磁盘,还可以将从存储主文件中读取到的消息立即刷写到磁盘中。
步骤204、从内容映射中读取存储主文件内的消息,将所述消息发送给从节点。
具体的,通过内容映射读取存储主文件中的消息,将消息发送到从节点,使得从节点将该消息进行存储,实现从节点数据与主节点数据的同步。从节点可以将发送的消息存储到本地存储主文件,实现从节点存储主文件与主节点存储主文件的同步。
步骤205、从内容映射中读取存储主文件内的消息,生成所述消息对应的响应信息,并存储到反馈信息列表。
其中,响应信息是反馈消息存储状态的信息,当消息存储成功后,主节点可以向消息发送方发送响应消息。反馈信息列表可以是暂存响应信息的存储空间,反馈信息列表的数据结构可以为队列,先存储的响应消息可以优先进行反馈。
具体的,当使用内存映射可以读取到存储主文件中的消息时,可以生成该消息对应的响应信息,该响应信息可以通知消息发送方消息在存储主文件中存储成功。响应消息生成后可以暂存到反馈信息列表等待后续的发送时机。
步骤206、当满足发送条件时,反馈所述反馈信息列表中的所述响应信息。
其中,发送条件是发送响应信息的条件,例如,响应信息对应的消息刷盘成功或者响应消息对应的消息在从节点存储成功等。
具体的,使用独立线程对发送条件进行监测,确定满足发送条件时,将反馈信息列表中的响应信息发送。在本发明实施例中,反馈信息列表的使用将响应信息的生成和发送过程分离,生成过程和发送过程可以分别由独立的线程执行,可以提高消息的处理速度。
进一步的,在上述发明实施例的基础上,发送条件至少包括以下一种:
所述响应信息对应的消息刷入磁盘;所述响应信息对应的消息在从节点完成刷盘;所述响应信息对应的消息存储刷入内存映射。
在本发明实施例中,响应消息发送的时机可以存在多种,例如,当消息刷入磁盘后,可以反馈该消息的响应消息,当消息在从节点中完成刷盘,消息对应的响应消息可以反馈该消息的响应消息,甚至基于内存映射读取到消息时,可以直接将该消息的响应信息反馈。可以理解的是,步骤202-步骤206可以分别由单独的线程执行,各步骤之间不存在时序上的依赖关系,在本发明实施例中步骤202-步骤206仅用于区分处理过程不用于对处理过程的先后执行顺序进行限制,例如,步骤206可以先于步骤202执行。
步骤207、断电恢复时根据内存映射和存储主文件还原所述消息的分区索引。
在本发明实施例中,当主节点断电时,由于消息的分区索引的生成过程与在存储主文件的存储过程为异步过程,存在消息已经被存储但是在生成分区索引之前断电,导致该消息的分区索引未被生成,当断电恢复时,还原该消息的分析索引。具体的,可以通过内存映射读取存储主文件中所有消息,重新生成消息的分区索引。为了减少处理量,还可以仅获取存储主文件中未生成分区索引的消息,并生成该消息的分区索引。
示例性的,图3是本发明实施例二提供的一种基于内存映射的消息处理的示例图,参见图3,主节点Store接受消息存储请求,根据该消息存储请求调用Journal线程开始扇入消息到内存映射Mmap。创建消息对应的响应信息到反馈信息列表Pending responsequeue,若是异步刷盘过程,此时可以将响应消息直接反馈给客户端。调用Dispatcher线程将Mmap中的消息发送给分布式集群中的其他从节点,主节点和从节点位于相同小组,小组内的主节点基于raft进行leader选举确定。调用Buid partition index线程将Mmap中的消息创建分区索引以便方便读取消息。调用Flusj service线程将Mmap中的消息刷入磁盘,该过程为异步刷盘。调用Replica checker线程获取从节点Follower的反馈信息,用于触发Response sevice线程。Response sevice线程用于将反馈信息列表Pending responsequeue中的响应信息反馈到客户端,Response sevice线程可以由Flusj service线程和Replica checker线程触发。
本发明实施例,通过接收到的存储请求将消息存储到存储主文件,基于消息在存储主文件的存储位置生成分区索引,基于内容映射获取存储主文件内的消息并将该消息刷入磁盘以及发送到从节点,当消息基于内容映射读取后,还生成该消息的响应信息,响应信息存储在反馈信息列表,在满足条件时,将反馈信息列表中的响应信息进行反馈,以及还在断电恢复时通过内存映射使用存储主文件消息还原分区索引,解决了文件分区增多导致的消息处理性能下降问题,实现基于内存映射的消息处理,提高了消息的读写效率,可增强消息的收发吞吐量。
进一步的,在上述发明实施例的基础上,根据内存映射将所述磁盘内的消息还原到所述存储主文件,包括:
根据所述存储主文件确定消息的存储偏移量;确定所述分区索引的索引偏移量;根据所述存储偏移量和所述索引偏移量获取所述存储主文件内的消息,并生成所述消息的分区索引。
其中,存储偏移量表示存储主文件内的消息的存储数量,存储主文件每存储一个消息,存储主文件的存储偏移量相应增加该消息的长度,索引偏移量是消息对应的分区索引的数量,每当生成一个消息的分区索引,则分区索引的索引偏移量相应的增加。
在本发明实施例中,当断电恢复时分别获取存储主文件的存储偏移量和分区索引的索引偏离量,存储偏移量与索引偏移量的差值可以对应于未生成分区索引的消息,基于存储偏移量与索引偏移量的差值在存储主文件中获取目标消息,并生成目标消息的分区索引。
示例性的,图4是本发明实施例二提供的一种故障恢复的示例图,参见图4,分布式集群节点断电恢复后,读取主存储文件Journal最新的两个文件区域,根据文件区域内存储的消息构建Inner结构体,Inner结构体的数据结构如Inner{len,magicCode,body},其中,len为4字节定长,用于描述消息的长度,body用于存储消息内容,magicCode为常量数字,用于标识该Inner结构体存储的消息是否正确。在获取Inner结构体后检查magicCode是否正确,若正确则该Inner结构体存储有消息,继续读取Journal的Inner结构体。若不正确,则该Inner结构体未存储消息,则在Journal中该Inner结构体前一个读取的Inner结构体存储的是Journal中存储的最后一个消息,根据该消息的偏移量offset记为存储偏移量Journal0ffset。读取所有分区索引对应的文件列表,根据文件列表中分区索引构建Index结构体,Index{offset,size},其中,offset表示分区索引的消息在Journal中的偏移量,size表示对应消息的长度,将分区索引在Journal中的偏移量offset记为索引偏移量builtPartitonOffset,若builtPartitonOffset小于Journal0ffset,则根据builtPartitonOffset读取Journal中的消息,并根据该消息生成分区索引,根据该分区索引更新builtPartitonOffset,重复获取Journal中消息的过程直到builtPartitonOffset与Journal0ffset相等,此时完成分区索引的恢复。
实施例三
图5是本发明实施例三提供的一种基于内存映射的消息处理方法的流程图,本发明实施例可适用于分布式集群中快速处理消息的情况,该方法可以由基于内存映射的消息处理装置来执行,该装置可以采用硬件和/或软件的方式来实现,一般应用于分布式集群中的从节点,参见图5,本发明实施例提供的方法通常包括如下步骤:
步骤301、获取主节点发送的消息,并将所述消息存储到存储主文件。
其中,主节点是分布式集群的执行节点,主节点与当前从节点位于相同小组,主节点是分布式集群中根据Raft或者LibraBFT共识协议确定出的执行节点。
具体的,从节点接收主节点发送的消息,并将该消息存储到从节点的存储主文件中,该存储主文件通过接收主节点发送的消息实现与主节点内的存储主文件的同步。
步骤302、生成所述消息的反馈信息,并将所述反馈信息发送到所述主节点。
其中,反馈信息可以是向主节点反馈消息存储成功的信息,可以在消息存储在从节点的存储主文件时发送,也可以在消息成功刷写磁盘时发送。
在本发明实施例中,从节点生成消息对应的反馈信息,并将反馈信息发送到主节点。
进一步的,生成所述消息的反馈信息,并将所述反馈信息发送到所述主节点,包括:
确定满足反馈条件时,生成所述消息的反馈信息;将所述反馈信息发送到所述主节点;其中,所述反馈条件至少包括以下一种:所述消息完成在所述存储主文件的存储;所述消息完成在磁盘的刷入。
在本发明实施例中,从节点在将消息存储到存储主文件和/或刷写到磁盘时,向主节点发送反馈信息,反馈信息与从节点接收到的消息对应,该反馈信息用于通知主节点从节点完成对该消息的同步。
本发明实施例,通过获取主节点发送的消息,并将消息存储到存储主文件,获取该消息的反馈信息并发送,实现了主节点与从节点存储消息的强一致性,保障了从节点消息备份的高可用性。
实施例四
图6是本发明实施例四提供的一种基于内存映射的消息处理装置的结构示意图,可执行本发明任意实施例所提供的基于内存映射的消息处理方法,具备执行方法相应的功能模块和有益效果。该装置可以由软件和/或硬件实现,具体包括:文件存储模块401、内存映射模块402和信息反馈模块403。
文件存储模块401,用于将消息存储到存储主文件,其中,所述存储主文件唯一。
内存映射模块402,用于基于内存映射将所述消息刷入磁盘以及发送到从节点。
信息反馈模块403,用于根据所述内存映射内所述消息生成响应信息并反馈。
本发明实施例,通过文件存储模块接收到的消息存储到同一个存储主文件,内存映射模块基于内存映射实现存储主文件内消息数据的刷盘和从节点同步,信息反馈模块根据内存映射生成消息的响应信息并反馈,实现了基于内存映射的消息处理,降低了文件分区导致的消息处理性能下降,通过内存映射提高文件与磁盘之间的消息交互处理,可提高处理效率。
进一步的,在上述发明实施例的基础上,文件存储模块401包括:
存储单元,用于根据接收到的存储请求将所述消息存储到存储主文件。
索引单元,用于根据所述消息在所述存储主文件的存储位置生成分区索引。
进一步的,在上述发明实施例的基础上,内存映射模块402包括:
刷盘单元,用于从所述内容映射中读取存储主文件内的消息,将所述消息按照预设规则刷入磁盘。
同步单元,用于从所述内容映射中读取存储主文件内的消息,将所述消息发送给所述从节点。
进一步的,在上述发明实施例的基础上,刷盘单元中的预设规则包括以下至少一种:
待刷入磁盘的消息数量超过阈值数量时,将各所述消息刷入磁盘;
待刷入磁盘的消息等待时间超过阈值时间时,将所述消息刷入磁盘;
将所述消息立即刷入磁盘。
进一步的,在上述发明实施例的基础上,信息反馈模块包括:
列表单元,用于待所述消息刷入所述内存映射后,生成所述消息对应的响应信息,并存储到反馈信息列表。
响应单元,用于当满足发送条件时,反馈所述反馈信息列表中的所述响应信息。
进一步的,在上述发明实施例的基础上,响应单元的发送条件至少包括以下一种:
所述响应信息对应的消息刷入磁盘;
所述响应信息对应的消息在从节点完成刷盘;
所述响应信息对应的消息存储刷入内存映射。
进一步的,在上述发明实施例的基础上,还包括故障恢复模块,用于断电恢复时根据内存映射和存储主文件还原所述消息的分区索引。
进一步的,在上述发明实施例的基础上,故障恢复模块包括:
文件偏移单元,用于根据所述存储主文件确定消息的存储偏移量。
索引偏移单元,用于确定所述分区索引的索引偏移量。
索引恢复单元,用于根据所述存储偏移量和所述索引偏移量获取所述存储主文件内的消息,并生成所述消息的分区索引。
实施例五
图7是本发明实施例五提供的一种基于内存映射的消息处理装置的结构示意图,可执行本发明任意实施例所提供的基于内存映射的消息处理方法,具备执行方法相应的功能模块和有益效果。该装置可以由软件和/或硬件实现,具体包括:
消息同步模块501,用于获取主节点发送的消息,并将所述消息存储到存储主文件。
反馈信息模块502,用于生成所述消息的反馈信息,并将所述反馈信息发送到所述主节点。
本发明实施例,通过消息同步模块获取主节点发送的消息,并将消息存储到存储主文件,反馈信息模块获取该消息的反馈信息并发送,实现了主节点与从节点存储消息的强一致性,保障了从节点消息备份的高可用性。
进一步的,在上述发明实施例的基础上,反馈信息模块502包括:
信息生成单元,用于确定满足反馈条件时,生成所述消息的反馈信息。
信息反馈单元,用于将所述反馈信息发送到所述主节点;其中,所述反馈条件至少包括以下一种:所述消息完成在所述存储主文件的存储;所述消息完成在磁盘的刷入。
实施例六
图8是本发明实施例六提供的一种***的结构示意图,如图8所示,该***包括处理器70、存储器71、输入装置72和输出装置73;***中处理器70的数量可以是一个或多个,图8中以一个处理器70为例;***中的处理器70、存储器71、输入装置72和输出装置73可以通过总线或其他方式连接,图8中以通过总线连接为例。
存储器71作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的基于内存映射的消息处理方法对应的程序指令/模块(例如,基于内存映射的消息处理装置中的文件存储模块401、内存映射模块402和信息反馈模块403以及消息同步模块501和反馈信息模块502)。处理器70通过运行存储在存储器71中的软件程序、指令以及模块,从而执行***的各种功能应用以及数据处理,即实现上述的基于内存映射的消息处理方法。
存储器71可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器71可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器71可进一步包括相对于处理器70远程设置的存储器,这些远程存储器可以通过网络连接至***。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置72可用于接收输入的数字或字符信息,以及产生与***的用户设置以及功能控制有关的键信号输入。输出装置73可包括显示屏等显示设备。
示例性的,图9是本发明实施例六提供的一种***的架构示例图,参见图9,本发明实施例中***由客户端集群Consuemr cluster、生产端集群Producer cluster、管理集群Etcd cluster和处理集群Broker cluster组成,客户端集群Consuemr cluster、生产端集群Producer cluster向管理集群Etcd cluster发送消息,管理集群Etcd cluster基于本发明实施例提供的基于内存映射的消息处理方法处理该消息,处理集群Broker cluster获取管理集群Etcd cluster发送的消息进行同步。
实施例七
本发明实施例七还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种基于内存映射的消息处理方法,该方法包括:
将消息存储到存储主文件,其中,所述存储主文件唯一;
基于内存映射将所述消息刷入磁盘以及发送到从节点;
根据所述内存映射内所述消息生成响应信息并反馈。
和/或
获取主节点发送的消息,并将所述消息存储到存储主文件;
生成所述消息的反馈信息,并将所述反馈信息发送到所述主节点。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的基于内存映射的消息处理方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述基于内存映射的消息处理装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (14)

1.一种基于内存映射的消息处理方法,其特征在于,应用于主节点,所述方法包括:
将消息存储到存储主文件,其中,所述存储主文件唯一;
基于内存映射将所述消息刷入磁盘以及发送到从节点;
根据所述内存映射内所述消息生成响应信息并反馈。
2.根据权利要求1所述的方法,其特征在于,所述将消息存储到存储主文件,包括:
根据接收到的存储请求将所述消息存储到存储主文件;
根据所述消息在所述存储主文件的存储位置生成分区索引。
3.根据权利要求2所述的方法,其特征在于,所述基于内存映射将所述消息刷入磁盘以及发送到从节点,包括:
从所述内容映射中读取存储主文件内的消息,将所述消息按照预设规则刷入磁盘;
从所述内容映射中读取存储主文件内的消息,将所述消息发送给所述从节点。
4.根据权利要求3所述的方法,其特征在于,所述预设规则包括以下至少一种:
待刷入磁盘的消息数量超过阈值数量时,将各所述消息刷入磁盘;
待刷入磁盘的消息等待时间超过阈值时间时,将所述消息刷入磁盘;
将所述消息立即刷入磁盘。
5.根据权利要求3所述的方法,其特征在于,所述根据所述内存映射内所述消息生成响应信息并反馈,包括:
待所述消息刷入所述内存映射后,生成所述消息对应的响应信息,并存储到反馈信息列表;
当满足发送条件时,反馈所述反馈信息列表中的所述响应信息。
6.根据权利要求5所述的方法,其特征在于,所述发送条件至少包括以下一种:
所述响应信息对应的消息刷入磁盘;
所述响应信息对应的消息在从节点完成刷盘;
所述响应信息对应的消息存储刷入内存映射。
7.根据权利要求1-6任一所述的方法,其特征在于,还包括:
断电恢复时根据内存映射和存储主文件还原所述消息的分区索引。
8.根据权利要求7所述的方法,其特征在于,所述断电恢复时根据内存映射和存储主文件还原所述消息的分区索引,包括:
根据所述存储主文件确定消息的存储偏移量;
确定所述分区索引的索引偏移量;
根据所述存储偏移量和所述索引偏移量获取所述存储主文件内的消息,并生成所述消息的分区索引。
9.一种基于内存映射的消息处理方法,其特征在于,应用于从节点,所述方法包括:
获取主节点发送的消息,并将所述消息存储到存储主文件;
生成所述消息的反馈信息,并将所述反馈信息发送到所述主节点。
10.根据权利要求9所述的方法,其特征在于,所述生成所述消息的反馈信息,并将所述反馈信息发送到所述主节点,包括:
确定满足反馈条件时,生成所述消息的反馈信息;
将所述反馈信息发送到所述主节点;
其中,所述反馈条件至少包括以下一种:
所述消息完成在所述存储主文件的存储;
所述消息完成在磁盘的刷入。
11.一种基于内存映射的消息处理装置,其特征在于,应用于主节点,所述装置包括:
文件存储模块,用于将消息存储到存储主文件,其中,所述存储主文件唯一;
内存映射模块,用于基于内存映射将所述消息刷入磁盘以及发送到从节点;
信息反馈模块,用于根据所述内存映射内所述消息生成响应信息并反馈。
12.一种基于内存映射的消息处理装置,其特征在于,应用于从节点,所述装置包括:
消息同步模块,用于获取主节点发送的消息,并将所述消息存储到存储主文件;
反馈信息模块,用于生成所述消息的反馈信息,并将所述反馈信息发送到所述主节点。
13.一种***,其特征在于,所述***包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-10中任一所述的基于内存映射的消息处理方法。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行实现如权利要求1-10中任一所述的基于内存映射的消息处理方法。
CN202010448217.4A 2020-05-25 2020-05-25 基于内存映射的消息处理方法、装置、***和存储介质 Pending CN111638980A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010448217.4A CN111638980A (zh) 2020-05-25 2020-05-25 基于内存映射的消息处理方法、装置、***和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010448217.4A CN111638980A (zh) 2020-05-25 2020-05-25 基于内存映射的消息处理方法、装置、***和存储介质

Publications (1)

Publication Number Publication Date
CN111638980A true CN111638980A (zh) 2020-09-08

Family

ID=72330905

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010448217.4A Pending CN111638980A (zh) 2020-05-25 2020-05-25 基于内存映射的消息处理方法、装置、***和存储介质

Country Status (1)

Country Link
CN (1) CN111638980A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113010103A (zh) * 2021-01-15 2021-06-22 腾讯科技(深圳)有限公司 数据存储方法、装置、相关设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113010103A (zh) * 2021-01-15 2021-06-22 腾讯科技(深圳)有限公司 数据存储方法、装置、相关设备及存储介质

Similar Documents

Publication Publication Date Title
CN108647104B (zh) 请求处理方法、服务器及计算机可读存储介质
CN114637475B (zh) 一种分布式存储***控制方法、装置及可读存储介质
US9946582B2 (en) Distributed processing device and distributed processing system
US20110314221A1 (en) Storage apparatus, controller and storage apparatus control method
CN107329704B (zh) 一种缓存镜像方法及控制器
CN107329859B (zh) 一种数据保护方法及存储设备
US10445295B1 (en) Task-based framework for synchronization of event handling between nodes in an active/active data storage system
CN109117086B (zh) 存储设备数据位置的处理方法、装置、设备及存储介质
CN111930716A (zh) 一种数据库扩容方法、装置及***
CN111291062B (zh) 数据同步写入方法、装置、计算机设备及存储介质
CN111541762A (zh) 数据处理的方法、管理服务器、设备及存储介质
CN113467719A (zh) 数据写入方法及装置
CN111638980A (zh) 基于内存映射的消息处理方法、装置、***和存储介质
CN117492661A (zh) 数据写入方法、介质、装置和计算设备
US10169441B2 (en) Synchronous data replication in a content management system
WO2021082925A1 (zh) 一种交易处理的方法及装置
CN117555966A (zh) 数据库主从同步方法、装置、设备及可读存储介质
CN111078119A (zh) 一种数据重建方法、***、装置及计算机可读存储介质
US20230137609A1 (en) Data synchronization method and apparatus
CN114490540B (zh) 数据存储方法、介质、装置和计算设备
EP0096199A2 (en) Method and apparatus for logging journal data in a computing apparatus
CN111522883A (zh) 对象数据的备份方法、装置、设备及存储介质
CN115168243A (zh) 一种内存空间管理方法、装置、电子设备及存储介质
CN114328374A (zh) 一种快照方法、装置、相关设备及数据库***
CN114722261A (zh) 一种资源的处理方法、装置、电子设备及存储介质

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
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 100000 Unit 501A, Floor 5, 101, Building 1, Yard 5, Laiguangying West Road, Chaoyang District, Beijing

Applicant after: Beijing Qingyun Science and Technology Co.,Ltd.

Address before: 100020 601, 6 floor, 16 building, No. 36 Chuang Yuan Road, Chaoyang District, Beijing.

Applicant before: Beijing Qingyun Science and Technology Co.,Ltd.