浙江移动容器云基于 Dragonfly 的统一文件分发平台生产实践

2018-12-18 19:49:34 +08:00
 AlibabaSS

2018 年 11 月, 源于阿里巴巴的云原生镜像分发系统—— Dragonfly 在 KubeCon 上海现场亮相,成为 CNCF 沙箱级别项目( Sandbox Level Project )。

Dragonfly 主要解决以 Kubernetes 为核心的分布式应用编排系统的镜像分发难题。2017 年开源即成为阿里巴巴最为核心的基础设施技术之一。开源一年以来,Dragonfly 已在诸多行业落地。

DCOS 是浙江移动容器云平台,目前在平台式运行的应用系统已有 185 套,包括手机营业厅、CRM 应用等核心系统。本文将主要介绍浙江移动容器云( DCOS )平台以 Dragonfly 为改革“利器”,成功解决了运营商大规模集群场景下分发效率低、成功率低以及网络带宽控制难等问题;并反哺社区,在 Dragonfly 界面功能、生产高可用部署层面对 Dragonfly 进行了升级。

DCOS 容器云在生产环境中

遇到的挑战

随着浙江移动容器云( DCOS )平台的持续完善,承载应用不断增加,在运行容器数量接近 10000 个。采用传统 C/S ( Client-Server )结构的分发服务体系已经越来越无法适应大规模分布式应用在代码包发布、文件传输时的场景:

Dragonfly 简介

P2P ( Peer-To-Peer )是一种点对点网络技术,通过各结点互联,将网络中的资源和服务分散在各个结点上。信息的传输和服务实现直接在结点之间进行,避免了传统 C/S 结构可能的单点瓶颈。

CNCF 开源文件分发服务解决方案 Dragonfly,是一种基于 P2P 与 CDN 技术,构建了适用于容器镜像和文件的分发系统,有效解决了企业大规模集群场景下文件和镜像分发效率、成功率低以及网络带宽控制的问题。

Dragonfly 的核心组件:

Dragonfly 分发工作原理(以镜像分发为例): 容器镜像不同于普通文件,由多层存储构成,下载也是分层下载,非单一文件。每层的镜像文件都会被分割为 block 数据块并作为种子。下载结束后,通过每层镜像唯一的 ID 和 sha256 算法,重新组合成完整的镜像。确保下载过程的一致性。

Dragonfly 镜像下载模式的过程如下图所示:

  1. dfget-proxy 拦截客户端 docker 发起的镜像下载请求( docker pull )并转换为向 SuperNode 的 dfget 下载请求;
  2. SuperNode 从镜像源仓库下载镜像并将镜像分割成多个 block 种子数据块;
  3. dfget 下载数据块并对外共享已下载的数据块,SuperNode 记录数据块下载情况,并指引后续下载请求在结点之间以 P2P 方式进行数据块下载;
  4. Dokcer daemon 的镜像 pull 机制将最终将镜像文件组成完整的镜像。

根据 Dragonfly 的上述特性,浙江移动容器云平台结合生产实际决定引入 Dragonfly 技术对现行代码包发布模式进行改造,通过 P2P 网络分摊发布时产生的单一文件服务器传输带宽瓶颈,并利用 Docker 本身的镜像 pull 机制来保证整个发布过程镜像文件的一致性。

解决方案:统一分发平台

架构设计与实现

功能架构设计

在 Dragonfly 技术的基础上,结合浙江移动容器云生产实践,统一分发平台的总体设计目标如下:

基于上述目标,统一分发平台的总体架构设计如下:

技术架构实现

根据上述平台设计目标与总体架构分析,容器云团队在开源组件的基础上进行了平台功能的二次开发,具体包括:

技术特色

核心功能模块|分发控制接口交互流程

如下图所示,统一分发平台的核心模块在进行任务分发时的工作流程具体如下:

  1. 用户通过 Client 建立镜像或文件分发任务;
  2. 分发模块首先通过平台 API 服务网关( Edgetrans )的鉴权功能判断用户是否具有分发功能的权限;
  3. 用户通过鉴权后,设置分发任务参数,提供集群 ID,平台从 MySQL 数据库读取集群配置信息实现集群结点的自主发现。用户也可以指定多个结点 IP 作为自定义集群参数;
  4. 根据分发类型,核心服务层( Docktrans )分发功能模块将不同的前端分发请求转换为 dfget (文件)或者 Docker pull (镜像)命令,通过统一远程调用 Docker Service 服务将命令下发至多个结点 df-client 进行相应的处理;
  5. 在任务进行过程中,任务进度与任务事件日志分别写入 Redis 与 MySQL 数据库提供用户对任务状态的查询能力。

生产环境改造成果

截至目前,生产共运行 200 余个业务系统 1700 多个应用模块,已全部优化为镜像发布模式。发布耗时和发布成功率得到明显改善:

采用 P2P 镜像发布后,业务多应用一次上线的月均发布成功率稳定在 98%。

4 月后容器云平台开始用 P2P 镜像发布方式代替传统分发系统的代码包发布方式,多应用一次集中上线发布耗时相较与改造之前大幅降低,平均下降 67%。

同时,容器云平台选取了多个应用集群进行单应用的 P2P 镜像发布改造效果测试。可以看出,单个应用发布耗时相较于改造前大幅降低,平均下降 81.5%。

后续推广

统一文件分发平台已有效解决了浙江移动容器云应用在代码发布过程中的效率和一致性问题,成为平台的重要组成部分之一。同时,也支持更多大规模集群中进行高效文件分发的场景。可陆续推广至:集群批量安装介质分发以及集群批量配置文件更新。

社区共建|界面功能展示

直接引入 Dragonfly 后诞生的社区诉求

目前,客户端界面化开发工作基本完成,已进入生产测试和部署中。分发平台总体规划 4 大核心功能:任务管理,目标管理,权限管理和系统分析,现已开放前三项功能。

权限管理界面

权限管理,即用户管理,为不同用户提供个性化的权限管理功能,具体如下:

目标管理界面

目标管理,即用户进行任务分发的目标集群结点管理,为用户提供管理集群的 P2P 组网和集群结点状态信息健康功能,具体如下:

任务管理

任务管理提供文件或镜像分发任务的创建、删除、停止、信息查看等功能,具体如下:

系统分析(计划开放)

预计后续将开放系统分析功能,为平台管理员、用户提供任务分发耗时、成功率等数据和任务执行效率统计图表,通过数据统计与预测,有效支撑平台向智能化方向演进。

社区共建|生产高可用部署

镜像库主备容灾部署,主备之间通过镜像同步保持数据一致性。

目前,我们计划把界面功能展示贡献给 CNCF Dragonfly 社区,进一步丰富 CNCF Dragonfly 社区周边生态。未来,我们希望更多人参与进来,一起为社区繁荣贡献力量。

本文作者:

陈远峥 浙江移动云计算架构师

王淼鑫 浙江移动云计算架构师

Dragonfly 社区分享

Dragonfly 社区贡献者太云在 Dragonfly Meetup 分享到:

“目前,Dragonfly 已经成为 CNCF Sandbox 项目,Star 数 2700+,有很多企业用户正在使用 Dragonfly 来解决他们在镜像或者文件分发方面遇到的各种问题。未来,我们将不断完善和改进 Dragonfly,为云原生应用提供更加丰富强大且简便的分发工具。期待与大家共同努力,让 Dragonfly 早日成为 CNCF 毕业项目。”

推荐阅读

深度解读阿里巴巴云原生镜像分发系统 Dragonfly

重磅!阿里巴巴云原生镜像分发系统 Dragonfly 加入 CNCF

项目地址

https://github.com/dragonflyoss/Dragonfly

Dragonfly Roadmap

1397 次点击
所在节点    推广
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/518737

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX