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

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
性能测试 PTS,5000VUM额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介:

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

611.jpg | center | 827x347

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)结构的分发服务体系已经越来越无法适应大规模分布式应用在代码包发布、文件传输时的场景:

  • 计算结点因网络异常等原因,导致代码包下载失败,对应用代码包的完整性和一致性构成影响。
  • 在多用户高并发情况下,可能会出现 TB 级的文件传输,单点性能瓶颈增加了应用发布时长。

Dragonfly 简介

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

612.jpg | center | 612x264

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

Dragonfly 的核心组件:

  • SuperNode:超级结点,以被动 CDN 方式从文件源下载文件并生产种子数据块,在 P2P 网络中,充当网络控制器,调度结点之间的分块数据传输;
  • dfget proxy:部署在计算结点的代理,负责 P2P 结点的数据块下载和结点间的数据共享。

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

613.jpg | center | 643x229

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

614.jpg | center | 622x379

  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 技术的基础上,结合浙江移动容器云生产实践,统一分发平台的总体设计目标如下:

  • 利用 Dragonfly 技术和文件下载校验功能,解决目前生产发布过程中应用代码包发布不一致、发布时间过长的问题;
  • 支持客户端界面化,屏蔽后台命令行细节,简化操作流程,效率更高;
  • 支持 Mesos、K8s、Host、VM 等多种云环境下的分发,并实现集群的自主发现,支持用户通过统一分发平台对目标集群进行统一化管理;
  • 增加用户权限控制和任务带宽限制,支持多租户多任务的分发;
  • 优化 P2P Agent 部署方式,支持更快速的计算结点 P2P 组网。

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

615.jpg | center | 677x418

  • P2P 网络层是支持不同异构集群接入(主机集群、K8s 集群、Mesos 集群)的由多个计算结点构成的分发网络;
  • 分发服务层由功能模块和存储模块构成,是整个通用分发系统的核心架构。其中,用户接入鉴权模块提供系统登录审核功能;分发控制模块基于 Dragonfly,实现 P2P 方式的任务分发;流量控制模块提供租户对不同任务的带宽设置功能;配置信息数据库负责记录网络层目标集群、任务状态等基本信息;用户通过状态查询模块可实现对分发任务执行进度的透明掌控;
  • 用户操作层由任意数量的界面化用户客户端构成。

技术架构实现

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

  • 开发界面化用户客户端 Client;
  • 引入 Harbor 开源镜像仓库进行镜像存储,Minio 对象存储服务进行文件存储;
  • 使用 MySQL、Redis 作为 CMDB,由 MySQL 负责管理集群状态、用户信息等,为面向集群的“一键式”任务创建提供支撑。通过 Redis 保存分发任务状态信息,提供高并发、低延迟的状态查询服务;
  • 平台核心服务层(Docktrans)和 API 服务网关层(Edgetrans)都是是无状态、面向集群的、可动态横向扩展的核心组:

    • API 网关封装了系统内部架构,主要负责接收并转发 Client 发起的任务请求以及实现用户对各功能模块的接入鉴权,并对外可提供定制化的 API 调用服务;
    • 核心服务层是平台各功能模块业务逻辑处理的引擎。在分发过程中,核心服务层将通过统一的远程调用向 P2P 代理结点同时发起下载请求,完成客户端——任务集群“一对多”的分发过程。
  • df-master 与 df-client 均为 Dragonfly 组件,df-master 即 Dragonfly 中的超级节点SuperNode,df-client 即 P2P 网络中的对等节点代理 dfget proxy。

616.jpg | center | 629x527

技术特色

  • df-client 实现容器镜像化。通过轻量级的容器部署,加快了组网效率。新接入网络层的集群 host 结点可通过镜像下载、启动的方式,秒级完成 P2P Agent 结点启动;
  • 核心接口层(Docktrans)屏蔽了dfget 底层命令行细节,提供了界面化的功能,简化了用户操作。通过统一远程调用方式下发至多个 P2P 任务结点,解决了用户需要逐台进行 dfget 等下载操作的问题,简化了“一对多”的任务发起模式。

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

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

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

617.jpg | center | 650x750

生产环境改造成果

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

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

618.png | center | 750x452

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

619.jpg | center | 806x437

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

620.jpg | center | 756x418

后续推广

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

社区共建|界面功能展示

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

  • 缺少图形化界面,用户使用成本高,操作效率低;
  • 缺少用户权限管理和分发审计功能,无分发管控能力;
  • 不支持用户“一对多”的集群操作模式。云环境下,用户通常需要向自己所管理的集群同时进行分发,但现有模式仅支持用户在单结点进行分发操作;
  • 传统 Agent 应用软件包部署方式效率低,不利于大规模集群的快速伸缩扩展。作为系统软件,增加了对宿主系统的入侵性。

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

权限管理界面

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

  • 支持不同角色(超级管理员、任务集群管理员、任务管理员)用户创建、删除、修改;
  • 支持不同权限集合的定制化组合(角色创建),用户权限赋权;
  • 支持外部系统用户接入与权限授权(暂未开放)。

621.jpg | center | 775x356

622.jpg | center | 777x291

目标管理界面

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

  • 支持不同用户集群的创建和删除;
  • 支持在用户所管理集群下,容器自动化 Agent 部署快速新增、删除 P2P 网络结点,并对结点状态进行监控;
  • 支持不同类型,如 host(虚拟机、物理机)集群、K8s 集群、Mesos 集群的接入,同时,支持直接读取 K8s、Mesos 集群结点信息,批量接入 P2P 网络层。

623.jpg | center | 768x352

624.jpg | center | 770x375

任务管理

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

  • 支持镜像预热模式(可设置计划分发任务,提前发布镜像或文件分发至各结点);
  • 支持容器镜像等多格式文件的分发;
  • 支持指定任务集群多结点“一键式”任务创建、执行、删除、终止和已执行任务的“一键复制”;
  • 支持对发布文件版本的创建和删除管理;
  • 支持对分发任务状态与任务日志的查看。

625.jpg | center | 768x356

626.jpg | center | 777x358

系统分析(计划开放)

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

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

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

  • P2P 发布由 df-master 和 df-client 构成(蓝色部分),df-master 从镜像库拉取镜像形成 P2P 种子,每个机房配置两个 df-master 形成高可用;
  • P2P 分发只在本机房分发,避免跨机房流量;
  • 每个机房配置两个 mirror(备用镜像库),当 P2P 分发方式异常无法工作时计算结点会自动到 mirror 上下载镜像, mirror 通过负载均衡实现高可用。

626.jpg | center | 777x358

目前,我们计划把界面功能展示贡献给 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

628.jpg | center | 827x951

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
19 4
|
4天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
23 3
|
5天前
|
存储 运维 Kubernetes
云端迁移:备份中心助力企业跨云迁移K8s容器服务平台
本文将简要介绍阿里云容器服务ACK的备份中心,并以某科技公司在其实际的迁移过程中遇到具体挑战为例,阐述如何有效地利用备份中心来助力企业的容器服务平台迁移项目。
|
11天前
|
Kubernetes 监控 开发者
专家级实践:利用Cloud Toolkit进行微服务治理与容器化部署
【10月更文挑战第19天】在当今的软件开发领域,微服务架构因其高可伸缩性、易于维护和快速迭代的特点而备受青睐。然而,随着微服务数量的增加,管理和服务治理变得越来越复杂。作为阿里巴巴云推出的一款免费且开源的开发者工具,Cloud Toolkit 提供了一系列实用的功能,帮助开发者在微服务治理和容器化部署方面更加高效。本文将从个人的角度出发,探讨如何利用 Cloud Toolkit 来应对这些挑战。
30 2
|
20天前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。
|
21天前
|
运维 JavaScript 虚拟化
探索容器化技术:Docker的实践与应用
【10月更文挑战第9天】探索容器化技术:Docker的实践与应用
45 3
|
1月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
16天前
|
运维 Kubernetes 监控
掌握Docker容器化技术:构建、部署与管理的高效实践
【10月更文挑战第14天】掌握Docker容器化技术:构建、部署与管理的高效实践
32 0
|
17天前
|
前端开发 Docker 容器
主机host服务器和Docker容器之间的文件互传方法汇总
Docker 成为前端工具,可实现跨设备兼容。本文介绍主机与 Docker 容器/镜像间文件传输的三种方法:1. 构建镜像时使用 `COPY` 或 `ADD` 指令;2. 启动容器时使用 `-v` 挂载卷;3. 运行时使用 `docker cp` 命令。每种方法适用于不同场景,如静态文件打包、开发时文件同步及临时文件传输。注意权限问题、容器停止后的文件传输及性能影响。
|
24天前
|
运维 监控 Cloud Native
深入了解容器化技术:Docker 的应用与实践
【10月更文挑战第6天】深入了解容器化技术:Docker 的应用与实践
31 0