一种脏数据下刷方法、装置、设备及计算机可读存储介质与流程

文档序号:23186907发布日期:2020-12-04 14:15阅读:144来源:国知局
一种脏数据下刷方法、装置、设备及计算机可读存储介质与流程

本申请涉及数据下刷技术领域,更具体地说,涉及一种脏数据下刷方法、装置、设备及计算机可读存储介质。



背景技术:

在双控节点场景下,当节点2执行热重启后,节点1要等到节点2把自己的脏数据全部刷写完后才能和节点2结成cachingpair(缓存对),结成cachingpair后两个节点的缓存数据才可以互相镜像,然后,节点2才能开始加入集群以和节点1恢复成双控状态。

目前,热重启后的节点会将脏数据下刷到硬盘中,并在收到硬盘回复的响应才算一次下刷完成,当脏数据包含大量的小块随机io时,由于io地址不连续(随机io的地址是随机的),因此,则无法连续下刷到硬盘中,而这就导致脏数据的下刷速度比较慢,持续时间比较长,如果另一节点在热重启后的节点进行脏数据下刷时被执行重启操作就会导致用户业务发生中断。

综上所述,如何提高热重启节点脏数据的下刷速率,以降低用户业务中断的可能性,是目前本领域技术人员亟待解决的技术问题。



技术实现要素:

有鉴于此,本申请的目的是提供一种脏数据下刷方法、装置、设备及计算机可读存储介质,用于提高热重启节点脏数据的下刷速率,以降低用户业务中断的可能性。

为了实现上述目的,本申请提供如下技术方案:

一种脏数据下刷方法,包括:

在系统初始化时申请第一容量的内存;

当双控节点中的一个节点发生热重启时,获取所述内存的剩余容量;

根据所述内存的剩余容量申请第二容量的内存,将所述第一容量的内存和所述第二容量的内存作为新增缓存;

将所述节点中的脏数据下刷到所述新增缓存中。

优选的,在将所述节点中的脏数据下刷到所述新增缓存中时,还包括:

判断所述新增缓存的空间使用率是否大于预设值,若是,则将所述新增缓存中的脏数据下刷到硬盘中。

优选的,将所述新增缓存中的脏数据下刷到硬盘中,包括:

根据所述新增缓存的空间使用率,控制每次下刷到所述硬盘中的脏数据的个数;其中,所述新增缓存的空间使用率大的脏数据下刷个数大于所述新增缓存的空间使用率小的脏数据下刷个数。

优选的,将所述新增缓存中的脏数据下刷到硬盘中,包括:

将新增缓存中的多个所述脏数据合并为大块数据,并将所述大块数据下刷到所述硬盘中。

优选的,将所述新增缓存中的脏数据下刷到硬盘中,包括:

将所述新增缓存中的脏数据连续下刷到硬盘中,直到确定所述新增缓存接收到所述硬盘发送的响应后,根据所述响应包含的错误码对所述新增缓存中的脏数据进行处理;其中,所述硬盘在所述脏数据下刷出现错误时向所述新增缓存发送所述响应。

优选的,还包括:

当所述节点中的脏数据完成下刷后,将所述新增缓存中的脏数据全部下刷到硬盘中,并释放所述第二容量的内存。

一种脏数据下刷装置,包括:

第一申请模块,用于在系统初始化时申请第一容量的内存;

获取模块,用于当双控节点中的一个节点发生热重启时,获取所述内存的剩余容量;

第二申请模块,用于根据所述内存的剩余容量申请第二容量的内存,将所述第一容量的内存和所述第二容量的内存作为新增缓存;

下刷模块,用于将所述节点中的脏数据下刷到所述新增缓存中。

优选的,还包括:

判断模块,用于在将所述节点中的脏数据下刷到所述新增缓存中时,判断所述新增缓存的空间使用率是否大于预设值,若是,则将所述新增缓存中的脏数据下刷到硬盘中。

一种脏数据下刷设备,,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述任一项所述的脏数据下刷方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述的脏数据下刷方法的步骤。

本申请提供了一种脏数据下刷方法、装置、设备及计算机可读存储介质,其中,该方法包括:在系统初始化时申请第一容量的内存;当双控节点中的一个节点发生热重启时,获取内存的剩余容量;根据内容的剩余容量申请第二容量的内存,将第一容量的内存和第二容量的内存作为新增缓存;将节点中的脏数据下刷到新增缓存中。

本申请公开的上述技术方案,在系统初始化时先申请第一容量的内存,并在双控节点中的一个节点发生热重启后,根据内存的剩余容量申请第二容量的内存,且将第一容量的内存和第二容量的内存共同作为新增缓存,以将发生热重启的节点的脏数据下刷到新增缓存中,由于内存存储数据的速度及响应的速度均比硬盘要快,因此,相比于将发生热重启的节点中的脏数据下刷到硬盘中,将发生热重启的节点中的脏数据下刷到新增缓存中可以提高脏数据的下刷速率,降低脏数据下刷的持续时间,从而降低用户业务发生中断的可能性,以提高用户业务运行的可靠性,另外,通过系统初始化申请第一容量的内存并在其中一个节点发生热重启后根据内存的剩余容量申请第二容量的内存,以将第一容量的内存和第二容量的内存作为新增缓存的过程不仅可以保证新增缓存有足够大的容量,以提高脏数据下刷速率和效果,而且还可以避免因在系统初始化时申请过多容量的内存而造成资源的浪费并避免对系统中其他模块的运行造成影响。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例提供的一种脏数据下刷方法的流程图;

图2为本申请实施例提供的一种脏数据下刷装置的结构示意图;

图3为本申请实施例提供的一种脏数据下刷设备的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

参见图1,其示出了本申请实施例提供的一种脏数据下刷方法的流程图,本申请实施例提供的一种脏数据下刷方法,可以包括:

s11:在系统初始化时申请第一容量的内存。

考虑现有将发生热重启的节点的脏数据下刷到硬盘时会因脏数据中的小块随机io的存在以及硬盘响应速度慢而导致脏数据下刷速率比较慢,持续时间比较长,从而会增大双控节点中另一节点被执行重启的概率,进而会增加用户业务中断的可能性,为此,本申请提供一种脏数据下刷方法,用于提高热重启节点脏数据的下刷速率,以使得发生热重启的节点可以尽快完成脏数据下刷,并尽快加入集群,且通过缩短脏数据下刷时间来降低另一节点被执行重启的概率,从而降低用户业务中断发生的可能性。

具体地,可以在系统初始化时先申请第一容量的内存,其中,第一容量的大小根据系统总内存以及系统中其他模块对内存的需求而进行设置,且第一容量的大小可以是固定不变的,也即可以先使内存满足其他模块的需求,然后,再在此基础上申请第一容量的内存,以避免在系统初始化时申请过多容量的内存而造成资源的浪费,并避免申请过多容量的内存而对系统中其他模块的运行造成影响。

s12:当双控节点中的一个节点发生热重启时,获取内存的剩余容量。

在双控节点运行过程中,可以对双控节点中的两个节点进行实时监控,当通过监控确定双控节点中的一个节点发生热重启时(此时,另一个节点在正常运行),则可以获取内存在双控节点中的一个节点发生热重启时对应的剩余容量。

s13:根据内存的剩余容量申请第二容量的内存,将第一容量的内存和第二容量的内存作为新增缓存。

在获取到内存的剩余容量之后,可以根据内存的剩余容量申请第二容量的内存,并可以将所申请到的第一容量的内存和第二容量的内存作为新增缓存。

其中,第二容量的大小可以根据内存的剩余容量的大小而发生变化,即新增缓存的大小可以是动态变化的,这样就保证了新增缓存能够尽可能地申请到更多的内存,从而便于提高脏数据下刷速率和下刷效果,并可以减少内存申请对系统中其他模块的影响。

s14:将节点中的脏数据下刷到新增缓存中。

在将第一容量的内存和第二容量的内存作为新增缓存之后,可以将发生热重启的节点中的脏数据下刷到新增缓存中。需要说明的是,在将发生热重启的节点中的脏数据下刷到新增缓存中时,新增缓存在接收到脏数据之后即可立即向发生热重启的节点返回io完成响应(即完成一次下刷),在确定新增缓存接收到新增缓存返回的io响应之后,则可以立即进行下一次的脏数据下刷,即便于脏数据的继续下刷,从而便于提高脏数据下刷速度。

其中,由于内存对数据的处理速度以及响应速度均比硬盘要快的多,因此,将发生热重启的节点的脏数据下刷到利用第一容量的内存和第二容量的内存构成的新增缓存中时则可以提高脏数据的下刷速率,降低脏数据下刷所持续的时间,以使得发生热重启的节点可以尽快地加入到集群中,并降低另一节点被执行重启的概率,从而降低用户业务发生中断的可能性,提高用户业务运行的可靠性。

本申请公开的上述技术方案,在系统初始化时先申请第一容量的内存,并在双控节点中的一个节点发生热重启后,根据内存的剩余容量申请第二容量的内存,且将第一容量的内存和第二容量的内存共同作为新增缓存,以将发生热重启的节点的脏数据下刷到新增缓存中,由于内存存储数据的速度及响应的速度均比硬盘要快,因此,相比于将发生热重启的节点中的脏数据下刷到硬盘中,将发生热重启的节点中的脏数据下刷到新增缓存中可以提高脏数据的下刷速率,降低脏数据下刷的持续时间,从而降低用户业务发生中断的可能性,以提高用户业务运行的可靠性,另外,通过系统初始化申请第一容量的内存并在其中一个节点发生热重启后根据内存的剩余容量申请第二容量的内存,以将第一容量的内存和第二容量的内存作为新增缓存的过程不仅可以保证新增缓存有足够大的容量,以提高脏数据下刷速率和效果,而且还可以避免因在系统初始化时申请过多容量的内存而造成资源的浪费并避免对系统中其他模块的运行造成影响。

本申请实施例提供的一种脏数据下刷方法,在将节点中的脏数据下刷到新增缓存中时,还可以包括:

判断新增缓存的空间使用率是否大于预设值,若是,则将新增缓存中的脏数据下刷到硬盘中。

在将发生热重启的节点中的脏数据下刷到新增缓存中时,可以实时或者定时获取新增缓存的空间使用率(空间使用率具体等于新增缓存中的脏数据所占据的容量与新增缓存总容量的比值),并判断新增缓存的空间使用率是否大于预设值(该预设值可以由用户预先根据经验进行设置,例如可以设置为30%或者其他值),若新增缓存的空间使用率不大于预设值,则可以继续获取新增缓存的空间使用率并判断新增缓存的空间使用率是否大于预设值,若新增缓存的空间使用率大于预设值,则可以将新增缓存中的脏数据下刷到硬盘中,直至新增缓存的空间使用率不大于预设值为止。

其中,在新增缓存的空间使用率大于预设值时才将新增缓存中的脏数据下刷到硬盘中的过程可以避免一直将新增缓存中的脏数据下刷到硬盘中而造成cpu(centralprocessingunit,中央处理器)、硬盘等资源的浪费。

本申请实施例提供的一种脏数据下刷方法,将新增缓存中的脏数据下刷到硬盘中,可以包括:

根据新增缓存的空间使用率,控制每次下刷到硬盘中的脏数据的个数;其中,新增缓存的空间使用率大的脏数据下刷个数大于新增缓存的空间使用率小的脏数据下刷个数。

在将新增缓存中的脏数据下刷到硬盘中时,具体可以根据新增缓存的空间使用率的大小来控制每次下刷到硬盘中的脏数据的个数,其中,新增缓存的空间使用率大的脏数据下刷个数大于新增缓存的空间使用率小的脏数据下刷个数,也即新增缓存的空间使用率越大,每次下刷到硬盘的脏数据的个数就越大,例如:当新增缓存的空间使用率为80%时,则可以每次向硬盘下刷3个脏数据,当新增缓存的空间使用率为30%时,则可以每次向硬盘下刷1个脏数据,这种下刷方式可以在新增缓存的空间使用率大时通过增大脏数据下刷个数而便于快速地降低脏新增缓存的空间使用率,并可以在新增缓存的空间使用率比较小时通过减小脏数据的下刷个数而降低对cpu资源的占用。

本申请实施例提供的一种脏数据下刷方法,将新增缓存中的脏数据下刷到硬盘中,可以包括:

将新增缓存中的多个脏数据合并为大块数据,并将大块数据下刷到硬盘中。

在将新增缓存中的脏数据下刷到硬盘中时,可以先将新增缓存中的多个脏数据合并为大块数据,然后,再将合并得到的大块数据下刷到硬盘中,以减少新增缓存中脏数据的下刷次数,并减少脏数据从新增缓存下刷到硬盘的总时间。

本申请实施例提供的一种脏数据下刷方法,将新增缓存中的脏数据下刷到硬盘中,可以包括:

将新增缓存中的脏数据连续下刷到硬盘中,直到确定新增缓存接收到硬盘发送的响应后,根据响应包含的错误码对新增缓存中的脏数据进行处理;其中,硬盘在脏数据下刷出现错误时向新增缓存发送响应。

在将脏数据下刷到硬盘中时,还可以将新增缓存与硬盘的软件栈下层之间的通信方式由现有的一问一答改为只有下刷出现错误时硬盘才会回复,也就是说,新增缓存不是等到硬盘的响应后才向硬盘刷写下一波脏数据,而是一直刷写,直到收到硬盘的响应后才根据响应中的错误码决定是否重发或者进行其他异常处理,具体地,在将新增缓存中的脏数据下刷到硬盘中时,可以将新增缓存中的脏数据连续下刷到硬盘中,也即在进行完一次将新增缓存中的脏数据下刷到硬盘之后,并不需要等新增缓存收到硬盘的响应才进行下一次将新增缓存中的脏数据下刷到硬盘,而是在进行完一次将新增缓存中的脏数据下刷到硬盘之后,就直接进行下一次将新增缓存中的脏数据下刷到硬盘中,直到确定新增缓存接收到硬盘发送的响应(硬盘只会在脏数据下刷出现错误时才会发送该响应)后,才根据响应所包含的错误码对新增缓存中的脏数据进行处理,从而便于缩短脏数据的下刷时间,提高脏数据的下刷速率,进而便于尽快降低新增缓存的空间使用率。

需要说明的是,在本申请中,可以将新增缓存中的多个脏数据合并为大块数据这一过程以及将新增缓存中的脏数据连续下刷到硬盘中这一过程同时进行,即可以将新增缓存中的多个脏数据合并为大块数据,并将大块数据连续下刷到硬盘中,以进一步加快脏数据的下刷速率。

本申请实施例提供的一种脏数据下刷方法,还可以包括:

当节点中的脏数据完成下刷后,将新增缓存中的脏数据全部下刷到硬盘中,并释放第二容量的内存。

在本申请中,当发生热重启的节点中的脏数据完成下刷(即发生热重启的节点中不存在脏数据)之后,可以将新增缓存中的脏数据全部下刷到硬盘中,并可以释放第二容量的内存,即当新增缓存工作结束之后可以释放掉新增缓存中动态申请的第二容量的内存,以将动态申请的第二容量的内存还给系统,从而使得系统可以继续利用该第二容量的内存进行其他操作。

本申请实施例还提供了一种脏数据下刷装置,参见图2,其示出了本申请实施例提供的一种脏数据下刷装置的结构示意图,可以包括:

第一申请模块21,用于在系统初始化时申请第一容量的内存;

获取模块22,用于当双控节点中的一个节点发生热重启时,获取内存的剩余容量;

第二申请模块23,用于根据内存的剩余容量申请第二容量的内存,将第一容量的内存和第二容量的内存作为新增缓存;

下刷模块24,用于将节点中的脏数据下刷到新增缓存中。

本申请实施例提供的一种脏数据下刷装置,还可以包括:

判断模块,用于在将节点中的脏数据下刷到新增缓存中时,判断新增缓存的空间使用率是否大于预设值,若是,则将新增缓存中的脏数据下刷到硬盘中。

本申请实施例提供的一种脏数据下刷装置,判断模块可以包括:

控制单元,用于根据新增缓存的空间使用率,控制每次下刷到硬盘中的脏数据的个数;其中,新增缓存的空间使用率大的脏数据下刷个数大于新增缓存的空间使用率小的脏数据下刷个数。

本申请实施例提供的一种脏数据下刷装置,判断模块可以包括:

合并单元,用于将新增缓存中的多个脏数据合并为大块数据,并将大块数据下刷到硬盘中。

本申请实施例提供的一种脏数据下刷装置,判断模块可以包括:

连续下刷单元,用于将新增缓存中的脏数据连续下刷到硬盘中,直到确定新增缓存接收到硬盘发送的响应后,根据响应包含的错误码对新增缓存中的脏数据进行处理;其中,硬盘在脏数据下刷出现错误时向新增缓存发送响应。

本申请实施例提供的一种脏数据下刷装置,还可以包括:

释放模块,用于当节点中的脏数据完成下刷后,将新增缓存中的脏数据全部下刷到硬盘中,并释放第二容量的内存。

本申请实施例还提供了一种脏数据下刷设备,参见图3,其示出了本申请实施例提供的一种脏数据下刷设备的结构示意图,可以包括:

存储器31,用于存储计算机程序;

处理器32,用于执行存储器31存储的计算机程序时可实现如下步骤:

在系统初始化时申请第一容量的内存;当双控节点中的一个节点发生热重启时,获取内存的剩余容量;根据内容的剩余容量申请第二容量的内存,将第一容量的内存和第二容量的内存作为新增缓存;将节点中的脏数据下刷到新增缓存中。

本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序被处理器执行时可实现如下步骤:

在系统初始化时申请第一容量的内存;当双控节点中的一个节点发生热重启时,获取内存的剩余容量;根据内容的剩余容量申请第二容量的内存,将第一容量的内存和第二容量的内存作为新增缓存;将节点中的脏数据下刷到新增缓存中。

该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本申请实施例提供的一种脏数据下刷装置、设备及计算机可读存储介质中相关部分的说明可以参见本申请实施例提供的一种脏数据下刷方法中对应部分的详细说明,在此不再赘述。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。另外,本申请实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1