数据存储方法和装置的制造方法
【技术领域】
[0001]本发明涉及互联网技术领域,尤其涉及一种数据存储方法和装置。
【背景技术】
[0002]对于一个虚拟操作系统来说,为了保证其数据可靠性,需要将数据保存在更可靠的云存储服务器上。另外,将存储保存在另外一个位置,也是虚拟操作系统迀移的充分条件。
[0003]但是输入输出(Input Output ;以下简称:10)对系统的性能是至关重要的,因此,将存储从本地移动到网络上的云存储,需要尽量减少由此带来的性能损失。
[0004]现有的技术方案一般都是采取互联网小型计算机接口(Internet Smal IComputer System Interface ;以下简称:ISCSI)的方式,在本地物理机上创建一个小型计算机接口 (Small Computer System Interface ;以下简称:SCSI)设备,将这个设备分配给虚拟操作系统。SCSI设备在底层通过ISCSI将SCSI命令发送给ISCSI目标器(ISCSItarget),一般云存储服务器都有自己的数据交换协议,所以这其中还要涉及SCSI命令和云存储服务器的协议的转换。ISCSI target可以部署在本地或者一个固定的服务器上,或者云存储服务器上。但是上述方案增加了 1路径的长度,增加了中央处理器(CentralProcessing Unit ;以下简称:CPU)的负载,对系统性能的消耗较大。
【发明内容】
[0005]本发明的目的旨在至少在一定程度上解决相关技术中的技术问题之一。
[0006]为此,本发明的第一个目的在于提出一种数据存储方法。该方法可以实现将数据存储在存储服务器上,缩短了 1路径,提高了系统的1吞吐,减轻了 CPU的负载,优化了系统性能。
[0007]本发明的第二个目的在于提出一种数据存储装置。
[0008]为了实现上述目的,本发明第一方面实施例的数据存储方法,包括:模拟设备接收来自客户操作系统的数据;将所述数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装;将封装后的数据发送给所述存储服务器进行存储。
[0009]本发明实施例的数据存储方法,模拟设备接收来自客户操作系统的数据之后,将上述数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装,然后将封装后的数据发送给上述存储服务器进行存储,从而可以实现将数据存储在存储服务器上,缩短了1路径,提高了系统的吞吐,减轻了 CPU的负载,优化了系统性能。
[0010]为了实现上述目的,本发明第二方面实施例的数据存储装置,设置在模拟设备中,所述数据存储装置包括:接收模块,用于接收来自客户操作系统的数据;封装模块,用于将所述接收模块接收的数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装;发送模块,用于将所述封装模块封装后的数据发送给所述存储服务器进行存储。
[0011]本发明实施例的数据存储装置,实现为虚拟机监控器中的一个模拟设备,接收模块接收数据之后,封装模块将上述数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装,然后发送模块将封装后的数据发送给上述存储服务器进行存储,从而可以实现将数据存储在存储服务器上,缩短了 1路径,提高了系统的1吞吐,减轻了 CPU的负载,优化了系统性能。
[0012]本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
【附图说明】
[0013]本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
[0014]图1为本发明数据存储方法一个实施例的流程图;
[0015]图2为本发明数据存储方法的应用场景一个实施例的示意图;
[0016]图3为本发明数据存储装置一个实施例的结构示意图。
【具体实施方式】
[0017]下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
[0018]图1为本发明数据存储方法一个实施例的流程图,如图1所示,该数据存储方法可以包括:
[0019]步骤101,模拟设备接收来自客户操作系统的数据。
[0020]步骤102,将上述数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装。
[0021]步骤103,将封装后的数据发送给上述存储服务器进行存储。
[0022]本实施例中,上述模拟设备是在上述宿主系统上基于虚拟机监控器(VirtualMachine Monitor),例如快速模拟器(Quick Emulator ;以下简称:Qemu)实现的,上述模拟设备为外设部件互连标准(Peripheral Component Interconnect ;以下简称:PCI)接口的块设备;上述客户操作系统使用块设备驱动来驱动上述模拟设备,上述客户操作系统运行于虚拟机监控器之上。
[0023]本发明图1所示实施例提供的数据存储方法可以应用在图2所示的架构中,图2为本发明数据存储方法的应用场景一个实施例的示意图。
[0024]参见图2,本发明基于虚拟机监控器Qemu,设计并实现了一个模拟设备。为了避免修改客户操作系统,减少对客户操作系统的影响,该模拟设备被模拟为一个块设备,客户操作系统中无需实现任何对该模拟设备的驱动,直接使用块设备驱动即可;为了更高效的在客户操作系统和宿主系统之间进行通信,模拟设备采用虚拟输入输出(Virt1)标准实现数据通信;为了避免存储服务器升级等带来的影响,模拟设备与存储服务器进行了解耦,本发明在宿主系统上设计实现了一个存储服务器的代理服务器。
[0025]为了使客户操作系统不经修改就可以使用本发明图1所示实施例提供的方法,这一点尤其是对于那些用户自定义的客户操作系统非常有意义,本发明将模拟设备注册为PCI接口的Virt1块设备,客户操作系统发现是PCI总线上的Virt1块设备后,将使用虚拟输入输出块设备(virt1-blk)驱动来驱动该模拟设备。
[0026]本发明图1所示实施例中,上述模拟设备与上述客户操作系统之间通过Virt1的方式共享内存,模拟设备与客户操作系统之间通过传递上述数据所在内存的物理地址实现上述数据的访问,从而实现了数据的零复制。
[0027]本发明图1所示实施例中,将封装后的数据发送给存储服务器进行存储可以为:模拟设备将封装后的数据通过网络通信协议栈发送给上述存储服务器进行存储。
[0028]本发明中,模拟设备接收到数据之后,不再经过宿主系统的内核1栈,而是在宿主系统的用户空间中按照存储服务器的协议进行封装后,通过网络通信协议栈直接发送给远端的存储服务器。另外,本实施例对Qemu中的1路径进行了优化,缩短了 1路径。
[0
029]具体地,模拟设备将封装后的数据通过网络通信协议栈发送给上述存储服务器进行存储可以为:模拟设备将上述封装后的数据发送给存储服务器的代理服务器,由上述代理服务器将封装后的数据通过网络通信协议栈发送给存储服务器进行存储。其中,上述网络通信协议栈可以为传输控制协议(Transmiss1n Control Protocol ;以下简称:TCP)/因特网协议(Internet Protocol ;以下简称:IP)协议栈,当然本发明实施例并不仅限于此,网络通信协议栈还可以为其他的网络通信协议栈,只要可以实现模拟设备与存储服务器之间的网络通信即可。
[0030]在生产环境上,频繁升级Qemu的代价和风险都是比较大的,因此,本发明在模拟设备和远端存储服务器之间实现了一个存储服务器的代理服务器,将业务逻辑分离到代理服务器中来。而代理服务器与Qemu中的模拟设备之间只是进行简单的数据通信,不受具体通信协议细节变更的影响,无论是协议升级,或者是修复缺陷,Qemu均无需变更。
[0031]为了提高10吞吐,本发明将控制平面和数据通道分开实现,使用一个独立的专用的线程负责数据通道,从而避免控制命令占用。本发明图1所示实施例中,上述代理服务器采用可扩展的架构,上述模拟设备中的每个模拟设备对应一个进程,这样,对于同一个宿主机上有多个客户操作系统或者多个模拟设备的情形,可以充分利用宿主系统的多颗CPU,提尚并彳丁性,提尚整体的10吞吐。
[0032]因为代理服务器可能需要根据存储协议的升级进行必要的升级,或者因为缺陷可能发生意外的重启。但是无论哪种情况,如果不加处理,那么反映到客户操作系统中的表现就是10错误。为了提高可靠性,本发明设计实现了容错机制,模拟设备实时感知代理服务器的状态,无论代理服务器是因为升级还是因为意外,在代理服务器重启之后,模拟设备将重传尚未完成的10请求;也就是说,在上述代理服务器重启之后,模拟设备重传在上述代理服务器重启之前未完成传输的数据。
[0033]因为对于后端存储服务器,不同的块可能存储在不同的机器上,因此,为了提高总体的并行性,本发明为客户操作系统和模拟设备设计了一种10调度算法,除了合并同一个块中的相邻请求外,也可以向存储服务器发送位于不同块的请求,这样后端可以调度到不同存储服务器,提高整体的并发,从而提高整体的10吞吐。这个优化因为涉及到客户操作系统的改动,是可选的,如果不改动客户操作系统,不会影响本发明图1所示实施例提供的数据存储方法其他部分的实现。
[0034]上述数据存储方法中,模拟设备接收来自客户操作系统的数据之后,将上述数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装,然后将封装后的数据发送给上述存储服务器进行存储,从而可以实现将数据存储在存储服务器上,缩短了 1路径,提高了系统的1吞吐,减轻了 CPU的负载,优化了系统性能。
[0035]图3为本发明数据存储装置一个实施例的结构示意图,本实施例中的数据存储装置实现为虚拟机监控器中的一个模拟设备,可以实现本发明图1所示实施例的流程。如图3所示,上述数据存储装置可以包括:接收模块31、封装模块32和发送模块33 ;
[0036]其中,接收模块31,用于接收来自客户操作系统的数据;
[0037]封装模块32,用于将接收模块31接收的数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装;
[0038]发送模块33,用于将封装模块32封装后的数据发送给上述存储服务器进行存储。
[0039]本实施例中,上述模拟设备是在宿主系统上基于虚拟机监控器,例如=Qemu实现的,上述模拟设备为PCI接口的块设备;上述客户操作系统使用块设备驱动来驱动上述模拟设备,上述客户操作系统运行于上述虚拟机监控器之上。
[0040]参见图2,本发明基于虚拟机监控器Qemu,设计并实现了一个模拟设备。为了避免客户操作系统的改动,减少对客户操作系统的影响,该模拟设备被模拟为一个块设备,客户操作系统中无需实现任何对该模拟设备的驱动,直接使用块设备驱动即可;为了更高效的在客户操作系统和宿主系统之间进行通信,模拟设备采用Virt1标准实现数据通信;为了避免存储服务器升级等带来的影响,模拟设备与存储服务器进行了解耦,本发明在宿主系统上设计实现了一个存储服务器的代理服务器。
[0041]为了使客户操作系统不经修改就可以使用本实施例提供的装置,这一点尤其是对于那些用户自定义的客户操作系统非常有意义,本发明将模拟设备注册为PCI接口的Virt1块设备,客户操作系统发现是PCI总线上的Virt1块设备后,将使用virt1-blk驱动来驱动该模拟设备。
[0042]本实施例中,上述模拟设备与客户操作系统之间通过Virt1的方式共享内存,模拟设备与客户操作系统之间通过传递上述数据所在内存的物理地址实现上述数据的访问,从而实现了数据的零复制。
[0043]上述数据存储装置中,发送模块33,具体用于将封装模块32封装后的数据通过网络通信协议栈发送给上述存储服务器进行存储。本实施例中,接收模块31接收到数据之后,不再经过宿主系统的内核1栈,而是由封装模块32在宿主系统的用户空间中按照存储服务器的协议进行封装后,发送模块33通过网络通信协议栈直接发送给远端的存储服务器。另外,本实施例对Qemu中的1路径进行了优化,缩短了 1路径。
[0044]更具体地,发送模块33,用于将封装模块32封装后的数据发送给上述存储服务器的代理服务器,由代理服务器将上述封装后的数据通过网络通信协议栈发送给存储服务器进行存储。其中,上述网络通信协议栈可以为TCP/IP协议栈,当然本发明实施例并不仅限于此,网络通信协议栈还可以为其他的网络通信协议栈,只要可以实现模拟设备与存储服务器之间的网络通信即可。
[0045]在生产环境上,频繁升级Qemu的代价和风险都是比较大的,因此,本发明在模拟设备和远端存储服务器之间实现了一个存储服务器的代理服务器,将业务逻辑分离到代理服务器中来。而代理服务器与Qemu中的模拟设备之间只是进行简单的数据通信,不受具体通信协议细节变更的影响,无论是协议升级,或者是修复缺陷,Qemu均无需变更。
[0046]为了提高1吞吐,本发明将控制平面和数据通道分开实现,使用一个独立的专用的线程负责数据通道,从而避免控制命令占用。本实施例中,上述代理服务器采用可扩展的架构,上述模拟设备中的每个模拟设备对应一个进程,这样,对于同一个宿主系统上有多个客户操作系统或者多个模拟设备的情形,可以充分利用宿主系统的多颗CPU,提高并行性,提高整体的1吞吐。
[0047]上述数据存储装置中,发送模块33,还用于在代理服务器重启之后,重传在代理服务器重启之前未完成传输的数据。因为代理服务器可能需要根据存储协议的升级进行必要的升级,或者因为缺陷可能发生意外的重启。但是无论哪种情况,如果不加处理,那么反映到客户操作系统中的表现就是1错误。为了提高可靠性,上述数据存储装置设计实现了容错机制,实时感知代理服务器的状态,无论代理服务器是因为升级还是因为意外,在代理服务器重启之后,发送模块33将重传尚未完成的1操作。
[0048]上述数据存储装置中,接收模块31接收来自客户操作系统的数据之后,封装模块32将上述数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装,然后发送模块33将封装后的数据发送给上述存储服务器进行存储,从而可以实现将数据存储在存储服务器上,缩短了 1路径,提高了系统的1吞吐,减轻了 CPU的负载,优化了系统性能。
[0049]需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
[0050]流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
[0051]应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(Programmable Gate Array ;以下简称:PGA),现场可编程门阵列(Field ProgrammableGate Array ;以下简称:FPGA)等。
[0052]本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
[0053]此外,本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
[0054]上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0055]在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0056]尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
【主权项】
1.一种数据存储方法,其特征在于,包括: 模拟设备接收来自客户操作系统的数据; 将所述数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装; 将封装后的数据发送给所述存储服务器进行存储。2.根据权利要求1所述的方法,其特征在于,所述模拟设备是在所述宿主系统上基于虚拟机监控器实现的,所述模拟设备为外设部件互连标准PCI接口的块设备;所述客户操作系统使用块设备驱动来驱动所述模拟设备,所述客户操作系统运行于所述虚拟机监控器之上。3.根据权利要求2所述的方法,其特征在于,所述模拟设备与所述客户操作系统之间通过共享内存的方式传递数据;所述模拟设备与所述客户操作系统之间通过传递所述数据所在内存的物理地址实现所述数据的访问。4.根据权利要求1-3任意一项所述的方法,其特征在于,所述将封装后的数据发送给所述存储服务器进行存储包括: 所述模拟设备将所述封装后的数据通过网络通信协议栈发送给所述存储服务器进行存储。5.根据权利要求4所述的方法,其特征在于,所述模拟设备将所述封装后的数据通过网络通信协议栈发送给所述存储服务器进行存储包括: 所述模拟设备将所述封装后的数据发送给所述存储服务器的代理服务器,由所述代理服务器将所述封装后的数据通过网络通信协议栈发送给所述存储服务器进行存储。6.根据权利要求5所述的方法,其特征在于,所述代理服务器采用可扩展的架构,每个模拟设备对应一个进程。7.根据权利要求5或6所述的方法,其特征在于,还包括: 在所述代理服务器重启之后,所述模拟设备重传在所述代理服务器重启之前未完成传输的数据。8.一种数据存储装置,其特征在于,设置在模拟设备中,所述数据存储装置包括: 接收模块,用于接收来自客户操作系统的数据; 封装模块,用于将所述接收模块接收的数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装; 发送模块,用于将所述封装模块封装后的数据发送给所述存储服务器进行存储。9.根据权利要求8所述的装置,其特征在于,所述模拟设备是在所述宿主系统上基于虚拟机监控器实现的,所述模拟设备为外设部件互连标准PCI接口的块设备;所述客户操作系统使用块设备驱动来驱动所述模拟设备,所述客户操作系统运行于所述虚拟机监控器之上。10.根据权利要求9所述的装置,其特征在于,所述模拟设备与所述客户操作系统之间通过共享内存的方式传递数据;所述模拟设备与所述客户操作系统之间通过传递所述数据所在内存的物理地址实现所述数据的访问。11.根据权利要求8-10任意一项所述的装置,其特征在于, 所述发送模块,具体用于将所述封装模块封装后的数据通过网络通信协议栈发送给所述存储服务器进行存储。12.根据权利要求11所述的装置,其特征在于, 所述发送模块,具体用于将所述封装模块封装后的数据发送给所述存储服务器的代理服务器,由所述代理服务器将所述封装后的数据通过网络通信协议栈发送给所述存储服务器进行存储。13.根据权利要求12所述的装置,其特征在于,所述代理服务器采用可扩展的架构,每个模拟设备对应一个进程。14.根据权利要求12或13所述的装置,其特征在于, 所述发送模块,还用于在所述代理服务器重启之后,重传在所述代理服务器重启之前未完成传输的数据。
【专利摘要】本发明提出一种数据存储方法和装置,上述数据存储方法包括:模拟设备接收来自客户操作系统的数据;将所述数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装;将封装后的数据发送给所述存储服务器进行存储。本发明可以实现将数据存储在存储服务器上,缩短了IO路径,提高了系统的IO吞吐,减轻了CPU的负载,优化了系统性能。
【IPC分类】G06F3/06
【公开号】CN104881254
【申请号】CN201510278937
【发明人】谢广军, 王柏生, 李志勇
【申请人】北京百度网讯科技有限公司
【公开日】2015年9月2日
【申请日】2015年5月27日
转载请注明原文地址:https://www.famiwei.com/read-8138819.html