本发明涉及共享计算技术领域,尤其涉及一种docker镜像分发方法和系统、数据网关及计算机可读存储介质。
背景技术:
当前docker(应用容器引擎)被广泛运用在企业内部和公有云服务中,docker镜像仓库和docker镜像分发作为容器服务的重要组成部分,无疑是影响整体服务质量的关键环节之一。企业和公有云服务中,docker镜像仓库的服务对象一般在几千到几万量级以下,且大部分走内网或专线进行docker镜像分发,所以带宽成本、分发速度尚可接受。但是,随着容器服务的发展,当docker镜像仓库需支持百万节点的docker镜像分发,且所有节点均处于用户家庭网络中时,其分发稳定性和成本是一项严峻的技术挑战。以100mb镜像为例,一分钟内完成100万节点分发,需要1t以上的带宽成本。因此,现有的docker镜像分发方案无法满足海量分布式容器服务的需求。
技术实现要素:
有鉴于此,本发明提出一种docker镜像分发方法和系统、数据网关及计算机可读存储介质,以解决至少一个上述技术问题。
首先,为实现上述目的,本发明提出一种docker镜像分发方法,应用于数据网关,所述方法包括:
接收客户端发送的获取docker镜像文件的请求;
对所述请求进行签名校验;
当校验通过后,从p2p网络的tracker服务器中查询可用的数据共享节点;及
与至少一个所述可用的数据共享节点建立p2p连接,下载所述docker镜像文件,并将已下载的所述docker镜像文件发送至所述客户端。
可选地,所述方法还包括:
当从所述tracker服务器中查询到可用的数据共享节点少于预设数量或不存在时,通过cdn网络采用回源方式从镜像源站下载docker镜像文件。
可选地,当所述docker镜像文件超过预设大小时,所述docker镜像文件采用小切片分别存储在多个所述数据共享节点中;
所述与至少一个所述可用的数据共享节点建立p2p连接,下载所述docker镜像文件包括:与多个所述可用的数据共享节点建立p2p连接,多源并发下载所述docker镜像文件。
此外,为实现上述目的,本发明还提供一种数据网关,所述数据网关包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的docker镜像分发程序,所述docker镜像分发程序被所述处理器执行时实现如下方法:
接收客户端发送的获取docker镜像文件的请求;
对所述请求进行签名校验;
当校验通过后,从p2p网络的tracker服务器中查询可用的数据共享节点;及
与至少一个所述可用的数据共享节点建立p2p连接,下载所述docker镜像文件,并将已下载的所述docker镜像文件发送至所述客户端。
可选地,所述docker镜像分发程序被所述处理器执行时还实现:
当从所述tracker服务器中查询到可用的数据共享节点少于预设数量或不存在时,通过cdn网络采用回源方式从镜像源站下载docker镜像文件。
可选地,当所述docker镜像文件超过预设大小时,所述docker镜像文件采用小切片分别存储在多个所述数据共享节点中;
所述与至少一个所述可用的数据共享节点建立p2p连接,下载所述docker镜像文件包括:与多个所述可用的数据共享节点建立p2p连接,多源并发下载所述docker镜像文件。
进一步地,为实现上述目的,本发明还提供一种docker镜像分发处理系统,所述系统包括:
接收单元,用于接收客户端发送的获取docker镜像文件的请求;
校验单元,用于对所述请求进行签名校验;
查询单元,用于当校验通过后,从p2p网络的tracker服务器中查询可用的数据共享节点;
下载单元,用于与至少一个所述可用的数据共享节点建立p2p连接,下载所述docker镜像文件。
进一步地,为实现上述目的,本发明还提供一种docker镜像分发系统,所述系统包括:
客户端,用于向本地数据网关发送获取docker镜像文件的请求;
所述数据网关,用于在接收到所述请求后,对所述请求进行签名校验;当校验通过后,从p2p网络的tracker服务器中查询可用的数据共享节点,与至少一个所述可用的数据共享节点建立p2p连接,下载所述docker镜像文件,并将已下载的所述docker镜像文件发送至所述客户端。
可选地,当所述数据网关从所述tracker服务器中查询到可用的数据共享节点少于预设数量或不存在时,还用于通过cdn网络采用回源方式从镜像源站下载所述docker镜像文件。
可选地,所述客户端还用于当通过cdn网络下载所述docker镜像文件成功后,上报已下载的docker镜像文件信息到所述tracker服务器中,以使所述tracker服务器将所述客户端作为一个可用的数据共享节点进行记录。
可选地,所述客户端在向所述数据网关发送获取docker镜像文件的请求之前,还用于根据docker镜像索引文件信息校验本地是否已存在所述docker镜像索引文件;
当本地已存在所述docker镜像索引文件时,直接从本地获取对应docker镜像文件;
当本地不存在所述docker镜像索引文件时,再向所述数据网关发送获取docker镜像文件的请求。
可选地,当所述docker镜像文件超过预设大小时,所述docker镜像文件采用小切片分别存储在多个所述数据共享节点中;
所述数据网关与至少一个所述可用的数据共享节点建立p2p连接,下载所述docker镜像文件包括:在下载所述docker镜像文件时从多个所述数据共享节点中进行多源并发下载。
进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有docker镜像分发程序,所述docker镜像分发程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的docker镜像分发方法。
相较于现有技术,本发明所提出的docker镜像分发方法和系统、数据网关及计算机可读存储介质,可以通过p2p网络下载docker镜像文件,极大的节约带宽成本。
附图说明
图1是本发明第一实施例提出的一种docker镜像分发系统的架构示意图;
图2是本发明第二实施例提出的一种docker镜像分发方法的流程示意图;
图3是本发明第三实施例提出的一种docker镜像分发方法的流程示意图;
图4是本发明第四实施例提出的一种数据网关的架构示意图;
图5是本发明第五实施例提出的一种docker镜像分发方法的流程示意图;
图6是本发明第六实施例提出的一种docker镜像分发方法的流程示意图;
图7是本发明第七实施例提出的一种docker镜像分发处理系统的模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
第一实施例
参阅图1所示,本发明第一实施例提出一种docker镜像分发系统。
在本实施例中,docker镜像分发系统1包括docker客户端2和数据网关3,其中,数据网关3与tracker(追踪)服务器4、数据共享节点5通信连接。
docker客户端2用于在接收到docker镜像文件下载指令后,向本地数据网关3发送获取docker镜像文件的请求。docker镜像包含三类文件:(1)mainfest文件,即镜像索引文件,保存镜像中各layer层及配置文件的sha256特征值;(2)imageconf文件,即镜像配置文件;(3)镜像各layer层文件。为了避免重复下载,docker客户端2可以根据该docker镜像文件下载指令中的mainfest文件信息,校验本地是否已存在该mainfest文件,当存在时可以直接获取对应docker镜像文件。当本地不存在该mainfest文件时,再向数据网关3发送获取docker镜像各layer层文件的请求。
数据网关3用于在接收到所述请求后,对所述请求进行签名校验,防止docker镜像文件被非法获取。当校验通过后,向p2p网络中的tracker服务器4查询可用的数据共享节点5信息。
tracker服务器4用于记录p2p网络中所有可用的数据共享节点5信息。
数据共享节点5为部署在用户家庭网络环境下的智能设备,例如迅雷赚钱宝、玩客云、智能机顶盒等,可外接或内置磁盘等存储设备,在数据共享节点5上可部署docker服务,以iaas(infrastructureasaservice,基础设施即服务)形式对外提供服务。并且,每个数据共享节点5除了可以部署docker服务外,还可以作为p2p网络中的节点,对外提供docker镜像文件分发传输功能。
数据共享节点5可以是cdn网络中的节点,或者区块链网络中的节点。
上述数据网关3还用于通过打洞技术与至少一个可用的数据共享节点5建立p2p连接,下载docker镜像文件,然后将已下载的docker镜像文件发送至对应docker客户端2。
进一步地,docker镜像分发系统1还包括镜像仓库6和镜像源站7。
镜像仓库6用于为docker客户端2提供远程的用户鉴权、镜像存储和镜像查询等服务。镜像源站7用于按特定规则存储docker镜像文件,为cdn网络分发提供回源源站。
为适配cdn和p2p网络分发,需对提交至镜像仓库6中的docker镜像文件按规则导出至镜像源站7。首先,用户通过dockerfile或docker命令制作打包docker镜像文件。docker客户端2向镜像鉴权服务器(图中未示出)获取用户权限列表,并以jwt(jsonwebtoken)协议形式返回。docker客户端2携带权限信息分层提交docker镜像文件数据至镜像仓库6。然后,镜像仓库6验证docker客户端2的权限信息,验证通过则保存所提交的docker镜像文件数据。镜像仓库6处理完所有docker镜像文件数据后回调通知镜像源站7。镜像源站7导出本次镜像mainfest、imageconf和各layer层文件,并存放在本次磁盘。其中所有docker镜像文件按sha256特征值做去重处理。
在本实施例中,当数据网关3从tracker服务器4中查询到可用的数据共享节点5较少(少于预设数量)或不存在时,通过cdn网络采用回源方式从镜像源站7下载docker镜像文件。当下载成功(数据完整)后,该docker客户端2上报已下载的docker镜像文件信息到tracker服务器4中,后续可以将该docker客户端2作为一个可用的数据共享节点5进行记录。
另外,在完成下载之后,docker客户端2校验所下载的docker镜像文件的sha256特征值是否合法。其中,该docker镜像文件的sha256特征值可以通过以下方式进行计算:随机提取20片1m大小文件内容作为样本,对提取的样本内容记录文件中的偏移量,然后计算每一分片的sha256值,然后对所有分片的sha256值做一次sha256计算,生成该文件的sha256特征值。在docker客户端2根据文件偏移量做同样的计算,校验该文件的sha256特征值是否吻合。若该docker镜像文件的sha256特征值合法,则返回下载成功的通知,否则清除已缓存的下载数据并返回下载失败的通知。
第二实施例
参阅图2所示,本发明第二实施例提出一种docker镜像分发方法,应用于上述docker镜像分发系统1。在本实施例中,根据不同的需求,图2所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。此外,有关共享计算的常规处理步骤,可以根据实际应用场景纳入本发明。该方法包括:
s10,docker客户端2根据docker镜像文件下载指令向本地数据网关3发送获取docker镜像文件的请求。
docker镜像包含三类文件:(1)mainfest文件,即镜像索引文件,保存镜像中各layer层及配置文件的sha256特征值;(2)imageconf文件,即镜像配置文件;(3)镜像各layer层文件。为了避免重复下载,docker客户端2可以根据该docker镜像文件下载指令中的mainfest文件信息,校验本地是否已存在该mainfest文件,当存在时可以直接获取对应docker镜像文件。当本地不存在该mainfest文件时,再向数据网关3发送获取docker镜像各layer层文件的请求。
s11,数据网关3接收到该请求后,对该请求进行签名校验。
该签名校验可以防止docker镜像文件被非法获取。
s12,当校验通过后,数据网关3从tracker服务器4中查询可用的数据共享节点信息。
tracker服务器4中记录有p2p网络中所有可用的数据共享节点5信息。上述可用的数据共享节点5是指可以提供该docker镜像文件的分发传输功能的数据共享节点5。
s13,数据网关3通过打洞技术与至少一个可用的数据共享节点5建立p2p连接,下载docker镜像文件,然后将已下载的docker镜像文件发送至对应docker客户端2。
相比传统的直接访问镜像仓库6的方式,本实施例中docker客户端2只需要和本地数据网关3交互,数据网关3直接从p2p网络中下载docker镜像文件。
在本实施例中,当docker镜像文件为超过预设大小的大文件时,采用小切片分别存储在多个数据共享节点5中,当下载该大文件时从上述多个数据共享节点5进行多源并发下载。
进一步地,在完成下载之后,docker客户端2校验所下载的docker镜像文件的sha256特征值是否合法。其中,该docker镜像文件的sha256特征值可以通过以下方式进行计算:随机提取20片1m大小文件内容作为样本,对提取的样本内容记录文件中的偏移量,然后计算每一分片的sha256值,然后对所有分片的sha256值做一次sha256计算,生成该文件的sha256特征值。在docker客户端2根据文件偏移量做同样的计算,校验该文件的sha256特征值是否吻合。若该docker镜像文件的sha256特征值合法,则返回下载成功的通知,否则清除已缓存的下载数据并返回下载失败的通知。
本实施例提供的docker镜像分发方法,可以通过p2p网络下载docker镜像文件,极大的节约带宽成本。p2p分发模式中对大文件会进行切片存储,不同的数据共享节点5存储不同分片,下载docker镜像文件时可进行多源并发下载,使得分发效率更加高效。另外,直连镜像仓库6的分发模式中,每层文件都需要进行权限校验,在大并发情景下,鉴权服务容易成为瓶颈。但在p2p分发模式下,各docker镜像文件分片加密,即便泄露也无法获取到完整docker镜像文件,所以分发过程中无需担心权限校验。
第三实施例
参阅图3所示,本发明第三实施例提出一种docker镜像分发方法。在本实施例中,根据不同的需求,图3所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。本实施例中,该docker镜像分发方法中的s20-s22与上述第二实施例的s10-s12相类似,区别在于该方法还包括s23。
s20,docker客户端2根据docker镜像文件下载指令向本地数据网关3发送获取docker镜像文件的请求。
docker镜像包含三类文件:(1)mainfest文件,即镜像索引文件,保存镜像中各layer层及配置文件的sha256特征值;(2)imageconf文件,即镜像配置文件;(3)镜像各layer层文件。为了避免重复下载,docker客户端2可以根据该docker镜像文件下载指令中的mainfest文件信息,校验本地是否已存在该mainfest文件,当存在时可以直接获取对应docker镜像文件。当本地不存在该mainfest文件时,再向数据网关3发送获取docker镜像各layer层文件的请求。
s21,数据网关3接收到该请求后,对该请求进行签名校验。
该签名校验可以防止docker镜像文件被非法获取。
s22,当校验通过后,数据网关3从tracker服务器4中查询可用的数据共享节点信息。
tracker服务器4中记录有p2p网络中所有可用的数据共享节点5信息。上述可用的数据共享节点5是指可以提供该docker镜像文件的分发传输功能的数据共享节点5。
s23,当数据网关3从tracker服务器4中查询到可用的数据共享节点5少于预设数量或不存在时,通过cdn网络采用回源方式从镜像源站7下载docker镜像文件,然后将已下载的docker镜像文件发送至对应docker客户端2。
当通过cdn网络下载成功(数据完整)后,该docker客户端2上报已下载的docker镜像文件信息到tracker服务器4中,后续可以将该docker客户端2作为一个可用的数据共享节点5进行记录,用来为其他客户端提供该docker镜像文件的分发功能。
另外,在完成下载之后,docker客户端2校验所下载的docker镜像文件的sha256特征值是否合法。其中,该docker镜像文件的sha256特征值可以通过以下方式进行计算:随机提取20片1m大小文件内容作为样本,对提取的样本内容记录文件中的偏移量,然后计算每一分片的sha256值,然后对所有分片的sha256值做一次sha256计算,生成该文件的sha256特征值。在docker客户端2根据文件偏移量做同样的计算,校验该文件的sha256特征值是否吻合。若该docker镜像文件的sha256特征值合法,则返回下载成功的通知,否则清除已缓存的下载数据并返回下载失败的通知。
本实施例提供的docker镜像分发方法,可以在p2p网络中无法下载该docker镜像文件时,通过cdn网络进行下载,下载成功后该docker客户端2成为可用的数据共享节点5。因此,随着部署量的加大,可用的数据共享节点5的量也在增加,带宽成本不会随部署量增加而持续增长。
第四实施例
参阅图4所示,本发明第四实施例提出一种数据网关3。
在本实施例中,所述数据网关3包括:存储器11、处理器13、网络接口15及通信总线17。其中,网络接口15可选地可以包括标准的有线接口、无线接口(如wi-fi接口)。通信总线17用于实现这些组件之间的连接通信。
存储器11至少包括一种类型的可读存储介质。上述至少一种类型的可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器等的非易失性存储介质。在一些实施例中,上述存储器11可以是数据网关3的内部存储单元,例如该数据网关3的硬盘。在另一些实施例中,上述存储器11也可以是数据网关3的外部存储单元,例如数据网关3上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。
上述存储器11可以用于存储安装于数据网关3的应用软件及各类数据,例如docker镜像分发程序100的程序代码及其运行过程中产生的相关数据。
处理器13在一些实施例中可以是一中央处理器,微处理器或其它数据处理芯片,用于运行存储器11中存储的程序代码或处理数据。
图4仅示出了具有组件11-17以及docker镜像分发程序100的数据网关3,但是应理解的是,图4并未示出数据网关3的所有组件,可以替代实施更多或者更少的组件。
在图4所示的数据网关3实施例中,作为一种计算机存储介质的存储器11中存储docker镜像分发程序100的程序代码,处理器13执行上述docker镜像分发程序100的程序代码时,实现如下方法:
(1)接收docker客户端2根据docker镜像文件下载指令发送的获取docker镜像文件的请求。
(2)对该请求进行签名校验。
(3)当校验通过后,从tracker服务器4中查询可用的数据共享节点信息。
(4)通过打洞技术与至少一个可用的数据共享节点5建立p2p连接,下载docker镜像文件。
(5)当从tracker服务器4中查询到可用的数据共享节点5少于预设数量或不存在时,通过cdn网络采用回源方式从镜像源站7下载docker镜像文件。
(6)将已下载的docker镜像文件发送至对应docker客户端2。
上述方法的详细说明请参阅上述第一至第三实施例,在此不再赘述。
第五实施例
参阅图5所示,本发明第五实施例提出一种docker镜像分发方法,应用于上述数据网关3。在本实施例中,根据不同的需求,图5所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。此外,有关共享计算的常规处理步骤,可以根据实际应用场景纳入本发明。该方法包括:
s30,接收docker客户端2根据docker镜像文件下载指令发送的获取docker镜像文件的请求。
s31,对该请求进行签名校验。
s32,当校验通过后,从tracker服务器4中查询可用的数据共享节点信息。
s33,通过打洞技术与至少一个可用的数据共享节点5建立p2p连接,下载docker镜像文件,然后将已下载的docker镜像文件发送至对应docker客户端2。
上述步骤的详细说明请参阅上述第一至第三实施例,在此不再赘述。
第六实施例
参阅图6所示,本发明第六实施例提出一种docker镜像分发方法。在本实施例中,根据不同的需求,图6所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。本实施例中,该docker镜像分发方法中的s40-s42与上述第五实施例的s30-s32相类似,区别在于该方法还包括s44。
s40,接收docker客户端2根据docker镜像文件下载指令发送的获取docker镜像文件的请求。
s41,对该请求进行签名校验。
s42,当校验通过后,从tracker服务器4中查询可用的数据共享节点信息。
s44,当从tracker服务器4中查询到可用的数据共享节点5少于预设数量或不存在时,通过cdn网络采用回源方式从镜像源站7下载docker镜像文件,然后将已下载的docker镜像文件发送至对应docker客户端2。
上述步骤的详细说明请参阅上述第一至第三实施例,在此不再赘述。
第七实施例
参阅图7所示,本发明第六实施例提出一种docker镜像分发处理系统60,应用于上述数据网关3。
在本实施例中,docker镜像分发处理系统60包括接收单元602、校验单元604查询单元606及下载单元608。
接收单元602,用于接收docker客户端2根据docker镜像文件下载指令发送的获取docker镜像文件的请求。
校验单元604,用于对该请求进行签名校验。
查询单元606,用于当校验通过后,从tracker服务器4中查询可用的数据共享节点信息。
下载单元608,用于通过打洞技术与至少一个可用的数据共享节点5建立p2p连接,下载docker镜像文件。还用于当从tracker服务器4中查询到可用的数据共享节点5少于预设数量或不存在时,通过cdn网络采用回源方式从镜像源站7下载docker镜像文件。
上述各个单元的具体功能说明请参阅上述第一至第五实施例,在此不再赘述。
第八实施例
本发明还提供了另一种实施方式,即提供一种计算机可读存储介质,上述计算机可读存储介质存储有docker镜像分发程序100,上述docker镜像分发程序100可被至少一个处理器执行,以使上述至少一个处理器执行如上述的docker镜像分发方法。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台客户端(可以是手机,计算机,电子装置,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。