一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种双存储池数据存储方法、装置、设备及存储介质与流程

2021-10-24 11:51:00 来源:中国专利 TAG:数据存储 地说 装置 方法 设备


1.本发明涉及数据存储技术领域,更具体地说,涉及一种双存储池数据存储方法、装置、设备及存储介质。


背景技术:

2.为了提升存储系统的io(input/output,输入/输出流,也可以称之为业务流)性能,目前大多在数据池之前添加一个由ssd创建的缓存池,见图1所示的分层存储结构。具体来说,在更快速的磁盘设备(通常是ssd)上创建缓存池,在慢速设备(通常是hdd)上创建数据池,缓存池放在数据池的前端,客户端的io操作首先由缓存池完成,之后再将数据下刷到数据池,见图2所示的cache tier(缓存分层)结构图。
3.大业务io写的场景中,业务io被拆分为缓存池中的op(operation,操作,也可以称之为操作事务)和数据池中的op,若缓存池的写完成,但数据池的写未完成,这两个op对应的设备故障,故障恢复后系统检查写操作是否完成时,只会检查缓存池的写是否完成,进而基于缓存池的写是否完成向客户端返回相应的信息,这回导致数据池及缓存池的完成状态不一致的问题。


技术实现要素:

4.本发明的目的是提供一种双存储池数据存储方法、装置、设备及存储介质,能够保证跨存储池的客户端请求的完成状态一致。
5.为了实现上述目的,本发明提供如下技术方案:一种双存储池数据存储方法,包括:接收客户端下发的写业务io,并将写业务io拆分为缓存池的操作事务op及数据池的操作事务op;指示所述缓存池完成所述缓存池的操作事务op的写操作,通过所述缓存池将所述数据池的操作事务op转发给所述数据池,以指示所述数据池完成接收的操作事务op的写操作;对写操作的过程进行监测,如果所述缓存池和/或所述数据池在完成相应写操作的过程中发生故障,则在修复所述缓存池和/或所述数据池的故障后,返回执行将写业务io拆分为缓存池的操作事务op及数据池的操作事务op的步骤,直至成功完成所述写业务io拆分所得全部操作事务op对应写操作,向所述客户端返回写业务io完成的信息。
6.优选的,返回执行且执行完成将写业务io拆分为缓存池的操作事务op及数据池的操作事务op的步骤之后,还包括:获取所述缓存池和/或所述数据池在发生故障之前的op处理状态,如果所述op处理状态表示所述写业务io拆分所得全部操作事务op对应写操作均未成功完成,则执行指示所述缓存池完成所述缓存池的操作事务op的写操作的步骤,如果所述op处理状态表示所述写业务io拆分所得部分操作事务op对应写操作未成功完成,则指示所述缓存池和/或所述
数据池完成对应写操作未成功完成的操作事务op的写操作,并执行对写操作的过程进行监测的步骤。
7.优选的,还包括:在修复所述缓存池和/或所述数据池的故障后,判断所述写业务io拆分所得的全部操作事务op对应写操作是否均成功完成,如果是,则向所述客户端返回所述写业务io完成的信息,否则,向所述客户端返回错误信息,并返回执行将写业务io拆分为缓存池的操作事务op及数据池的操作事务op的步骤。
8.优选的,判断所述写业务io拆分所得的全部操作事务op对应写操作是否均成功完成,包括:判断所述缓存池中是否同时存在第一成功标记及第二成功标记,如果是,则确定所述写业务io拆分所得的全部操作事务op对应写操作均成功完成,如果否,则确定所述写业务io拆分所得的全部操作事务op对应写操作不是均成功完成;其中,所述第一成功标记为所述缓存池成功完成所述缓存池的操作事务op的写操作后记录的,所述第二成功标记为所述数据池成功完成所述数据池的操作事务op的写操作并反馈给所述缓存池后由所述缓存池记录的。
9.优选的,接收客户端下发的写业务io之后,还包括:如果所述写业务io不大于单个块或者小于单个纠删条带,则将所述写业务io拆分为缓存池的操作事务op,并指示所述缓存池完成所述缓存池的操作事务op的写操作,如果所述写业务io等于单个纠删条带的整数倍,则将所述写业务io拆分为数据池的操作事务op,并通过所述缓存池将所述数据池的操作事务op转发给所述数据池,以指示所述数据池完成接收的操作事务op的写操作,如果所述写业务io大于单个纠删条带且非单个纠删条带的整数倍,则执行将写业务io拆分为缓存池的操作事务op及数据池的操作事务op的步骤。
10.优选的,将所述写业务io拆分为缓存池的操作事务op之后,还包括:对写操作的过程进行监测,如果所述缓存池在完成相应写操作的过程中发生故障,则在修复所述缓存池的故障后,判断所述写业务io拆分所得缓存池的操作事务op对应写操作是否成功完成,如果是,则向所述客户端返回所述写业务io完成的信息,如果否,向所述客户端返回错误信息,并返回执行将所述写业务io拆分为缓存池的操作事务op的步骤。
11.优选的,将所述写业务io拆分为数据池的操作事务op之后,还包括:对写操作的过程进行监测,如果所述缓存池和/或所述数据池在完成相应写操作的过程中发生故障,则在修复所述缓存池和/或所述数据池的故障后,判断所述写业务io拆分所得数据池的操作事务op对应写操作是否成功完成,如果是,则向所述客户端返回所述写业务io完成的信息,如果否,向所述客户端返回错误信息,并返回执行将所述写业务io拆分为数据池的操作事务op的步骤。
12.一种双存储池数据存储装置,包括:拆分模块,用于:接收客户端下发的写业务io,并将写业务io拆分为缓存池的操作事务op及数据池的操作事务op;写模块,用于:指示所述缓存池完成所述缓存池的操作事务op的写操作,通过所述缓存池将所述数据池的操作事务op转发给所述数据池,以指示所述数据池完成接收的操作
事务op的写操作;返回模块,用于:对写操作的过程进行监测,如果所述缓存池和/或所述数据池在完成相应写操作的过程中发生故障,则在修复所述缓存池和/或所述数据池的故障后,返回执行将写业务io拆分为缓存池的操作事务op及数据池的操作事务op的步骤,直至成功完成所述写业务io拆分所得全部操作事务op对应写操作,向所述客户端返回写业务io完成的信息。
13.一种双存储池数据存储设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现如上任一项所述双存储池数据存储方法的步骤。
14.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述双存储池数据存储方法的步骤。
15.本发明提供了一种双存储池数据存储方法、装置、设备及存储介质,该方法包括:接收客户端下发的写业务io,并将写业务io拆分为缓存池的操作事务op及数据池的操作事务op;指示所述缓存池完成所述缓存池的操作事务op的写操作,通过所述缓存池将所述数据池的操作事务op转发给所述数据池,以指示所述数据池完成接收的操作事务op的写操作;对写操作的过程进行监测,如果所述缓存池和/或所述数据池在完成相应写操作的过程中发生故障,则在修复所述缓存池和/或所述数据池的故障后,返回执行将写业务io拆分为缓存池的操作事务op及数据池的操作事务op的步骤,直至成功完成所述写业务io拆分所得全部操作事务op对应写操作,向所述客户端返回写业务io完成的信息。本技术在分层存储特性下,由数据池及缓存池分别完成对客户端发送的写io拆分所得对应op的写操作过程中,如果数据池和/或缓存池发生故障,则在故障恢复后返回执行写io拆分的步骤,直至数据池及缓存池均成功完成相应写操作,才向客户端返回写操作成功的信息,从而保证跨存储池的客户端请求的完成状态一致。
附图说明
16.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
17.图1为分层存储结构示意图;图2为cache tier结构图;图3为本发明实施例提供的一种双存储池数据存储方法的流程图;图4为本发明实施例提供的一种双存储池数据存储方法的具体实现图;图5为本发明实施例提供的一种双存储池数据存储装置的结构示意图。
具体实施方式
18.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于
本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
19.请参阅图3,其示出了本发明实施例提供的一种双存储池数据存储方法的流程图,具体可以包括:s11:接收客户端下发的写业务io,将写业务io拆分为缓存池的操作事务op及数据池的操作事务op。
20.其中,io为输入输出流或者业务流,相应的写io可以为写业务,本技术的写业务io中业务为对io的解释,因此写业务io即为写io;op为操作或者操作事务,本技术的操作事务op中操作事务为对op的解释,因此操作事务op即为op。本技术实施例以写io及op分别表示写业务io及操作事务op进行具体说明。
21.本技术实施例中缓存池及数据池为基于缓存分层特性实现的,具体来说,缓存分层特性是在更快速的磁盘设备(通常是ssd)上创建缓存池,在慢速设备(通常是hdd)上创建数据池,缓存池放在数据池的前端,客户端的io操作首先由缓存池完成,之后再将数据下刷到数据池。相应的,在接收到客户端下发的io(包括写io及读io)后均会将io进行拆分,进而按照拆分后的结果到缓存池和/或数据池中实现相应的io操作,本技术实施例针对写io实现数据存储。
22.本技术实施例在接收到客户端下发的写io后,可以将写io拆分为缓存池的op及数据池的op。具体来说,在缓存分层中不同层(包括缓存池及数据池)中块大小是相同的,且缓存分层中的数据是以纠删条带的方式实现存在的,以提高其中数据存储的可靠性;基于此,本技术实施例中写io中等于纠删条带大小的整数倍的部分拆分为数据池的op,将不大于块大小或者小于单个纠删条带大小的部分拆分为缓存池的op,进而对数据池的op及缓存池的op分别进行相应的写操作。其中,op与现有技术中对应概念的含义相同,可以理解为需要实现的操作,而写io拆分所得的op也即为实现写io的写操作。
23.s12:指示缓存池完成缓存池的操作事务op的写操作,通过缓存池将数据池的操作事务op转发给数据池,以指示数据池完成接收的操作事务op的写操作。
24.将缓存池的op提交写事务,缓存池完成缓存池的op对应写操作;将数据池的op提交代理写,也即由缓存池将数据池的op转发给数据池,并设置数据池的op的pool为数据池的pool(即:数据池的op由数据池完成相应写操作),进而提交代理写的请求,以由数据池完成数据池的op对应写操作。
25.s13:对写操作的过程进行监测,如果缓存池和/或数据池在完成相应写操作的过程中发生故障,则在修复缓存池和/或数据池的故障后,返回执行将写业务io拆分为缓存池的操作事务op及数据池的操作事务op的步骤,直至成功完成写业务io拆分所得全部操作事务op对应写操作,向客户端返回写业务io完成的信息。
26.如果在完成写操作的过程中缓存池和/或数据池所在的设备(设备即为osd或者节点)发生故障,则说明写操作很可能并未成功完成,因此修复发生故障的设备,并在设备发生的故障修复完成后返回执行拆分写io的步骤,直至缓存池及数据池均成功完成相应写操作为止,此时则可以向客户端返回写io完成的信息,以使得客户端获知其下发的写io对应写操作完成的信息。
27.本技术在分层存储特性下,由数据池及缓存池分别完成对客户端发送的写io拆分
所得对应op的写操作过程中,如果数据池和/或缓存池发生故障,则在故障恢复后返回执行写io拆分的步骤,直至数据池及缓存池均成功完成相应写操作,才向客户端返回写操作成功的信息,从而保证跨存储池的客户端请求的完成状态一致。
28.本发明实施例提供的一种双存储池数据存储方法,返回执行且执行完成将写业务io拆分为缓存池的操作事务op及数据池的操作事务op的步骤之后,还可以包括:获取缓存池和/或数据池在发生故障之前的op处理状态,如果op处理状态表示写业务io拆分所得全部操作事务op对应写操作均未成功完成,则执行指示缓存池完成缓存池的操作事务op的写操作的步骤,如果op处理状态表示写业务io拆分所得部分操作事务op对应写操作未成功完成,则指示缓存池和/或数据池完成对应写操作未成功完成的操作事务op的写操作,并执行对写操作的过程进行监测的步骤。
29.需要说明的是,本技术在监测写操作的过程中可以记录写操作完成的情况,也即op处理状态,如缓存池的op对应写操作已经完成、数据池的op对应写操作已经完成等;基于此,在每次返回执行且执行完成客户端下发的写io至数据池的op及缓存池的op的拆分后,可以获取设备发生故障之前的op处理状态,通过op处理状态可以获知op对应写操作是否已经成功完成,进而为了避免数据的重新写入,对于已经成功完成对应写操作的op(如缓存池的全部op或者数据池的全部op),则无需实现相应的写操作,对于未成功完成对应写操作的op,则需要继续实现相应的写操作。当然无论何时实现op对应写操作,对于缓存池的op均是指示缓存池完成缓存池的op的写操作,对于数据池的op均是通过缓存池将数据池的op转发给数据池,以指示数据池完成接收的op的写操作。
30.本发明实施例提供的一种双存储池数据存储方法,还可以包括:在修复缓存池和/或数据池的故障后,判断写业务io拆分所得的全部操作事务op对应写操作是否均成功完成,如果是,则向客户端返回写业务io完成的信息,否则,向客户端返回错误信息,并返回执行将写业务io拆分为缓存池的操作事务op及数据池的操作事务op的步骤。
31.需要说明的是,为了减少无用步骤的浪费,进而提高数据存储效率,本技术实施例中在修复缓存池和/或数据池的故障后,可以先判断缓存池及数据池需完成的写操作是否均成功完成,如果是的话,则向客户端返回写io完成的信息,否则向客户端返回相应的错误信息,并返回执行将写io拆分为缓存池的op及数据池的op的步骤。
32.本发明实施例提供的一种双存储池数据存储方法,判断写业务io拆分所得的全部操作事务op对应写操作是否均成功完成,可以包括:判断缓存池中是否同时存在第一成功标记及第二成功标记,如果是,则确定写业务io拆分所得的全部操作事务op对应写操作均成功完成,如果否,则确定写业务io拆分所得的全部操作事务op对应写操作不是均成功完成;其中,第一成功标记为缓存池成功完成缓存池的操作事务op的写操作后记录的,第二成功标记为数据池成功完成数据池的操作事务op的写操作并反馈给缓存池后由缓存池记录的。
33.本技术实施例中缓存池完成缓存池的op对应写操作时,如果成功实现写操作,则可以记录第一成功标记,以供查询缓存池的op对应写操作是否成功完成;数据池完成数据池的op对应写操作时,如果成功实现写操作,则可以向缓存池返回数据池成功实现数据池的op对应写操作的信息,缓存池在接收到该信息后记录第二成功标记,以供查询数据池的
op对应写操作是否成功完成;在此基础上,判断缓存池及数据池是否均成功完成相应写操作时,则可以通过判断缓存池中是否同时存在第一成功标记及第二成功标记实现,简便且有效。需要说明的是,在查询缓存池中是否存在第一成功标记及第二成功标记时,可以是使用缓存池中的pglog检查故障前缓存池的op处理状态(也即是否存在第一成功标记及第二成功标记),仅op处理出错时,给客户端返回错误。另外,上述实施例中所说的op处理状态则是可以通过第一成功标记及第二成功标记是否存在的判断获取的。
34.本发明实施例提供的一种双存储池数据存储方法,接收客户端下发的写业务io之后,还可以包括:如果写业务io不大于单个块或者小于单个纠删条带,则将写业务io拆分为缓存池的操作事务op,并指示缓存池完成缓存池的操作事务op的写操作,如果写业务io等于单个纠删条带的整数倍,则将写业务io拆分为数据池的操作事务op,并通过缓存池将数据池的操作事务op转发给数据池,以指示数据池完成接收的操作事务op的写操作,如果写业务io大于单个纠删条带且非单个纠删条带的整数倍,则执行将写业务io拆分为缓存池的操作事务op及数据池的操作事务op的步骤。
35.将写业务io拆分为缓存池的操作事务op之后,还可以包括:对写操作的过程进行监测,如果缓存池在完成相应写操作的过程中发生故障,则在修复缓存池的故障后,判断写业务io拆分所得缓存池的操作事务op对应写操作是否成功完成,如果是,则向客户端返回写业务io完成的信息,如果否,向客户端返回错误信息,并返回执行将写业务io拆分为缓存池的操作事务op的步骤。
36.将写业务io拆分为数据池的操作事务op之后,还可以包括:对写操作的过程进行监测,如果缓存池和/或数据池在完成相应写操作的过程中发生故障,则在修复缓存池和/或数据池的故障后,判断写业务io拆分所得数据池的操作事务op对应写操作是否成功完成,如果是,则向客户端返回写业务io完成的信息,如果否,向客户端返回错误信息,并返回执行将写业务io拆分为数据池的操作事务op的步骤。
37.本技术实施例在接收到客户端下发的写io后,可以根据写io的大小实现相应的op拆分。具体来说,如果写io对应需要写的数据不大于块大小或者小于纠删条带大小,则将写io拆分为缓存池的op,然后直接在缓存池中实现相应op的写操作,如果写操作成功完成则返回客户端完成相应写操作的信息,否则返回相应的错误信息,并返回执行将写io拆分为缓存池的op的步骤,直至在缓存池中成功实现写io对应写操作后返回客户端完成相应写操作的信息;如果写io对应需要写的数据等于纠删条带大小的整数倍,则将写io拆分为数据池的op,由缓存池将数据池的op转发给数据池,然后在数据池中实现相应op的写操作,如果写操作成功完成则返回客户端完成相应写操作的信息,否则返回相应的错误信息,并返回执行将写io拆分为数据池的op的步骤,直至在数据池中成功实现写io对应写操作后返回客户端完成相应写操作的信息;如果写io对应需要写的数据大于纠删条带大小但非纠删条带大小的整数倍,则将其拆分为数据池的op及缓存池的op。从而通过上述方式实现写io在不同情况下op拆分及相应写操作的实现,进而保证写io的有效实现。
38.另外,本技术实施例在设备故障后需要重启故障的设备,进而实现后续的操作,以有效简便的实现设备的重新使用。
39.在一种具体实现方式中,如图4所示,本发明实施例提供的一种双存储池数据存储
方法具体可以包括:s41.接收客户端下发的写io;s42.根据写io的大小将其同时拆分为缓存池的op及数据池的op,或者仅拆分为缓存池的op,或者仅拆分为数据池的op。
40.s43.对于拆分为缓存池的op及数据池的op的情况,将步骤s42中缓存池的op提交写事务以使得缓存池实现缓存池的op对应写操作,如果能够在缓存池完成相应写操作则在缓存池中标记第一成功标记;将步骤s42中数据池的op提交代理写,设置op的pool为数据池的pool,并提交代理写的请求以使得缓存池将数据池的op转发给数据池,指示数据池完成数据池的op对应写操作,如果能够在数据池中完成相应写操作则在缓存池中标记第二成功标记。
41.s44、如果代理写未完成且数据池和/或缓存池对应的设备出现故障,则启动故障的设备,并在启动完成后由缓存池中的pglog检查故障前的op处理状态,若op处理状态表示写io拆分所得op对应写操作并未全部完成,则给客户端返回错误,并重新对写io进行拆分。
42.另外,在分发拆分的op时,再次用缓存池中的pglog检查故障前op处理状态,对于op处理状态中对应写操作已经成功完成的op则无需再进行相应写操作。可见,本技术在cache tier分层存储特性下设备故障恢复时,非直接在缓存层给客户端返回写完成,而是由缓存池的pglog检查op处理状态,进而基于此实现后续操作,直到确定缓存池的op及数据池的op对应写操作均成功完成后再返回写完成,以此保证拆分后跨存储池的客户端请求的完成状态一致。
43.本发明实施例还提供了一种双存储池数据存储装置,如图5所示,具体可以包括:拆分模块11,用于:接收客户端下发的写业务io,并将写业务io拆分为缓存池的操作事务op及数据池的操作事务op;写模块12,用于:指示缓存池完成缓存池的操作事务op的写操作,通过缓存池将数据池的操作事务op转发给数据池,以指示数据池完成接收的操作事务op的写操作;返回模块13,用于:对写操作的过程进行监测,如果缓存池和/或数据池在完成相应写操作的过程中发生故障,则在修复缓存池和/或数据池的故障后,返回执行将写业务io拆分为缓存池的操作事务op及数据池的操作事务op的步骤,直至成功完成写业务io拆分所得全部操作事务op对应写操作,向客户端返回写业务io完成的信息。
44.本发明实施例还提供了一种双存储池数据存储设备,可以包括:存储器,用于存储计算机程序;处理器,用于执行计算机程序时实现如上任一项双存储池数据存储方法的步骤。
45.本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上任一项双存储池数据存储方法的步骤。
46.需要说明的是,本发明实施例提供的一种双存储池数据存储装置、设备及存储介质中相关部分的说明请参见本发明实施例提供的一种双存储池数据存储方法中对应部分的详细说明,在此不再赘述。另外,本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
47.对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可
以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜