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

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

浙江移动容器云基于 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
相关文章
|
1月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
102 2
|
16天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
16天前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
16天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
26天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
57 4
|
29天前
|
安全 持续交付 Docker
深入理解并实践容器化技术——Docker 深度解析
深入理解并实践容器化技术——Docker 深度解析
56 2
|
1月前
|
Prometheus 监控 持续交付
深入理解Docker容器化技术:从基础到实践
深入理解Docker容器化技术:从基础到实践
|
1月前
|
安全 Docker 微服务
深入理解Docker容器技术:从基础到实践
深入理解Docker容器技术:从基础到实践
|
29天前
|
持续交付 开发者 Docker
深入理解并实践容器化技术——Docker篇
深入理解并实践容器化技术——Docker篇
42 0
|
1月前
|
Kubernetes Linux Docker
容器化技术Docker入门与实践
容器化技术Docker入门与实践
56 0