虚拟机块设备的写操作方法、快照创建方法及装置与流程

文档序号:18414240发布日期:2019-08-13 19:08阅读:162来源:国知局
本发明涉及计算机
技术领域
:,尤其涉及一种虚拟机块设备的写操作方法、快照创建方法及装置。
背景技术
::当今的互联网应用对分布式文件系统中虚拟机块设备的读写(io)性能、稳定性和可用性等要求越来越高。然而,虚拟机块设备支持多客户端io操作并发的同时,也带来了创建快照时的时间一致性问题。换言之,对于支持多客户端io操作并发的虚拟机块设备来说,在多客户端的写操作进行中为虚拟机块设备创建快照时如何确保快照满足时间一致性,是亟待解决的技术问题。技术实现要素:本申请旨在至少解决相关技术中的技术问题之一。本申请实施例提供一种虚拟机块设备的写操作方法、快照创建方法及装置,至少能够确保多客户端写操作的进行中为虚拟机块设备创建的快照满足时间一致性。本申请采用如下技术方案。一种虚拟机块设备的写操作方法,所述虚拟机块设备至少包括两个以上子块;所述写操作方法包括:接收到来自第一服务节点的表示第一子块创建了新快照的指示信息时,暂停针对所述第一子块的写操作;向第二服务节点查询第二子块的新快照是否创建完成,以确定当前虚拟机块设备的快照是否创建完成;在确定当前虚拟机块设备的快照创建完成时,恢复针对所述第一子块的写操作;其中,所述第二子块为预先设定的快照同步点,所述第一子块为所述虚拟机块设备中非快照同步点且正在进行写操作的任一子块。其中,所述方法还包括:向所述第一服务节点发送针对所述第一子块的写请求,所述写请求携带读写客户端的快照版本信息,以便所述第一服务节点根据读写客户端的快照版本信息确定是否需要拒绝所述写请求。其中,所述表示第一子块创建了新快照的指示信息至少包括如下之一:对应所述新快照的快照版本信息;表示所述第一子块的快照版本高于读写客户端的快照版本的错误码。其中,所述向第二服务节点查询第二子块的新快照是否创建完成,包括:向所述第二服务节点查询第二子块的快照版本信息,直到确认第二子块的新快照创建完成;在所述第二子块的快照版本信息为对应所述新快照的快照版本信息时,确认所述第二子块的新快照创建完成。其中,所述向所述第二服务节点查询第二子块的快照版本信息,包括:循环向所述第二服务节点查询第二子块的快照版本信息。其中,所述向第二服务节点查询第二子块的新快照是否创建完成,还包括:将所述第二子块的快照版本信息与所述第一子块的快照版本信息比较,在所述第二子块的快照版本信息与所述第一子块的快照版本信息一致时,确定所述第二子块的快照版本信息为对应所述新快照的快照版本信息。其中,所述向第二服务节点查询第二子块的快照版本信息,包括:向所述第二服务节点发送查询第二子块的快照版本信息的请求;接收所述第二服务节点返回的所述第二子块的快照版本信息。其中,所述虚拟机块设备为日志结构块设备,所述日志结构块设备至少包含两个子块。其中,所述第二子块为预先约定的固定子块。一种虚拟机块设备的写操作装置,所述虚拟机块设备至少包括两个以上子块;所述写操作装置包括:写模块,用于在接收到来自第一服务节点的表示第一子块创建了新快照的指示信息时,暂停针对所述第一子块的写操作;以及,用于在确定当前虚拟机块设备的快照创建完成时,恢复针对所述第一子块的写操作;查询模块,用于向第二服务节点查询第二子块的新快照是否创建完成,以确定当前虚拟机块设备的快照是否创建完成;其中,所述第二子块为预先设定的快照同步点,所述第一子块为所述虚拟机块设备中非快照同步点且正在进行写操作的任一子块。其中,所述写模块,具体用于向所述第一服务节点发送针对所述第一子块的写请求,所述写请求携带读写客户端的快照版本信息,以便所述第一服务节点根据读写客户端的快照版本信息确定是否需要拒绝所述写请求。其中,所述查询模块,具体用于向第二服务节点查询第二子块的快照版本信息,直到确认第二子块的新快照创建完成;在所述第二子块的快照版本信息为对应所述新快照的快照版本信息时确认所述第二子块的新快照创建完成。一种虚拟机块设备的写操作装置,包括:存储有计算机程序的存储器;处理器,配置为读取所述计算机程序以执行上述虚拟机块设备的写操作方法的步骤。一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述虚拟机块设备的写操作方法的步骤。一种虚拟机块设备的快照创建方法,所述虚拟机块设备至少包括两个以上子块;所述快照创建方法,包括:接收来自控制客户端的针对当前虚拟机块设备的快照创建请求;向当前虚拟机块设备除第二子块之外的所有子块的服务节点发起创建子块快照的请求,以便除第二子块之外所有子块的服务节点分别为相应子块创建新快照;在确认除第二子块之外所有子块的新快照创建成功之后,向第二服务节点发起创建子块快照的请求,以便所述第二服务节点为所述第二子块创建所述新快照;其中,所述第二子块为预先设定的快照同步点。其中,所述方法还包括:接收到来自除第二子块之外所有子块的服务节点的子块快照创建成功的消息后,确认除第二子块之外所有子块的新快照创建成功。其中,所述创建子块快照的请求携带对应所述新快照的快照版本信息。其中,所述方法还包括:通过快照信息表记录当前虚拟块设备的快照信息,所述快照信息至少包括:快照版本信息。其中,所述方法还包括:接收到来自所述控制客户端的快照创建请求后,在所述快照信息表中新建对应所述新快照的记录,所述记录至少包含对应所述新快照的快照版本信息。其中,所述快照信息表记录的快照信息至少包括如下之一:快照状态信息;快照标识信息。其中,所述方法还包括:根据各服务节点当前所负责的第二子块数量,采用均分算法确定当前虚拟机块设备的第二服务节点。一种虚拟机块设备的快照创建装置,所述虚拟机块设备至少包括两个以上子块;所述快照创建装置,包括:接收模块,用于接收来自控制客户端的针对当前虚拟机块设备的快照创建请求;发起模块,用于向当前虚拟机块设备除第二子块之外的所有子块的服务节点发起创建子块快照的请求,以便除第二子块之外所有子块的服务节点分别为相应子块创建新快照;以及,在确认除第二子块之外所有子块的新快照创建成功之后,向第二服务节点发起创建子块快照的请求,以便所述第二服务节点为所述第二子块创建所述新快照;其中,所述第二子块为预先设定的快照同步点。其中,所述发起模块,还用于接收到来自除第二子块之外所有子块的服务节点的子块快照创建成功的消息后,确认除第二子块之外所有子块的新快照创建成功。其中,还包括:记录模块,用于通过快照信息表记录当前虚拟块设备的快照信息,所述快照信息至少包括:快照版本信息。其中,所述记录模块,具体用于在所述接收模块接收到来自所述控制客户端的快照创建请求后,在所述快照信息表中新建对应所述新快照的记录,所述记录至少包含对应所述新快照的快照版本信息。其中,还包括:确定模块,用于根据各服务节点当前所负责的第二子块数量,采用均分算法确定当前虚拟机块设备的第二服务节点。一种虚拟机块设备的快照创建装置,包括:存储有计算机程序的存储器;处理器,配置为读取所述计算机程序以执行上述第二种虚拟机块设备的快照创建方法的步骤。一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述第二种虚拟机块设备的快照创建方法的步骤。一种虚拟机块设备的快照创建方法,所述虚拟机块设备至少包括两个以上子块;所述快照创建方法,包括:根据主节点发起的创建子块快照的请求,为虚拟机设备的第一子块创建新快照,并更新所述第一子块的快照版本信息;向读写客户端提供表示所述第一子块创建了新快照的指示信息,以便所述客户端暂停针对所述第一子块的写操作;其中,所述第一子块为所述虚拟机块设备中非快照同步点且正在进行写操作的任一子块。其中,所述向读写客户端提供表示所述第一子块创建了新快照的指示信息,包括:接收来自所述读写客户端的写请求,所述写请求携带读写客户端的快照版本信息;将所述读写客户端的快照版本信息与更新后所述第一子块的快照版本信息比较,所述读写客户端的快照版本信息与更新后所述第一子块的快照版本信息不一致时,确定需要拒绝所述写请求;确定需要拒绝所述写请求时,向所述客户端返回所述指示信息,以拒绝所述客户端的写请求。其中,所述表示第一子块创建了新快照的指示信息至少包括如下之一:对应所述新快照的快照版本信息;表示所述第一子块的快照版本高于所述读写客户端的快照版本的错误码。其中,所述创建子块快照的请求携带对应所述新快照的快照版本信息;所述更新所述第一子块的快照版本信息,为:将所述第一子块的快照版本信息更新为所述创建子块快照的请求携带的对应所述新快照的快照版本信息。一种虚拟机块设备的快照创建装置,所述虚拟机块设备至少包括两个以上子块;所述快照创建装置,包括:第一子块快照创建模块,用于根据主节点发起的创建子块快照的请求,为虚拟机设备的第一子块创建新快照,并更新所述第一子块的快照版本信息;第一提供模块,用于向读写客户端提供表示所述第一子块创建了新快照的指示信息,以便所述客户端暂停针对所述第一子块的写操作;其中,所述第一子块为所述虚拟机块设备中非快照同步点且正在进行写操作的任一子块。其中,所述第一提供模块,包括:接收单元,用于接收来自所述读写客户端的写请求,所述写请求携带读写客户端的快照版本信息;比较单元,用于将所述读写客户端的快照版本信息与更新后所述第一子块的快照版本信息比较,所述读写客户端的快照版本信息与更新后所述第一子块的快照版本信息不一致时,确定需要拒绝所述写请求;返回单元,用于在所述比较单元确定需要拒绝所述写请求时,向所述客户端返回所述指示信息,以拒绝所述客户端的写请求。一种虚拟机块设备的快照创建方法,所述虚拟机块设备至少包括两个以上子块;所述快照创建方法,包括:基于主节点发起的创建子块快照的请求,为第二子块创建新快照,并更新所述第二子块的快照版本信息;在接收到来自读写客户端的查询所述第二子块的新快照是否创建完成的请求后,向所述读写客户端返回所述第二子块的快照版本信息,以便所述客户端基于所述第二子块的快照版本信息确认所述第二子块的新快照是否创建完成;其中,所述第二子块为预先设定的快照同步点。其中,所述创建子块快照的请求携带对应所述新快照的快照版本信息;所述更新所述第二子块的快照版本信息,为:将所述第二子块的快照版本信息更新为所述创建子块快照的请求携带的对应所述新快照的快照版本信息。一种虚拟机块设备的快照创建装置,所述虚拟机块设备至少包括两个以上子块;所述快照创建装置,包括:第二子块快照创建模块,用于基于主节点发起的创建子块快照的请求,为第二子块创建新快照,并更新所述第二子块的快照版本信息;第二提供模块,用于在接收到来自读写客户端的查询所述第二子块的新快照是否创建完成的请求后,向所述读写客户端返回所述第二子块的快照版本信息,以便所述客户端基于所述第二子块的快照版本信息确认所述第二子块的新快照是否创建完成;其中,所述第二子块为预先设定的快照同步点。一种虚拟机块设备的快照创建装置,包括:存储有计算机程序的存储器;处理器,配置为读取所述计算机程序以执行上述第三种或第四种虚拟机块设备的快照创建方法的步骤。一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述第三种或第四种虚拟机块设备的快照创建方法的步骤。本申请包括以下优点:一方面,本发明实施例中,写操作进行中通过查询预设为快照同步点的第二子块新快照是否创建完成来确定相应虚拟机块设备的快照是否创建完成,可确保在写操作进行中为虚拟机块设备创建的快照满足时间一致性,进而确保写操作进行中为虚拟机块设备各子块创建的快照与其子块的数据一致。另一方面,本发明实施例中,在确定虚拟机块设备的快照创建完成时即恢复读写客户端的io操作,而不是在整个快照流程完成之后才恢复读写客户端的io操作,不仅可以确保io操作期间创建的快照满足时间一致性,而且能够将快照流程对io操作的影响降到最低。当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有优点。附图说明图1为本申请示例性应用环境的架构示意图;图2为日志结构块设备示例性结构的示意图;图3为日志结构块设备及其快照的示例性结构示意图;图4为实施例一读写客户端的虚拟机块设备写操作方法流程示意图;图5为实施例一读写客户端发现新快照创建时写操作的示例性流程图;图6为实施例一的一种虚拟机块设备的写操作装置的结构示意图;图7为实施例一的另一种虚拟机块设备的写操作装置的结构示意图;图8为实施例二虚拟机块设备快照创建方法的流程示意图;图9为实施例二虚拟机块设备的示例性快照流程示意图;图10为实施例二的一种虚拟机块设备的快照创建装置的结构示意图;图11为实施例二的另一种虚拟机块设备的快照创建装置的结构示意图;图12为实施例三的一种虚拟机块设备快照创建方法的流程示意图;图13为实施例三的另一种虚拟机块设备快照创建方法的流程示意图;图14为实施例三的一种虚拟机块设备的快照创建装置的结构示意图;图15为实施例三的另一种虚拟机块设备的快照创建装置的结构示意图;图16为本申请一实例中两个读写客户端同时进行写操作的过程中为日志结构块设备创建快照的流程示意图。具体实施方式下面将结合附图及实施例对本申请的技术方案进行更详细的说明。需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。在一个典型的配置中,客户端或服务器的计算设备可包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存(memory)。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。内存可能包括模块1,模块2,……,模块n(n为大于2的整数)。计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质。存储介质可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom),快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。本文术语解释如下:虚拟机块设备(blockdevice),也可称为虚拟机磁盘,是利用物理机器或其集群提供的物理磁盘资源形成的虚拟磁盘。日志结构块设备(lsbd,logstructuredblockdevice),也可称为日志结构的虚拟机磁盘,是基于日志方式构建的虚拟机块设备。快照(snapshot),也可称为磁盘快照,本文所述快照均是指虚拟机块设备或其子块的快照。硬链接技术(hardlink),用于多文件之间共享数据。如图1所示,为本申请的示例性应用环境架构。其中,分布式文件系统包括:块设备的读写客户端(client)、块设备的控制客户端(blockadmin)、块设备的主节点(bm,blockmaster)、块设备的服务节点(bs,blockserver)。该示例性架构中,虚拟机块设备切分为n+1个子块(即,子块0、子块1、……、子块n,n为不小于2的整数)。其中,主节点负责管理虚拟机块设备的元数据(devicemetadata)和快照的元数据(snapshotmetadata)。服务节点负责为虚拟机块设备和快照的子块服务,每个服务节点可以管理一个虚拟机块设备的一个或多个子块,一个虚拟机块设备的一个子块同时只能被一个服务节点管理,图1的示例性架构中,包含q个服务节点(服务节点1,……,服务节点q),服务节点1负责管理子块0和子块2,服务节点q负责管理子块n。读写客户端可通过与相应的服务节点交互实现针对虚拟机块设备中某个或某些子块的io操作,虚拟机块设备的控制客户端可通过与主节点交互,完成虚拟机块设备及其快照等的创建和/或删除等操作。需要说明的是,本申请中所述的读写客户端、控制客户端、主节点、服务节点可以通过支持云计算的物理机器集群实现。具体来讲,读写客户端可通过云计算的计算集群的物理机器或其集群实现,控制客户端、主节点、服务节点可以通过云计算的存储集群的物理机器或其集群实现。这里,云计算是分布式计算的一种,支持云计算的物理机器集群可以由大量相互耦合的计算机组成。需要说明的是,除上述实现方式之外,本申请所适用的应用环境还可采用其他形式的网络架构来实现。本申请所述的虚拟机块设备是指可切分为一个或多个子块的虚拟机块设备。具体来讲,该虚拟机块设备可以按照逻辑区块地址(lba,logicalblockaddress)切分为一个、两个或多个子块(segment)。举例来说,该虚拟机块设备可以为下文所述的日志结构块设备。除此之外,该虚拟机块设备还可以为其他类型,对于虚拟机块设备的具体类型,本文不予限制。一种实现方式中,本申请所述的虚拟机块设备可以为日志结构块设备。该日志结构块设备采用底层分布式存储的扁平化的日志文件(flatlogfile)保存数据,该平面日志文件只能追加写,不能覆盖写。日志结构块设备被按照逻辑地址空间切分成多个子块,以提升并发处理能力。每个子块中可以保存索引文件(indexfile)和数据文件(datafile),索引文件用于存储因子块数据修改而产生的元数据(metadata),数据文件用于存储因子块数据修改而产生的数据(data)。索引文件和数据文件均为扁平化的日志文件,即一个文件(索引文件和/或数据文件)写完以后就跳转(seal),然后创建下一个新的文件继续写。如图2所示,为日志结构块设备的示例性结构。本申请所述的快照是指上述虚拟机块设备的快照。该快照的结构与虚拟机块设备相同,虚拟机块设备的快照实质上相当于一个虚拟机块设备,同样包括一个、两个或多个子块。一般来说,一个虚拟机块设备的整个快照流程可以包括两步:1)创建快照;2)快照处理完成。即先创建快照,在创建快照完成之后再执行快照处理,快照处理完成之后整个快照完成,此时该虚拟机块设备的快照才是可用的。为一个虚拟机块设备创建快照时,需要为该虚拟机块设备的每个子块创建相应的快照,也就是说,快照的子块与虚拟机块设备的子块可以是一对一关系。快照的子块中同样包含索引文件(indexfile)和数据文件,快照与虚拟机块设备可通过硬链接技术(hardlink)共享同一个数据文件(datafile),快照子块的索引文件可以由虚拟机块设备相应子块的索引文件合并(compation)而成。举例来说,虚拟机块设备为日志结构块设备时,图3所示为日志结构块设备及其快照的示例性结构示意图。本申请所述的虚拟机块设备可被切分为两个或两个以上子块,由于每个子块由单独的一个服务节点来处理其io操作,因而使得这两个或两个以上子块的io操作可以并发进行,解决了分布式存储中多读写客户端的io操作无法并行的问题。然而,由于同一个虚拟机块设备的多个子块支持数据并发写操作,在多个读写客户端的写入操作还在进行中的某个时刻为虚拟机块设备创建快照时,就需要协调该虚拟机块设备所有子块的服务节点来统一完成该快照的分布式创建,以确保虚拟机块设备的快照满足时间一致性,进而确保多客户端并发写操作的进行中该虚拟机块设备所有子块与其快照的数据一致。针对上述技术问题,本申请提出如下技术方案。由于虚拟机块设备多个子块在多个服务节点上同时被处理,因此,本申请的技术方案中,对于每个虚拟机块设备可以预先设定其任意一个子块x作为快照同步点,即在虚拟机块设备的所有子块中,最后执行该子块x的快照创建,以该子块x完成快照创建作为虚拟机块设备完成快照创建的判断基准。换言之,读写客户端、主节点、以及各服务节点分别可以以“子块x完成快照创建”作为相应虚拟机块设备完成快照创建的判定基准,从而确保多客户端写入操作进行中的某个时刻为虚拟机块设备创建的快照满足时间一致性,进而确保多客户端并发写操作的进行中该虚拟机块设备所有子块与其快照的数据一致。本申请的一种实现方式中,表示子块x完成快照创建的方式可以是第二子块的快照版本升级成功,即子块x的快照版本信息(snapshotversion)升级为新快照的快照版本信息(snapshotversion)。当然,除此之外,还可通过其他方式指示子块x完成了快照创建,对此,本文不予限制。下面对本申请技术方案的实现方式进行说明。实施例一如图4所示,一种虚拟机块设备的写操作方法,可以包括:步骤401,接收到来自第一服务节点的表示第一子块创建了新快照的指示信息时,暂停针对所述第一子块的写操作;步骤402,向第二服务节点查询第二子块的新快照是否创建完成,以确定当前虚拟机块设备的快照是否创建完成;步骤403,在确定当前虚拟机块设备的快照创建完成时,恢复针对所述第一子块的写操作;其中,该虚拟机块设备至少可以包括两个以上子块;所述第二子块为预先设定的快照同步点,所述第一子块为所述虚拟机块设备中非快照同步点且正在进行写操作的任一子块。本实施例中,客户端通过第一服务节点提供的指示信息发现有新快照创建时先暂停写操作,通过查询作为快照同步点的第二子块的快照创建情况来确认相应虚拟机块设备是否完成了该新快照的创建,在确认虚拟机块设备完成该新快照的创建之后再恢复写操作,能够确保在写操作进行中为虚拟机块设备创建的快照满足时间一致性,进而确保写操作进行中为虚拟机块设备各子块创建的快照与其子块的数据一致。实际应用中,整个快照流程包括快照创建和快照处理,快照创建的过程时间比较短,而快照处理过程因其过程复杂而需花费较长时间,如果在整个快照流程完成之后再恢复读写客户端的io操作,读写客户端的io将会长时间暂停,这对读写客户端的io操作将造成较大影响。鉴于此,本实施例中,通过确认虚拟机块设备的快照创建是否完成来恢复读写客户端的io操作,即在确定虚拟机块设备的快照创建完成时即恢复读写客户端的io操作,而不是在整个快照流程完成之后才恢复读写客户端的io操作,这样,不仅可以确保io操作期间创建的快照满足时间一致性,而且能够将快照流程对io操作的影响降到最低。本实施例的一种实现方式中,写操作执行过程中,读写客户端向所述第一服务节点发送针对所述第一子块的写请求,所述写请求可以携带读写客户端的快照版本信息,以便所述第一服务节点根据读写客户端的快照版本信息确定是否需要拒绝所述写请求。这样,读写客户端通过写请求将自己的快照版本信息送至相应服务节点,方便服务节点通过快照版本确定是否在该写操作的进行中发生了新快照的创建,以便该服务节点通过相应的指示信息通知读写客户端相应虚拟机块设备的快照创建正在进行中。实际应用中,可以在写请求的包结构中加入快照版本信息。比如,写请求的包结构可以采用如下形式:其中,iovcount表示本次写操作的io个数(这里,多个io可以放在同一个请求中发送给bs);iovs是相对应的io的数据缓冲区(buffer);shortdebugstring()函数打印出请求的详细信息。需要说明的是,上述写请求的包结构仅为示例。实际上,写请求的包结构还可以采用其他形式。本实施例中,所述表示第一子块创建了新快照的指示信息可以包括如下之一或两项:对应所述新快照的快照版本信息;表示所述第一子块的快照版本高于所述读写客户端的快照版本的错误码。这样,通过快照版本信息来指示第一子块创建了新快照,更易于读写客户端识别。比如,该错误码可以表示为特定错误码snapshot_version_mismatch。本实施例的一种实现方式中,所述向第二服务节点查询第二子块的新快照是否创建完成,可以包括:向所述第二服务节点查询第二子块的快照版本信息,直到确认第二子块的新快照创建完成;在所述第二子块的快照版本信息为对应所述新快照的快照版本信息时,确认所述第二子块的新快照创建完成。这里,以快照同步点的快照版本被提升到最新版作为相应虚拟机块设备分布式一致性快照完成的标志,不仅可使读写客户端通过快照版本信息获知相应虚拟机块设备当前所处的快照版本,而且又利用快照同步点的快照版本信息实现了虚拟机块设备的分布式快照的时间一致性。具体的,在上述实现方式中,读写客户端可以将所述第二子块的快照版本信息与所述第一子块的快照版本信息比较,在所述第二子块的快照版本信息与所述第一子块的快照版本信息一致时,确定所述第二子块的快照版本信息为对应所述新快照的快照版本信息。这样,读写客户端可通过自己已获得子块的快照版本信息来确定第二子块的快照版本信息是否为最新版本,不需要再向主节点确认,处理逻辑更清晰简单,有利于提高效率,减少因处理逻辑复杂而造成的系统资源浪费。本实施例的一种实现方式中,可以循环向第二服务节点查询第二子块的快照版本信息,直到确认第二子块的新快照创建完成。这样,在暂停写操作期间读写客户端可通过循环查询第二子块的快照版本信息,及时确认第二子块的新快照创建完成,以便在相应虚拟机块设备的快照创建完成时即恢复写操作,避免因虚拟机块设备快照的创建而影响写操作的进行。具体的,上述实现方式中向第二服务节点查询第二子块的快照版本信息的过程,可以包括:向所述第二服务节点发送查询第二子块的快照版本信息的请求;接收所述第二服务节点返回的所述第二子块的快照版本信息。除此之外,还可以采用其他方式,对该查询的具体实现方式,本文不予限制。本实施例中,所述虚拟机块设备可以为日志结构块设备,所述日志结构块设备包含至少两个子块。除此之外,该虚拟机块设备还可以是其他类型。需要说明的是,本实施例中第一子块是指虚拟机块设备中除预设为快照同步点的子块之外的任意子块,第二子块则是指虚拟机块设备中被预先设定为快照同步点的子块。本实施例的一种实现方式中,所述第二子块可以为预先约定的固定子块。具体来说,该第二子块可以为各类客户端、bm、bs之间预先约定的固定子块。比如,在具体实现中,可以选择一个固定的子块segment0作为快照同步点,这样,利用一个固定的子块作为快照同步点,可使得读写客户端、块设备的主节点、块设备的服务节点能够相互协作达成虚拟机块设备分布式快照的时间一致性。下面以一个具体实例为例说明本实施例。如图5所示,在发现日志结构块设备有新快照创建时,读写客户端执行写操作的示例性流程,可以包括:步骤501,读写客户端在打开日志结构块设备时,从bm获取日志结构块设备的当前快照版本信息(cursnapshotversion);步骤502,读写客户端执行写操作,且每个写操作都携带一个快照版本信息(snapshotversion);步骤503,读写客户端向子块segmenty的bs发起的写操作被拒绝时,同时接收到来自子块segmenty的bs返回的特定错误码snapshot_version_mismatch和新快照版本信息,该特定错误码表示读写客户端的快照版本太低;步骤504,读写客户端暂停写操作,同时循环向作为快照同步点的子块segmentx的bs查询快照版本信息(snapshotversion),直到子块segmentx的快照版本信息与子块segmenty的新快照版本信息相一致;步骤505,读写客户端携带新快照版本信息向子块segmenty的bs发起写操作,io由此恢复。上述示例性流程中,客户端向某个子块的bs发起写操作时,在相应的写请求(writerequest)中增加了快照版本信息。需要说明的是,上述图5所示的流程仅为示例性实现方式,实际上读写客户端的写操作还可具有其他实现方式。一种虚拟机块设备的写操作装置60,如图6所示,包括:写模块601,用于在接收到来自第一服务节点的表示第一子块创建了新快照的指示信息时,暂停针对所述第一子块的写操作;以及,用于在确定当前虚拟机块设备的快照创建完成时,恢复针对所述第一子块的写操作;查询模块602,用于向第二服务节点查询第二子块的新快照是否创建完成,以确定当前虚拟机块设备的快照是否创建完成;其中,所述第二子块为预先设定的快照同步点,所述虚拟机块设备至少包括所述第一子块和所述第二子块。这里,所述写模块601,具体可以用于向所述第一服务节点发送针对所述第一子块的写请求,所述写请求携带读写客户端的快照版本信息,以便所述第一服务节点根据读写客户端的快照版本信息确定是否需要拒绝所述写请求。本实施例的一种实现方式中,所述查询模块602,具体可以用于向第二服务节点查询第二子块的快照版本信息,直到确认第二子块的新快照创建完成;在所述第二子块的快照版本信息为对应所述新快照的快照版本信息时确认所述第二子块的新快照创建完成。这里,虚拟机块设备的写操作装置60的其他具体技术细节可参照本实施例的方法部分。实际应用中,写模块601负责执行写操作,可以是软件、硬件或两者的结合;查询模块602负责查询作为快照同步点的子块的快照创建情况,可以是软件、硬件或两者的结合。一种虚拟机块设备的写操作装置70,如图7所示,可以包括:存储有计算机程序的存储器71;处理器72,配置为读取所述计算机程序以执行本实施例所述虚拟机块设备的写操作方法的步骤。这里,虚拟机块设备的写操作装置60的其他具体技术细节可参照本实施例的方法部分。需要说明的是,图7所示的结构为本实施例虚拟机块设备的写操作装置70的基础架构。实际应用中,虚拟机块设备的写操作装置70还可包括其他部件,比如,将处理器、存储器以及其他部分连接起来的总线,负责实现通信的通信电路,输入部件、输出部件等。当然,除此之外,上述虚拟机块设备的写操作装置70还可包括其他部件。一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现本实施例所述虚拟机块设备的写操作方法的步骤。实际应用中,本实施例所述虚拟机块设备的写操作方法可通过读写客户端来实现。相应的,虚拟机块设备的写操作装置60、虚拟机块设备的写操作装置70、计算机可读存储介质等分别可以通过读写客户端来实现或设置于读写客户端中。实施例二如图8所示,一种虚拟机块设备的快照创建方法,包括:步骤801,接收来自控制客户端的针对当前虚拟机块设备的快照创建请求;步骤802,向当前虚拟机块设备除第二子块之外的所有子块的服务节点发起创建子块快照的请求,以便除第二子块之外所有子块的服务节点分别为相应子块创建新快照;步骤803,在确认除第二子块之外所有子块的新快照创建成功之后,向第二服务节点发起创建子块快照的请求,以便所述第二服务节点为所述第二子块创建所述新快照;其中,所述第二子块为预先设定的快照同步点,所述第一子块为所述虚拟机块设备中非快照同步点且正在进行写操作的任一子块。本实施例中,主节点在接收到来自除第二子块之外所有子块的服务节点的子块快照创建成功的消息后,确认除第二子块之外所有子块的新快照创建成功。这样,主节点可以在确定除作为快照同步点的第二子块之外的所有子块新快照都创建完成之后才开始快照同步点的新快照创建,从而确保虚拟机块设备的快照满足时间一致性,进而确保该虚拟机块设备各子块的快照与该子块的数据一致。本实施例中,主节点利用虚拟机块设备多子块的特点,可以同时提升除预先设定为快照同步点的子块之外的其他所有子块的快照版本信息以缩短快照时间窗口,可提高快照创建的效率,缩短快照创建的时长,进而降低快照创建为读写客户端的io操作带来的影响。本实施例的一种实现方式中,主节点在所述创建子块快照的请求携带对应所述新快照的快照版本信息,以便各子块的服务节点在为相应子块创建快照时将其快照版本信息进行同步更新。本实施例的一种实现方式中,主节点还可以通过快照信息表记录当前虚拟块设备的快照信息,所述快照信息至少包括:快照版本信息。换言之,块设备的主节点采用快照信息表(snapshottable)来保存快照的相关信息并记录快照的处理状态。在上述实现方式中,主节点可以设置一个全局的快照信息表,该全局的快照信息表可保存所有虚拟机块设备的所有快照信息。该全局的快照信息表中每条记录包含一个虚拟机块设备的一个快照的快照信息,每条记录中可以包含该虚拟机块设备的该快照的快照状态信息和快照标识信息。当然,除此之外,该快照信息表还可以采用其他方式实现。对此,本文不予限制。在上述实现方式中,主节点还可以在接收到来自所述控制客户端的快照创建请求后,在所述快照信息表中新建对应所述新快照的记录,所述记录至少包含对应所述新快照的快照版本信息,以便在向各服务节点发送创建子块快照的请求时携带对应所述新快照的快照版本信息。本实施例中,所述快照信息表记录的快照信息可以包括如下之一或两项:快照状态信息;快照标识信息。一种实现方式中,快照状态信息用于表示快照的当前处理状态。快照标识信息用于唯一的标识一个快照,包括但不限于该快照的id、快照版本信息、对应的虚拟机块设备id等。举例来说,快照信息表可以采用如下的数据结构:messagesnapshotts{requireduint64deviceid=1;requireduint32snapshotindex=2;optionalsnapshotidtypepbid=3;optionalsnapshotinfopb.snapshotstatusstatus=4;optionalstringlsbdrootdir=5;optionaluint64refcount=6;optionalsnapshotidtypepbinitsnapshotid=7;optionalsnapshotidtypepbparentsnapshotid=8;optionalbooldeviceimported=9;optionaluint64completetime=10;}其中,requireduint64deviceid表示快照对应的日志结构块设备的id;requireduint32snapshotindex表示控制客户端在创建快照时传入的索引值,该索引值用于读写客户端标识同一个日志结构块设备的不同快照。optionalsnapshotidtypepbid表示快照id,optionalsnapshotinfopb.snapshotstatusstatus表示快照当前的状态,optionalstringlsbdrootdir表示快照的根目录;optionaluint64refcount表示快照被引用的次数;optionalsnapshotidtypepbinitsnapshotid表示初始化的快照id,该初始化的快照id表示该快照的日志块设备是从某个快照克隆而来的。optionalsnapshotidtypepbparentsnapshotid表示当前快照的父快照id,父快照与当前快照都是同一个虚拟机块设备的快照,当前快照是基于这个父快照创建而来。optionalbooldeviceimported表示快照的子块是否已输入(import)成功,optionaluint64completetime表示快照完成的时刻。举例来说,快照状态信息可以采用如下数据结构:其中,bs_create_snapshot=1,表示在optionalstatusstatus取值为1时快照处于bs创建快照的状态。bs_query_snapshot=2表示optionalstatusstatus取值为2时快照处于“向bs查询快照”的状态;snapshot_success=3表示optionalstatusstatus取值为3时快照处于已创建成功的状态;snapshot_success=4表示optionalstatusstatus取值为4时快照处于创建失败的状态;optionalsnapshotidtypepbid表示快照id;optionalstatusstatus通过取值指示相应快照目前的状态。在上述示例中,optionalstatusstatus取值为3,表示id为2的快照已创建成功。举例来说,快照标识信息可以采用如下的数据结构:messagesnapshotidtypepb{optionaluint64device_id=1;//optionaluint32version=2;//optionaluint32snapshot_index=3;optionalstringhost_name=4;optionalstringcluster_name=5;}其中,optionaluint64device_id表示快照对应的日志结构块设备的id。optionaluint32version表示快照版本信息,optionaluint32snapshot_index表示创建快照时指定的索引值,该索引值由读写客户端指定。optionalstringhost_name表示用于快照备份的快照中心的集群地址,optionalstringcluster_name表示当前存储集群的名称。需要说明的是,上述快照信息表、快照标识信息、快照状态信息的数据结构实现方式仅为示例,实际上快照信息表、快照标识信息、快照状态信息的数据结构还可采用其他方式实现。由于虚拟机块设备的任意子块都可以作为快照同步点在多个虚拟机块设备同时打快照时,,本实施例中主节点还可以在为虚拟机块设备的子块分配服务节点时,通过将这些作为快照同步点的子块分散在整个集群不同服务节点上来减少单点压力。具体的,主节点可以根据各服务节点当前所负责的第二子块数量,采用均分算法确定当前虚拟机块设备的第二服务节点。换言之,主节点可以根据各服务节点当前负责的快照同步点数量,采用均分算法确定当前虚拟机块设备中作为快照同步点的子块的服务节点。比如,预先选择固定的子块segment0作为快照同步点时,在分布式集群中主节点在为每一个虚拟机块设备分配子块segment0所在的服务节点时可以均衡分配,这样很多虚拟机块设备的子块segment0可以平均分配到集群内的各个bs上,避免单点性能瓶颈。一种实现方式中,对于任意一个虚拟机块设备(默认包含4个子块),主节点分配该虚拟机块设备的各个子块到不同的服务节点,并记录某个虚拟机块设备中作为快照同步点的子块分配到了哪个服务节点上。这样,主节点可以获知所有虚拟机块设备中作为快照同步点的子块的服务节点信息,再分配下一个虚拟机块设备中作为快照同步点的子块的bs时,主节点可以根据已获知的各个bs各自负责的快照同步点数量(即所有虚拟机块设备中作为快照同步点的子块的服务节点信息),来决定这个虚拟机块设备中作为快照同步点的子块分配给哪个服务节点。一般来说,可以基于类似轮询调度(roundrobin)的均分算法来决定这个虚拟机块设备中作为快照同步点的子块分配给哪个服务节点。下面以一个具体实例为例说明本实施例。本实例中,预先设定各虚拟机块设备中子块seg0为快照同步点。如图9所示,读写客户端进行写操作的过程中虚拟机块设备的快照流程可以包括:步骤901,bm接收来自控制客户端的快照创建请求,所述快照创建请求表示为虚拟机块设备创建新快照,可以携带该虚拟机块设备的标识(比如,虚拟机块设备的id);步骤902,bm在快照信息表中为这个新快照插入一条记录,该记录可以包含新快照的id、新快照的快照版本信息(snapshotversion)以及新快照的其他信息。步骤903,bm向除seg0之外所有子块的bs发送创建子块快照(createsegmentsnapshot)的请求,该请求的内容包括新快照id和新快照的快照版本信息。这里,除seg0之外所有子块的bs分别执行如下的子块快照创建过程:接收上述创建子块快照(createsegmentsnapshot)的请求,将相应子块的快照版本信息升级为上述新快照的快照版本信息,并向相应子块的事务文件(transactionfile)写入一条快照标志(snapshotflag)(相当于一条日志(log)),该快照标志包含所述新快照的快照版本信息,最后返回ok消息给bm。步骤904,bm接收到除seg0之外所有子块的bs返回的ok消息后,向子块seg0的bs发送创建子块快照的请求,该请求的内容同样包含新快照id和新快照的快照版本信息。这里,子块seg0的bs接收上述创建子块快照的请求,将子块seg0的快照版本信息升级为上述新快照的快照版本信息,并向相应子块的事务文件写入一条快照标志,该快照标志包含所述新快照的快照版本信息,最后返回ok消息给bm。这里,读写客户端通过循环查询获知子块seg0的快照版本信息已升级为新快照的快照版本信息,则继续写操作。步骤905,bm向所有子块(包括子块seg0)的bs查询新快照的快照状态,即向所有子块(包括子块seg0)的bs发送查询(query)请求。这里,各个bs在创建新快照之后,针对相应子块执行新快照的快照处理,包括但不限于:等待新快照创建完成之前(即在子块seg0的新快照创建之前,也即子块seg0升级快照版本信息到新快照的快照版本信息之前)的写操作从底层分布式文件系统成功返回(比如,在子块seg0的新快照创建之前,读写客户端执行了io1/io2操作,那么需要等待io1/io2操作从底层分布式文件系统成功返回)以确保新快照创建完成之前可能正在进行中(ongoing)的写操作的数据成功写到了底层分布式文件系统,对新快照的数据文件和索引文件做压缩(compaction)处理、处理快照与虚拟机块设备之间的硬链接等(这里,快照和虚拟机块设备可以通过硬链接共用数据文件)。在新快照的这些快照处理完成之后,表示相应子块的快照完成,bs对bm的查询请求返回ok消息。步骤906,bm收到所有子块(包括子块seg0)的bs返回的查询ok(queryok)消息后,更新快照信息表中该新快照的快照状态,置为snapshot_success(即新快照成功),至此,新快照的整个快照流程结束。如图10所示,一种虚拟机块设备的快照创建装置10,包括:接收模块101,用于接收来自控制客户端的针对当前虚拟机块设备的快照创建请求;发起模块102,用于向当前虚拟机块设备除第二子块之外的所有子块的服务节点发起创建子块快照的请求,以便除第二子块之外所有子块的服务节点分别为相应子块创建新快照;以及,在确认除第二子块之外所有子块的新快照创建成功之后,向第二服务节点发起创建子块快照的请求,以便所述第二服务节点为所述第二子块创建所述新快照;其中,所述第二子块为预先设定的快照同步点,所述虚拟机块设备至少包括所述第一子块和所述第二子块。这里,所述发起模块102,还可以用于接收到来自除第二子块之外所有子块的服务节点的子块快照创建成功的消息后,确认除第二子块之外所有子块的新快照创建成功。一种实现方式中,上述快照创建装置10还可以包括:记录模块103,用于通过快照信息表记录当前虚拟块设备的快照信息,所述快照信息至少包括:快照版本信息。这里,所述记录模块103,具体可以用于在所述接收模块接收到来自所述控制客户端的快照创建请求后,在所述快照信息表中新建对应所述新快照的记录,所述记录至少包含对应所述新快照的快照版本信息。如此,发起模块102可以基于记录模块103新建的记录在发起创建子块快照的请求时携带对应所述新快照的快照版本信息。一种实现方式中,上述快照创建装置10还可以包括:确定模块104,用于根据各服务节点当前所负责的第二子块数量,采用均分算法确定当前虚拟机块设备的第二服务节点。实际应用中,上述快照创建装置10中,接收模块101负责执行接收来自控制客户端的消息,可以是软件、硬件或两者的结合;发起模块102负责向服务节点发起子块快照的创建,可以是软件、硬件或两者的结合;记录模块103负责记录各虚拟机块设备的快照信息,可以是软件、硬件或两者的结合;确定模块104,负责为作为快照同步点的子块分配服务节点,可以是软件、硬件或两者的结合。本实施例的快照创建装置10的其他具体技术细节可参照本实施例的方法部分。一种虚拟机块设备的快照创建装置11,如图11所示,可以包括:存储有计算机程序的存储器111;处理器112,配置为读取所述计算机程序以执行本实施例所述虚拟机块设备的快照创建方法的步骤。本实施例中,虚拟机块设备的快照创建装置11的其他具体技术细节可参照本实施例的方法部分。需要说明的是,图11所示的结构为本实施例快照创建装置11的基础架构。实际应用中,快照创建装置11还可包括其他部件,比如,将处理器、存储器以及其他部分连接起来的总线,负责实现通信的通信电路,输入部件、输出部件等。当然,除此之外,上述快照创建装置11还可包括其他部件。一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现本实施例所述虚拟机块设备的快照创建方法的步骤。实际应用中,本实施例所述虚拟机块设备的快照创建方法可通过块设备的主节点来实现。相应的,虚拟机块设备的快照创建装置10、快照创建装置11、计算机可读存储介质等分别可以通过块设备的主节点来实现或设置于该块设备的主节点中。实施例三如图12所示,一种虚拟机块设备的快照创建方法,包括:步骤1201,根据主节点发起的创建子块快照的请求,为虚拟机设备的第一子块创建新快照,并更新所述第一子块的快照版本信息;步骤1202,向读写客户端提供表示所述第一子块创建了新快照的指示信息,以便所述客户端暂停针对所述第一子块的写操作;其中,该虚拟机块设备至少可以包括两个以上子块;所述第二子块为预先设定的快照同步点,所述第一子块为所述虚拟机块设备中非快照同步点且正在进行写操作的任一子块。本实施例中,所述向读写客户端提供表示所述第一子块创建了新快照的指示信息,可以包括:接收来自所述读写客户端的写请求,所述写请求携带读写客户端的快照版本信息;将所述读写客户端的快照版本信息与更新后所述第一子块的快照版本信息比较,所述读写客户端的快照版本信息与更新后所述第一子块的快照版本信息不一致时,确定需要拒绝所述写请求;确定需要拒绝所述写请求时,向所述客户端返回所述指示信息,以拒绝所述客户端的写请求。也就是说,在收到来自读写客户端的写请求后,服务节点可以检查该写请求携带的快照版本信息,如果写请求中的快照版本信息比当前子块的快照版本信息低,则拒绝该写操作,可以返回指示信息(比如特定错误码(snapshot_version_mismatch)和新快照版本信息)给客户端。本实施例中,所述表示第一子块创建了新快照的指示信息可以包括如下之一或两项:对应所述新快照的快照版本信息;表示所述第一子块的快照版本高于所述读写客户端的快照版本的错误码。比如,该错误码可以表示为特定错误码snapshot_version_mismatch。这样,在快照过程中通过服务节点向读写客户端返回指示信息的方式实现通知新快照创建的通知,就无需读写客户端再向主节点发起请求来获知新快照创建的情况,处理逻辑更清晰简单,有利于提高效率,减少因处理逻辑复杂而造成的系统资源浪费。本实施例中,所述创建子块快照的请求可以携带对应所述新快照的快照版本信息。此时,可以将所述第一子块的快照版本信息更新为所述创建子块快照的请求携带的对应所述新快照的快照版本信息。这样,各服务节点基于该统一的快照版本信息来实现快照的时间一致性。如图13所示,另一种虚拟机块设备的快照创建方法,包括:步骤1301,基于主节点发起的创建子块快照的请求,为第二子块创建新快照,并更新所述第二子块的快照版本信息;步骤1302,在接收到来自读写客户端的查询所述第二子块的新快照是否创建完成的请求后,向所述读写客户端返回所述第二子块的快照版本信息,以便所述客户端基于所述第二子块的快照版本信息确认所述第二子块的新快照是否创建完成;其中,所述虚拟机块设备至少包括第一子块和所述第二子块,所述第二子块为预先设定的快照同步点。本实施例中,所述创建子块快照的请求可以携带对应所述新快照的快照版本信息。此时,第一服务节点可以将所述第二子块的快照版本信息更新为所述创建子块快照的请求携带的对应所述新快照的快照版本信息。这样,第一服务节点基于该统一的快照版本信息可实现快照的时间一致性。本实施例两种快照创建方法的一种具体实现方式中,不管是针对非快照同步点的子块还是针对作为快照同步点的子块,服务节点为该子块创建快照的具体过程可以包括:服务节点在收到创建子块快照的请求后,先将子块的快照版本升级为该请求中的快照版本信息,再在该子块的事务文件中写入快照标志以记录该子块的快照版本信息,最后向主节点返回ok消息以确认相应子块的快照已创建完成。这里,该快照标志实际是事务文件中的一条日志,包含升级后的快照版本信息。实际应用中,子块的事务文件不仅可记录该子块的快照版本信息,还可以记录该子块的io操作信息。一种优选的实现方式中,子块的事务文件可以按照io操作以及快照创建的先后顺序记录子块每次io操作的信息和对应快照创建的快照标志(包括但不限于快照版本信息),可确保相应快照只包含相对于快照创建完成事件(即快照版本信息升级完成的事件)先于发生的io操作,从而确保该子块与其快照的数据一致。以日志结构块设备为例,日志结构块设备的每个子块中除了包含索引文件和数据文件之外,还可以具有一个事务文件(transationfile),该事务文件用于记录对日志结构块设备相应子块的每一次io写操作。这里,事务文件也可以是扁平化的日志文件。为子块创建快照时,先在该子块的事务文件中写一条日志,该日志为快照标志(snapshotflag),包含该子块的快照版本信息。比如,对于某个子块有四次io操作(比如,按照时序一次为io1、io2、io3、io34),且在第三次io操作之前该子块有创建新快照(快照版本信息设为s2),那么,该子块的事务文件中可依次有如下的几条日志:log1(对应io1)、log2(对应io3)、快照标志log(对应快照版本信息s2)、log3(对应io3)、log4(对应io4),这样,通过事务文件可记录io操作与快照创建之间的先后顺序,从而确保相应快照(即快照版本信息s2的快照)只会包含io1/io2,而不会包含io3/io4。一种虚拟机块设备的快照创建装置14,如图14所示,可以包括:第一子块快照创建模块1401,用于根据主节点发起的创建子块快照的请求,为虚拟机设备的第一子块创建新快照,并更新所述第一子块的快照版本信息;第一提供模块1402,用于向读写客户端提供表示所述第一子块创建了新快照的指示信息,以便所述客户端暂停针对所述第一子块的写操作;其中,所述虚拟机块设备至少包括所述第一子块和第二子块。所述第二子块为预先设定的快照同步点。本实施例中,所述第一提供模块1402,可以包括:接收单元14021,用于接收来自所述读写客户端的写请求,所述写请求携带读写客户端的快照版本信息;比较单元14022,用于将所述读写客户端的快照版本信息与更新后所述第一子块的快照版本信息比较,所述读写客户端的快照版本信息与更新后所述第一子块的快照版本信息不一致时,确定需要拒绝所述写请求;返回单元14023,用于在所述比较单元确定需要拒绝所述写请求时,向所述客户端返回所述指示信息,以拒绝所述客户端的写请求。实际应用中,上述快照创建装置14中,第一子块快照创建模块1401负责为子块创建快照,可以是软件、硬件或两者的结合;第一提供模块1402负责在快照过程中通知读写客户端有新快照创建,可以是软件、硬件或两者的结合。本实施例的快照创建装置14的其他具体技术细节可参照本实施例图12所示方法的部分。另一种虚拟机块设备的快照创建装置15,如图15所示,可以包括:第二子块快照创建模块1501,用于基于主节点发起的创建子块快照的请求,为第二子块创建新快照,并更新所述第二子块的快照版本信息;第二提供模块1502,用于在接收到来自读写客户端的查询所述第二子块的新快照是否创建完成的请求后,向所述读写客户端返回所述第二子块的快照版本信息,以便所述客户端基于所述第二子块的快照版本信息确认所述第二子块的新快照是否创建完成。实际应用中,上述快照创建装置15中,第二子块快照创建模块1501负责为作为快照同步点的子块创建快照,可以是软件、硬件或两者的结合;第二提供模块1502负责通知读写客户端作为快照同步点的子块的快照创建情况,可以是软件、硬件或两者的结合。本实施例的快照创建装置15的其他具体技术细节可参照本实施例图13所示方法的部分。再一种虚拟机块设备的快照创建装置,可以包括:存储有计算机程序的存储器;处理器,配置为读取所述计算机程序以执行本实施例所述虚拟机块设备的快照创建方法的步骤。具体来讲,该处理器配置为读取所述计算机程序以执行本实施例图12所示快照创建方法或图13所示快照创建方法的步骤。实际应用中,对于非快照同步点的子块的服务节点来说,相应的快照创建装置中处理器配置为读取所述计算机程序以执行本实施例图12所示的快照创建方法。对于作为快照同步点的子块的服务节点来说,相应的快照创建装置中处理器配置为读取所述计算机程序以执行本实施例图13所示的快照创建方法。本实施例中,该再一种的快照创建装置的其他具体技术细节可参照本实施例的方法部分。需要说明的是,上述存储器和处理器的结构为上述再一种的快照创建装置的基础架构。实际应用中,该再一种的快照创建装置还可包括其他部件,比如,将处理器、存储器以及其他部分连接起来的总线,负责实现通信的通信电路,输入部件、输出部件等。当然,除此之外,上述再一种的快照创建装置还可包括其他部件。一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现本实施例所述虚拟机块设备的快照创建方法的步骤。具体来讲,该处理器配置为读取所述计算机程序以执行本实施例图12所示快照创建方法或图13所示快照创建方法的步骤。实际应用中,对于非快照同步点的子块的服务节点来说,相应的快照创建装置中处理器配置为读取所述计算机程序以执行本实施例图12所示的快照创建方法。对于作为快照同步点的子块的服务节点来说,相应的快照创建装置中处理器配置为读取所述计算机程序以执行本实施例图13所示的快照创建方法。实际应用中,本实施例所述虚拟机块设备的快照创建方法可通过块设备的服务节点实现,相应的快照创建装置可通过块设备的服务节点实现或设置于该服务节点中。具体来讲,图12所示方法可通过非快照同步点的子块的服务节点实现,图13所示方法可通过作为快照同步点的子块的服务节点实现。相应的,虚拟机块设备的快照创建装置14可以通过非快照同步点的子块的服务节点实现或设置于该服务节点中。虚拟机块设备的快照创建装置15可以通过作为快照同步点的子块的服务节点实现或设置于该服务节点中。下面对本申请上述各实施例能够确保虚拟机块设备快照的时间一致性的原因进行说明。本申请通过提升快照版本来判断是否完成快照的创建,具体说明如下:假设,定义读写客户端的写顺序如下:设w1_complete表示w1完成事件,即写成功;设w2_start表示w2的发起事件;若w1_complete<w2_start,则定义为w1<w2,其中,“<”表示lamport时间意义上的“先于发生”(happens-before)。定义分布式文件系统中虚拟机块设备的快照的时间一致性为如下:定义快照s为写的集合;若存在快照s的事件p同时满足:对于任意w,若w<p,则w属于快照s;对于任意w,若p<w,则w不属于快照s;则s满足时间一致性。否则,s不满足时间一致性。这里,在实际中考虑快照的时效性,设用户发起快照的事件为snapshot_start,收到快照完成消息的事件为snapshot_complete,则p还应满足snapshot_start<p<snapshot_complete的约束。本申请中,以“作为快照同步点的子块的快照版本提升为s”作为上述的事件p。换言之,如果写操作的事件w先于“作为快照同步点的子块的快照版本提升为s”发生,那么该事件w包含在快照s中,如果“作为快照同步点的子块的快照版本提升为s”先于写操作的事件w发生,那么该事件w不包含在快照s中。举个例子来说明。如果是单机程序(与分布式程序相对应),可以从系统获取一个唯一的绝对时间点(创建快照的操作发起的那一刻),然后,对于多client的多个写操作,可以根据写操作的时间点来确定某个写操作是否应该被包含在这个快照内。比如:t1时刻客户端1发起io11写操作并完成,t2时刻客户端2发起io21写操作并完成,t3时刻控制客户端(admin)发起快照的创建并完成,t4时刻客户端1发起io12写操作,t5时刻客户端2发起io22写操作,假如从绝对时间上t1<t3且t2<t3同时t3<t4且t3<t5,那么,io11和io21会被包含在快照之内,io21和io22则不被包括。对于单机程序来说,实现一个时间一致性快照很简单。但是,对于分布式文件系统,由于多个主机无法获取一个一致的绝对时间点(就算所有主机都从一个第三方的机器去获取时间,也会存在网络延时导致获取的时间点不准确的问题),t1/t2和t3、t3和t4/t5都无法直接判断时间的先后顺序,t3也不是一个单一的绝对时间点、而是变成了一个时间窗口(发起快照的事件(sanpshot_start)到快照完成的事件(snapshot_complete))。因此,对于分布式文件系统的虚拟机块设备,其快照的时间一致性需要通过上述p事件来定义。本申请中,以“预定为时间同步点的子块segmentx提升快照版本s”作为该p事件。如果io11/io21在p事件之前完成了(即t1/t2的绝对时间点是早于p事件绝对时间点的),则该快照s一定会包含io11/io12。如此,可实现分布式文件系统中虚拟机块设备快照的时间一致性,进而确保虚拟机块设备各子块与其快照的数据一致。本申请中,虚拟机块设备因切分为多个子块,每个子块可以有一个或者多个底层数据文件,因此,该虚拟机块设备不同的子块可以同时并发写io。在创建此类虚拟机块设备的分布式快照时,本申请可实现该分布式快照的时间一致性,进而确保该分布式快照与虚拟机块设备的分布式子块之间数据一致。下面对上述各实施例的示例性实现方式进行详细说明。需要说明的是,下文各实例可任意结合。并且,在实际应用中,上述各实施例还可以有其他的实现方式,下文实例中各流程、执行过程等也可以根据实际应用的需要进行调整。本示例中,以子块seg0为快照同步点。本示例中,两个读写客户端(客户端1和客户端2)同时在进行写操作的过程中为日志结构块设备创建快照的流程,如图16所示,可以包括:步骤1601~步骤1602,客户端1写s1操作,并接收子块seg1的bs1返回的ok消息,客户端1的写s1操作成功完成;步骤1603~步骤1604,客户端2写s1操作,并接收子块seg2的bs2返回的ok消息,客户端2的写s1操作成功完成;这里,写s1操作是指该写操作相关的写请求中携带快照版本信息s1。步骤1605,控制客户端(admin)向bm发起创建快照(createsnapshot)的请求;步骤1606~步骤1609,bm接收创建快照(createsnapshot)的请求,通知除子块seg0之外所有子块(包括子块seg1和子块seg2)的bs为相应子块创建快照版本信息s2的快照,这些子块所在的bs分别完成相应子块快照的创建并向bm回复ok消息;步骤1610~步骤1611,客户端1继续写s1操作,被子块seg1的bs1拒绝(因快照在进行中),同时bs1向客户端1返回特定错误码snapshot_version_mismatch(图中未示出)和最新的快照版本信息s2;步骤1612~步骤1613,客户端1向子块seg0查询快照状态,同时暂停io操作直至快照创建完成,因子块seg0尚未完成子块快照的创建而向客户端1返回旧的快照版本信息s1;步骤1614~步骤1615,bm通知子块seg0的bs0为子块seg0创建快照,子块seg0的bs0完成子块seg0快照的创建并向bm回复ok消息;至此,日志结构块设备的快照创建完成;步骤1616,bm向控制客户端返回已完成快照s2的创建(createdsnapshots2)的消息;步骤1617~步骤1618,客户端1持续向子块seg0的bs0查询子块seg0的快照状态,同时暂停io操作,bs0因子块seg0的快照创建完成而向客户端1返回新的快照版本信息s2;步骤1619~步骤1620,客户端1收到bs0返回快照版本信息s2之后,确定日志结构块设备的快照创建完成,则继续之前暂停的写操作,向子块seg1继续写s2操作,并接收子块seg2的bs2返回的ok消息,客户端2的写s2操作成功完成。这里,写s2操作是指该写操作相关的写请求中携带快照版本信息s2。需要说明的是,本实例的执行流程仅为示例性实现方式。实际应用中,可基于应用场景的不同或应用对象的不同,调整上述流程中各步骤的具体实现方式、以及各步骤的执行顺序。本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件(例如处理器)完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,例如通过集成电路来实现其相应功能,也可以采用软件功能模块的形式实现,例如通过处理器执行存储于存储器中的程序/指令来实现其相应功能。本申请不限制于任何特定形式的硬件和软件的结合。以上显示和描述了本申请的基本原理和主要特征和本申请的优点。本申请不受上述实施例的限制,上述实施例和说明书中描述的只是说明本申请的原理,在不脱离本申请精神和范围的前提下,本申请还会有各种变化和改进,这些变化和改进都落入要求保护的本申请范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1