发明内容
本申请实施例提供了一种数据加载方法、装置、计算机设备以及可读存储介质,能够解决因存储虚拟机磁盘中各个数据块的加载状态,造成内存的严重消耗的问题。该技术方案如下:
第一方面,提供了一种数据加载方法,该方法包括:
接收读请求,该读请求包括待读取数据块的块信息,该待读取数据块为待读取数据所处数据块;
确定该待读取数据块的第一状态和第二状态,该第一状态用于表示数据块的稳定状态,该第二状态用于表示数据块的暂时状态;
当该第一状态和该第二状态均为未加载状态时,将镜像服务器中存储的目标镜像数据块中的该待读取数据加载到目标虚拟机磁盘,将该待读取数据块的第二状态更新为加载中状态,该待读取数据块的块信息与该目标镜像数据块的块信息相对应;
当该待读取数据加载完成时,将该待读取数据块的第一状态更新为已加载状态,删除该待读取数据块的第二状态,输出该待读取数据。
在一种可能实现方式中,确定该待读取数据块的第一状态和第二状态包括:
根据该待读取数据块的块信息,查询第一状态位表,得到该待读取数据块的第一状态,该第一状态位表用于存储虚拟机磁盘上各个数据块的第一状态;
当该第一状态为未加载状态时,查询第二状态位表,得到该待读取数据块的第二状态,该第二状态位表用于存储虚拟机磁盘上各个数据块的第二状态。
在一种可能实现方式中,在该第一状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第一状态;
在该第二状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第二状态。
基于上述可能实现方式,采用一个比特位存储一个数据块的第一状态或者第二状态,相比使用两个比特位存储一个数据块的加载状态,降低了内存消耗。
在一种可能实现方式中,该查询第二状态位表之后,该方法还包括:
如果该第二状态位表中不包括该待读取数据块的第二状态,则在该第二状态位表中添加该待读取数据块的第二状态,将该待读取数据块的第二状态设置为加载中状态。
基于上述可能实现方式,使得第二状态位表无需存储所有数据的块的加载状态,只需存储数据块的加载中状态,且在同一时刻只有较少部分的数据块处于加载中状态所以在同一时刻第二状态位表仅储存了较少部分的数据块的加载中状态,进而降低了内存的消耗。
在一种可能实现方式中,确定该待读取数据块的第一状态和第二状态之后,该方法还包括:
当该待读取数据块的第一状态为未加载状态,且该待读取数据块的第二状态为加载中状态时,等待该待读取数据加载完成。
基于上述可能实现方式,避免了计算机设备通过多个线程同时向该镜像服务器请求读取相同的待读取数据,从而降低了镜像服务器的压力,也降低了网络带宽的浪费,从而可以提升其他数据块的读取性能。
在一种可能实现方式中,该方法还包括:
当该待读取数据块的第二状态为未加载状态时,将该第二状态更新为加载中状态,向该目标磁盘管理进程发送加锁请求,该加锁请求包括待读取数据块的块信息;
当接收到加锁成功响应时,执行上述将待读取数据加载到该目标虚拟机磁盘的过程,该加锁成功响应用于表示允许将该待读取数据加载至目标虚拟机磁盘;
当接收到加锁失败响应时,输出该待读取数据,该加锁失败响应用于表示其他读取与写入管理进程已经将该待读取数据加载到该目标虚拟机磁盘。
基于上述可能实现方式,使得待读取数据仅能被一个读取与写入管理进程加载到该目标虚拟机磁盘,从而仅有一个读取与写入管理进程向镜像服务器请求读取该待读取数据,避免了多个读取与写入管理进程同时向该镜像服务器请求读取该待读取数据,从而降低了镜像服务器的压力,也降低了网络带宽的浪费,同时也可以协调各个读取与写入管理进程,且计算机设备对待读取数据块进行加锁的耗时相对从镜像服务器中加载数据的耗时较低,所以计算机设备对数据块进行加锁对性能几乎无影响。
在一种可能实现方式中,该将镜像服务器中存储的目标镜像数据块中的该待读取数据加载到目标虚拟机磁盘,包括:
向镜像服务器发送该读请求;
接收该镜像服务器发送的该待读取数据;
基于该待读取数据块的块信息,从多个虚拟机磁盘中确定目标虚拟机磁盘;
将该待读取数据写入到该目标虚拟机磁盘中的该待读取数据块。
基于上述可能实现方式,使得读取与写入管理进程可以将镜像服务器中的镜像数据加载至目标虚拟机磁盘,从而使得虚拟机可以在虚拟机磁盘中读取到数据。
第二方面,提供了一种数据加载方法,该方法包括:
接收加锁请求,该加锁请求包括待读取数据块的块信息,该待读取数据块为待读取数据所处数据块;
确定该待读取数据块的第三状态,该第三状态用于表示数据块的暂时状态;
当该第三状态为未加载状态时,将该第三状态更新为加载中状态,向读取与写入管理进程发送加锁成功响应,该加锁成功响应用于表示允许将该待读取数据加载至目标虚拟机磁盘;
当该待读取数据加载完成时,删除该待读取数据块的第三状态,向该读取与写入管理进程发送加载成功响应,该加载成功响应用于表示该待读取数据加载完成。
在一种可能实现方式中,确定该待读取数据块的第三状态包括:
基于一致性哈希原则以及该待读取数据块的块信息,查询第三状态位表,得到该待读取数据块的第三状态,该第三状态位表用于存储虚拟机磁盘上各个数据块的第三状态。
基于上述可能实现方式,使得待读取数据仅能被一个读取与写入管理进程加载到该目标虚拟机磁盘,从而仅有一个读取与写入管理进程向镜像服务器请求读取该待读取数据,避免了多个读取与写入管理进程同时向该镜像服务器请求读取该待读取数据,从而降低了镜像服务器的压力,也降低了网络带宽的浪费,同时也可以协调各个读取与写入管理进程。
在一种可能实现方式中,在该第三状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第三状态。
基于上述可能实现方式,采用一个比特位存储一个数据块的第三状态相比使用两个比特位存储一个数据块的加载状态,降低了内存消耗。
在一种可能实现方式中,该确定该待读取数据块的第三状态之后,该方法还包括:
当该第三状态为加载中状态时,等待该待读取数据加载完成;
当该待读取数据加载完成时,向该读取与写入管理进程发送加锁失败响应,该加锁失败响应用于表示其他读取与写入管理进程已经将该待读取数据加载到该目标虚拟机磁盘。
第三方面,提供了一种数据加载方法该方法包括:
接收读请求,该读请求包括待读取数据块的块信息,该待读取数据块为待读取数据所处数据块;
确定该待读取数据块的状态,该状态用于表示数据块在虚拟机磁盘中的加载状态;
当该状态为未加载状态时,将该状态更新为加载中状态,向目标磁盘管理进程发送加锁请求,该加锁请求包括待读取数据块的块信息;
当接收到加锁成功响应时,将镜像服务器中存储的目标镜像数据块中的该待读取数据加载到目标虚拟机磁盘,该待读取数据块的块信息与该目标镜像数据块的块信息相对应,该加锁成功响应用于表示允许将该待读取数据加载至目标虚拟机磁盘;
当该待读取数据加载完成时,将该待读取数据块的状态更新为已加载状态,输出该待读取数据。
在一种可能实现方式中,该向目标磁盘管理进程发送加锁请求之后,该方法还包括:
接收加锁失败响应,该加锁失败响应用于表示其他读取与写入管理进程已经将该待读取数据加载到该目标虚拟机磁盘。
在一种可能实现方式中,将镜像服务器中存储的目标镜像数据块中的该待读取数据加载到目标虚拟机磁盘,包括:
向镜像服务器发送该读请求;
接收该镜像服务器发送的该待读取数据;
基于该待读取数据块的块信息,从多个虚拟机磁盘中确定目标虚拟机磁盘;
将该待读取数据写入到该目标虚拟机磁盘中的该待读取数据块。
第四方面,提供了一种数据加载方法,该方法包括:
接收写请求,该写请求包括待写入数据块的块信息以及待写入数据,该待写入数据块为待写入数据所处数据块;
确定该待写入数据块的第一状态和第二状态,该第一状态用于表示数据块的稳定状态,该第二状态用于表示数据块的暂时状态;
当该第一状态和该第二状态均为未加载状态时,将该待写入数据加载到目标虚拟机磁盘,将该待写入数据块的第二状态更新为加载中状态;
当该待写入数据加载完成时,将该待写入数据块的第一状态更新为已加载状态,删除该待写入数据块的第二状态,输出写成功响应。
在一种可能实现方式中,确定该待写入数据块的第一状态和第二状态包括:
根据该待写入数据块的块信息,查询第一状态位表,得到该待写入数据块的第一状态,该第一状态位表用于存储虚拟机磁盘上各个数据块的第一状态;
当该第一状态为未加载状态时,查询第二状态位表,得到该待写入数据块的第二状态,该第二状态位表用于存储虚拟机磁盘上各个数据块的第二状态。
在一种可能实现方式中,在该第一状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第一状态;
在该第二状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第二状态。
在一种可能实现方式中,查询第二状态位表之后,该方法还包括:
如果该第二状态位表中不包括该待写入数据块的第二状态,则在该第二状态位表中添加该待写入数据块的第二状态,将该待写入数据块的第二状态设置为加载中状态。
在一种可能实现方式中,确定该待写入数据块的第一状态和第二状态之后,该方法还包括:
当该待写入数据块的第一状态为未加载状态,且该待写入数据块的第二状态为加载中状态时,等待该待写入数据加载完成。
在一种可能实现方式中,确定该待写入数据块的第一状态和第二状态之后,该方法还包括:
向该目标磁盘管理进程发送第一加锁请求,该第一加锁请求包括待写入数据块的块信息;
接收第一加锁成功响应,该第一加锁成功响应用于表示允许将该待写入数据加载至目标虚拟机磁盘;
当接收到第一加锁失败响应时,输出写成功响应,该第一加锁失败响应用于表示其他读取与写入管理进程已经将该待写入数据加载到该目标虚拟机磁盘。
在一种可能实现方式中,该方法还包括:
当接收到第一加锁成功响应时,向镜像服务器发送第一读请求,该第一读请求包括待写入数据块的块信息以及该待写入数据,该待写入数据块的块信息与该目标镜像数据块的块信息相对应;
接收该镜像服务器发送的第一待写入数据,该第一待写入数据为该待写入数据块中除该待写入数据以外的数据;
基于该待写入数据块的块信息,从多个虚拟机磁盘中确定目标虚拟机磁盘;
将该待写入数据以及该第一待写入数据写入到该目标虚拟机磁盘中的该待写入数据块。
第五方面,提供了一种数据加载方法该方法包括:
接收第一加锁请求,该第一加锁请求包括待写入数据块的块信息,该待写入数据块为待写入数据所处数据块;
确定该待写入数据块的第三状态,该第三状态用于表示数据块的暂时状态;
当该第三状态为未加载状态时,将该第三状态更新为加载中状态,向读取与写入管理进程发送第一加锁成功响应,该第一加锁成功响应用于表示允许将该待写入数据加载至目标虚拟机磁盘;
当该待写入数据加载完成时,删除该待写入数据块的第三状态,向该读取与写入管理进程发送第一加载成功响应,该第一加载成功响应,用于指示该待写入数据加载完成。
在一种可能实现方式中,确定该待写入数据块的第三状态包括:
基于一致性哈希原则以及该待写入数据块的块信息,查询第三状态位表,得到该待写入数据块的第三状态,该第三状态位表用于存储虚拟机磁盘上各个数据块的第三状态。
在一种可能实现方式中,在该第三状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第三状态。
在一种可能实现方式中,确定该待写入数据块的第三状态之后,该方法还包括:
当该第三状态为加载中状态时,等待该待写入数据加载完成;
当该待写入数据加载完成时,向该读取与写入管理进程发送第一加锁失败响应,该第一加锁失败响应用于表示其他读取与写入管理进程已经将该待写入数据加载到该目标虚拟机磁盘。
第六方面,提供了一种数据加载方法,该方法包括:
接收写请求,该写请求包括待写入数据块的块信息,该待写入数据块为待写入数据所处数据块;
确定该待写入数据块的状态,该状态用于表示数据块在虚拟机磁盘中的加载状态;
当该状态为未加载状态时,将该状态更新为加载中状态,向目标磁盘管理进程发送第一加锁请求,该第一加锁请求包括待写入数据块的块信息;
当接收到第一加锁成功响应时,向虚拟机磁盘发送该写请求,该第一加锁成功响应用于表示允许将该待写入数据加载至目标虚拟机磁盘;
当该待写入数据加载完成时,将该待写入数据块的状态更新为已加载状态,输出写成功响应。
在一种可能实现方式中,该向目标磁盘管理进程发送加锁请求之后,该方法还包括:
接收第一加锁失败响应,该第一加锁失败响应用于表示其他读取与写入管理进程已经将该待写入数据加载到该目标虚拟机磁盘。
在一种可能实现方式中,该方法还包括:
当接收到第一加锁成功响应时,向镜像服务器发送第一读请求,该第一读请求包括待写入数据块的块信息以及该待写入数据,该待写入数据块的块信息与该目标镜像数据块的块信息相对应;
接收该镜像服务器发送的第一待写入数据,该第一待写入数据为该待写入数据块中除该待写入数据以外的数据;
基于该待写入数据块的块信息,从多个虚拟机磁盘中确定目标虚拟机磁盘;
将该待写入数据以及该第一待写入数据写入到该目标虚拟机磁盘中的该待写入数据块。
基于上述可能实现方式,可以将待写入数据块的所有数据加载至目标虚拟机磁盘的待写入数据块中,当该读取与写入管理进程在接收到将第一待写入数据写入该待写入数据块的写请求时,该读取与写入管理进程可以直接向虚拟机发送写成功响应,从而可以避免第一待写入数据无法写入该待写入数据块。
第七方面,提供了一种数据加载装置,用于执行上述数据加载方法。具体地,该数据存储装置包括用于执行上述第一方面或上述第一方面的任一种可选方式提供的数据加载方法的功能模块,其中,该上述方面为应用于计算机设备中的线程处理读请求时的一种数据存储方法所对应的方面。
第八方面,提供了一种数据加载装置,用于执行上述数据加载方法。具体地,该数据存储装置包括用于执行上述第二方面或上述第二方面的任一种可选方式提供的数据加载方法的功能模块,其中,该上述方面为应用于计算机设备中磁盘管理进程处理读请求时的一种数据存储方法所对应的方面。
第九方面,提供了一种数据加载装置,用于执行上述数据加载方法。具体地,该数据存储装置包括用于执行上述第三方面或上述第三方面的任一种可选方式提供的数据加载方法的功能模块,其中,该上述方面为应用于计算机设备中的读取与写入管理进程处理读请求时的一种数据存储方法所对应的方面。
第十方面,提供了一种数据加载装置,用于执行上述数据加载方法。具体地,该数据存储装置包括用于执行上述第四方面或上述第四方面的任一种可选方式提供的数据加载方法的功能模块,其中,该上述方面为应用于计算机设备中的线程处理写请求时的一种数据存储方法所对应的方面。
第十一方面,提供了一种数据加载装置,用于执行上述数据加载方法。具体地,该数据存储装置包括用于执行上述第五方面或上述第五方面的任一种可选方式提供的数据加载方法的功能模块,其中,该上述方面为应用于计算机设备中的读取与写入管理进程处理写请求时的一种数据存储方法所对应的方面。
第十二方面,提供了一种数据加载装置,用于执行上述数据加载方法。具体地,该数据存储装置包括用于执行上述第六方面或上述第六方面的任一种可选方式提供的数据加载方法的功能模块,其中,该上述方面为应用于计算机设备中的磁盘管理进程处理写请求时的一种数据存储方法所对应的方面。
第十三方面,提供一种计算机设备,该计算机设备包括处理器和存储器,该存储器中存储有至少一条指令,该指令由该处理器加载并执行以实现如上述数据加载方法所执行的操作。
第十四方面,提供一种计算机可读存储介质,该存储介质中存储有至少一条指令,该指令由处理器加载并执行以实现如上述数据加载方法所执行的操作。
本申请实施例提供的技术方案带来的有益效果是:
通过第一状态位表存储未加载和已加载数据块的第一状态,第二状态位表存储加载中数据块的第二状态,使得第二状态位表无需存储所有数据的块的加载状态,只需存储数据块的加载状态表,且在同一时刻只有较少部分的数据块处于加载中状态,所以在同一时刻第二状态位表仅储存了较少部分的数据块的加载中状态,进而降低了内存的消耗。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
图1是本申请实施例提供的一种实施环境的示意图,参见图1,该实施环境中包括至少一个虚拟机、至少一个读取与写入管理进程、至少一个磁盘管理进程、至少一个虚拟机磁盘以及镜像服务器,其中,每个虚拟机与一个读取与写入管理进程相关联,虚拟机、读取与写入管理进程、磁盘管理进程以及虚拟机磁盘可以存在于一台计算机设备内,镜像服务器可以与该计算机设备相关联。
虚拟机,是通过软件"虚拟"出来的一台计算机,虚拟的计算机和真实的计算机一样,也具有CPU、硬盘、内存、光驱、显卡以及各种扩展接口等,虚拟机在运行时需要从虚拟机磁盘中加载数据以及将待写入数据写入虚拟机磁盘,虚拟机可以通过向读取与写入管理进程下发读请求,来获取虚拟机磁盘中的数据,还可以通过向读取与写入管理进程下发写请求,将待写入数据写入虚拟机磁盘。
读取与写入管理进程可以管理多个线程,每个线程可以用于处理与该读取与写入管理进程相关联的虚拟机的读请求以及写请求,还可以用于将镜像服务器中存储的数据加载至虚拟机磁盘内。例如,该线程当前处理的请求为读请求,那么,其他读请求和写请求需要排队等待该线程处理完该请求后,才能被该线程处理。该线程也可以异步处理该线程上的读请求和写请求,例如,该线程当前处理的请求为读请求,该线程将该读请求下发下去后,该线程将不会理会该读请求的处理进度,直接处理该线程队列上的下一个请求。
镜像服务器,用于存储上述至少一个虚拟机运行时需要的数据的拷贝,可以让读取与写入管理进程中的线程读取数据,进而使得该线程可以将镜像服务器中的数据写入虚拟机磁盘中。
虚拟机磁盘,是为虚拟机提供数据的物理磁盘或虚拟磁盘,使得虚拟机通过读请求可以获得虚拟机磁盘中存储的数据,该虚拟机磁盘可以是运行虚拟机的计算机设备上所挂载的硬盘。该虚拟机磁盘可以分成多个数据块,每个数据块可用于存储一定大小的数据,例如,一个数据块大小可以是1M,也即是,该数据块存储有1M的数据。
磁盘管理进程用于管理上述虚拟机磁盘中数据块的存储情况,每个磁盘管理进程可以管理至少一个虚拟机磁盘,也即是,每个磁盘管理进程对应一个虚拟机磁盘,或者,多个虚拟机磁盘对应一个磁盘管理进程,当读取与写入管理进程向同一个虚拟机磁盘读取或者写入数据时,该磁盘管理进程用于协调各个读取与写入管理进程向同一个虚拟机磁盘读取或者写入数据。
图2是本申请实施例提供的一种计算机设备的结构示意图,计算机设备200包括可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,CPU)201和一个或一个以上的存储器202,其中,该存储器202中存储有至少一条指令,该至少一条指令由该处理器201加载并执行以实现下述各个方法实施例提供的方法。当然,该计算机设备200还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该计算机设备200还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,上述指令可由终端中的处理器执行以完成下述实施例中的数据加载方法。例如,该计算机可读存储介质可以是只读存储器(read-only memory,ROM)、随机存取存储器(randomaccess memory,RAM)、只读光盘(compact disc read-only memory,CD-ROM)、磁带、软盘和光数据存储设备等。
以上是对虚拟机的实施环境的描述,进一步地,为了体现虚拟机加载数据的过程,在此用一个具体的实施例来描述,参见图3,图3是本申请实施例提供的一种数据加载方法的流程图,本申请实施例提供的方法流程包括:
301、计算机设备向线程发送读请求,该读请求包括待读取数据块的块信息,该待读取数据块为待读取数据所处数据块。
该计算机设备上运行有至少一个虚拟机,当任一虚拟机接收到操作指令时,可以使得该计算机设备通过该虚拟机执行本步骤301,该操作指令可以由用户对该虚拟机进行操作触发的指令,例如,当用户在该虚拟机提供的操作界面上点击某个图标,以打开该图标对应的界面时,可以触发该操作行指令。
其中,该线程为与该虚拟机相关联的读取与写入管理进程中的任一线程。该读请求用于读取虚拟机磁盘上数据块内的数据,该块信息可以是数据块在虚拟机磁盘中的地址,一个虚拟机可以从多个虚拟机磁盘中加载数据,一个虚拟机磁盘中有多个数据块,每个数据块在该虚拟机磁盘中有一个地址,该地址用于表示数据块在虚拟磁盘中的存储位置。例如,有3个虚拟机磁盘分别为磁盘1、磁盘2和磁盘3,磁盘1中第一个存储位置上的地址可以设置成1001,磁盘2中第一个存储位置上的地址可以设置成2001,磁盘3中第一个存储位置上的地址可以设置成3001,磁盘3中第二个存储位置上的地址可以设置成3002,其中,本申请实施例以该待读取数据块的地址为2001来说明,那么,该计算机设备可以读取磁盘2中地址为2001的数据块内的数据。
302、根据该待读取数据块的块信息,计算机设备查询第一状态位表,得到该待读取数据块的第一状态,该第一状态位表用于存储虚拟机磁盘上各个数据块的第一状态。
该计算机设备可以通过线程来进行查询第一状态位表。该第一状态包括未加载状态以及已加载状态,用于表示数据块的稳定状态,其中,未加载状态是指该计算机设备未将镜像服务器中的镜像数据写到虚拟机磁盘对应的位置,该镜像数据为该待读取数据的拷贝,虚拟机磁盘对应的位置为该待读取数据块的块信息所指示的位置,该已加载状态是指该计算机设备已经将镜像服务器中的镜像数据写到虚拟机磁盘对应的位置机设备。在一种可能的方式中,第一状态位表可以以一个比特位来表示该虚拟机磁盘中一个数据块的第一状态,参见表1,采用0表示未加载状态,1表示已加载状态,从表1中可知,地址为1001的数据块的第一状态为已加载状态,地址为2001的数据块的第一状态为未加载状态,地址为3001的数据块的第一状态为已加载状态,地址为3002的数据块的第一状态为未加载状态,在本申请实施例中,将地址为2001的数据块作为待读取数据块。
表1
地址 |
第一状态 |
1001 |
1 |
2001 |
0 |
3001 |
1 |
3002 |
0 |
.... |
... |
303、当该第一状态为未加载状态时,该计算机设备查询第二状态位表,得到该待读取数据块的第二状态,该第二状态位表用于存储虚拟机磁盘上各个数据块的第二状态。
该计算机设备可以通过线程来执行本步骤303。第二状态用于表示数据块的暂时状态,第二状态为未完成加载的数据块的状态,该第二状态包括未加载状态和加载中状态,第二状态位表用于存储虚拟机磁盘中各个数据块的加载中状态,在一种可能的方式中,第二状态位表可以以一个比特位来表示该虚拟机磁盘中一个数据块的第二状态,当该状态位表中存储有该待读取数据块的第二状态时,该待读取数据块的状态为加载中状态,当该第二状态位表中没有存储该待读取数据块的第二状态时,该待读取数据块中的第二状态为未加载状态,该待读取数据块的地址为2001,以1表示加载中状态,参见表2,从表2中可知,地址为3002、3003以及4001的数据块的第二状态为加载状态中,且表2中没有地址为2001的数据块的第二状态,所以地址为2001的数据块的第二状态为未加载状态。
表2
地址 |
第二状态 |
3002 |
1 |
3003 |
1 |
4001 |
1 |
... |
... |
304、当该第一状态和该第二状态均为未加载状态时,该计算机设备在该第二状态位表中添加将该待读取数据块的第二状态,并将该待读取数据块的第二状态设置为加载中状态。
该计算机设备可以通过线程来执行本步骤304。具体地,仍以步骤303中的示例为例,当地址为2001的数据块的第一状态和该第二状态均为未加载状态时,则在表2中添加地址为2001数据块的第二状态,并将地址为2001的数据块的第二状态设置为加载中状态,该线程将地址为2001的数据块的第二状态添加到表2后,表2可以变成表3,从表3中可知,此时地址为2001的数据块的第二状态为加载中状态。
表3
地址 |
第二状态 |
2001 |
1 |
3002 |
1 |
3003 |
1 |
4001 |
1 |
... |
... |
305、该计算机设备将镜像服务器中存储的目标镜像数据块中的该待读取数据加载到目标虚拟机磁盘,该待读取数据块的块信息与该目标镜像数据块的块信息相对应。
该计算机设备可以通过线程来执行本步骤305,例如,本步骤305可以通过如下305A至305F所示的过程来实现:
步骤305A、该线程向镜像服务器发送该读请求。
步骤305B、基于该读请求中的待读取数据块的块信息,该镜像服务器确定该目标镜像数据块。
该镜像服务器根据待读取数据块的块信息与该目标镜像数据块的块信息的对应关系,来确定该目标镜像数据块,本申请实施例对于该对应关系不做具体限定。
需要说明的是,一个线程可以有多个待处理的请求,可以按照接收顺序来处理这多个待处理的请求,而多个待处理的请求可能相同,例如,该线程处理多个待处理请求的顺序为请求1(请求读取地址为2001的数据块中的数据)、请求2(请求读取地址为2001的数据块中的数据)、请求3(请求向地址为2002的数据块写入数据),当该线程通过异步的方式处理上述多个待处理请求时,该线程在处理请求1时,向该镜像服务器发送读取地址为2001的数据块中的数据的读请求,并在第二状态位表中添加地址为2001的数据块的第二状态,且将地址为2001的数据块的第二状态设置为加载中状态,此时,根据上述顺序,该线程开始处理请求2,那么,该线程需要再次向该镜像服务器发送该读请求,但是,该地址为2001的数据块的第二状态为加载中状态,则该线程可以不必向该镜像服务器发送该读请求,也即是,该线程暂不处理请求2,优先处理请求3,当地址为2001的数据块的第一状态为已加载状态时,该线程才处理请求2,从而可以避免该线程向同一个镜像服务器多次发送该读请求,进而可以优化该线程的处理过程,同时也降低了镜像服务器的压力,从而可以提升其他数据块的读取性能。
步骤305C、镜像服务器将向该线程发送目标镜像数据块中的该待读取数据。
步骤305D、该线程接收该镜像服务器发送的该待读取数据。
步骤305E、基于该待读取数据块的块信息,该线程从多个虚拟机磁盘中确定目标虚拟机磁盘。
仍以步骤301中的示例为例,该待读取数据块的块信息为2001,则该目标虚拟机磁盘为磁盘2。
步骤305F、该线程将该待读取数据写入到该目标虚拟机磁盘中的该待读取数据块。
具体地,计算机设备通过该线程向该目标虚拟机磁盘发送请求,该写请求中包括待读取数据块的块信息以及该待读取数据,从而使得该目标虚拟机磁盘基于该写请求,将该待读取数据写入至该待读取数据块。
需要说明是,当该待读取数据块的第一状态为未加载状态,且该待读取数据块的第二状态为加载中状态时,表明该读取与写入管理进程中的其他线程正在将该待读取数据加载至该目标虚拟机磁盘,该线程需要等待该待读取数据加载完成。具体地,参见图4所示的读取与写入管理进程内部优化示意图,在同一读取与写入管理进程中,线程0正在将该待读取数据加载至该目标虚拟机磁盘,此时,线程1接收到该读请求,那么该线程1会暂时不处理将该读请求,直至该待读取数据块的第一状态更新为已加载状态,线程1才会将该读请求发送至该目标虚拟机磁盘。避免了多个线程同时向该镜像服务器请求读取同一个数据块中的待读取数据,从而降低了镜像服务器的压力,也降低了网络带宽的浪费,同时也可以协调同一读取与写入管理进程中的各个线程。
306、该计算机设备向该线程发送加载成功响应,该加载成功响应用于表示该待读取数据加载完成。
该计算机设备可以通过目标虚拟机磁盘执行本步骤306。
307、当接收到该加载成功响应时,该计算机设备将该待读取数据块的第一状态更新为已加载状态。
该计算机设备可以通过线程执行本步骤307,具体地,仍以步骤302中的示例为例,当接收到该加载成功响应时,该线程将表1中地址为2001的数据块的第一状态由0更新为1,那么更新后的地址为2001的数据块的第一状态变成已加载状态。
308、该计算机设备删除该待读取数据块的第二状态。
该计算机设备可以通过线程执行本步骤308。通过删除加载完成的待读取数据块的第二状态,可以实现第二状态位表的动态调整,从而可以合理利用第二状态位表,降低了第二状态位表占用的内存。
309、当接收到该加载成功响应时,该计算机设备向该目标虚拟机磁盘发送该读请求。
该计算机设备可以通过线程执行本步骤309。需要说明的是,步骤307至309的执行顺序可以按照当前顺序执行,还可以先执行步骤309,再执行步骤308,再执行步骤307,也可以并行执行这三个步骤,本申请实施例对步骤307至309的执行顺序不做具体限定。
310、基于该读请求中的待读取数据块的块信息,该计算机设备向该线程发送该待读取数据。
该计算机设备可以通过目标虚拟机磁盘执行本步骤310。
311、该计算机设备将该待读取数据发送给该虚拟机。
该计算机设备可以通过线程执行本步骤311。上述步骤307至311所示过程,也即是,当该待读取数据加载完成时,将该待读取数据块的第一状态更新为已加载状态,删除该待读取数据块的第二状态,输出该待读取数据的过程。
需要说明的是,当该计算机设备在执行步骤302时,得到的待读取数据块的第一状态为已加载状态,并且确定目标虚拟机磁盘后,可以直接执行步骤309。
本申请实施例提供的方法,通过第一状态位表存储未加载和已加载数据块的第一状态,第二状态位表存储加载中数据块的第二状态,使得第二状态位表无需存储所有数据的块的加载状态,只需存储数据块的加载中状态,且在同一时刻只有较少部分的数据块处于加载中状态所以在同一时刻第二状态位表仅储存了较少部分的数据块的加载中状态,进而降低了内存的消耗。并且,通过第二状态中的加载中状态,避免了计算机设备通过多个线程同时向该镜像服务器请求读取相同的待读取数据,从而降低了镜像服务器的压力,也降低了网络带宽的浪费,从而可以提升其他数据块的读取性能,同时也可以协调同一读取与写入管理进程中的各个线程。并且,当待读取数据加载完成时,删除该待读取数据块的第二状态,从而可以动态调整第二状态位表,降低了第二状态位表占用的内存。
图3是以一个虚拟机从多个虚拟机磁盘中的目标虚拟机磁盘中读取数据为例,介绍的一种数据加载方法,在一些可能的实现方式中,多个虚拟机也可以从一个虚拟机磁盘中读取数据,在此以图5所示的实施例为例,来介绍多个虚拟机从一个虚拟机磁盘中读取相同的数据时,虚拟机进行数据加载的过程,具体描述如图5所示,图5是本申请实施例提供的一种数据加载方法的流程图,具体包括以下步骤:
501、计算机设备向读取与写入管理进程发送读请求,该读请求包括待读取数据块的块信息,该待读取数据块为待读取数据所处数据块。
该读取与写入管理进程为与虚拟机关联的管理进程,该虚拟机为接收用户操作指令的虚拟机,该计算机设备可以通过虚拟机执行本步骤501。
502、基于该待读取数据块的块信息,该计算机设备确定该待读取数据块的状态,该状态用于表示数据块在虚拟机磁盘中的加载状态。
该计算机设备可以通过读取与写入管理进程执行本步骤502。该状态可以包括未加载状态、加载中状态以及已加载状态。该读取与写入管理进程可以通过状态位表来确定该待读取数据块的状态,该状态位表存储虚拟机磁盘上各个数据块的状态,在一种可能的实现方式中,该状态位表可以用00、01、11来分别表示数据块的未加载状态、加载中状态以及已加载状态,参见表4,从表4中可知,地址为1001的数据块的状态为已加载中状态,地址为2001的数据块的状态为未加载状态,地址为3001的数据块的状态为加载中状态,地址为3002的数据块的状态为未加载状态,在本申请实施例中,将数据块2001作为待读取数据块。
表4
地址 |
状态 |
1001 |
11 |
2001 |
00 |
3001 |
01 |
3002 |
00 |
.... |
... |
需要说明的是,该读取与写入管理进程也可以通过图3中的第一状态位表以及第二位表来确定该待读取数据块的加载状态,从而进一步降低内存消耗,本申请实施例对该读取与写入管理进程确定待读取数据块的加载状态的方式不做具体限定。
503、当该状态为未加载状态时,该计算机设备将该待读取数据块的状态更新为加载中状态。
该计算机设备可以通过读取与写入管理进程执行本步骤503,具体地,仍以步骤502中的示例为例,将表4中地址为2001的数据块的状态由00更新为01,那么更新后的地址为2001的数据块的状态变成加载中状态。
504、当该状态为未加载状态时,基于一致性哈希原则以及该待读取数据块的块信息,该计算机设备确定目标磁盘管理进程。
该计算机设备可以通过读取与写入管理进程执行本步骤504。每个磁盘管理进程用于管理至少一个虚拟机磁盘,也即是,每个磁盘管理进程可以存储其管理的各个虚拟机磁盘中各个数据块的加载状态,而该目标磁盘管理进程可以存储该待读取数据块的加载状态。
在一种可能的实现方式中,参见图6,图6是本申请实施例提供的一种一致性哈希原则示意图,基于步骤502中的示例,以待读取数据块的地址为2001,2个磁盘管理进程管理3个虚拟机磁盘为例,来介绍计算机设备基于一致性哈希原则以及该待读取数据块的块信息来确定目标磁盘管理进程过程,具体过程描述如下:
2个磁盘管理进程分别为进程1和进程2,三个虚拟机磁盘分别为磁盘1、磁盘2和磁盘3,将这三个虚拟机磁盘所提供的存储空间当做一个环形存储空间,该环形存储空间可以分为2^32个缓存区,每个缓存区对应一个哈希值,也即是,一个哈希值在一个缓存区的中间位置上,在虚拟机初始化时,计算机设备可以对这三个虚拟机磁盘的身份标识号(identification,ID)进行哈希计算得到三个哈希值,分别为node1、node2和node3,则可以确定这哈希值node1、node2和node3在该环形存储空间上的位置;计算机设备还可以对进程1和进程2的ID进行哈希计算得到哈希值K1和K2,则可以确定K1和K2在该环形存储空间上的位置,在该环形存储空间的顺时针方向上,寻找距离node最近的K,并将node分配给该K,由图4可知,在该环形存储空间的顺时针方向上,K1与node2在环上的距离最短,则将node2分配给K1,K2与node1在环上的距离最短,则将node1分配给K2,K2与node3在环上的距离最短,则将node3分配给K2,也即是,node2对应的进程2上存储磁盘2上各个数据块的加载中状态,也即是,地址为2001的待读取数据块的加载中状态存储在进程2中,而node1对应的进程1上存储磁盘1和磁盘3上各个数据块的加载中状态,进而,该计算机设备根据该待读取数据块的块信息对应的虚拟机磁盘,可以从该环形存储空间上确定目标磁盘管理进程。
需要说明的是,该计算机设备在初始化时,也可以不确定虚拟机磁盘在环形存储空间上的位置,当计算机设备在接收到该读请求时,可以对该读请求中待读取数据块的块信息直接计算进行哈希运算,得到一个哈希值,例如直接对2001进行哈希运算得到哈希值S,则可以确定S在存储空间上的位置,从图4中可知,在该环形存储空间的顺时针方向上,S与K2在环上的距离最短,则K2对应的进程2上存储有地址为2001的数据块的第三状态。
505、该计算机设备该加锁请求包括待读取数据块的块信息。
该计算机设备可以通过读取与写入管理进程执行本步骤505。该加锁请求用于从该目标磁盘管理进程获取目标权限,该目标权限用于允许将该待读取数据加载至该目标虚拟机磁盘。
506、该计算机设备查询第三状态位表,得到该待读取数据块的第三状态,该第三状态位表用于存储虚拟机磁盘上各个数据块的第三状态。
该计算机设备可以通过目标磁盘管理进程执行本步骤506。第三状态用于表示数据块的暂时状态,第三状态为未完成加载的数据块的状态,第三状态可以包括未加载状态和加载中状态,该第三状态位表用于存储虚拟机磁盘内各个数据块的第三状态,当该第三状态位表中没有存储待读取数据块的第三状态时,该待读取数据块的第三状态为未加载状态,当该第三状态位表中存储待读取数据块的第三状态时,该待读取数据块的第三状态为加载中状态。该目标磁盘管理进程确定该待读取数据块的第三状态的方式,可以是如下方式:在该第三状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第三状态,参见表5,以1来表示加载中状态,由表5可知,地址为2002的数据块的第三状态为加载中状态,地址为2003的数据块的第三状态为加载中状态,而表5中没有地址为2001的数据块的第三状态,则该地址为2001的数据块的第三状态为未加载状态,也即是该待读取数据块的第三状态为未加载状态。
表5
地址 |
第三状态 |
2002 |
1 |
2003 |
1 |
... |
... |
需要说明的是,步骤503-505所示的过程,也即是基于一致性哈希原则以及所述待读取数据块的块信息,查询第三状态位表,得到所述待读取数据块的第三状态的过程。
507、当该第三状态为未加载状态时,该计算机设备在第三状态位表中添加将该待读取数据块的第三状态,并将该待读取数据块的第三状态设置为加载中状态。
该计算机设备可以通过目标磁盘管理进程来执行本步骤507。具体地,仍以步骤506中的示例为例,当地址为2001的数据块的第三状态为未加载状态时,则在表5中添加地址为2001数据块的第三状态,并将地址为2001的数据块的第三状态设置为加载中状态,该线程将地址为2001的数据块的第三状态添加到表5后,表2可以变成表6,从表6中可知,此时地址为2001的数据块的第三状态为加载中状态。
表6
508、该计算机设备向该读取与写入管理进程发送加锁成功响应,该加锁成功响应用于表示允许将该待读取数据加载至目标虚拟机磁盘。
该计算机设备可以通过目标磁盘管理进程执行本步骤508。需要说明的是,当该第三状态为加载中状态时,该目标磁盘管理进程可以等待该待读取数据加载完成;当该待读取数据加载完成时,该目标磁盘管理进程向该读取与写入管理进程发送加锁失败响应,该加锁失败响应用于表示其他读取与写入管理进程已经将该待读取数据加载到该目标虚拟机磁盘,并且当该计算机设备接收到该加锁失败响应时,该计算机设备直接将该数据块的状态更新为已加载状态。具体地,参见图7所示的虚拟机磁盘优化示意图,该目标虚拟机磁盘接收到读取与写入管理进程2发送的关于该待读取数据的加锁请求时,如果读取与写入管理进程1正在将该待读取数据加载至该目标虚拟机磁盘,那么,该目标虚拟机磁盘可以暂不响应读取与写入管理进程2,直至读取与写入管理进程1将该待读取数据加载完成时,该虚拟机磁盘向读取与写入管理进程2发送加锁失败响应,以告知读取与写入管理进程2其请求加锁的待读取数据已经被其他读取与写入管理进程加载完成,读取与写入管理进程2在接收到加锁失败响应时会状态表中的待读取数据块的状态更新为已加载状态。
509、该计算机设备将镜像服务器中存储的目标镜像数据块中的该待读取数据加载到目标虚拟机磁盘,该待读取数据块的块信息与该目标镜像数据块的块信息相对应。
该计算机设备可以通过读取与写入管理进程执行本步骤509,例如,本步骤509可以通过如下509A至509E所示的过程来实现:
步骤509A、该读取与写入管理进程向镜像服务器发送该读请求。
步骤509B、基于该读请求中的待读取数据块的块信息,该镜像服务器确定该目标镜像数据块。
步骤509C、该镜像服务器向该读取与写入管理进程发送目标镜像数据块中的该待读取数据。
步骤509D、该读取与写入管理进程接收该待读取数据。
步骤509E、该读取与写入管理进程将该待读取数据写入到该目标虚拟机磁盘中的该待读取数据块。
510、该计算机设备向该读取与写入管理进程以及目标磁盘管理进程发送加载成功响应,该加载成功响应用于表示该待读取数据加载完成。
该计算机设备可以通过目标虚拟机磁盘执行本步骤510。在一种可能的实现方式中,该目标虚拟机磁盘也可以仅向目标磁盘管理进程发送该加载成功响应,那么,目标磁盘管理进程可以将接收的该加载成功响应发送给该读取与写入管理进程。
511、当接收到该加载成功响应时,该计算机设备删除该待读取数据块的第三状态。
该计算机设备可以通过目标磁盘管理进程执行本步骤511。具体地,仍以步骤507中的示例为例,当该待读取数据加载完成时,将表6地址为2001的数据块的第三状态删除。
通过删除加载完成的待读取数据块的第三状态,可以实现第三状态位表的动态调整,从而可以合理利用第三状态位表,进而降低第三状态位表占用的内存。
512、当接收到该加载成功响应时,该计算机设备将该待读取数据块的状态更新为已加载状态。
该计算机设备可以通过读取与写入管理进程执行本步骤512,具体地,仍以步骤508中的示例为例,将表4中地址为2001的数据块的状态由01更新为11,那么,更新后的地址为2001的数据块的状态变成已加载状态。
513、该计算机设备向该目标虚拟机磁盘发送该读请求。
该计算机设备可以通过读取与写入管理进程执行本步骤513。需要说明的是,当接收到加锁失败响应时,该读取与写入管理进程也可以直接执行本步骤513。另外,步骤512至513的执行顺序可以按照当前顺序执行,也可以先执行步骤513,在执行步骤512,本申请实施例不对步骤512和513的执行顺序做具体限定。
514、基于该读请求中的待读取数据块的块信息,该计算机设备向该读取与写入管理进程发送该待读取数据。
该计算机设备可以通过目标虚拟机磁盘执行本步骤514。具体地,仍以步骤502中的示例为例,该待读取数据块为地址为2001的数据块,该目标虚拟机磁盘查找地址为2001的数据块,当查找到地址为2001的数据块时,将该数据块内的数据发送给该读取与写入管理进程。
515、该计算机设备将该待读取数据发送给该虚拟机。
该计算机设备可以通过读取与写入管理进程执行本步骤515。上述步骤512至515所示过程,也即是,当该待写入数据加载完成时,将该待写入数据块的状态更新为已加载状态,输出写成功响应的过程。本步骤515即是输出写成功响应的步骤。
需要说明的是,该计算机设备在执行步骤502时,得到的待读取数据块的状态为已加载状态,并且,确定目标虚拟机磁盘后,可以直接执行步骤513。
本申请实施例提供的方法,通过计算机设备的目标虚拟机磁盘对待读取数据块进行加锁,使得待读取数据仅能被一个读取与写入管理进程加载到该目标虚拟机磁盘,从而仅有一个读取与写入管理进程向镜像服务器请求读取该待读取数据,避免了多个读取与写入管理进程同时向该镜像服务器请求读取该待读取数据,从而降低了镜像服务器的压力,也降低了网络带宽的浪费,从而可以提升其他数据块的读取性能,同时也可以协调各个读取与写入管理进程,且计算机设备对待读取数据块进行加锁的耗时相对从镜像服务器中加载数据的耗时较低,所以计算机设备对数据块进行加锁对性能几乎无影响。另外,第三状态位表仅存储了数据块的加载中状态,而不必存储数据块的已加载状态以及未加载状态,进而降低了内存的消耗。并且,通过删除加载完成的待读取数据块的第三状态,可以实现第三状态位表的动态调整,从而可以合理利用第三状态位表,进而降低第三状态位表占用的内存。
图3是以一个虚拟机从多个虚拟机磁盘中的目标虚拟机磁盘中读取数据为例介绍的一种数据加载方法,可以协调各个同一读取与写入管理进程中的各个线程,而图5是以多个虚拟机从一个虚拟机磁盘中读取相同的数据为例介绍的一种数据加载方法,在此,将图3和图5所示的方法结合在一起,参见图8,图8是本申请实施例提供的一种数据加载方法的流程图,本申请实施例提供的方法流程包括:
801、计算机设备向读取与写入管理进程发送读请求,该读请求包括待读取数据块的块信息,该待读取数据块为待读取数据所处数据块。
该计算机设备可以通过虚拟机执行本步骤801。
802、根据该待读取数据块的块信息,该计算机设备查询第一状态位表,得到该待读取数据块的第一状态,该第一状态位表用于存储虚拟机磁盘上各个数据块的第一状态。
该计算机设备可以通过读取与写入管理进程执行本步骤802。
803、当该第一状态为未加载状态时,该计算机设备查询第二状态位表,得到该待读取数据块的第二状态,该第二状态位表用于存储虚拟机磁盘上各个数据块的第二状态。
该计算机设备可以通过读取与写入管理进程执行本步骤803,在一种可能的实现方式中,当该读取与写入管理进程在查询该第二状态位表时,该第二状态位表中可能没有存储该待读取数据块的第二状态,该读取与写入管理进程需要在该第二状态位表中加入待读取数据块的第二状态,并将该待读取数据块的第二状态设置为加载中状态,从而使得第二状态位表不必存储虚拟机磁盘上所有第一状态为未加载状态的数据块的第二状态,降低了内存消耗。
804、当该第二状态为未加载状态时,该计算机设备在该第二状态位表中添加将该待读取数据块的第二状态,并将该待读取数据块的第二状态设置为加载中状态。
该计算机设备可以通过读取与写入管理进程执行本步骤804。
805、当该第二状态为未加载状态时,基于一致性哈希原则以及该待读取数据块的块信息,该计算机设备确定目标磁盘管理进程。
该计算机设备可以通过读取与写入管理进程执行本步骤805。本步骤计算机设备确定目标磁盘管理进程所用的方式参见步骤404,本申请实施了在此对计算机设备确定目标磁盘管理进程所用的方式不做赘述。
806、该计算机设备该加锁请求包括待读取数据块的块信息。
该计算机设备可以通过读取与写入管理进程执行本步骤806。
807、该计算机设备查询第三状态位表,得到该待读取数据块的第三状态,该第三状态位表用于存储虚拟机磁盘上各个数据块的第三状态。
该计算机设备可以通过目标磁盘管理进程执行本步骤807。
808、当该第三状态为未加载状态时,该计算机设备在第三状态位表中添加将该待读取数据块的第三状态,并将该待读取数据块的第三状态设置为加载中状态。
该计算机设备可以目标磁盘管理进程执行本步骤808。
该计算机设备可以通过读取与写入管理进程执行本步骤808,需要说明是,当该待读取数据块的第一状态为未加载状态,且该待读取数据块的第二状态为加载中状态时,表明该读取与写入管理进程中的其他线程正在将该待读取数据加载至该目标虚拟机磁盘,该线程需要等待该待读取数据加载完成。例如,在同一读取与写入管理进程中,线程0正在将该待读取数据加载至该目标虚拟机磁盘,此时,线程1接收到该读请求,那么该线程1会暂时不处理将该读请求,直至该待读取数据块的第一状态更新为已加载状态,线程1才会将该读请求发送至该目标虚拟机磁盘。避免了多个线程同时向该镜像服务器请求读取该待读取数据,从而降低了镜像服务器的压力,也降低了网络带宽的浪费,同时也可以协调同一读取与写入管理进程中的各个线程。
809、该计算机设备向该读取与写入管理进程发送加锁成功响应,该加锁成功响应用于表示允许将该待读取数据加载至目标虚拟机磁盘。
该计算机设备可以通过目标磁盘管理进程执行本步骤809,需要说明是,当该第三状态为加载中状态时,该目标虚拟机磁盘等待该待读取数据加载完成;当该待读取数据加载完成时,该目标虚拟机磁盘向该读取与写入管理进程发送加锁失败响应,并且当该计算机设备接收到该加锁失败响应时,该计算机设备直接将该数据块的第一状态更新为已加载状态。
810、该计算机设备将镜像服务器中存储的目标镜像数据块中的该待读取数据加载到目标虚拟机磁盘,该待读取数据块的块信息与该目标镜像数据块的块信息相对应。
该计算机设备可以通过读取与写入管理进程执行本步骤810。
811、当该待读取数据加载完成时,该计算机设备向该读取与写入管理进程以及磁盘管理进程发送加载成功响应,该加载成功响应用于表示该待读取数据加载完成。
该计算机设备可以通过目标虚拟机磁盘执行本步骤811。在一种可能的实现方式中,该目标虚拟机磁盘也可以仅向目标磁盘管理进程发送该加载成功响应,那么,目标磁盘管理进程可以将接收的该加载成功响应发送给该读取与写入管理进程。
812、当接收到该加载成功响应时,该计算机设备删除该待读取数据块的第三状态。
该计算机设备可以通过目标磁盘管理进程执行本步骤812。通过删除加载完成的待读取数据块的第三状态,可以实现第三状态位表的动态调整,从而可以合理利用第三状态位表,进而降低第三状态位表占用的内存。
需要说明的是,当通过步骤807确定该第三状态为加载中状态时,说明此时有其他该读取与写入管理进程正在将该待读取数据加载到该目标虚拟机磁盘中,该目标虚拟机磁盘可以等待该待读取数据加载完成;当该待读取数据加载完成时,该目标虚拟机磁盘向该读取与写入管理进程发送加锁失败响应,并且当该计算机设备接收到该加锁失败响应时,该计算机设备直接将该数据块的第一状态更新为已加载状态。例如,该目标虚拟机磁盘接收到读取与写入管理进程2发送的关于该待读取数据的加锁请求时,如果读取与写入管理进程1正在将该待读取数据加载至该目标虚拟机磁盘,那么,该目标虚拟机磁盘可以暂不响应读取与写入管理进程2,直至读取与写入管理进程1将该待读取数据加载完成时,该虚拟机磁盘向读取与写入管理进程2发送加锁失败响应,以告知读取与写入管理进程2其请求加锁的待读取数据已经被其他读取与写入管理进程加载完成,读取与写入管理进程2在接收到加锁失败响应时会第一状态表中的待读取数据块的状态更新为已加载状态。
813、当接收到该加载成功响应时,该计算机设备将该待读取数据块的第一状态更新为已加载状态。
该计算机设备可以通过读取与写入管理进程执行本步骤813。
814、该计算机设备删除该待读取数据块的第二状态。
该计算机设备可以通过读取与写入管理进程执行本步骤814。通过删除加载完成的待读取数据块的第二状态,可以实现第二状态位表的动态调整,从而可以合理利用第二状态位表,进而降低第二状态位表占用的内存。
815、该计算机设备向该目标虚拟机磁盘发送该读请求。
该计算机设备可以通过读取与写入管理进程执行本步骤815。需要说明的是,步骤813至815可以是按照当前顺序执行,可以先执行步骤815,再执行步骤814,在执行步骤813,也可以同时执行这三个步骤,本申请实施例对步骤813至815的执行顺序不做具体限定。
816、基于该读请求中的待读取数据块的块信息,该计算机设备向该读取与写入管理进程发送该待读取数据。
该计算机设备可以通过目标虚拟机磁盘执行本步骤816。
817、该计算机设备将该待读取数据发送给该虚拟机。
该计算机设备可以通过读取与写入管理进程执行本步骤817,需要说明的是,该读取与写入管理进程在执行步骤802时,得到的待读取数据块的状态为已加载状态,并且确定目标虚拟机磁盘后,可以直接执行步骤815。
为了进一步体现本申请实施例的过程,参见图9,图9是本申请实施例提供的一种精细化位表控制的数据加载示意图,该精细化位表即是第一状态位表和第二状态位表,在图9中主要包括三个部分,第一部分计算机设备通过读取与写入管理进程下发读请求,第二部分为镜像服务器向读取与写入管理进程发送待读取数据,第三部分是虚拟机磁盘加载待读取数据,其中,读取与写入管理进程、虚拟机磁盘以及镜像服务器之间的交互,使用图8中的步骤来体现。
本申请实施例提供的方法,通过计算机设备的目标虚拟机磁盘对待读取数据块进行加锁,使得待读取数据仅能被一个读取与写入管理进程加载到该目标虚拟机磁盘,从而仅有一个读取与写入管理进程向镜像服务器请求读取该待读取数据,避免了多个读取与写入管理进程同时向该镜像服务器请求读取该待读取数据,从而降低了镜像服务器的压力,也降低了网络带宽的浪费,同时也可以协调各个读取与写入管理进程,且计算机设备对待读取数据块进行加锁的耗时相对从镜像服务器中的耗时较低,所以计算机设备对数据块进行加锁对性能几乎无影响。并且,通过第一状态位表、第二状态位表以及第三状态位表来存储多个虚拟机磁盘中数据块的状态,并根据各个待读取数据块的第一状态、第二状态以及第三状态来协调读取与写入管理进程内部以及各个读取与写入管理进程之间来处理同一个读请求。并且,当待读取数据加载完成时,删除该待读取数据块的第二状态和第三状态,从而可以动态调整第二状态位表和第三状态位表,可以合理利用第二状态位表和第三状态位表,降低了第二状态位表和第三状态位表占用的内存。
虚拟机在运行时不仅需要读取虚拟机磁盘中的数据,还需要将数据写入虚拟机磁盘,在此,以图10所示的实施例为例,来介绍虚拟机向虚拟机磁盘写入数据时,虚拟机进行数据加载的过程,具体描述如图10所示,图10是本申请实施例提供的一种数据加载方法的流程图,具体包括以下步骤:
1001、计算机设备向线程发送写请求,该写请求包括待写入数据块的块信息,该待写入数据块为待写入数据所处数据块。
该计算机设备上运行有至少一个虚拟机,当任一虚拟机接收到操作指令时,可以使得计算机设备通过虚拟机执行本步骤1001,该操作指令可以由用户对该虚拟机进行操作来触发,例如,当用户在该虚拟机提供的操作界面上点击上传文件时,可以触发该操作指令,该写请求用于将该虚拟机提供的待写入数据写入虚拟机磁盘。
该线程为与该虚拟机相关联的读取与写入管理进程中的任一线程。该待写入数据为该待写入数据块内的全部数据,该待写入数据还可以是该待写入数据块内的部分数据,本申请实施例以该待写入数据为该待写入数据块内的全部数据进行介绍。
1002、根据该待写入数据块的块信息,该计算机设备查询第一状态位表,得到该待写入数据块的第一状态,该第一状态位表用于存储虚拟机磁盘上各个数据块的第一状态。
该计算机设备可以通过线程执行本步骤1002。
1003、当该第一状态为未加载状态时,该计算机设备查询第二状态位表,得到该待写入数据块的第二状态,该第二状态位表用于存储虚拟机磁盘上各个数据块的第二状态。
该计算机设备可以通过线程执行本步骤1003,在一种可能的实现方式中,当该线程在查询该第二状态位表时,该第二状态位表中可能没有存储待写入数据块的第二状态,该线程需要在该第二状态位表中添加该待写入数据块的第二状态,并将该待写入数据块的第二状态设置为加载中状态,从而使得第二状态位表不必存储虚拟机磁盘上所有第一状态为未加载状态的数据块的第二状态,降低了内存消耗。
1004、当该第一状态和该第二状态均为未加载状态时,该计算机设备在该第二状态位表中添加该待写入数据块的第二状态,并将该待写入数据块的第二状态设置为加载中状态。
该计算机设备可以通过线程执行本步骤1004。
1005、该计算机设备向该目标虚拟机磁盘发送该写请求。
该计算机设备可以通过线程执行本步骤1005,在一种可能的实现方式中,当该待写入数据块的第一状态为未加载状态,且该待写入数据块的第二状态为加载中状态时,表明该读取与写入管理进程中的其他线程正在将该待写入数据加载至该目标虚拟机磁盘,该线程需要等待该待写入数据加载完成。例如,在同一读取与写入管理进程中,线程0正在将该待写入数据加载至该目标虚拟机磁盘,此时,线程1接收到该写请求,那么该线程1会暂时不处理将该写请求,直至该待写入数据块的第一状态更新为已加载状态,线程1才会将该写请求发送至该目标虚拟机磁盘。避免了多个线程同时向该镜像服务器请求写入同一个数据块中的待写入数据,从而降低了镜像服务器的压力,也降低了网络带宽的浪费,同时也可以协调同一读取与写入管理进程中的各个线程。
并且,一个线程的可以有多个待处理的请求,可以按照接收顺序来处理该待处理的请求,而多个待处理的请求可能相同,例如,该线程处理多个待处理请求的顺序为请求1(请求向地址为2001数据块写入数据)、请求2(请求向地址为2001的数据块写入数据)、请求3(请求读取地址为2002的数据块中的数据),当该线程通过异步的方式处理上述多个待处理请求时,该线程在处理请求1时,向目标虚拟机磁盘发送关于将数据写入地址为2001的数据块的写请求,并在第二状态位表中添加地址为2001的数据块的第二状态,且将地址为2001的数据块的第二状态设置为加载中状态,此时,根据上述顺序该线程开始处理请求2,那么,该线程需要再次向该目标虚拟机磁盘发送该写请求,但是,该地址为2001的数据块的第二状态为加载中状态,则该线程可以不必向该目标虚拟机磁盘发送该写请求,也即是,该线程暂不处理请求2,优先处理请求3,当该地址为2001的数据块的第一状态为已加载状态时,该线程才处理请求2,从而可以避免该线程向该目标虚拟机磁盘多次下发同一个写请求,进而可以优化该线程的处理过程,同时进一步降低了目标虚拟机磁盘的压力,从而可以提升其他数据块的写入性能。
1006、当接收到该写请求后,该计算机设备将该待写入数据加载到目标虚拟机磁盘。
该计算机设备可以通过目标虚拟机磁盘执行本步骤1006。
1007、该计算机设备向该线程发送第一加载成功响应,该第一加载成功响应用于表示该待写入数据加载完成。
该计算机设备可以通过目标虚拟机磁盘执行本步骤1007。
1008、当接收到该第一加载成功响应时,该计算机设备将该待写入数据块的第一状态更新为已加载状态。
该计算机设备可以通过线程执行本步骤1008。
1009、该计算机设备删除该待写入数据块的第二状态。
该计算机设备可以通过线程执行本步骤1009。通过删除加载完成的待写入数据块的第二状态,可以实现第二状态位表的动态调整,从而可以合理利用第二状态位表,进而降低第二状态位表占用的内存。
1010、该计算机设备向该虚拟机输出写成功响应。
该计算机设备可以通过线程执行本步骤1010。该写成功响应用于告知该待写入数据已经写入目标虚拟机磁盘。
需要说明的是,当该计算机设备在执行步骤1002时,得到的待写入数据块的第一状态为已加载状态,并且确定目标虚拟机磁盘后,可以直接执行步骤1009。并且,需要说明的是,步骤1008至1010按照当前顺序执行,可以先执行步骤1010,再执行步骤1009,再执行步骤1008,也可以同时执行这三个步骤,本申请实施例对步骤1008至1010的执行顺序不做具体限定。
本申请实施例提供的方法,通过第一状态位表存储未加载和已加载数据块的第一状态,第二状态位表存储未加载和加载中数据块的第二状态,使得第二状态位表无需存储所有数据的块的加载状态,只需存储数据块的加载中状态,且在同一时刻只有较少部分的数据块处于加载中状态所以在同一时刻第二状态位表仅储存了较少部分的数据块的加载中状态,进而降低了内存的消耗。并且,通过第二状态的加载中状态,避免了计算机设备通过多个线程同时向该目标虚拟机磁盘请求将该待写入数据写入到待写入数据块,从而降低了目标虚拟机磁盘的压力,也降低了网络带宽的浪费,从而可以提升其他数据块的写入性能,同时也可以协调各个线程。并且,当待写入数据加载完成时,删除该待写入数据块的第二状态,从而可以动态调整第二状态位表,降低了第二状态位表占用的内存。
图10是以一个虚拟机向多个虚拟机磁盘中的目标虚拟机磁盘写入数据为例介绍的一种数据加载方法,在一些可能的实现方式中,多个虚拟机也可以向一个虚拟机磁盘写入数据,在此以图11所示的实施例为例,来介绍多个虚拟机访问一个虚拟机磁盘写入相同的数据时,虚拟机将待写入数据写入目标虚拟磁盘过程,具体描述如图11所示,图11是本申请实施例提供的一种数据加载方法的流程图,具体包括以下步骤:
1101、计算机设备向读取与写入管理进程发送写请求,该写请求包括待写入数据块的块信息以及待写入数据,该待写入取数据块为待写入数据所处数据块。
该计算机设备可以通过虚拟机执行本步骤1101,该读取与写入管理进程为与该虚拟机关联的管理进程。该待写入数据为该待写入数据块内的全部数据。
1102、基于该待写入数据块的块信息,该计算机设备确定该待写入数据块的状态,该状态用于表示数据块在虚拟机磁盘中的加载状态。
该计算机设备可以通过读取与写入管理进程执行本步骤1102。
1103、当该状态为未加载状态时,该计算机设备将该待写入数据块的状态更新为加载中状态。
该计算机设备可以通过读取与写入管理进程执行本步骤1103。
1104、当该状态为未加载状态时,基于一致性哈希原则以及该待写入数据块的块信息,该计算机设备确定目标磁盘管理进程。
该计算机设备可以通过读取与写入管理进程执行本步骤1104。该计算设备确定目标磁盘管理进程的方式,与步骤504中计算机设备确定目标磁盘管理进程的方式同理,本申请实施了对于该计算设备确定目标磁盘管理进程的方式在此不做赘述。
1105、该计算机设备向目标磁盘管理进程发送加第一锁请求,该第一加锁请求包括待写入数据块的块信息。
该计算机设备可以通过读取与写入管理进程执行本步骤1105。该加锁请求用于从该目标虚拟机磁盘获取目标权限,该目标权限用于允许将该待写入数据加载至该目标虚拟机磁盘。
1106、该计算机设备查询第三状态位表,得到该待写入数据块的第三状态,该第三状态位表用于存储虚拟机磁盘上各个数据块的第三状态。
该计算机设备可以通过目标虚拟机磁盘执行本步骤1106。
1107、当该第三状态为未加载状态时,该计算机设备在第三状态位表中添加将该待写入数据块的第三状态,并将该待写入数据块的第三状态设置为加载中状态。
该计算机设备可以通过目标磁盘管理进程执行本步骤1107。
1108、该计算机设备向该读取与写入管理进程发送第一加锁成功响应,该第一加锁成功响应用于表示允许将该待写入数据加载至目标虚拟机磁盘。
该计算机设备可以通过目标磁盘管理进程执行本步骤1108。需要说明的是,当该第三状态为加载中状态时,该目标虚拟机磁盘需要等待该待写入数据加载完成,当该待写入数据加载完成时,目标虚拟机磁盘才向该读取与写入管理进程发送第一加锁失败响应,该第一加锁失败响应用于表示其他读取与写入管理进程已经将该待写入数据加载到该目标虚拟机磁盘,并且当该计算机设备接收到该加锁失败响应时,该计算机设备直接将该数据块的状态更新为已加载状态。例如,该目标虚拟机磁盘接收到读取与写入管理进程2发送的关于该待写入数据的加锁请求时,发现读取与写入管理进程1正在将该待写入数据加载至该目标虚拟机磁盘,那么,该目标虚拟机磁盘将暂不响应读取与写入管理进程2,直至读取与写入管理进程1将该待写入数据加载完成时,该虚拟机磁盘向读取与写入管理进程2发送加锁失败响应,以告知读取与写入管理进程2其请求加锁的待写入数据已经被其他读取与写入管理进程加载完成,读取与写入管理进程2在接收到加锁失败响应时会状态表中的待写入数据块的状态更新为已加载状态。
1109、该计算机设备向该目标虚拟机磁盘发送该写请求。
该计算机设备可以通过读取与写入管理进程执行本步骤1109。
1110、该计算机设备将该待写入数据加载到该目标虚拟机磁盘中的该待写入数据块。
该计算机设备可以通过目标虚拟机磁盘执行本步骤1110。
1111、该计算机设备向该读取与写入管理进程以及目标磁盘管理进程发送第一加载成功响应,该第一加载成功响应用于指示该待写入数据加载完成。
该计算机设备可以通过目标虚拟机磁盘执行本步骤1111。在一种可能的实现方式中,该目标虚拟机磁盘也可以仅向目标磁盘管理进程发送该第一加载成功响应,那么,目标磁盘管理进程可以将接收的该第一加载成功响应发送给该读取与写入管理进程。
1112、当接收到该第一加载成功响应时,该计算机设备删除该待写入数据块的第三状态。
该计算机设备可以通过目标虚拟机磁盘执行本步骤1112。通过删除加载完成的待写入数据块的第三状态,可以实现第三状态位表的动态调整,从而可以合理利用第三状态位表,进而降低第三状态位表占用的内存。
1113、当接收到该第一加载成功响应时,该计算机设备将该待写入数据块的状态更新为已加载状态。
该计算机设备可以通过读取与写入管理进程执行本步骤1113。需要说明的是,当接收到第一加锁失败响应时,该读取与写入管理进程可以直接执行步骤1114。
1114、该计算机设备向该虚拟机输出写成功响应。
该计算机设备可以通过读取与写入管理进程执行本步骤1114,需要说明的是,计算机设备在执行步骤1102时,得到的待写入数据块的状态为已加载状态,并且确定目标虚拟机磁盘后,可以直接执行步骤1114。
本申请实施例提供的方法,通过计算机设备中的目标虚拟机磁盘对待写入数据进行加锁,使得待写入数据仅能被一个读取与写入管理进程加载到该目标虚拟机磁盘,从而仅有一个读取与写入管理进程向目标虚拟机服务器写入该待写入数据,避免了多个读取与写入管理进程向该目标虚拟机服务器写入该待写入数据,从而避免了该待写入数据在目标虚拟机磁盘中的冗余,从而降低了目标虚拟机磁盘的压力,也降低了网络带宽的浪费,从而可以提升其他数据块的写入性能,同时也可以协调各个读取与写入管理进程。另外,第三状态位表仅存储数据块的加载中状态和未加载状态,而不必存储数据块的已加载状态,进而降低了内存的消耗。并且,通过删除加载完成的待写入数据块的第三状态,可以实现第三状态位表的动态调整,从而可以合理利用第三状态位表,进而降低第三状态位表占用的内存。
图10是以一个虚拟机向多个虚拟机磁盘中的目标虚拟机磁盘写入数据为例介绍的一种数据加载方法,可以协调各个同一读取与写入管理进程中的各个线程,而图11是以多个虚拟机向一个虚拟机磁盘写入相同的数据为例介绍的一种数据加载方法,在此,将图10和图11结合在一起,参见图12,图12是本申请实施例提供的一种数据加载方法的流程图,本申请实施例提供的方法流程包括:
1201、计算机设备向读取与写入管理进程发送写请求,该写请求包括待写入数据块的块信息,该待写入数据块为待写入数据所处数据块。
该计算机设备可以通过虚拟机执行本步骤1201,该待写入数据为该待写入数据块内的全部数据。
1202、根据该待写入数据块的块信息,该读取与写入管理进程查询第一状态位表,得到该待写入数据块的第一状态,该第一状态位表用于存储虚拟机磁盘上各个数据块的第一状态。
该计算机设备可以通过读取与写入管理进程执行本步骤1202。
1203、当该第一状态为未加载状态时,该计算机设备查询第二状态位表,得到该待写入数据块的第二状态,该第二状态位表用于存储虚拟机磁盘上各个数据块的第二状态。
该计算机设备可以通过读取与写入管理进程执行本步骤1203,在一种可能的实现方式中,当该读取与写入管理进程在查询该第二状态位表时,该第二状态位表中可能没有存储该待写入数据块的第二状态,该读取与写入管理进程需要在该第二状态位表中加入该存储待写入数据块的第二状态,并将该待写入数据块的第二状态为加载中状态,从而使得第二状态位表不必存储虚拟机磁盘上所有第一状态为未加载状态的数据块的第二状态,降低了内存消耗。
1204、当该第二状态为未加载状态时,该计算机设备在该第二状态位表中添加将该待写入数据块的第二状态,并将该待写入数据块的第二状态设置为加载中状态。
该计算机设备可以通过读取与写入管理进程执行本步骤1204。需要说明的是,本步骤1204中确定目标虚拟机磁盘所用的方法和步骤303中的示例确定第二状态位表所用的方法同理,本申请实施例在此不做赘述。
另外,当该待写入数据块的第一状态为未加载状态,且该待写入数据块的第二状态为加载中状态时,表明该读取与写入管理进程中的其他线程正在将该待写入数据加载至该目标虚拟机磁盘,该线程需要等待该待写入数据加载完成。例如,在同一读取与写入管理进程中,线程0正在将该待写入数据加载至该目标虚拟机磁盘,此时,线程1接收到该写请求,那么该线程1会暂时不处理将该读请求,直至该待写入数据块的第一状态更新为已加载状态,线程1才会将该写请求发送至该目标虚拟机磁盘。避免了多个线程同时向该目标虚拟机磁盘请求写入同一个数据块中的待写入数据,从而降低了目标虚拟机磁盘的压力,也降低了网络带宽的浪费,同时也可以协调同一读取与写入管理进程中的各个线程。
1205、当该第二状态为未加载状态时,基于一致性哈希原则以及该待写入数据块的块信息,该计算机设备确定目标磁盘管理进程。
该计算机设备可以通过读取与写入管理进程执行本步骤1205。
1206、该计算机状态向该目标虚拟机磁盘发送第一加锁请求,该第一加锁请求包括待写入数据块的块信息。
该计算机设备可以通过读取与写入管理进程执行本步骤1206。
1207、该计算机设备查询第三状态位表,得到该待写入数据块的第三状态,该第三状态位表用于存储虚拟机磁盘上各个数据块的第三状态。
该计算机设备可以通过目标磁盘管理进程执行本步骤1207。
1208、当该第三状态为未加载状态时,该计算机设备在第三状态位表中添加将该待写入数据块的第三状态,并将该待写入数据块的第三状态设置为加载中状态。
该计算机设备可以通过目标磁盘管理进程执行本步骤1208。
1209、该计算机设备向该读取与写入管理进程发送第一加锁成功响应,该第一加锁成功响应用于表示允许将该待写入数据加载至目标虚拟机磁盘。
该计算机设备可以通过目标磁盘管理进程执行本步骤1209。需要说明时,当该第三状态为加载中状态时,该目标虚拟机磁盘等待该待写入数据加载完成;当该待写入数据加载完成时,该目标虚拟机磁盘向该读取与写入管理进程发送第一加锁失败响应,该第一加锁失败响应用于表示其他读取与写入管理进程已经将该待写入数据加载到该目标虚拟机磁盘并且当该计算机设备接收到该加锁失败响应时,该计算机设备直接将该数据块的第二状态更新为已加载状态。
1210、该计算机设备向该目标虚拟机磁盘发送该写请求。
该计算机设备可以通过读取与写入管理进程执行本步骤1210。
1211、该计算机设备将该待写入数据加载到该目标虚拟机磁盘中的该待写入数据块。
该计算机设备可以通过目标虚拟机磁盘执行本步骤1211。
1212、该计算机设备向该读取与写入管理进程以及发送目标虚拟机磁盘第一加载成功响应,该第一加载成功响应用于指示该待写入数据加载完成。
该计算机设备可以通过目标虚拟机磁盘执行本步骤1212。在一种可能的实现方式中,该目标虚拟机磁盘也可以仅向目标磁盘管理进程发送该第一加载成功响应,那么,目标磁盘管理进程可以将接收的该第一加载成功响应发送给该读取与写入管理进程。
1213、当接收到该第一加载成功响应时,该计算机设备删除该待写入数据块的第三状态。
该计算机设备可以通过目标虚拟机磁盘执行本步骤1213。通过删除加载完成的待写入数据块的第三状态,可以实现第三状态位表的动态调整,从而可以合理利用第三状态位表,进而降低了第三状态位表占用的内存。
1214、当接收到该第一加载成功响应时,该计算机设备将该待写入数据块的第一状态更新为已加载状态。
该计算机设备可以通过读取与写入管理进程执行本步骤1214。
1215、该计算机设备删除该待写入数据块的第二状态。
该计算机设备可以通过读取与写入管理进程执行本步骤1215。通过删除加载完成的待写入数据块的第二状态,可以实现第二状态位表的动态调整,从而可以合理利用第二状态位表,进而降低第二状态位表占用的内存。
1216、该计算机设备向该虚拟机输出写成功响应。
该计算机设备可以通过读取与写入管理进程执行本步骤1216。需要说明的是,该读取与写入管理进程在执行步骤1202时,得到该待写入数据块的状态为已加载状态,可以直接执行步骤1216。并且,步骤1214至1216可以按照当前顺序执行,可以先执行步骤1216,再执行步骤1215,再执行步骤1216,也可以同时执行这三个步骤,本申请实施例对步骤1214至1216的执行顺序不做具体限定。
本申请实施例提供的方法,通过计算机设备的目标虚拟机磁盘对待写入数据块进行加锁,使得待写入数据仅能被一个读取与写入管理进程加载到该目标虚拟机磁盘,从而仅有一个读取与写入管理进程向该目标虚拟机磁盘请求写入该待写入数据,避免了多个读取与写入管理进程同时向该目标虚拟机磁盘请求写入该待写入数据,从而降低了该目标虚拟机磁盘的压力,也降低了网络带宽的浪费,同时也可以协调各个读取与写入管理进程。并且,通过在第一状态位表、第二状态位表以及第三状态位表来存储多个虚拟机磁盘中数据块的状态,并根据各个待写入数据块的第一状态、第二状态以及第三状态来协调读取与写入管理进程内部以及各个读取与写入管理进程之间来处理同一个写请求。并且,当待写入数据加载完成时,删除该待写入数据块的第二状态,从而可以动态调整第二状态位表。并且,通过删除加载完成的待写入数据块的第三状态,可以实现第三状态位表的动态调整,从而可以合理利用第三状态位表,进而降低第三状态位表占用的内存。
图10至图12中的待写入数据为待写入数据块内的全部数据,而在一种可能的实施例中,待写入数据可以为待写入数据块内的部分数据,当该待写入数据块没有加载至目标虚拟机磁盘时,读取与写入管理进程还需要从镜像服务器中读取该待写入数据块的其他数据,以便该读取与写入管理进程可以将待写入数据以及该待写入数据块的其他数据一起加载至目标虚拟机磁盘,参见图13,图13是本申请实施例提供的一种数据加载方法的流程图,本申请实施例提供的方法流程包括:
1301、当该待写入数据块没有加载至目标虚拟机磁盘时,计算机设备向镜像服务器发送第一读请求,该第一读请求包括待写入数据以及待写入数据块的块信息,该待写入数据块为待写入数据所处数据块。
该计算机设备可以通过读取与写入管理进程执行本步骤1301。需要说明的是,此时该待写入数据为待写入数据块中的部分数据,虚拟机向读取与写入管理进程发送写请求,当读取与写入管理进程根据该写请求确定该待写入数据块的状态为未加载状态时,读取与写入管理进程需要执行本步骤1301。
1302、基于该写请求中的该待写入数据以及待写入数据块的块信息,该镜像服务器确定第一待写入数据,该第一待写入数据为该待写入数据块中除该待写入数据以外的数据。
其中,该待写入数据块的块信息与该镜像服务器中的目标镜像数据块的块信息相对应,从而该镜像服务器可以确定目标镜像数据块,根据该待写入数据以及该目标镜像数据块中的数据,该镜像服务器将该目标镜像数据块中除该待写入数据以外的数据作为第一待写入数据。
1303、该镜像服务器向该读取与写入管理进程发送该第一待写入数据。
1304、该计算机设备向该目标虚拟机磁盘发送第一写请求,该第一写请求包括第一待写入数据、待写入数据以及待写入数据块的块信息。
该计算机设备可以通过读取与写入管理进程执行本步骤1304。
1305、该计算机设备将该待写入数据以及该第一待写入数据写入到该目标虚拟机磁盘中的该待写入数据块。
该计算机设备可以通过目标虚拟机磁盘执行本步骤1305。需要说明的是,当该待写入数据块内写入全部数据时,该目标虚拟机磁盘向该读取与写入管理进程发送第一加载成功响应,用于告知该读取与写入管理进程该写请求已经完成。另外,当读取与写入管理进程在处理读请求时,待写入数据也可能是待写入数据块的部分数据,当该待写入数据没有被加载到虚拟机磁盘时,读取与写入管理进程也需要将待写入数据块其余数据加载至目标虚拟机磁盘。
如果该读取与写入管理进程仅将该待写入数据写入该待写入数据块,而没有将第一待写入数据写入该待写入数据块,就将该待写入数据块的状态更新为已加载状态,当该读取与写入管理进程在接收到将第一待写入数据写入该待写入数据块的写请求时,由于该待写入数据块已经为已加载状态,所以,该第一待写入数据无法写入该待写入数据块。而本申请实施例提供的方法,可以将待写入数据块的所有数据加载至目标虚拟机磁盘的待写入数据块中,当该读取与写入管理进程在接收到将第一待写入数据写入该待写入数据块的写请求时,该读取与写入管理进程可以直接向虚拟机发送写成功响应,从而可以避免第一待写入数据无法写入该待写入数据块。
图14是本申请实施例提供的一种数据加载装置的结构装置图,该装置包括接收模块1401、确定模块1402、加载模块1403以及输出模块1404。
接收模块1401,用于执行上述步骤301;
确定模块1402,用于执行上述步骤302-303;
加载模块1403,用于执行上述步骤304-305;
输出模块1404,用于执行上述步骤307-309。
可选地,确定模块1402用于执行上述步骤302-303:
可选地,在该第一状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第一状态,参见步骤302;
在该第二状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第二状态,参见步骤303。
可选地,该查询第二状态位表之后,该装置还包括:
添加模块,用于执行上述步骤304。
可选地,该确定该待读取数据块的第一状态和第二状态之后,该装置还包括:
等待模块,用于执行上述步骤305。
可选地,该装置还包括:
发送模块,用于执行上述步骤505;
执行模块,当接收到加锁成功响应时,用于执行上述步骤509;
输出模块1404,当接收到加锁失败响应时,还用于执行上述步骤515。
可选地,该加载模块1403,用于执行步骤305A-305F:
图15是本申请实施例提供的一种数据加载装置的结构装置图,该装置包括接收模块1501、确定模块1502、第一发送1503以及第二发送模块1504。
该接收模块1501,用于接收加锁请求,该加锁请求包括待读取数据块的块信息,所述待读取数据块为待读取数据所处数据块;
确定模块1502,用于执行与步骤805-807;
第一发送模块1503,用于执行与步骤808-809;
第二发送模块1504,用于执行与步骤812-813。
可选地,确定模块1502,用于执行与步骤805。
可选地,在该第三状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第三状态,参见步骤807。
可选地,该确定该待读取数据块的第三状态之后,该装置还包括:
等待模块,用于当该第三状态为加载中状态时,等待该待读取数据加载完成;
第一发送模块1503,还用于当该待读取数据加载完成时,向该读取与写入管理进程发送加锁失败响应,该加锁失败响应用于表示其他读取与写入管理进程已经将该待读取数据加载到该目标虚拟机磁盘。
图16是本申请实施例提供的一种数据加载装置的结构装置图,该装置包括接收模块1601、确定模块1602、发送模块1603、加载模块1604以及输出模块1605。
接收模块1601,用于执行接收读请求,该读请求包括待读取数据块的块信息,该待读取数据块为待读取数据所处数据块;
确定模块1602,用于执行与步骤502;
发送模块1603,用于执行与步骤503和505;
加载模块1604,用于执行与步骤509;
输出模块1605,用于执行与步骤512和515。
可选地,该向目标磁盘管理进程发送加锁请求之后,接收模块,还用于执行接收加锁失败响应,该加锁失败响应用于表示其他读取与写入管理进程已经将该待读取数据加载到该目标虚拟机磁盘。
可选地,加载模块1604,用于执行与步骤509A-509E。
图17是本申请实施例提供的一种数据加载装置的结构装置图,该装置包括接收模块1701、确定模块1702、加载模块1703以及输出模块1704。
接收模块1701,用于执行接收写请求,该写请求包括待写入数据块的块信息以及待写入数据,该待写入数据块为待写入数据所处数据块;
确定模块1702,用于执行与步骤1002-1003;
加载模块1703,用于执行与步骤1005-1006;
输出模块1704,用于执行与步骤1008-1010。
可选地,该确定模块1702用于执行:
根据该待写入数据块的块信息,查询第一状态位表,得到该待写入数据块的第一状态,该第一状态位表用于存储虚拟机磁盘上各个数据块的第一状态,参见步骤1002;
当该第一状态为未加载状态时,查询第二状态位表,得到该待写入数据块的第二状态,该第二状态位表用于存储虚拟机磁盘上各个数据块的第二状态,参见步骤1003。
可选地,在该第一状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第一状态,参见步骤1002;
在该第二状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第二状态,参见步骤1003。
可选地,该查询第二状态位表之后,该装置还包括添加模块,用于执行与步骤1004。
可选地,该确定该待写入数据块的第一状态和第二状态之后,该装置还包括:
等待模块,用于当该待写入数据块的第一状态为未加载状态,且该待写入数据块的第二状态为加载中状态时,等待该待写入数据加载完成。
可选地,该确定该待写入数据块的第一状态和第二状态之后,该装置还包括:
发送模块,用于执行上述步骤1206;
接收模块1701模块,还用于接收第一加锁成功响应,该第一加锁成功响应用于表示允许将该待写入数据加载至目标虚拟机磁盘;
输出模块1704,还用于当接收到第一加锁失败响应时,输出写成功响应,该第一加锁失败响应用于表示其他读取与写入管理进程已经将该待写入数据加载到该目标虚拟机磁盘。
可选地,发送模块,还用于执行上述步骤1301;
接收模块1701,还用于执行接收该镜像服务器发送的第一待写入数据,该第一待写入数据为该待写入数据块中除该待写入数据以外的数据;
确定模块1702,还用于基于该待写入数据块的块信息,从多个虚拟机磁盘中确定目标虚拟机磁盘;
该装置还包括:
写入模块,执行上述步骤1305。
图18是本申请实施例提供的一种数据加载装置的结构装置图,该装置包括接收模块1801、确定模块1802、第一发送模块1803以及第二发送模块1804。
接收模块1801,用于接收第一加锁请求,该第一加锁请求包括待写入数据块的块信息,该待写入数据块为待写入数据所处数据块;
确定模块1802,用于执行上述步骤1207;
第一发送模块1803,用于执行上述步骤1208-1209;
第二发送模块1804,用于执行上述步骤1213和1214。
可选地,该确定模块1802,用于执行上述步骤1205。
可选地,在该第三状态位表中,以一个比特位来表示该虚拟机磁盘中一个数据块的第三状态,参见步骤1207。
可选地,该确定该待写入数据块的第三状态之后,该装置还包括:
等待模块,用于当该第三状态为加载中状态时,等待该待写入数据加载完成;
第一发送模块1803,还用于当该待写入数据加载完成时,向该读取与写入管理进程发送第一加锁失败响应,该第一加锁失败响应用于表示其他读取与写入管理进程已经将该待写入数据加载到该目标虚拟机磁盘。
图19是本申请实施例提供的一种数据加载装置的结构装置图,该装置包括接收模块1901、确定模块1902、第一发送模块1903以及第二发送模块1904。
接收模块1901,用于接收写请求,该写请求包括待写入数据块的块信息,该待写入数据块为待写入数据所处数据块;
确定模块1902,用于执行上述步骤1102;
第一发送模块1903,用于执行上述步骤1103和1105;
第二发送模块1904,用于执行上述步骤1109。
更新模块1905,用于执行上述步骤1113。
可选地,该向目标磁盘管理进程发送加锁请求之后,接收模块1901,还用于接收第一加锁失败响应,该第一加锁失败响应用于表示其他读取与写入管理进程已经将该待写入数据加载到该目标虚拟机磁盘。
可选地,第一发送模块1903,还用于执行上述步骤1301;
接收模块1901,还用于接收该镜像服务器发送的第一待写入数据,该第一待写入数据为该待写入数据块中除该待写入数据以外的数据;
确定模块1902,还用于基于该待写入数据块的块信息,从多个虚拟机磁盘中确定目标虚拟机磁盘;
该装置还包括:
写入模块,用于执行上述步骤1305。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
需要说明的是:上述实施例提供数据加载的装置在进行数据加载时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据加载的装置与数据加载的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。