CN112559243A - 数据快照方法、装置、电子设备及计算机可读存储介质 - Google Patents
数据快照方法、装置、电子设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN112559243A CN112559243A CN201910913380.0A CN201910913380A CN112559243A CN 112559243 A CN112559243 A CN 112559243A CN 201910913380 A CN201910913380 A CN 201910913380A CN 112559243 A CN112559243 A CN 112559243A
- Authority
- CN
- China
- Prior art keywords
- data
- snapshot
- identification information
- latest
- modified
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种数据快照方法、装置、电子设备及计算机可读存储介质,所述方法包括:响应于接收到数据快照指令,第一线程创建数据快照线程,并更新待快照数据的标识信息;响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息;所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照。该技术方案能够在不影响主线程服务的情况下实现全量数据的快照操作,消除了现有技术中Fork操作所带来的时延抖动,同时还能够大大降低内存消耗,提高内存利用率,降低资源成本,进而有效保障Redis产品服务的稳定性。
Description
技术领域
本发明实施例涉及数据处理技术领域,具体涉及一种数据快照方法、装置、电子设备及计算机可读存储介质。
背景技术
随着数据技术的发展,高性能的Redis数据库的应用越来越广泛,Redis是一个开源的、使用ANSI C语言编写的、支持网络的、可基于内存亦可持久化的日志型Key-Value数据库,为了保证效率,Redis中的数据首先缓存在内存中,然后再周期性的将更新的数据写入磁盘或者把修改操作写入追加的记录文件,也称为持久化或数据快照操作。在目前的Redis内部机制中,持久化、数据快照以及主从同步都依赖于操作系统的Fork和COW(copyon write,写时拷贝)机制,其中,Fork和COW都是产生新的进程。但该机制存在以下缺陷:1、Fork系统调用会消耗较多的时间,导致主线程服务出现秒级抖动;2、COW拷贝以物理内存页为单位,子进程退出时才会释放,因此在保存快照期间会额外拷贝大量内存,导致内存消耗翻倍。上述缺陷会给Redis产品服务的稳定性带来很大的影响,同时也限制了虚拟机环境下Redis对内存的利用率,同时还提高了资源成本。
发明内容
本发明实施例提供一种数据快照方法、装置、电子设备及计算机可读存储介质。
第一方面,本发明实施例中提供了一种数据快照方法。
具体的,所述数据快照方法,包括:
响应于接收到数据快照指令,第一线程创建数据快照线程,并更新待快照数据的标识信息;
响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息;
所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照。
结合第一方面,本发明实施例在第一方面的第一种实现方式中,所述响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息之前,还包括:
响应于检测到待快照数据修改指令,根据所述待快照数据修改指令对所述待快照数据进行修改。
结合第一方面和第一方面的第一种实现方式,本发明实施例在第一方面的第二种实现方式中,所述响应于检测到待快照数据修改指令,根据所述待快照数据修改指令对所述待快照数据进行修改,被实施为:
响应于检测到待快照数据修改指令,确定所述待快照数据的标识信息;
当所述待快照数据的标识信息为非最新标识信息时,将所述待快照数据备份至待快照数据备份列表中,并根据所述待快照数据修改指令对所述待快照数据进行修改;
当所述待快照数据的标识信息为最新标识信息时,对于所述待快照数据进行修改。
结合第一方面、第一方面的第一种实现方式和第一方面的第二种实现方式,本公开在第一方面的第三种实现方式中,所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照,包括:
所述数据快照线程遍历检测所述待快照数据的标识信息;
当所述待快照数据的标识信息为非最新标识信息时,对所述待快照数据执行数据快照,并在数据快照完成后,将所述待快照数据的标识信息修改为最新标识信息;
当所述待快照数据的标识信息为最新标识信息时,对所述待快照数据执行滞后数据快照。
结合第一方面的第一种实现方式、第一方面的第二种实现方式和第一方面的第三种实现方式,本公开在第一方面的第四种实现方式中,所述当所述待快照数据的标识信息为最新标识信息时,对所述待快照数据执行滞后数据快照,被实施为:
当所述待快照数据的标识信息为最新标识信息时,跳转至下一待快照数据进行标识信息的确定,并在对于具有非最新标识信息的待快照数据完成数据快照之后,对于备份在所述待快照数据备份列表中的待快照数据执行数据快照。
结合第一方面、第一方面的第一种实现方式、第一方面的第二种实现方式、第一方面的第三种实现方式和第一方面的第四种实现方式,本公开在第一方面的第五种实现方式中,还包括:
响应于所述待快照数据备份列表中的待快照数据完成数据快照,释放所述待快照数据备份列表所占空间。
结合第一方面、第一方面的第一种实现方式、第一方面的第二种实现方式、第一方面的第三种实现方式、第一方面的第四种实现方式和第一方面的第五种实现方式,本公开在第一方面的第六种实现方式中,还包括:
响应于所述待快照数据备份列表所占空间超过预设空间阈值,释放所述待快照数据备份列表中已完成快照数据所占的空间。
结合第一方面、第一方面的第一种实现方式、第一方面的第二种实现方式、第一方面的第三种实现方式、第一方面的第四种实现方式、第一方面的第五种实现方式和第一方面的第六种实现方式,本公开在第一方面的第七种实现方式中,所述非最新标识信息为第一标识信息,所述最新标识信息为第二标识信息。
结合第一方面、第一方面的第一种实现方式、第一方面的第二种实现方式、第一方面的第三种实现方式、第一方面的第四种实现方式、第一方面的第五种实现方式、第一方面的第六种实现方式和第一方面的第七种实现方式,本公开在第一方面的第八种实现方式中,还包括:
响应于再次接收到数据快照指令,将当前标识信息修改为所述第一标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为所述第二标识信息;或者,
响应于再次接收到数据快照指令,将当前标识信息确认为非最新标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为与所述非最新标识信息不同的最新标识信息。
第二方面,本发明实施例中提供了一种数据快照装置。
具体的,所述数据快照装置,包括:
第一设置模块,被配置为响应于接收到数据快照指令,第一线程创建数据快照线程,并更新待快照数据的标识信息;
第二设置模块,被配置为响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息;
快照模块,被配置为所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照。
结合第二方面,本发明实施例在第二方面的第一种实现方式中,所述第二设置模块之前还包括:
第一修改模块,被配置为响应于检测到待快照数据修改指令,根据所述待快照数据修改指令对所述待快照数据进行修改。
结合第二方面和第二方面的第一种实现方式,本发明实施例在第二方面的第二种实现方式中,所述第二设置模块被配置为:
响应于检测到待快照数据修改指令,确定所述待快照数据的标识信息;
当所述待快照数据的标识信息为非最新标识信息时,将所述待快照数据备份至待快照数据备份列表中,并根据所述待快照数据修改指令对所述待快照数据进行修改;
当所述待快照数据的标识信息为最新标识信息时,对于所述待快照数据进行修改。
结合第二方面、第二方面的第一种实现方式和第二方面的第二种实现方式,本公开在第二方面的第三种实现方式中,所述快照模块包括:
检测子模块,被配置为所述数据快照线程遍历检测所述待快照数据的标识信息;
第一快照子模块,被配置为当所述待快照数据的标识信息为非最新标识信息时,对所述待快照数据执行数据快照,并在数据快照完成后,将所述待快照数据的标识信息修改为最新标识信息;
第二快照子模块,被配置为当所述待快照数据的标识信息为最新标识信息时,对所述待快照数据执行滞后数据快照。
结合第二方面的第一种实现方式、第二方面的第二种实现方式和第二方面的第三种实现方式,本公开在第二方面的第四种实现方式中,所述第二快照子模块被配置为:
当所述待快照数据的标识信息为最新标识信息时,跳转至下一待快照数据进行标识信息的确定,并在对于具有非最新标识信息的待快照数据完成数据快照之后,对于备份在所述待快照数据备份列表中的待快照数据执行数据快照。
结合第二方面、第二方面的第一种实现方式、第二方面的第二种实现方式、第二方面的第三种实现方式和第二方面的第四种实现方式,本公开在第二方面的第五种实现方式中,还包括:
第一释放模块,被配置为响应于所述待快照数据备份列表中的待快照数据完成数据快照,释放所述待快照数据备份列表所占空间。
结合第二方面、第二方面的第一种实现方式、第二方面的第二种实现方式、第二方面的第三种实现方式、第二方面的第四种实现方式和第二方面的第五种实现方式,本公开在第二方面的第六种实现方式中,还包括:
第一释放模块,被配置为响应于所述待快照数据备份列表中的待快照数据完成数据快照,释放所述待快照数据备份列表所占空间。
结合第二方面、第二方面的第一种实现方式、第二方面的第二种实现方式、第二方面的第三种实现方式、第二方面的第四种实现方式、第二方面的第五种实现方式和第二方面的第六种实现方式,本公开在第二方面的第七种实现方式中,所述非最新标识信息为第一标识信息,所述最新标识信息为第二标识信息。
结合第二方面、第二方面的第一种实现方式、第二方面的第二种实现方式、第二方面的第三种实现方式、第二方面的第四种实现方式、第二方面的第五种实现方式、第二方面的第六种实现方式和第二方面的第七种实现方式,本公开在第二方面的第八种实现方式中,还包括:
第二修改模块,被配置为响应于再次接收到数据快照指令,将当前标识信息修改为所述第一标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为所述第二标识信息;或者,
第三修改模块,被配置为响应于再次接收到数据快照指令,将当前标识信息确认为非最新标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为与所述非最新标识信息不同的最新标识信息。
第三方面,本发明实施例提供了一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条支持数据快照装置执行上述第一方面中数据快照方法的计算机指令,所述处理器被配置为用于执行所述存储器中存储的计算机指令。所述数据快照装置还可以包括通信接口,用于数据快照装置与其他设备或通信网络通信。
第四方面,本发明实施例提供了一种计算机可读存储介质,用于存储数据快照装置所用的计算机指令,其包含用于执行上述第一方面中数据快照方法为数据快照装置所涉及的计算机指令。
本发明实施例提供的技术方案可包括以下有益效果:
上述技术方案通过创建数据快照线程,并为待快照数据设置相应的标识信息,以标识待快照数据的当前状态,来实现对于全量数据的快照操作。该技术方案能够在不影响主线程服务的情况下实现全量数据的快照操作,消除了现有技术中Fork操作所带来的时延抖动,同时还能够大大降低内存消耗,提高内存利用率,降低资源成本,进而有效保障Redis产品服务的稳定性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明实施例。
附图说明
结合附图,通过以下非限制性实施方式的详细描述,本发明实施例的其它特征、目的和优点将变得更加明显。在附图中:
图1示出根据本发明一实施方式的数据快照方法的流程图;
图2示出根据本发明另一实施方式的数据快照方法的流程图;
图3示出根据图1所示实施方式的数据快照方法的步骤S103的流程图;
图4是根据本公开一实施方式的数据快照流程示意图;
图5示出根据图1所示另一实施方式的数据快照方法的步骤S103的流程图;
图6示出根据图1所示再一实施方式的数据快照方法的步骤S103的流程图;
图7示出根据本发明再一实施方式的数据快照方法的流程图;
图8示出根据本发明一实施方式的数据快照装置的结构框图;
图9示出根据本发明另一实施方式的数据快照装置的结构框图;
图10示出根据图8所示实施方式的数据快照装置的快照模块803的结构框图;
图11示出根据图8所示另一实施方式的数据快照装置的快照模块803的结构框图;
图12示出根据图8所示再一实施方式的数据快照装置的快照模块803的结构框图;
图13示出根据本发明再一实施方式的数据快照装置的结构框图;
图14示出根据本发明一实施方式的电子设备的结构框图;
图15是适于用来实现根据本发明一实施方式的数据快照方法的计算机系统的结构示意图。
具体实施方式
下文中,将参考附图详细描述本发明实施例的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。
在本发明实施例中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
另外还需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明实施例。
本发明实施例提供的技术方案通过创建数据快照线程,并为待快照数据设置相应的标识信息,以标识待快照数据的当前状态,来实现对于全量数据的快照操作。该技术方案能够在不影响主线程服务的情况下实现全量数据的快照操作,消除现有技术中Fork操作所带来的时延抖动,同时还能够大大降低内存消耗,提高内存利用率,降低资源成本,进而有效保障Redis产品服务的稳定性。
图1示出根据本发明一实施方式的数据快照方法的流程图,如图1所示,所述数据快照方法包括以下步骤S101-S103:
在步骤S101中,响应于接收到数据快照指令,第一线程创建数据快照线程,并更新待快照数据的标识信息;
在步骤S102中,响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息;
在步骤S103中,所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照。
上文提及,随着数据技术的发展,高性能的Redis数据库的应用越来越广泛,Redis是一个开源的、使用ANSI C语言编写的、支持网络的、可基于内存亦可持久化的日志型Key-Value数据库,为了保证效率,Redis中的数据首先缓存在内存中,然后再周期性的将更新的数据写入磁盘或者把修改操作写入追加的记录文件,也称为持久化或数据快照操作。在目前的Redis内部机制中,持久化、数据快照以及主从同步都依赖于操作系统的Fork和COW(copy on write,写时拷贝)机制,其中,Fork和COW都是产生新的进程。但该机制存在以下缺陷:1、Fork系统调用会消耗较多的时间,导致主线程服务出现秒级抖动;2、COW拷贝以物理内存页为单位,子进程退出时才会释放,因此在保存快照期间会额外拷贝大量内存,导致内存消耗翻倍。上述缺陷会给Redis产品服务的稳定性带来很大的影响,同时也限制了虚拟机环境下Redis对内存的利用率,同时还提高了资源成本。
考虑到上述问题,在该实施方式中,提出一种数据快照方法,该方法通过创建数据快照线程,并为待快照数据设置相应的标识信息,以标识待快照数据的当前状态,来实现对于全量数据的快照操作。该技术方案能够在不影响主线程服务的情况下实现全量数据的快照操作,消除了现有技术中Fork操作所带来的时延抖动,同时还能够大大降低内存消耗,提高内存利用率,降低资源成本,进而有效保障Redis产品服务的稳定性。
考虑到相比进程来说,线程占用的资源少,内存开销小,效率高,可以频繁切换,因此,在该实施方式中,使用线程机制来代替现有技术中的进程机制来实现Redis的数据快照,并借助数据标识信息来避免数据快照与主线程对于数据的修改之间可能会发生的冲突问题。具体地,在接收到数据快照指令之后,第一线程创建一个数据快照线程用于完成数据快照任务,然后确定需要进行快照的待快照数据,并更新当前所有待快照数据的标识信息,此时该标识信息为非最新标识信息,用于标识该数据为在接收到数据快照指令的时刻之前存在的可快照数据;考虑到在数据快照期间,之前确定的待快照数据有可能会被修改,因此为了避免数据快照与数据修改之间发生冲突,产生快照数据错误的问题,若检测到某一待快照数据被修改,则将修改后的待快照数据的标识信息设置为最新标识信息,以区别于非最新标识信息,也就是说,被设置为最新标识信息的待快照数据是在接收到数据快照指令的时刻之后被修改过的数据,这样在数据快照线程对于某一待快照数据进行快照之前,首先判断该数据的标识信息是非最新标识信息还是最新标识信息,即判断该数据是否已被修改,若该数据的标识信息为非最新标识信息,则可直接对其执行数据快照操作,若该数据的标识信息为最新标识信息,则为了避免发生数据错误,对于该具有最新标识信息的待快照数据执行滞后数据快照处理。下文将对于上述技术方案的具体细节进行详细的解释和说明。
在本发明一实施方式中,所述数据快照指令指的是启动数据快照操作的指令,其可由操作人员发出,也可由操作系统或者其他资源发出。
在本发明一实施方式中,所述第一线程指的是提供数据读写服务的线程,比如主线程,其优先级高于所述数据快照线程,比如,在所述数据快照线程进行数据快照操作时,所述主线程可对待快照数据进行读写操作,所述数据快照线程待所述主线程读写操作完成之后再对主线程操作的数据所对应的在接收到数据快照指令的时刻之前的待快照数据执行数据快照操作。
在本发明一实施方式中,所述待快照数据指的是在接收到数据快照指令的时刻之前存在的需要进行数据快照的数据。
在本发明一实施方式中,所述待快照数据的标识信息指的是用于标识所述待快照数据的状态的信息,其可以为所述待快照数据的版本号,也可以为单独的更新标志,再或者为其他的顺序递增的ID号等信息。
为了对于所述待快照数据的当前状态进行准确标识,避免与接收到数据快照指令的时刻之后发生修改的数据产生混淆,发生数据错误,有助于第一线程和数据快照线程识别各自需要访问的数据,在本发明一实施方式中,在接收到数据快照指令,创建数据快照线程之后,还更新所述待快照数据的标识信息,并在所述待快照数据被修改之后,将修改后的待快照数据的标识信息设置为最新标识信息,以标识所述待快照数据的当前状态,使得对于在接收到数据快照指令的时刻之后发生修改和未发生修改的数据进行区分。由上可见,由于最新标识信息和非最新标识信息仅需用于标识修改和未修改,而且在该实施方式中,也仅存在上述两种情况,因此,只需要在每条数据中增加1比特的字段即可实现所述标识信息的上述标识功能,这样就可以使用较小的数据开销实现数据快照线程机制,进而节约更大的内存开销。
在本发明一实施方式中,所述非最新标识信息与所述最新标识信息不同,其中,所述非最新标识信息可设置为第一标识信息,比如0,所述最新标识信息可设置为第二标识信息,比如1。比如,在接收到数据快照指令之后,第一线程首先创建一个数据快照线程,然后确定需要进行快照的待快照数据,并更新所有待快照数据的标识信息为0,所述数据快照线程开始对于所述待快照数据进行数据快照,在数据快照期间,第一线程对于所述待快照数据中的几个数据进行了修改,并将发生修改的数据的标识信息由0修改为最新标识信息1,所述数据快照线程在对某一待快照数据进行快照时,首先判断该数据的标识信息是0还是1,若是0,则可直接执行数据快照操作,若是1,则跳过该数据,对下一数据的识别信息进行判断,标识信息为1的数据将会执行滞后数据快照处理,滞后数据快照处理的具体流程将在下文进行解释和说明。
在本发明一实施方式中,所述步骤S102,即响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息的步骤之前,还包括响应于检测到待快照数据修改指令,根据所述待快照数据修改指令对所述待快照数据进行修改的步骤,即如图2所示,所述数据快照方法包括以下步骤S201-S204:
在步骤S201中,响应于接收到数据快照指令,第一线程创建数据快照线程,并更新待快照数据的标识信息;
在步骤S202中,响应于检测到待快照数据修改指令,根据所述待快照数据修改指令对所述待快照数据进行修改;
在步骤S203中,响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息;
在步骤S204中,所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照。
上文提及,所述第一线程的优先级高于所述数据快照线程,因此,在接收到待快照数据修改指令之后,需要根据所述待快照数据修改指令对于所述待快照数据进行修改。
在本发明一实施方式中,所述步骤S102,即响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息的步骤,可被实施为:
响应于检测到待快照数据修改指令,确定所述待快照数据的标识信息;
当所述待快照数据的标识信息为非最新标识信息时,将所述待快照数据备份至待快照数据备份列表中,并根据所述待快照数据修改指令对所述待快照数据进行修改;
当所述待快照数据的标识信息为最新标识信息时,对于所述待快照数据进行修改。
上文提及,数据快照与数据修改操作可同时进行,为了避免数据快照与数据修改之间发生冲突,产生快照数据错误,同时保证与发生修改的数据对应的、在接收到数据快照指令的时刻之前的待快照数据能够被准确地执行数据快照操作,在该实施方式中,在检测到待快照数据修改指令后,首先确定所述待快照数据的标识信息,若所述待快照数据的标识信息为非最新标识信息,说明该数据在接收到数据快照指令的时刻之后未曾被修改过,则为了保证未被修改过的数据能够被正确地进行数据快照,先将该数据备份至一待快照数据备份列表中,然后再根据所述待快照数据修改指令对所述待快照数据进行修改,但若所述待快照数据的标识信息已为最新标识信息,说明该数据在接收到数据快照指令的时刻之后曾经被修改过,显然,已经被修改过的数据也已经在所述待快照数据备份列表中进行了备份,那么此时就可以根据所述待快照数据修改指令直接进行修改。
在本发明一实施方式中,所述待快照数据备份列表是预先设置的、用于存放在接收到数据快照指令的时刻之后将要被修改的、需要执行滞后数据快照的待快照数据,以对于所述待快照数据进行先行留存和保护。后续所述数据快照线程就可以基于所述待快照数据备份列表中备份的数据执行滞后数据快照,以保证数据快照的完整性。
在本发明一实施方式中,所述待快照数据备份列表可实现为一个链表,该链表中可包括链表索引值以及所存储的待快照数据的键值。
在本发明一实施方式中,如图3所示,所述步骤S103,即数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照的步骤,包括以下步骤S301-S303:
在步骤S301中,所述数据快照线程遍历检测所述待快照数据的标识信息;
在步骤S302中,当所述待快照数据的标识信息为非最新标识信息时,对所述待快照数据执行数据快照,并在数据快照完成后,将所述待快照数据的标识信息修改为最新标识信息;
在步骤S303中,当所述待快照数据的标识信息为最新标识信息时,对所述待快照数据执行滞后数据快照。
为了对于数据快照的操作进行标记,以识别哪些数据已经被执行了数据快照,在该实施方式中,当某一数据执行完成数据快照之后,还将该数据的标识信息修改为最新标识信息。具体地,在所述数据快照线程执行数据快照时,遍历所有的待快照数据,检测每一待快照数据的标识信息,当检测发现所述待快照数据的标识信息为非最新标识信息时,则对该数据直接执行数据快照,并在数据快照完成后,将该数据的标识信息修改为最新标识信息;但若该数据的标识信息为最新标识信息,则跳过该数据,后续将对该数据执行滞后数据快照。
在本发明一实施方式中,所述步骤S303,即当所述待快照数据的标识信息为最新标识信息时,对所述待快照数据执行滞后数据快照的步骤,可被实施为:
当所述待快照数据的标识信息为最新标识信息时,跳转至下一待快照数据进行标识信息的确定,并在对于具有非最新标识信息的待快照数据完成数据快照之后,对于备份在所述待快照数据备份列表中的待快照数据执行数据快照。
上文提及,为了避免数据快照与数据修改之间发生冲突,产生快照数据错误,同时保证与发生修改的数据对应的、在接收到数据快照指令的时刻之前的待快照数据能够被准确地执行数据快照操作,在该实施方式中,当所述数据快照线程遍历至标识信息为最新标识信息的待快照数据时,对其暂时不作处理,先跳转至下一待快照数据进行标识信息的确定,待到对于具有非最新标识信息的待快照数据完成数据快照之后,再将之前已经备份在所述待快照数据备份列表中标识信息为最新标识信息的待快照数据执行数据快照,即滞后数据快照。
图4是根据本公开一实施方式的数据快照流程示意图,如图4所示,在该示例中,数据以多个数据链表的形式存储在数据列表中,图4中该数据列表中的序号0、1、2……2^n-1代表数据存储的序号,每个数据链表中存储有不同的键值Key1、Key2、Key3、Key4、Key5和Key6,待快照数据的备份数据也以链表的形式存储在待快照数据备份列表中。在数据快照线程开始进行数据快照时,更新每个待快照数据的标识信息为0,然后依次判断每个待快照数据的标识信息。数据快照流程从Key1开始遍历所有的待快照数据,比如,若检测发现Key1的标识信息为0,确认Key1未被修改,则可直接对其进行数据快照,并在执行了数据快照之后,将Key1的标识信息由0修改为1,以此类推,对于每个数据进行标识信息的判断和数据快照的执行。在数据快照流程进行数据快照的过程中,Key2、Key5被修改,修改前的Key2和Key5备份至待快照数据备份列表中,Key2和Key5的标识信息由0修改为1,此时无论是备份数据还是修改后标识信息修改为1的数据,其链接指针均与最初标识信息为0的数据一样指向同一数据链表中的下一个数据。当数据快照流程遍历至Key2和Key5时,发现其标识信息为1,确认Key2和Key5在数据快照流程开始之后发生了修改,则跳过Key2和Key5继续进行下一数据标识信息的识别。待到对于所有标识信息为0的待快照数据完成数据快照之后,再遍历所述待快照数据备份列表中的数据执行再次数据快照。
在本发明一实施方式中,所述步骤S103还包括响应于所述待快照数据备份列表中的待快照数据完成数据快照,释放所述待快照数据备份列表所占空间的步骤,即如图5所示,所述步骤S103,即数据快照线程对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照的步骤,包括以下步骤S501-S504:
在步骤S501中,所述数据快照线程遍历检测所述待快照数据的标识信息;
在步骤S502中,当所述待快照数据的标识信息为非最新标识信息时,对所述待快照数据执行数据快照,并在数据快照完成后,将所述待快照数据的标识信息修改为最新标识信息;
在步骤S503中,当所述待快照数据的标识信息为最新标识信息时,跳转至下一待快照数据进行标识信息的确定,并在对于具有非最新标识信息的待快照数据完成数据快照之后,对于备份在所述待快照数据备份列表中的待快照数据执行数据快照;
在步骤S504中,响应于所述待快照数据备份列表中的待快照数据完成数据快照,释放所述待快照数据备份列表所占空间。
为了节省内存资源开销,在该实施方式中,在检测到所述待快照数据备份列表中的待快照数据已经完成数据快照之后,释放所述待快照数据备份列表所占的空间。
在本发明另一实施方式中,所述步骤S103还包括响应于所述待快照数据备份列表所占空间超过预设空间阈值,释放所述待快照数据备份列表中已完成快照数据所占的空间的步骤,即如图6所示,所述步骤S103,即数据快照线程对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照的步骤,包括以下步骤S601-S604:
在步骤S601中,所述数据快照线程遍历检测所述待快照数据的标识信息;
在步骤S602中,当所述待快照数据的标识信息为非最新标识信息时,对所述待快照数据执行数据快照,并在数据快照完成后,将所述待快照数据的标识信息修改为最新标识信息;
在步骤S603中,当所述待快照数据的标识信息为最新标识信息时,跳转至下一待快照数据进行标识信息的确定,并在对于具有非最新标识信息的待快照数据完成数据快照之后,对于备份在所述待快照数据备份列表中的待快照数据执行数据快照;
在步骤S604中,响应于所述待快照数据备份列表所占空间超过预设空间阈值,释放所述待快照数据备份列表中已完成快照数据所占的空间。
为了进一步节省内存资源开销,提高资源回收时效,在该实施方式中,一旦检测到所述待快照数据备份列表所占空间超过预设空间阈值,就释放所述待快照数据备份列表中已完成数据快照的数据所占的空间。其中,所述预设空间阈值可根据实际应用的需要以及所存储数据的特点进行设置,本公开对其具体取值不作具体限定。
上文提及,所述待快照数据备份列表可实现为一个链表,该链表中可包括链表索引值以及所存储的待快照数据的键值。在该实施方式中,在释放所述待快照数据备份列表所占空间或者释放所述待快照数据备份列表中已完成快照数据所占的空间时,可仅释放所述待快照数据备份列表中存储的待快照数据的键值或者其指向的内存空间,保留占用空间较少的链表索引值。
在本发明一实施方式中,所述方法还包括再次接收到数据快照指令的操作步骤,即如图7所示,所述数据快照方法包括以下步骤S701-S704:
在步骤S701中,响应于接收到数据快照指令,第一线程创建数据快照线程,并更新待快照数据的标识信息;
在步骤S702中,响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息;
在步骤S703中,所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照;
在步骤S704中,响应于再次接收到数据快照指令,将当前标识信息修改为所述第一标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为所述第二标识信息;或者,
响应于再次接收到数据快照指令,将当前标识信息确认为非最新标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为与所述非最新标识信息不同的最新标识信息。
按照上文所述技术方案,在完成一次数据快照之后,所有的待快照数据,包括在数据快照期间未修改过和修改过的数据,其标识信息均已变为最新标识信息,比如1,当再次接收到数据快照指令时,仍然需要对于待快照数据进行状态标识,此时有两种处理方式:第一种处理方式是将全部数据的当前标识信息均修改为第一标识信息,之后,若检测到某些待快照数据被修改,则将修改后的待快照数据的标识信息修改为第二标识信息,比如,假设在完成一次数据快照之后,所有的待快照数据的标识信息均已变为1,当再次接收到数据快照指令时,将全部数据的当前标识信息1均修改回0,之后,若再检测到某些待快照数据被修改,则将修改后的待快照数据的标识信息修改为1;第二种处理方式是将全部数据的当前标识信息认为是非最新标识信息,之后,若检测到某些待快照数据被修改,则将修改后的待快照数据的标识信息修改为与所述非最新标识信息不同的最新标识信息,比如,假设在完成一次数据快照之后,所有的待快照数据的标识信息均已变为1,当再次接收到数据快照指令时,将全部数据的当前标识信息1认为是与之前标识信息0具有相同的含义,即在该次数据快照流程中,将当前标识信息1作为非最新标识信息,之后,若检测到某些待快照数据被修改,则将修改后的待快照数据的标识信息修改为所述非最新标识信息不同的最新标识信息0,该处理方式能够减少标识信息修改所需要的工作量,减少系统工作开销,节约操作时间,提高操作效率。
基于上述技术方案,能够在不影响主线程服务的情况下实现全量数据的快照操作,消除了现有技术中Fork操作所带来的时延抖动,同时还能够大大降低内存消耗,提高内存利用率,降低资源成本,进而有效保障Redis产品服务的稳定性,相对于业界普遍限制Redis最大规格内存为32GB以避免抖动时延抖动的方案,本公开技术方案使得64GB、128GB甚至256GB的Redis实例规格成为可能。
更为具体地,基于上述技术方案,第一线程和数据快照线程能够同时进行操作,避免了可能出现的读写冲突,比如,当数据快照线程进行数据快照时,第一线程还能够对于数据进行修改,当第一线程将要修改的数据备份至待快照数据备份列表时,数据快照线程只存在对于数据的访问,当数据快照线程在完成数据快照操作进行待快照数据备份列表中数据的清理时,第一线程也不会再访问所述待快照数据备份列表。
上文提及,现有技术中COW拷贝以物理内存页为单位,子进程退出时才会释放,因此在保存快照期间会额外拷贝大量内存,导致内存消耗翻倍,而上述技术方案能够提前释放待快照数据备份列表所占用的空间,从而大大降低内存的消耗,提高内存利用率,相对于现有技术受限于数据快照期间操作系统内核备份内存可能翻倍,对于最大内存使用率不能超过50%的限制,本公开技术方案可以让阿里云Redis On ECS产品的内存利用率提升到80%甚至更高。
下述为本发明装置实施例,可以用于执行本发明方法实施例。
图8示出根据本发明一实施方式的数据快照装置的结构框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。如图8所示,所述数据快照装置包括:
第一设置模块801,被配置为响应于接收到数据快照指令,第一线程创建数据快照线程,并更新待快照数据的标识信息;
第二设置模块802,被配置为响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息;
快照模块803,被配置为所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照。
上文提及,随着数据技术的发展,高性能的Redis数据库的应用越来越广泛,Redis是一个开源的、使用ANSI C语言编写的、支持网络的、可基于内存亦可持久化的日志型Key-Value数据库,为了保证效率,Redis中的数据首先缓存在内存中,然后再周期性的将更新的数据写入磁盘或者把修改操作写入追加的记录文件,也称为持久化或数据快照操作。在目前的Redis内部机制中,持久化、数据快照以及主从同步都依赖于操作系统的Fork和COW(copy on write,写时拷贝)机制,其中,Fork和COW都是产生新的进程。但该机制存在以下缺陷:1、Fork系统调用会消耗较多的时间,导致主线程服务出现秒级抖动;2、COW拷贝以物理内存页为单位,子进程退出时才会释放,因此在保存快照期间会额外拷贝大量内存,导致内存消耗翻倍。上述缺陷会给Redis产品服务的稳定性带来很大的影响,同时也限制了虚拟机环境下Redis对内存的利用率,同时还提高了资源成本。
考虑到上述问题,在该实施方式中,提出一种数据快照装置,该装置通过创建数据快照线程,并为待快照数据设置相应的标识信息,以标识待快照数据的当前状态,来实现对于全量数据的快照操作。该技术方案能够在不影响主线程服务的情况下实现全量数据的快照操作,消除了现有技术中Fork操作所带来的时延抖动,同时还能够大大降低内存消耗,提高内存利用率,降低资源成本,进而有效保障Redis产品服务的稳定性。
考虑到相比进程来说,线程占用的资源少,内存开销小,效率高,可以频繁切换,因此,在该实施方式中,使用线程机制来代替现有技术中的进程机制来实现Redis的数据快照,并借助数据标识信息来避免数据快照与主线程对于数据的修改之间可能会发生的冲突问题。具体地,在接收到数据快照指令之后,第一线程创建一个数据快照线程用于完成数据快照任务,然后确定需要进行快照的待快照数据,并更新当前所有待快照数据的标识信息,此时该标识信息为非最新标识信息,用于标识该数据为在接收到数据快照指令的时刻之前存在的可快照数据;考虑到在数据快照期间,之前确定的待快照数据有可能会被修改,因此为了避免数据快照与数据修改之间发生冲突,产生快照数据错误的问题,若检测到某一待快照数据被修改,则将修改后的待快照数据的标识信息设置为最新标识信息,以区别于非最新标识信息,也就是说,被设置为最新标识信息的待快照数据是在接收到数据快照指令的时刻之后被修改过的数据,这样在数据快照线程对于某一待快照数据进行快照之前,首先判断该数据的标识信息是非最新标识信息还是最新标识信息,即判断该数据是否已被修改,若该数据的标识信息为非最新标识信息,则可直接对其执行数据快照操作,若该数据的标识信息为最新标识信息,则为了避免发生数据错误,对于该具有最新标识信息的待快照数据执行滞后数据快照处理。下文将对于上述技术方案的具体细节进行详细的解释和说明。
在本发明一实施方式中,所述数据快照指令指的是启动数据快照操作的指令,其可由操作人员发出,也可由操作系统或者其他资源发出。
在本发明一实施方式中,所述第一线程指的是提供数据读写服务的线程,比如主线程,其优先级高于所述数据快照线程,比如,在所述数据快照线程进行数据快照操作时,所述主线程可对待快照数据进行读写操作,所述数据快照线程待所述主线程读写操作完成之后再对主线程操作的数据所对应的在接收到数据快照指令的时刻之前的待快照数据执行数据快照操作。
在本发明一实施方式中,所述待快照数据指的是在接收到数据快照指令的时刻之前存在的需要进行数据快照的数据。
在本发明一实施方式中,所述待快照数据的标识信息指的是用于标识所述待快照数据的状态的信息,其可以为所述待快照数据的版本号,也可以为单独的更新标志,再或者为其他的顺序递增的ID号等信息。
为了对于所述待快照数据的当前状态进行准确标识,避免与接收到数据快照指令的时刻之后发生修改的数据产生混淆,发生数据错误,有助于第一线程和数据快照线程识别各自需要访问的数据,在本发明一实施方式中,在接收到数据快照指令,创建数据快照线程之后,还更新所述待快照数据的标识信息,并在所述待快照数据被修改之后,将修改后的待快照数据的标识信息设置为最新标识信息,以标识所述待快照数据的当前状态,使得对于在接收到数据快照指令的时刻之后发生修改和未发生修改的数据进行区分。由上可见,由于最新标识信息和非最新标识信息仅需用于标识修改和未修改,而且在该实施方式中,也仅存在上述两种情况,因此,只需要在每条数据中增加1比特的字段即可实现所述标识信息的上述标识功能,这样就可以使用较小的数据开销实现数据快照线程机制,进而节约更大的内存开销。
在本发明一实施方式中,所述非最新标识信息与所述最新标识信息不同,其中,所述非最新标识信息可设置为第一标识信息,比如0,所述最新标识信息可设置为第二标识信息,比如1。比如,在接收到数据快照指令之后,第一线程首先创建一个数据快照线程,然后确定需要进行快照的待快照数据,并更新所有待快照数据的标识信息为0,所述数据快照线程开始对于所述待快照数据进行数据快照,在数据快照期间,第一线程对于所述待快照数据中的几个数据进行了修改,并将发生修改的数据的标识信息由0修改为最新标识信息1,所述数据快照线程在对某一待快照数据进行快照时,首先判断该数据的标识信息是0还是1,若是0,则可直接执行数据快照操作,若是1,则跳过该数据,对下一数据的识别信息进行判断,标识信息为1的数据将会执行滞后数据快照处理,滞后数据快照处理的具体流程将在下文进行解释和说明。
在本发明一实施方式中,所述第二设置模块802之前,还包括响应于检测到待快照数据修改指令,根据所述待快照数据修改指令对所述待快照数据进行修改的部分,即如图9所示,所述数据快照装置包括:
第一设置模块901,被配置为响应于接收到数据快照指令,第一线程创建数据快照线程,并更新待快照数据的标识信息;
第一修改模块902,被配置为响应于检测到待快照数据修改指令,根据所述待快照数据修改指令对所述待快照数据进行修改;
第二设置模块903,被配置为响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息;
快照模块904,被配置为所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照。
上文提及,所述第一线程的优先级高于所述数据快照线程,因此,在接收到待快照数据修改指令之后,需要根据所述待快照数据修改指令对于所述待快照数据进行修改。
在本发明一实施方式中,所述第二设置模块903可被配置为:
响应于检测到待快照数据修改指令,确定所述待快照数据的标识信息;
当所述待快照数据的标识信息为非最新标识信息时,将所述待快照数据备份至待快照数据备份列表中,并根据所述待快照数据修改指令对所述待快照数据进行修改;
当所述待快照数据的标识信息为最新标识信息时,对于所述待快照数据进行修改。
上文提及,数据快照与数据修改操作可同时进行,为了避免数据快照与数据修改之间发生冲突,产生快照数据错误,同时保证与发生修改的数据对应的、在接收到数据快照指令的时刻之前的待快照数据能够被准确地执行数据快照操作,在该实施方式中,在检测到待快照数据修改指令后,首先确定所述待快照数据的标识信息,若所述待快照数据的标识信息为非最新标识信息,说明该数据在接收到数据快照指令的时刻之后未曾被修改过,则为了保证未被修改过的数据能够被正确地进行数据快照,先将该数据备份至一待快照数据备份列表中,然后再根据所述待快照数据修改指令对所述待快照数据进行修改,但若所述待快照数据的标识信息已为最新标识信息,说明该数据在接收到数据快照指令的时刻之后曾经被修改过,显然,已经被修改过的数据也已经在所述待快照数据备份列表中进行了备份,那么此时就可以根据所述待快照数据修改指令直接进行修改。
在本发明一实施方式中,所述待快照数据备份列表是预先设置的、用于存放在接收到数据快照指令的时刻之后将要被修改的、需要执行滞后数据快照的待快照数据,以对于所述待快照数据进行先行留存和保护。后续所述数据快照线程就可以基于所述待快照数据备份列表中备份的数据执行滞后数据快照,以保证数据快照的完整性。
在本发明一实施方式中,所述待快照数据备份列表可实现为一个链表,该链表中可包括链表索引值以及所存储的待快照数据的键值。
在本发明一实施方式中,如图10所示,所述快照模块803包括:
检测子模块1001,被配置为所述数据快照线程遍历检测所述待快照数据的标识信息;
第一快照子模块1002,被配置为当所述待快照数据的标识信息为非最新标识信息时,对所述待快照数据执行数据快照,并在数据快照完成后,将所述待快照数据的标识信息修改为最新标识信息;
第二快照子模块1003,被配置为当所述待快照数据的标识信息为最新标识信息时,对所述待快照数据执行滞后数据快照。
为了对于数据快照的操作进行标记,以识别哪些数据已经被执行了数据快照,在该实施方式中,当某一数据执行完成数据快照之后,还将该数据的标识信息修改为最新标识信息。具体地,在所述数据快照线程执行数据快照时,遍历所有的待快照数据,检测每一待快照数据的标识信息,当检测发现所述待快照数据的标识信息为非最新标识信息时,则对该数据直接执行数据快照,并在数据快照完成后,将该数据的标识信息修改为最新标识信息;但若该数据的标识信息为最新标识信息,则跳过该数据,后续将对该数据执行滞后数据快照。
在本发明一实施方式中,所述第二快照子模块1003可被配置为:
当所述待快照数据的标识信息为最新标识信息时,跳转至下一待快照数据进行标识信息的确定,并在对于具有非最新标识信息的待快照数据完成数据快照之后,对于备份在所述待快照数据备份列表中的待快照数据执行数据快照。
上文提及,为了避免数据快照与数据修改之间发生冲突,产生快照数据错误,同时保证与发生修改的数据对应的、在接收到数据快照指令的时刻之前的待快照数据能够被准确地执行数据快照操作,在该实施方式中,当所述数据快照线程遍历至标识信息为最新标识信息的待快照数据时,对其暂时不作处理,先跳转至下一待快照数据进行标识信息的确定,待到对于具有非最新标识信息的待快照数据完成数据快照之后,再将之前已经备份在所述待快照数据备份列表中标识信息为最新标识信息的待快照数据执行数据快照,即滞后数据快照。
图4是根据本公开一实施方式的数据快照流程示意图,如图4所示,在该示例中,数据以多个数据链表的形式存储在数据列表中,图4中该数据列表中的序号0、1、2……2^n-1代表数据存储的序号,每个数据链表中存储有不同的键值Key1、Key2、Key3、Key4、Key5和Key6,待快照数据的备份数据也以链表的形式存储在待快照数据备份列表中。在数据快照线程开始进行数据快照时,更新每个待快照数据的标识信息为0,然后依次判断每个待快照数据的标识信息。数据快照流程从Key1开始遍历所有的待快照数据,比如,若检测发现Key1的标识信息为0,确认Key1未被修改,则可直接对其进行数据快照,并在执行了数据快照之后,将Key1的标识信息由0修改为1,以此类推,对于每个数据进行标识信息的判断和数据快照的执行。在数据快照流程进行数据快照的过程中,Key2、Key5被修改,修改前的Key2和Key5备份至待快照数据备份列表中,Key2和Key5的标识信息由0修改为1,此时无论是备份数据还是修改后标识信息修改为1的数据,其链接指针均与最初标识信息为0的数据一样指向同一数据链表中的下一个数据。当数据快照流程遍历至Key2和Key5时,发现其标识信息为1,确认Key2和Key5在数据快照流程开始之后发生了修改,则跳过Key2和Key5继续进行下一数据标识信息的识别。待到对于所有标识信息为0的待快照数据完成数据快照之后,再遍历所述待快照数据备份列表中的数据执行再次数据快照。
在本发明一实施方式中,所述快照模块803还包括响应于所述待快照数据备份列表中的待快照数据完成数据快照,释放所述待快照数据备份列表所占空间的部分,即如图11所示,所述快照模块803包括:
检测子模块1101,被配置为所述数据快照线程遍历检测所述待快照数据的标识信息;
第一快照子模块1102,被配置为当所述待快照数据的标识信息为非最新标识信息时,对所述待快照数据执行数据快照,并在数据快照完成后,将所述待快照数据的标识信息修改为非最新标识信息;
第二快照子模块1103,被配置为当所述待快照数据的标识信息为最新标识信息时,对所述待快照数据执行滞后数据快照;
第一释放模块1104,被配置为响应于所述待快照数据备份列表中的待快照数据完成数据快照,释放所述待快照数据备份列表所占空间。
为了节省内存资源开销,在该实施方式中,在检测到所述待快照数据备份列表中的待快照数据已经完成数据快照之后,释放所述待快照数据备份列表所占的空间。
在本发明另一实施方式中,所述快照模块803还包括响应于所述待快照数据备份列表所占空间超过预设空间阈值,释放所述待快照数据备份列表中已完成快照数据所占的空间的部分,即如图12所示,所述快照模块803包括:
检测子模块1201,被配置为所述数据快照线程遍历检测所述待快照数据的标识信息;
第一快照子模块1202,被配置为当所述待快照数据的标识信息为非最新标识信息时,对所述待快照数据执行数据快照,并在数据快照完成后,将所述待快照数据的标识信息修改为最新标识信息;
第二快照子模块1203,被配置为当所述待快照数据的标识信息为最新标识信息时,对所述待快照数据执行滞后数据快照;
第二释放模块1204,被配置为响应于所述待快照数据备份列表所占空间超过预设空间阈值,释放所述待快照数据备份列表中已完成快照数据所占的空间。
为了进一步节省内存资源开销,提高资源回收时效,在该实施方式中,一旦检测到所述待快照数据备份列表所占空间超过预设空间阈值,就释放所述待快照数据备份列表中已完成数据快照的数据所占的空间。其中,所述预设空间阈值可根据实际应用的需要以及所存储数据的特点进行设置,本公开对其具体取值不作具体限定。
上文提及,所述待快照数据备份列表可实现为一个链表,该链表中可包括链表索引值以及所存储的待快照数据的键值。在该实施方式中,在释放所述待快照数据备份列表所占空间或者释放所述待快照数据备份列表中已完成快照数据所占的空间时,可仅释放所述待快照数据备份列表中存储的待快照数据的键值或者其指向的内存空间,保留占用空间较少的链表索引值。
在本发明一实施方式中,所述装置还包括再次接收到数据快照指令的操作部分,即如图13所示,所述数据快照装置包括:
第一设置模块1301,被配置为响应于接收到数据快照指令,第一线程创建数据快照线程,并更新待快照数据的标识信息;
第二设置模块1302,被配置为响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息;
快照模块1303,被配置为所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照;
第二修改模块1304,被配置为响应于再次接收到数据快照指令,将当前标识信息修改为所述第一标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为所述第二标识信息;或者,
第三修改模块1305,被配置为响应于再次接收到数据快照指令,将当前标识信息确认为非最新标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为与所述非最新标识信息不同的最新标识信息。
按照上文所述技术方案,在完成一次数据快照之后,所有的待快照数据,包括在数据快照期间未修改过和修改过的数据,其标识信息均已变为最新标识信息,比如1,当再次接收到数据快照指令时,仍然需要对于待快照数据进行状态标识,此时有两种处理方式:第一种处理方式是将全部数据的当前标识信息均修改为第一标识信息,之后,若检测到某些待快照数据被修改,则将修改后的待快照数据的标识信息修改为第二标识信息,比如,假设在完成一次数据快照之后,所有的待快照数据的标识信息均已变为1,当再次接收到数据快照指令时,将全部数据的当前标识信息1均修改回0,之后,若再检测到某些待快照数据被修改,则将修改后的待快照数据的标识信息修改为1;第二种处理方式是将全部数据的当前标识信息认为是非最新标识信息,之后,若检测到某些待快照数据被修改,则将修改后的待快照数据的标识信息修改为与所述非最新标识信息不同的最新标识信息,比如,假设在完成一次数据快照之后,所有的待快照数据的标识信息均已变为1,当再次接收到数据快照指令时,将全部数据的当前标识信息1认为是与之前标识信息0具有相同的含义,即在该次数据快照流程中,将当前标识信息1作为非最新标识信息,之后,若检测到某些待快照数据被修改,则将修改后的待快照数据的标识信息修改为所述非最新标识信息不同的最新标识信息0,该处理方式能够减少标识信息修改所需要的工作量,减少系统工作开销,节约操作时间,提高操作效率。
基于上述技术方案,能够在不影响主线程服务的情况下实现全量数据的快照操作,消除了现有技术中Fork操作所带来的时延抖动,同时还能够大大降低内存消耗,提高内存利用率,降低资源成本,进而有效保障Redis产品服务的稳定性,相对于业界普遍限制Redis最大规格内存为32GB以避免抖动时延抖动的方案,本公开技术方案使得64GB、128GB甚至256GB的Redis实例规格成为可能。
更为具体地,基于上述技术方案,第一线程和数据快照线程能够同时进行操作,避免了可能出现的读写冲突,比如,当数据快照线程进行数据快照时,第一线程还能够对于数据进行修改,当第一线程将要修改的数据备份至待快照数据备份列表时,数据快照线程只存在对于数据的访问,当数据快照线程在完成数据快照操作进行待快照数据备份列表中数据的清理时,第一线程也不会再访问所述待快照数据备份列表。
上文提及,现有技术中COW拷贝以物理内存页为单位,子进程退出时才会释放,因此在保存快照期间会额外拷贝大量内存,导致内存消耗翻倍,而上述技术方案能够提前释放待快照数据备份列表所占用的空间,从而大大降低内存的消耗,提高内存利用率,相对于现有技术受限于数据快照期间操作系统内核备份内存可能翻倍,对于最大内存使用率不能超过50%的限制,本公开技术方案可以让阿里云Redis On ECS产品的内存利用率提升到80%甚至更高。
本发明实施例还公开了一种电子设备,图14示出根据本发明一实施方式的电子设备的结构框图,如图14所示,所述电子设备1400包括存储器1401和处理器1402;其中,
所述存储器1401用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器1402执行以实现上述任一方法步骤。
图15适于用来实现根据本发明实施方式的数据快照方法的计算机系统的结构示意图。
如图15所示,计算机系统1500包括处理单元1501,其可以根据存储在只读存储器(ROM)1502中的程序或者从存储部分1508加载到随机访问存储器(RAM)1503中的程序而执行上述实施方式中的各种处理。在RAM1503中,还存储有系统1500操作所需的各种程序和数据。处理单元1501、ROM1502以及RAM1503通过总线1504彼此相连。输入/输出(I/O)接口1505也连接至总线1504。
以下部件连接至I/O接口1505:包括键盘、鼠标等的输入部分1506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1507;包括硬盘等的存储部分1508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1509。通信部分1509经由诸如因特网的网络执行通信处理。驱动器1510也根据需要连接至I/O接口1505。可拆卸介质1511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1510上,以便于从其上读出的计算机程序根据需要被安装入存储部分1508。
特别地,根据本发明的实施方式,上文描述的方法可以被实现为计算机软件程序。例如,本发明的实施方式包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行所述数据快照方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分1509从网络上被下载和安装,和/或从可拆卸介质1511被安装。其中,所述处理单元1501可实现为CPU、GPU、FPGA、NPU、AI芯片等处理单元。
附图中的流程图和框图,图示了按照本发明各种实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,路程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
作为另一方面,本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本发明实施例的方法。
以上描述仅为本发明的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本发明实施例中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本发明实施例中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (20)
1.一种数据快照方法,其特征在于,包括:
响应于接收到数据快照指令,第一线程创建数据快照线程,并更新待快照数据的标识信息;
响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息;
所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照。
2.根据权利要求1所述的方法,其特征在于,所述响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息之前,还包括:
响应于检测到待快照数据修改指令,根据所述待快照数据修改指令对所述待快照数据进行修改。
3.根据权利要求2所述的方法,其特征在于,所述响应于检测到待快照数据修改指令,根据所述待快照数据修改指令对所述待快照数据进行修改,被实施为:
响应于检测到待快照数据修改指令,确定所述待快照数据的标识信息;
当所述待快照数据的标识信息为非最新标识信息时,将所述待快照数据备份至待快照数据备份列表中,并根据所述待快照数据修改指令对所述待快照数据进行修改;
当所述待快照数据的标识信息为最新标识信息时,对于所述待快照数据进行修改。
4.根据权利要求1所述的方法,其特征在于,所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照,包括:
所述数据快照线程遍历检测所述待快照数据的标识信息;
当所述待快照数据的标识信息为非最新标识信息时,对所述待快照数据执行数据快照,并在数据快照完成后,将所述待快照数据的标识信息修改为最新标识信息;
当所述待快照数据的标识信息为最新标识信息时,对所述待快照数据执行滞后数据快照。
5.根据权利要求4所述的方法,其特征在于,所述当所述待快照数据的标识信息为最新标识信息时,对所述待快照数据执行滞后数据快照,被实施为:
当所述待快照数据的标识信息为最新标识信息时,跳转至下一待快照数据进行标识信息的确定,并在对于具有非最新标识信息的待快照数据完成数据快照之后,对于备份在所述待快照数据备份列表中的待快照数据执行数据快照。
6.根据权利要求5所述的方法,其特征在于,还包括:
响应于所述待快照数据备份列表中的待快照数据完成数据快照,释放所述待快照数据备份列表所占空间。
7.根据权利要求5所述的方法,其特征在于,还包括:
响应于所述待快照数据备份列表所占空间超过预设空间阈值,释放所述待快照数据备份列表中已完成快照数据所占的空间。
8.根据权利要求1-7任一所述的方法,其特征在于,所述非最新标识信息为第一标识信息,所述最新标识信息为第二标识信息。
9.根据权利要求8所述的方法,其特征在于,还包括:
响应于再次接收到数据快照指令,将当前标识信息修改为所述第一标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为所述第二标识信息;或者,
响应于再次接收到数据快照指令,将当前标识信息确认为非最新标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为与所述非最新标识信息不同的最新标识信息。
10.一种数据快照装置,其特征在于,包括:
第一设置模块,被配置为响应于接收到数据快照指令,第一线程创建数据快照线程,并更新待快照数据的标识信息;
第二设置模块,被配置为响应于检测到所述待快照数据被修改,将修改后的待快照数据的标识信息设置为最新标识信息;
快照模块,被配置为所述数据快照线程根据标识信息对数据执行快照处理,对于具有非最新标识信息的待快照数据执行数据快照,对于具有最新标识信息的待快照数据执行滞后数据快照。
11.根据权利要求10所述的装置,其特征在于,所述第二设置模块之前还包括:
第一修改模块,被配置为响应于检测到待快照数据修改指令,根据所述待快照数据修改指令对所述待快照数据进行修改。
12.根据权利要求11所述的装置,其特征在于,所述第二设置模块被配置为:
响应于检测到待快照数据修改指令,确定所述待快照数据的标识信息;
当所述待快照数据的标识信息为非最新标识信息时,将所述待快照数据备份至待快照数据备份列表中,并根据所述待快照数据修改指令对所述待快照数据进行修改;
当所述待快照数据的标识信息为最新标识信息时,对于所述待快照数据进行修改。
13.根据权利要求10所述的装置,其特征在于,所述快照模块包括:
检测子模块,被配置为所述数据快照线程遍历检测所述待快照数据的标识信息;
第一快照子模块,被配置为当所述待快照数据的标识信息为非最新标识信息时,对所述待快照数据执行数据快照,并在数据快照完成后,将所述待快照数据的标识信息修改为最新标识信息;
第二快照子模块,被配置为当所述待快照数据的标识信息为最新标识信息时,对所述待快照数据执行滞后数据快照。
14.根据权利要求13所述的装置,其特征在于,所述第二快照子模块被配置为:
当所述待快照数据的标识信息为最新标识信息时,跳转至下一待快照数据进行标识信息的确定,并在对于具有非最新标识信息的待快照数据完成数据快照之后,对于备份在所述待快照数据备份列表中的待快照数据执行数据快照。
15.根据权利要求14所述的装置,其特征在于,还包括:
第一释放模块,被配置为响应于所述待快照数据备份列表中的待快照数据完成数据快照,释放所述待快照数据备份列表所占空间。
16.根据权利要求14所述的装置,其特征在于,还包括:
第二释放模块,被配置为响应于所述待快照数据备份列表所占空间超过预设空间阈值,释放所述待快照数据备份列表中已完成快照数据所占的空间。
17.根据权利要求10-16任一所述的装置,其特征在于,所述非最新标识信息为第一标识信息,所述最新标识信息为第二标识信息。
18.根据权利要求17所述的装置,其特征在于,还包括:
第二修改模块,被配置为响应于再次接收到数据快照指令,将当前标识信息修改为所述第一标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为所述第二标识信息;或者,
第三修改模块,被配置为响应于再次接收到数据快照指令,将当前标识信息确认为非最新标识信息,并响应于检测到待快照数据被修改,将修改后的待快照数据的标识信息修改为与所述非最新标识信息不同的最新标识信息。
19.一种电子设备,其特征在于,包括存储器和处理器;其中,
所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现权利要求1-9任一项所述的方法步骤。
20.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该计算机指令被处理器执行时实现权利要求1-9任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910913380.0A CN112559243B (zh) | 2019-09-25 | 2019-09-25 | 数据快照方法、装置、电子设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910913380.0A CN112559243B (zh) | 2019-09-25 | 2019-09-25 | 数据快照方法、装置、电子设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112559243A true CN112559243A (zh) | 2021-03-26 |
CN112559243B CN112559243B (zh) | 2022-04-29 |
Family
ID=75029445
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910913380.0A Active CN112559243B (zh) | 2019-09-25 | 2019-09-25 | 数据快照方法、装置、电子设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112559243B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104216792A (zh) * | 2013-05-29 | 2014-12-17 | 华为软件技术有限公司 | 数据备份的方法及内存数据库存储引擎 |
CN106598762A (zh) * | 2016-12-29 | 2017-04-26 | 上海理想信息产业(集团)有限公司 | 一种消息同步方法及系统 |
CN106991164A (zh) * | 2017-03-31 | 2017-07-28 | 北京京东金融科技控股有限公司 | 基于区块链的用于金融数据处理的方法、装置及电子设备 |
US20170315878A1 (en) * | 2016-04-29 | 2017-11-02 | Netapp, Inc. | Method for low overhead, space tracking, high performance snapshots and clones by transfer of extent ownership |
CN107451012A (zh) * | 2014-07-04 | 2017-12-08 | 华为技术有限公司 | 一种数据备份方法及流计算系统 |
CN108108463A (zh) * | 2017-12-29 | 2018-06-01 | 北京奇虎科技有限公司 | 基于时间片调度的同步任务处理方法及装置 |
US20180173562A1 (en) * | 2016-12-16 | 2018-06-21 | Red Hat, Inc. | Low impact snapshot database protection in a micro-service environment |
US10176057B2 (en) * | 2012-12-19 | 2019-01-08 | Amazon Technologies, Inc. | Multi-lock caches |
CN109739688A (zh) * | 2018-12-18 | 2019-05-10 | 杭州宏杉科技股份有限公司 | 快照资源空间管理方法、装置、电子设备 |
CN110209735A (zh) * | 2019-05-05 | 2019-09-06 | 深圳市腾讯计算机系统有限公司 | 数据库备份方法、数据库备份装置、计算设备和存储介质 |
-
2019
- 2019-09-25 CN CN201910913380.0A patent/CN112559243B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10176057B2 (en) * | 2012-12-19 | 2019-01-08 | Amazon Technologies, Inc. | Multi-lock caches |
CN104216792A (zh) * | 2013-05-29 | 2014-12-17 | 华为软件技术有限公司 | 数据备份的方法及内存数据库存储引擎 |
CN107451012A (zh) * | 2014-07-04 | 2017-12-08 | 华为技术有限公司 | 一种数据备份方法及流计算系统 |
US20170315878A1 (en) * | 2016-04-29 | 2017-11-02 | Netapp, Inc. | Method for low overhead, space tracking, high performance snapshots and clones by transfer of extent ownership |
US20180173562A1 (en) * | 2016-12-16 | 2018-06-21 | Red Hat, Inc. | Low impact snapshot database protection in a micro-service environment |
CN106598762A (zh) * | 2016-12-29 | 2017-04-26 | 上海理想信息产业(集团)有限公司 | 一种消息同步方法及系统 |
CN106991164A (zh) * | 2017-03-31 | 2017-07-28 | 北京京东金融科技控股有限公司 | 基于区块链的用于金融数据处理的方法、装置及电子设备 |
CN108108463A (zh) * | 2017-12-29 | 2018-06-01 | 北京奇虎科技有限公司 | 基于时间片调度的同步任务处理方法及装置 |
CN109739688A (zh) * | 2018-12-18 | 2019-05-10 | 杭州宏杉科技股份有限公司 | 快照资源空间管理方法、装置、电子设备 |
CN110209735A (zh) * | 2019-05-05 | 2019-09-06 | 深圳市腾讯计算机系统有限公司 | 数据库备份方法、数据库备份装置、计算设备和存储介质 |
Non-Patent Citations (2)
Title |
---|
JUNYEOP LEE: ""Snapshot:a forwarding strategy based on analyzing network topology in opportunistic networks"", 《WIRELESS NETWORKS》 * |
石存沣: ""基于并发覆盖准则的线程调度序列生成方法研究"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN112559243B (zh) | 2022-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10261853B1 (en) | Dynamic replication error retry and recovery | |
US9798792B2 (en) | Replication for on-line hot-standby database | |
US8364636B2 (en) | Real time data replication | |
US8458284B2 (en) | Systems and methods for efficient live application migration within bandwidth constrained networks | |
US8645323B2 (en) | Large volume data replication using job replication | |
US20100023564A1 (en) | Synchronous replication for fault tolerance | |
US10719407B1 (en) | Backing up availability group databases configured on multi-node virtual servers | |
US8195619B2 (en) | Extent reference count update system and method | |
US11755356B2 (en) | Asynchronous queries on secondary data cores in a distributed computing system | |
US20160364317A1 (en) | Method for debugging a computer program | |
US20120278422A1 (en) | Live object pattern for use with a distributed cache | |
US7330860B2 (en) | Fault tolerant mechanism to handle initial load of replicated object in live system | |
US11144401B2 (en) | Component aware incremental backup, restore, and reconciliation solution | |
CN109388677B (zh) | 集群之间数据同步方法、装置、设备及其存储介质 | |
US11599554B2 (en) | Synchronizing changes to stale components of a distributed object using synchronization bitmaps | |
US10445295B1 (en) | Task-based framework for synchronization of event handling between nodes in an active/active data storage system | |
JP6987340B2 (ja) | データベースのデータ変更要求処理方法及び装置 | |
CN109308170B (zh) | 一种数据处理方法及装置 | |
CN109561151B (zh) | 数据存储方法、装置、服务器和存储介质 | |
JP5741254B2 (ja) | 送信制御方法、装置及びプログラム | |
US9195528B1 (en) | Systems and methods for managing failover clusters | |
CN105373563B (zh) | 数据库切换方法及装置 | |
CN112015591A (zh) | 一种日志管理方法、服务器和数据库系统 | |
US10671482B2 (en) | Providing consistency in a distributed data store | |
CN111400241B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |