Dragonfly 是一个由阿里巴巴开源的云原生镜像分发系统,主要解决以 Kubernetes 为核心的分布式应用编排系统的镜像分发难题。随着企业数字化大潮的席卷,行业应用纷纷朝微服务架构演进,并经过云化平台优化业务管理。Dragonfly 源于阿里巴巴,从实际落地场景出发,前瞻性地解决了云原生镜像分发的__效率、流控与安全__三大难题。git
Dragonfly 目前承载了阿里全集团 90%以上的文件下载任务、日分发峰值达到 1 亿次,100%成功支撑双十一营销活动数据抵达数万台机器,github Star 数已达到 2500+。2018 年 11 月 14 日已正式进入 CNCF,成为 CNCF 沙箱级别项目(Sandbox Level Project)。github
随着阿里集团业务爆炸式增加,2015 年时发布系统日均发布量突破两万,不少应用的机器规模开始破万,发布失败率开始增高,而根本缘由则是发布过程须要大量的文件拉取,文件服务器扛不住大量的请求,固然第一时间会想到服务器扩容,但是扩容后又发现后端存储成为瓶颈且扩容成本也很是巨大(按照咱们的计算,为了知足业务需求,不阻碍业务的发展,后续至少须要 2000 台高配物理机且上不封顶)。此外,大量来自不一样 IDC 的客户端请求消耗了巨大的网络带宽,形成网络拥堵。算法
同时,阿里巴巴不少业务走向国际化,大量的应用部署在海外,海外服务器下载要回源国内,浪费了大量的国际带宽,并且还很慢;若是传输大文件,网络环境差,失败的话又得重来一遍,效率极低。后端
因而咱们很天然的就想到了 P2P 技术,P2P 技术并不新鲜,当时也调研了不少国内外的系统,可是调研的结论是这些系统的规模和稳定性都没法达到咱们的指望,所以就有了Dragonfly这个产品的诞生。跨域
做为一款通用文件分发系统,Dragonfly 主要可以解决如下几个方面的问题:缓存
经过 P2P 技术解决大规模镜像下载问题,原理以下:安全
针对上图有几个概念须要先解释:服务器
主要下载过程以下:网络
经过上述 P2P 技术,能够完全解决镜像仓库的带宽瓶颈问题,充分利用各个 Peer 的硬件资源和网络传输能力,达到规模越大传输越快的效果。多线程
Dragonfly的系统架构不涉及对容器技术体系的任何改动,彻底能够无缝支持容器使其拥有 P2P 镜像分发能力,以大幅提高文件分发效率!
结合 CDN 与预热技术解决远距离传输问题
经过 CDN 缓存技术,每一个客户端能够就近从 SuperNode 中下载种子块,而无需跨地域进行网络传输,CDN 缓存原理大体以下:
同一个文件的第一个请求者会触发检查机制,根据请求信息计算出缓存位置,若是缓存不存在,则触发回源同步操做生成种子块;不然向源站发送 HEAD 请求并带上 If-Modified-Since 字段,该字段的值为上次服务器返回的文件最后修改时间,若是响应码为 304,则表示源站中的文件目前还未被修改过,缓存文件是有效的,而后再根据缓存文件的元信息肯定文件是不是完整的,若是完整,则缓存彻底命中;不然须要经过断点续传方式把剩下的文件分段下载过来,断点续传的前提是源站必须支持分段下载,不然仍是要同步整个文件。若是 HEAD 请求的响应码为200,则表示源站文件已被修改过,缓存无效,此时须要进行回源同步操做;若是响应码既不是 304 也不是 200,则表示源站异常或地址无效,下载任务直接失败。
经过 CDN 缓存技术能够解决客户端回源下载以及就近下载的问题,可是若是缓存不命中,针对跨域远距离传输的场景,SuperNode 回源同步的效率将会很是低,这会直接影响到总体的分发效率,为了解决该问题,Dragonfly采用了一种自动化层级预热机制来最大程度的提高缓存命中率,其大体原理以下:
经过 Push 命令把镜像文件推送到 Registry 的过程当中,每推送完一层镜像就会当即触发 SuperNode 以 P2P 方式把该层镜像同步到 SuperNode 本地,经过这种方式,能够充分利用用户执行Push和Pull操做的时间间隙(大概10分钟左右),把镜像的各层文件同步到 SuperNode 中,这样当用户执行 Pull 命令时,就能够直接利用 SuperNode 中的缓存文件,天然而然也就没有远距离传输的问题了。
经过动态压缩和智能化调度解决带宽成本问题
经过动态压缩,能够在不影响 SuperNode 和 Peer 正常运行的状况下,对文件中最值得压缩的部分实施相应的压缩策略,从而能够节约大量的网络带宽资源,同时还能进一步提高分发速率,相比于传统的 HTTP 原生压缩方式,动态压缩主要有如下几个方面的优点:
动态压缩的优点首先天然是动态性,它能够保证只有在 SuperNode 和 Peer 负载正常的状况下才会开启压缩,同时只会对文件中最值得压缩的分块进行压缩且压缩策略也是动态肯定的;此外,经过多线程压缩方式能够大幅提高压缩速率,并且借助 SuperNode 的缓存能力,整个下载过程只须要压缩一次便可,压缩收益比相对于 HTTP 原生方式至少提高 10 倍。
除了动态压缩外,经过 SuperNode 强大的任务调度能力,能够尽可能使在同一个网络设备下的 Peer 互传分块,减小跨网络设备、跨机房的流量,从而进一步下降网络带宽成本。
经过加密插件解决安全传输问题
在下载某些敏感类文件(好比秘钥文件或者帐号数据之类的文件)时,传输的安全性必需要获得有效保障,在这方面,Dragonfly主要作了如下几个方面的工做:
在阿里巴巴集团内部,Dragonfly做为全集团基础技术构件,目前已经承载了全集团 90%以上的文件下载任务,包括镜像文件、应用软件包、算法数据文件、静态资源文件以及索引文件等等,日分发峰值目前能够达到 1 亿次,为集团业务提供了高效稳定的文件分发能力;同时,每一年双十一你们买买买的过程当中,其中最为关键的营销活动数据(数 GB 大小)也是在将近零点的时候经过Dragonfly来成功(100%成功)抵达数万台机器上的,万一在这个过程当中有一点点问题,双十一会如何,你懂的......
目前 Dragonfly 也已经开源,在开源社区中, 目前 Star 数 2500+,同时有很是多的外部用户对 Dragonfly 表现出浓厚的兴趣,也有不少外部公司正在使用 Dragonfly 来解决他们在镜像或者文件分发方面遇到的各类问题,好比中国移动、滴滴、科大讯飞等;此外,Dragonfly 已成为全中国第三个进入CNCF Sandbox 级别的项目,后续咱们还会继续加油努力,争取尽快毕业!
经过以上介绍,我相信针对Dragonfly是否足够成熟,你们内心应该也有杆秤了吧,固然,Dragonfly还有不少事情须要不断完善和改进,在这里诚邀各路人才,一块儿把Dragonfly打形成一款世界级的产品!
本文为云栖社区原创内容,未经容许不得转载。