一种读取镜像数据的方法、装置以及计算设备与流程

文档序号:21504965发布日期:2020-07-14 18:09阅读:220来源:国知局
一种读取镜像数据的方法、装置以及计算设备与流程

本发明涉及云计算领域,特别涉及一种读取镜像数据的方法、装置以及计算设备。



背景技术:

虚拟机(virtualmachinem,vm)是云计算服务商提供的,具有弹性计算功能的云服务器(elasticcomputeservice,ecs)实例。在一台物理机(计算节点)上,可以启动多个虚拟机,每个虚拟机关联一个用于启动该虚拟机的云盘,且该虚拟机通过该云盘中的镜像文件进行启动。云盘实质上是一种虚拟块设备,其对应的是一个逻辑磁盘地址(logicalblockaddress,lba),也就是说,云盘中的镜像文件实际上是存储于存储集群的数据节点中的,且镜像文件默认以3副本方式存储。

在一些应用场景,需要快速启动大批量(n个,每个虚拟机对应一个云盘)的虚拟机。这些虚拟机瞬间同时启动时,它们会同时向存储集群读取这n个云盘的镜像数据。当n的数值越大,存储集群需要响应的并发读请求越多,压力越大,导致读取性能下降,进而影响虚拟机的启动速度。另外,计算节点的n个云盘同时从存储集群读取的是相同的镜像数据,从而造成大量重复数据的传输,浪费了网络带宽。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的读取镜像数据的方法、装置以及计算设备。

根据本发明的一个方面,提供了一种读取镜像数据的方法,包括:

在计算节点上的虚拟机/容器的启动过程中,发起对所述虚拟机/容器的云盘中镜像数据的读请求,其中,所述镜像数据用于启动所述虚拟机/容器,所述启动过程包括多个时间片;

当所述读请求是当前时间片的第一个读请求时,通过第一、二路径分别读取镜像数据,其中,第一路径为从所述计算节点的缓存读取镜像数据的路径,第二路径为从数据节点读取镜像数据的路径;

将第一、二路径中数据读取延时小的路径确定为目标路径;

当所述读请求不是当前时间片的第一个读请求时,通过所述目标路径读取镜像数据。

可选地,在根据本发明的读取镜像数据的方法中,当所述读请求不是当前时间片的第一个读请求时,若目标路径尚未确定,则通过第一路径读取镜像数据。

可选地,根据本发明的读取镜像数据的方法,还包括,当通过第一路径读取镜像数据失败时,通过第二路径读取镜像数据,并将读取到的镜像数据存储到计算节点的缓存中。

可选地,根据本发明的读取镜像数据的方法,还包括:若当前时间片对应的目标路径与上一个时间片对应的目标路径不相同,则将下一个时间片的时长设置为与当前时间片的时长相同。

可选地,根据本发明的读取镜像数据的方法,还包括:若当前时间片对应的目标路径与上一个时间片对应的目标路径相同,则将下一个时间片的时长设置为:当前时间片的时长增加预定时长。

可选地,根据本发明的读取镜像数据的方法,还包括:若连续预定数目个时间片对应的目标路径均为第一路径,则后续所有的读请求,均通过第一路径读取镜像数据。

可选地,在根据本发明的读取镜像数据的方法中,所述计算节点同时启动多个虚拟机/容器。

根据本发明的另一方面,还提供一种读取镜像数据的装置,包括:

请求发起模块,适于在计算节点上的虚拟机/容器启动过程中,发起对所述虚拟机/容器的云盘中镜像数据的读请求,其中,所述镜像数据用于启动所述虚拟机/容器,所述启动过程被划分为多个时间片;

第一处理模块,适于当所述读请求是当前时间片的第一个读请求时,通过第一、二路径分别获取镜像数据,其中,第一路径为从所述计算节点的缓存读取镜像数据的路径,第二路径为从数据节点云盘镜像数据的路径;

目标路径确定模块,适于将第一、二路径中数据读取延时小的路径确定为目标路径;以及

第二处理模块,适于当所述读请求不是当前时间片的第一个读请求时,通过所述目标路径读取镜像数据。

根据本发明的另一方面,还提供一种计算设备,包括:

一个或多个处理器;

存储器;以及

一个或多个程序,其中所述一个或多个程序存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序包括用于执行根据上述方法中的任一方法的指令。

根据本发明的又一方面,还提供一种存储一个或多个程序的计算机可读存储介质,所述一个或多个程序包括指令,所述指令当由计算设备执行时,使得所述计算设备执行根据上述方法中的任一方法。

根据本发明实施例的读取镜像数据的方案,将虚拟机/容器的启动过程划分为多个时间片,在每个时间片,根据数据读取延时来选择进行“缓存读”(从计算节点的本地缓存中读)还是“直接读”(从存储集群的数据节点中读),充分结合了二者各自的优势,同时避开了二者各自的劣势,能够提高镜像数据的读取效率,从而解决了大批量虚拟机/容器启动时,通过各自的云盘同时读存储集群所带来的性能下降问题,以及重复读取相同数据带来的网络带宽浪费问题。进一步,通过动态调整时间片的长短,还能够达到更好的镜像加速效果。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例的云计算系统100的结构图;

图2示出了根据本发明一个实施例的计算设备200的结构图;

图3示出了根据本发明一个实施例的读取镜像数据的方法300流程图;

图4示出了根据本发明一个实施例的读取镜像数据的装置400结构图;

图5示出了两种读取路径的数据读取延时的测试结果对比示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1示出了根据本发明一个实施例的云计算系统100的结构图。参照图1,云计算系统100包括计算集群和存储集群,计算集群包括多个计算节点(图中仅示出了2个),存储集群包括多个数据节点(图中仅示出了2个)。在每个计算节点上,可以启动一个或多个虚拟机,虚拟机通过与该虚拟机对应的云盘中的镜像文件启动;在每个计算节点上,也可以启动一个或多个容器(docker),容器通过与该容器对应的云盘中的镜像文件启动。计算节点中还包括读取镜像数据的装置,计算节点中的虚拟机/容器启动时,利用该读取镜像数据的装置来读取对应的云盘镜像数据。

云盘实质上是一种虚拟块设备,其对应的是一个逻辑磁盘地址,也就是说,云盘中的镜像文件实际上是存储于存储集群的数据节点中的,且镜像文件默认以3副本方式存储。

如前所述,在现有技术中,n个虚拟机同时启动时,n个读取镜像数据的装置会同时向存储集群读取n个云盘的镜像数据,一方面,存储集群需要响应大量的并发读请求,导致读取性能下降,进而影响虚拟机的启动速度,另一方面,还会造成大量重复数据的传输,浪费了网络带宽。

于是,根据本发明的一种实现方式,在云计算系统中引入了缓存机制,原理如下:数据节点中存储的镜像文件被切分成多个镜像分片,每次读请求读取其中一个镜像分片。读取镜像数据的装置优先从计算节点的缓存中读取请求的镜像分片,缓存中不存在请求的镜像分片时,读取失败,进一步从数据节点中读取请求的镜像分片,并将读取到的镜像分片存储到计算节点的缓存中。这样,其他虚拟机/容器就可以直接从缓存中成功读取该镜像分片。这里,缓存是在计算节点中开辟的一块存储区域。

通过上述的缓存机制,能够分流前端计算节点的读请求,避免n个云盘同时向存储集群读取同一份数据,提高了并发处理能力。但是在这种方案里面,镜像文件的读取路径只能二选一:要么直接读取存储集群中的镜像数据(以下称之为“直接读”),要么读取计算节点的缓存中的镜像数据(以下称之为“缓存读”)。对这两种读取路径分析如下:

1)直接读。在大批量云盘刚开始加载并发起读请求的短时间内,由于存储集群要处理大批量云盘的加载(load)操作(只有加载成功,才能处理读请求),虚拟机/容器通过云盘发下来的读取请求会堆积,造成虚拟机/容器启动开始阶段的数据读取延时(latency)很高。另外,每个云盘加载操作本身在几百毫秒到几秒之间,虽然多个云盘是并发同时加载,但是并发量一旦上到一个临界点,批量云盘的平均加载时间会增加,也会影响整体读写(io)性能。

2)缓存读。镜像数据需要先预先从存储集群读取出来,并复制到计算节点缓存,然后再把缓存的数据返回给云盘。虽然在整体的性能上,启用缓存加速要比不启用缓存加速要好很多,但是还是存在一个时间窗口,通过缓存加速的latency比直接读存储集群要差。

图5示出了两种读取路径的数据读取延时的测试结果对比示意图。在图5中,曲线1是“直接读”的延时曲线,曲线2是“缓存读”的延时曲线,可以看出,在t2时间窗口内,“直接读”确实要比“缓存读”的性能更好。也就是说,无论是“直接读”还是“缓存读”,都不能做到全时间段内所有读请求的整体性能都优于另外一种方式。

于是,在本发明的另一种实现方式中,提出了结合上述两种读取路径各自优势的镜像数据动态加速方法,通过将虚拟机/容器并发启动的时间段切分为多个时间片,每个时间片内动态决定并选择读数据延时较小的那条读取路径,从而实现整体性能最优。以下对该种读取镜像数据的方法进行详细介绍。

根据本发明的实施方式,计算集群中的计算节点可以通过如下所述的计算设备200来实现。图2示出了根据本发明一个实施例的计算设备200的示意图。如图2所示,计算设备200包括输入设备201、输入接口202、中央处理器203、存储器204、输出接口205、以及输出设备206。其中,输入接口202、中央处理器203、存储器204、以及输出接口205通过总线210相互连接,输入设备201和输出设备206分别通过输入接口202和输出接口205与总线210连接,进而与计算设备200的其他组件连接。

具体地,输入设备201接收来自外部的输入信息,并通过输入接口202将输入信息传送到中央处理器203;中央处理器203基于存储器204中存储的计算机可执行指令对输入信息进行处理以生成输出信息,将输出信息临时或者永久地存储在存储器204中,然后通过输出接口205将输出信息传送到输出设备206;输出设备206将输出信息输出到计算设备200的外部供客户端使用。

也就是说,图2所示的计算设备也可以被实现为包括:存储有计算机可执行指令的存储器;以及处理器,该处理器在执行计算机可执行指令时可以实现读取镜像数据的方法300。

图3示出了根据本发明一个实施例的读取镜像数据的方法300的流程图。方法300适于在计算设备(例如前述的计算设备200)中执行。如图3所示,方法300始于步骤s310。在步骤s310中,在计算节点上的虚拟机/容器的启动过程中,发起对虚拟机/容器的云盘中镜像数据的读请求。在一些应用场景下,在同一个计算节点中会同时启动多个虚拟机/容器,以下的描述以同时启动多个虚拟机为例。

在同一个计算节点中同时启动多个虚拟机时,对于每个虚拟机,计算节点会在内存中创建一个内存对象,该内存对象与该虚拟机的云盘相关联,因此可以称之为云盘对象。虚拟机发起对镜像数据的读请求,以便根据所读取的镜像数据执行自身的启动过程,该读请求由云盘对象进行处理。

在本发明实施例中,会将虚拟机的启动过程划分为多个时间片。时间片的划分有多种方式,例如,划分为等长的时间片;又例如,后一时间片的长度根据前面一个或多个时间片的数据读取延迟动态确定(后文中描述)。其中,第一个时间片的长度可以根据经验或者实验确定,例如,设置为3~5秒。

在步骤s320中,当读请求是当前时间片的第一个读请求时,通过第一、二路径分别读取镜像数据,其中,第一路径为从所述计算节点的缓存读取镜像数据的路径,即前述的“缓存读”,第二路径为从数据节点读取镜像数据的路径,即前述的“直接读”。

在步骤s330中,将第一、二路径中数据读取延时小的路径确定为目标路径。在本发明实施例中,会对每个读请求的数据读取延时进行统计,延时值为发送读请求与接收到请求的镜像分片,二者的时间差。其中,对第一个读请求,还会比较“直接读”与“缓存读”分别对应的数据读取延时,将延时值小的路径确定为目标路径。

在步骤s340中,当读请求不是当前时间片的第一个读请求时,通过所述目标路径读取镜像数据。也就是说,在每一个切分的时间片内,第一个读请求会“双读”(同时“直接读”和“缓存读”)。哪条路径的读取延时更低,则本时间片内所有后续读请求都走那条路径。

需要说明的是,为了支持读请求的并发,在第一个“双读”完成且决定目标路径之前,其他并发读请求默认走“缓存读”。也就是说,当读请求不是当前时间片的第一个读请求时,若目标路径尚未确定,则通过“缓存读”来获取镜像数据。

另外,在通过第一路径读取镜像数据失败时,说明缓存中尚不存在该读请求对应的镜像分片,则通过第二路径读取镜像数据,并将读取到的镜像数据存储到计算节点的缓存中。

在本发明的一个实施例中,为了能够能够达到更好的镜像加速效果,还进一步对时间片的长短按照预定策略进行动态调整,确保能及时切换到更高效的读路径。调整策略例如为:

1)若当前时间片对应的目标路径与上一个时间片对应的目标路径不相同,则将下一个时间片的时长设置为与当前时间片的时长相同。

2)若当前时间片对应的目标路径与上一个时间片对应的目标路径相同,则将下一个时间片的时长设置为:当前时间片的时长增加预定时长。

根据以上调整策略,能够有效规避“时间片窗口太短导致过多双读”或者“单个时间片窗口太长导致不能最快切换到延时低的读路径”等极端情况。

在本发明的一个实施例中,若连续预定数目个(例如5个)时间片对应的目标路径均为第一路径,则停止上述时间片的划分和路径的选择过程,对于后续所有的读请求,均通过第一路径读取镜像数据。

图4示出了根据本发明一个实施例的读取镜像数据的装置400的示意图。参照图4,装置400包括:

请求发起模块410,适于在计算节点上的虚拟机/容器启动过程中,发起对所述虚拟机/容器的云盘中镜像数据的读请求,其中,所述镜像数据用于启动所述虚拟机/容器,所述启动过程被划分为多个时间片;

第一处理模块420,适于当所述读请求是当前时间片的第一个读请求时,通过第一、二路径分别获取镜像数据,其中,第一路径为从所述计算节点的缓存读取镜像数据的路径,第二路径为从数据节点云盘镜像数据的路径;

目标路径确定模块430,适于将第一、二路径中数据读取延时小的路径确定为目标路径;

第二处理模块440,适于当所述读请求不是当前时间片的第一个读请求时,通过所述目标路径读取镜像数据。

需要说明的是,装置400各模块执行的具体操作,可参照方法300,这里不做赘述。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1