软件远程流式加载方法及系统的制作方法

文档序号:6440223阅读:227来源:国知局
专利名称:软件远程流式加载方法及系统的制作方法
技术领域
本发明涉及无线通信技术,尤其涉及一种软件远程流式加载方法及系统。
背景技术
软件即服务(SaaS)是一种软件分发的模型,它由服务提供商来管理运行软件,并通过互联网向用户提供软件服务。SaaS在当前技术下已经逐渐成为一种流行的软件交付模型,它支持Web应用程序,面向服务的架构(SOA)以及新的开发模式AJAX。互联网数据中心(IDC)为MaS定义了两种交付模型,一种是类似于动态服务器页面(ASP)那样的托管软件管理模型,它向用户提供商业的可用托管软件,并通过Web来交付。另一种就是按需随选(Software on demand)的模型,它提供用户按需网络访问应用程序的拷贝。按需随选是指使用^aS的流式加载软件到客户端系统的方法。在这种场景下,应用软件由软件服务中心管理,并向用户提供按需的软件服务。用户不需要在本地安装软件运行,用户只需要登录到软件服务中心,按需加载软件执行即可。用户每次在登录的时候, 都能够获取到一个干净的、连续的当前软件执行环境。与传统的本地安装使用软件相比,按需随选通过本地执行和缓存等方法保持了用户良好的软件使用体验。现有的按需随选的解决方案中,以klik系统为典型代表。klik系统支持Linux操作系统上软件按需部署,不用安装软件,客户端直接下载软件镜像包到本地构造执行环境运行软件的系统。用户只需要安装klik客户端klikclient便可使用。klikclient实现了一个挂载软件镜像包的联合文件系统,通过加载下载下来的.cmg格式的软件镜像包,虚拟化出软件镜像包的目录树,并将软件运行所需要的本地系统的目录树和虚拟化出的软件镜像包目录树进行联合,构建出了软件在本地的执行环境,这样就可以在无需进行本地安装的情况下即可在该执行环境下运行软件。退出软件运行后,在系统里面也不会遗留代码和配置,保持一个干净的系统环境。但在上述klik系统中,由于软件镜像包需要完全下载到本地,才能执行。由于软件镜像包通常较大,所以软件启动耗时长,极大地影响了用户体验。

发明内容
本发明提供软件远程流式加载方法及系统,用于实现软件数据的按需加载,以克服需将软件数据全部下载到本地的缺陷。根据本发明的一方面,提供一种软件远程流式加载方法,包括远程获取软件包镜像的元数据;根据所述软件包镜像的元数据获取所需软件数据在所述软件包镜像中的软件块标识,其中所述软件镜像包以软件块为单位存储软件数据;根据所述软件块标识查询位图,所述位图包括分别与所述软件包镜像中各软件块标识对应的、用于标记是否已下载与所述软件标识对应的软件块的下载标记;
若根据所述下载标记获知未下载所需软件数据,则根据所述软件块标识远程下载所需软件数据、存储并加载,同时将所述下载标记更新为已下载。根据本发明的另一方面,还提供一种软件远程流式加载系统,包括下载模块,用于远程获取软件包镜像的元数据;软件块标识查询模块,用于根据所述软件包镜像的元数据获取所需软件数据在所述软件包镜像中的软件块标识,其中所述软件镜像包以软件块为单位存储软件数据;位图查询模块,根据所述软件块标识查询位图,所述位图包括分别与所述软件包镜像中各软件块标识对应的、用于标记是否已下载与所述软件标识对应的软件块的下载标记;按需加载模块,若根据所述下载标记获知未下载所需软件数据,则根据所述软件块标识远程下载所需软件数据、存储并加载,同时将所述下载标记更新为已下载。根据本发明的软件远程流式加载方法及系统,通过初始时仅获取软件包镜像的元数据,并在需加载软件数据时,通过查找元数据获取所需加载软件数据所在软件块,并在判断本地未在先下载该软件块时,通过网络从软件包镜像远程下载相应软件块,从而实现软件远程流式按需加载。因此无需将软件包镜像完全下本地再执行,极大地缩短了软件启动时间,实现了软件快速启动,提升了用户体验。


图1为本发明软件远程流式加载方法的流程示意图。图2为用于实现图1所示的软件远程流式加载方法的网络架构图。图3为软件包镜像格式的示意图。图4为软件包镜像形成过程示意图。图5为执行按需加载的流程示意图。图6为全路径解析流程示意图。图7为读取目录树中对应文件目录控制块下子目录信息的流程示意图。图8为本发明软件远程流式加载系统的结构示意图。
具体实施例方式图1为本发明软件远程流式加载方法的流程示意图。如图1所示,该软件远程流式加载方法包括以下步骤步骤S101,远程获取软件包镜像的元数据;步骤S102,根据所述软件包镜像的元数据获取所需软件数据在所述软件包镜像中的软件块标识,其中所述软件包镜像以软件块为单位存储软件数据;步骤S103,根据所述软件块标识查询位图,所述位图包括分别与所述软件包镜像中各软件块标识对应的、用于标记是否已下载与所述软件标识对应的软件块的下载标记;步骤S104,若根据所述下载标记获知未下载所需软件数据,则根据所述软件块标识远程下载所需软件数据、存储并加载,同时将所述下载标记更新为已下载。图2为用于实现图1所示的软件远程流式加载方法的网络架构图。下面结合图2 对上述步骤S101-S104进行详细说明。
如图2所示,系统包括软件镜像数据仓库、本地文件系统以及软件远程流式加载系统。其中,软件镜像数据仓库用于存放软件包镜像,软件包镜像是通过按照定义的镜像格式将软件包打包形成的,具体地,可通过递归扫描软件包目录树来实现。软件包镜像包括元数据和数据,其中元数据用来描述目录树的结构以及位图,数据信息为软件镜像包中普通文件数据的集合。图3为软件包镜像格式的示意图。如图3所示,软件包镜像包括四个区域头部区域(HEADER)、目录树存储区域(DIRECTORY)、位图存储区域(BITMAP)和数据存储区域 (DATA),其中头部区域、目录树存储区域和位图存储区域为元数据区,数据存储区域为数据区。具体地,第一部分是HEADER部分,是整个镜像的头部,是对整个镜像进行描述的元数据信息,它包括块大小(block_size)、目录区起始位置(root_directory_record)、 数据区起始位置(file_offset)、位图起始位置(bitmap_0ffset)以及位图大小(bitmap_ len)等描述信息。第二部分是DIRECTORY部分,存储了整个软件包的目录树信息,它包括最大为256 字节的目录名称(name)字段、指向该文件目录结构(record)的下一个record(即它的第一个子目录,或当没有子目录时它的下一个兄弟目录)起始位置的extent字段。对于文件来说,extent字段为指向该record对应的文件起始位置所在镜像中的偏移值。此外, DIRECTORY部分还可包括flag字段等,其中flag字段为该文件目录的属性,包括文件类型 (例如目录、普通文件或链接等)和访问权限等。第三部分是BITMAP部分,位图区域的大小由数据区的大小和块的大小来决定,位图中每个位图标识对应的块是否在本地缓存中。第四部分是DATA部分。软件包中所有普通文件按一定顺序存储在这个区域,进行了逻辑上的分块,即以逻辑上划分的数据块为单位对软件数据进行存储,并且各数据块可由位图区域来标识。图4为软件包镜像形成过程示意图。如图4所示,将软件包打包为软件镜像数据仓库中的软件包镜像包括以下步骤步骤S401,开始;步骤S402,初始化全路径名为要扫描的软件包的全路径,设置块大小;步骤S403,输入要扫描的全路径名;步骤S404,判断要扫描的全路径名是否是目录;若是,则执行步骤S405,如果不是,则跳到步骤S409 ;步骤S405,分配文件目录控制块,将扫描到的目录的属性值填充文件目录控制块中的变量;步骤S406,文件目录控制块中的extent字段赋值为该文件目录控制块末尾位置在镜像中的偏移值;步骤S407,将文件目录控制块写入镜像中元数据区;步骤S408,遍历目录下的所有子目录,准备扫描子目录的全路径名;之后执行步骤 S412 ;步骤S409,分配文件目录控制块,将扫描到的普通文件的属性值填充文件目录控制块中的变量;步骤S410,计算该文件起始位置在镜像中的偏移,文件目录控制块中extent赋值为该计算偏移值;步骤S411,将文件目录控制块写入镜像中元数据区;之后执行步骤S412 ;步骤S412,判断是否为最后一个子目录文件;若是,则执行步骤S413,若否,则执行步骤S403 ;步骤S413,文件目录控制块中size字段赋值为所有子目录文件目录控制块大小之和;步骤S414,等待所有递归均返回结果;步骤S415,按照第一遍的顺序,扫描第二遍,将文件数据依次读出,写入镜像中指数据区,根据块大小,和镜像数据区大小,分配位图,所有bit初始化为0,写入镜像元数据区,写入其它元数据;步骤S416,结束。通过图4所示流程形成软件包镜像后,软件远程流式加载系统通过网络从软件镜像数据仓库下载软件包镜像的元数据。软件远程流式加载系统根据下载的软件包镜像的元数据构建软件包的目录树,由于软件的运行需要访问本地文件系统资源,所以需将软件包的目录树和本地文件系统目录联合起来。即,将指定的本地多个目录分支和软件镜像的目录逻辑联合,而目录的物理位置是分开的,为应用程序提供一个统一的文件系统视图。再使用Linux的chroot命令进入统一视图,完成软件隔离执行环境的构建,软件即可启动运行。在程序运行时,软件远程流式加载系统查找某个文件目录时,既在本地文件系统目录中进行查找,也在软件包的目录树中进行查找,在查找到后,检查文件目录所在分支权限并进行文件操作。软件包的目录树中,目录控制块的物理顺序为子目顺序依次排在父目录的后面, 父目录控制块中的size字段记录了它的所有子目录控制块的大小。这样,在根据全路径名查找对应文件的过程中,只需按照递归解析方式,对目录进行逐级解析,即可最终查找到所对应的文件,获取全路径名的索引节点所存储的文件目录控制块的属性信息,进而可根据该属性信息进行所需数据的加载。图5为执行按需加载的流程示意图。如图5所示,软件远程流式加载系统进行读操作并执行按需加载包括以下步骤步骤S501,读取所需文件的全路径名;步骤S502,通过预置的全路径名解析流程查找所读取全路径名的索引节点;步骤S503,判断是否存在相应的索引节点;若否,则返回索引节点不存在的错误信息;若是,则执行步骤S504;步骤S504,获取索引节点存储的属性信息,并根据软件块的划分逻辑计算要读取的软件块的范围,其中、该属性信息包括所需文件在软件包镜像中存放的起始位置和结束位置;例如所需文件在软件包镜像中存放的起始位置为第10字节,结束位置为第20字节, 并且软件块的划分逻辑为每15个字节划分为一个软件块,即第1-15字节为第一软件块,第 15-20字节为第二软件块,以此类推。则可计算获知,若要读取所需文件,需读取第一软件块和第二软件块;
步骤S505,按照计算得到的软件块的范围读取软件块;步骤S506,通过查询位图判断该软件块是否已经加载到本地;其中,软件包镜像的元数据中包括一个位图,该位图中的各位分别与各软件块相对应,即该位图包括分别与所述软件包镜像中各软件块标识对应的、用于标记是否已下载与所述软件块标识对应的软件块的下载标记;优选地,该下载标记以0和1标识,即用0表示未下载到本地,用1表示已下载到本地,初始时位图中各位均为0 ;若否,则执行步骤S507,若是,则执行步骤S508 ;步骤S507,通过网络从软件镜像数据仓库下载与软件块标识对应的软件块,写入本地软件包镜像中,并更改位图中与该软件块标识对应的下载标记;执行步骤S509 ;步骤S508,从本地软件包镜像中读取与该软件块标识对应的软件块;执行步骤 S509 ;步骤S509,将软件块写入本地缓存;步骤S510,判断是否已完成全部所需软件块的读取;若是,则返回缓存和读取的字节数;若否,则重复执行步骤S505。软件远程流式加载系统通过加载所返回的缓存中的软件块,即可完成按需加载。上述实施例的软件远程流式加载方法可基于Linux操作系统或其他操作系统来实现。根据上述实施例的软件远程流式加载方法,通过初始时仅获取软件包镜像的元数据,并在需加载软件数据时,通过查找元数据获取所需加载软件数据所在软件块,并在判断本地未在先下载该软件块时,通过网络从软件包镜像远程下载相应软件块,从而实现软件远程流式按需加载。因此无需将软件包镜像完全下本地再执行,极大地缩短了软件启动时间,实现了软件快速启动,提升了用户体验。进一步地,在上述实施例的软件远程流式加载方法中,根据所述软件包镜像的元数据获取所需软件数据在所述软件包镜像中的软件块标识具体包括若通过查询本地内存预置的哈希表,未获取到与全路径名对应的缓存索引节点, 则通过解析所述全路径名,从所述元数据中查找与所述全路径名对应的文件目录控制块;在本地内存建立与所述文件目录控制块对应的缓存索引节点,并在所述缓存索引节点存储所述文件目录控制块的属性信息,所述属性信息包括所述所需软件数据在所述软件包镜像的起始存储地址和结束存储地址;根据所述起始存储地址、所述结束存储地址以及预先设置的软件块划分规则,获取所需软件数据在所述软件包镜像中对应的软件块标识;将所述缓存索引节点添加至所述哈希表。具体地,为了提高系统性能,每次从镜像中读出文件目录控制块时,软件远程流式加载系统在内存中建立相应的缓存索引节点,并用所读取的文件目录控制块的属性信息填充索引节点,再将索引节点插入哈希表中进行管理,便于快速的查找。索引节点之间根据彼此之间兄弟、父子目录关系,建立起联系,将每个建立起的索引节点插入父目录的子目录链表中,子目录链表之间的连接通过指向兄弟的指针连接,并将指向父目录的指针指向父目录,根目录的父目录指针指向自己。图6为全路径解析流程示意图。如图6所示,软件远程流式加载系统通过解析用户输入或点击操作生成的全路径名,来查找该全路径名对应的索引节点,即读取目录树中对应文件目录控制块的元数据包括以下步骤步骤S601,初始化当前索引节点为根节点,当前全路径为根路径,剩余路径为全部路径;步骤S602,判断是否为根目录;若是,则返回根目录索引节点;若否,则执行步骤 S603 ;步骤S603,解析剩余路径中第一个未解析的路径名分量,加到当前全路径末尾,组成新的当前全路径;步骤S604,查找当前全路径对应的文件目录控制块是否在缓存中;若是,则执行步骤S609 ;若否,则执行步骤S605 ;步骤S605,根据当前索引节点信息,循环从镜像中读取当前目录的所有子目录文件目录控制块;步骤S606,判断循环是否结束;若是,则获知不存在该全路径,返回空值;若否,则执行步骤S607 ;步骤S607,向未读入缓存中的文件目录控制块分配索引节点填充信息,并插入目录树链表和哈希表;步骤S608,判断该文件目录控制块的文件目录名是否等于正在解析的路径分量; 若是,则执行步骤S609 ;若否,则重复执行步骤S605 ;步骤S609,将当前索引节点赋值为找到的索引节点;步骤S610,判断剩余路径是否为空;若否,则重复执行步骤S603 ;若是,则执行步骤 S611 ;步骤S611,返回当前索引节点。图7为读取目录树中对应文件目录控制块下子目录信息的流程示意图。如图7所示,包括以下步骤步骤S701,开始读取全路径名下的子目录;步骤S702,通过图6所示全路径解析流程查找该子目录所在的全路径名;步骤S703,判断是否找到;若是,则执行步骤S704,若否,则返回目录不存在的错误提示;步骤S704,通过图6所示全路径解析流程获取该全路径的索引节点;步骤S705,判断该全路径名对应的是否为目录;若是,则执行步骤S706,若否,则返回不是目录的错误提示;步骤S706,在输入参数buf中填充当前目录“.”和父目录“..”信息;步骤S707,根据全路径名的索引节点的信息,从软件远程流式加载系统已获取的元数据中循环读出子目录控制块;步骤S708,判断循环是否结束;若是,则执行步骤S711,若否,则执行步骤S709 ;步骤S709,向未读入缓存的文件目录控制块分配索引节点填充信息,插入软件包目录树链表和哈希表中;步骤S710,将子目录控制块中的信息填充输入参数buf中;重复执行步骤S707 ;步骤S711,返回输入参数buf。根据上述实施例的软件远程流式加载方法,当对已解析过的全路径的索引节点进行再次查找时,可直接从内存中获取所需信息,而无需对磁盘中存储的元数据进行处理,从而提高了查找效率。图8为本发明软件远程流式加载系统的结构示意图。如图8所示,该软件远程流式加载系统包括下载模块81,用于远程获取软件包镜像的元数据;软件块标识查询模块82,用于根据所述软件包镜像的元数据获取所需软件数据在所述软件包镜像中的软件块标识,其中所述软件镜像包以软件块为单位存储软件数据;位图查询模块83,根据所述软件块标识查询位图,所述位图包括分别与所述软件包镜像中各软件块标识对应的、用于标记是否已下载与所述软件标识对应的软件块的下载标记;按需加载模块84,若根据所述下载标记获知未下载所需软件数据,则根据所述软件块标识远程下载所需软件数据、存储并加载,同时将所述下载标记更新为已下载。上述实施例的软件远程流式加载系统执行软件远程流式加载的流程与上述实施例的软件远程流式加载方法相同,故此处不再赘述。根据上述实施例的软件远程流式加载系统,通过初始时仅获取软件包镜像的元数据,并在需加载软件数据时,通过查找元数据获取所需加载软件数据所在软件块,并在判断本地未在先下载该软件块时,通过网络从软件包镜像远程下载相应软件块,从而实现软件远程流式按需加载。因此无需将软件包镜像完全下本地再执行,极大地缩短了软件启动时间,实现了软件快速启动,提升了用户体验。进一步地,在上述实施例的软件远程流式加载系统中,所述按需加载模块还用于若根据所述下载标记获知已下载所需软件数据,则从本地加载所需软件数据。进一步地,在上述实施例的软件远程流式加载系统中,所述按需加载模块还用于若所述位图中与所述软件块标记对应的下载标记为1,则从所述软件包镜像远程下载所需软件数据、存储并加载,并将所述位图中与所述软件块标记对应的下载标记设置为1。根据上述实施例的软件远程流式加载系统,由于仅用1个比特位来表示各软件块的下载标记,节约存储空间,并且易于操作。进一步地,在上述实施例的软件远程流式加载系统中,所述软件块标识查询模块包括第一查询单元,用于若通过查询本地内存预置的哈希表,未获取到与全路径名对应的缓存索引节点,则通过解析所述全路径名,从所述元数据中查找与所述全路径名对应的文件目录控制块;索引节点建立单元,用于在本地内存建立与所述文件目录控制块对应的缓存索引节点,并在所述缓存索引节点存储所述文件目录控制块的属性信息,所述属性信息包括所述所需软件数据在所述软件包镜像的起始存储地址和结束存储地址;计算单元,用于根据所述起始存储地址、所述结束存储地址以及预先设置的软件块划分规则,获取所需软件数据在所述软件包镜像中对应的软件块标识;哈希表设置单元,用于将所述缓存索引节点添加至所述哈希表。根据上述实施例的软件远程流式加载系统,当对已解析过的全路径的索引节点进行再次查找时,可直接从内存中获取所需信息,而无需对磁盘中存储的元数据进行处理,从而提高了查找效率。 最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
权利要求
1.一种软件远程流式加载方法,其特征在于,包括 远程获取软件包镜像的元数据;根据所述软件包镜像的元数据获取所需软件数据在所述软件包镜像中的软件块标识, 其中所述软件包镜像以软件块为单位存储软件数据;根据所述软件块标识查询位图,所述位图包括分别与所述软件包镜像中各软件块标识对应的、用于标记是否已下载与所述软件标识对应的软件块的下载标记;若根据所述下载标记获知未下载所需软件数据,则根据所述软件块标识远程下载所需软件数据、存储并加载,同时将所述下载标记更新为已下载。
2.根据权利要求1所述的软件远程流式加载方法,其特征在于,根据所述软件块标识查询位图之后还包括若根据所述下载标记获知已下载所需软件数据,则从本地加载所需软件数据。
3.根据权利要求1所述的软件远程流式加载方法,其特征在于,所述若根据所述下载标记获知未下载所需软件数据,则根据所述软件块标识远程下载所需软件数据并存储具体包括若所述位图中与所述软件块标记对应的下载标记为1,则从所述软件包镜像远程下载所需软件数据、存储并加载,并将所述位图中与所述软件块标记对应的下载标记设置为1。
4.根据权利要求1至3任一所述的软件远程流式加载方法,其特征在于,根据所述软件包镜像的元数据获取所需软件数据在所述软件包镜像中的软件块标识具体包括若通过查询本地内存预置的哈希表,未获取到与所需软件数据的全路径名对应的缓存索引节点,则通过解析所述全路径名,从所述元数据中查找与所述全路径名对应的文件目录控制块;在本地内存建立与所述文件目录控制块对应的缓存索引节点,并在所述缓存索引节点存储所述文件目录控制块的属性信息,所述属性信息包括所述所需软件数据在所述软件包镜像的起始存储地址和结束存储地址;根据所述起始存储地址、所述结束存储地址以及预先设置的软件块划分规则,获取所需软件数据在所述软件包镜像中对应的软件块标识; 将所述缓存索引节点添加至所述哈希表。
5.一种软件远程流式加载系统,其特征在于,包括 下载模块,用于远程获取软件包镜像的元数据;软件块标识查询模块,用于根据所述软件包镜像的元数据获取所需软件数据在所述软件包镜像中的软件块标识,其中所述软件镜像包以软件块为单位存储软件数据;位图查询模块,根据所述软件块标识查询位图,所述位图包括分别与所述软件包镜像中各软件块标识对应的、用于标记是否已下载与所述软件标识对应的软件块的下载标记;按需加载模块,若根据所述下载标记获知未下载所需软件数据,则根据所述软件块标识远程下载所需软件数据、存储并加载,同时将所述下载标记更新为已下载。
6.根据权利要求5所述的软件远程流式加载系统,其特征在于,所述按需加载模块还用于若根据所述下载标记获知已下载所需软件数据,则从本地加载所需软件数据。
7.根据权利要求5所述的软件远程流式加载系统,其特征在于,所述按需加载模块还用于若所述位图中与所述软件块标记对应的下载标记为1,则从所述软件包镜像远程下载所需软件数据、存储并加载,并将所述位图中与所述软件块标记对应的下载标记设置为1。
8.根据权利要求5至7任一所述的软件远程流式加载系统,其特征在于,所述软件块标识查询模块包括第一查询单元,用于若通过查询本地内存预置的哈希表,未获取到与所需软件数据的全路径名对应的缓存索引节点,则通过解析所述全路径名,从所述元数据中查找与所述全路径名对应的文件目录控制块;索引节点建立单元,用于在本地内存建立与所述文件目录控制块对应的缓存索引节点,并在所述缓存索引节点存储所述文件目录控制块的属性信息,所述属性信息包括所述所需软件数据在所述软件包镜像的起始存储地址和结束存储地址;计算单元,用于根据所述起始存储地址、所述结束存储地址以及预先设置的软件块划分规则,获取所需软件数据在所述软件包镜像中对应的软件块标识; 哈希表设置单元,用于将所述缓存索引节点添加至所述哈希表。
全文摘要
本发明提供软件远程流式加载方法及系统。该方法包括远程获取软件包镜像的元数据;根据所述软件包镜像的元数据获取所需软件数据在所述软件包镜像中的软件块标识,其中所述软件镜像包以软件块为单位存储软件数据;根据所述软件块标识查询位图,所述位图包括分别与所述软件包镜像中各软件块标识对应的、用于标记是否已下载与所述软件标识对应的软件块的下载标记;若根据所述下载标记获知未下载所需软件数据,则根据所述软件块标识远程下载所需软件数据、存储并加载,同时将所述下载标记更新为已下载。根据本发明的软件远程流式加载方法及系统,可实现软件数据的按需加载。
文档编号G06F9/445GK102520995SQ201110401959
公开日2012年6月27日 申请日期2011年12月6日 优先权日2011年12月6日
发明者康俊彬, 怀进鹏, 胡春明, 钟亮 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1