背景
应战
快手容器云渠道旨在为快手不断增加、不断变化和多样化的事务,供给根据容器化布置的超大规模基础设施服务。为了完结这一方针,快手工程师需求处理弹性、安稳性、效率和无服务器架构等应战,在这些应战中,镜像分发的安稳性和效率也是最棘手的问题之一。
处理计划
为了让快手容器云渠道的镜像分发愈加安稳和高效,快手容器云技能团队携手阿里云、蚂蚁集团在龙蜥社区适配优化落地处理计划。事实证明,Dragonfly 及其子项目 Nydus 是当时场景下适宜的处理计划,该计划能够与现有体系很好地兼容,在现有才干基础上滑润过渡,一起也为服务交付带来了大幅的效率进步。
作用
Dragonfly 上线后,整个集群经过 P2P 组建分发网,一切节点帮助中心化镜像库房缓解网络带宽压力。镜像库房的网络带宽压力均匀缓解 70% 以上,峰值压力缓解 80% 以上,镜像分发体系变得愈加安稳、牢靠、高效,体系能够一起支撑更多数量的镜像并发拉取恳求,尤其是在应对 Daemonset 布置和要害、大批量实例事务服务更新的场景中,高并发镜像拉取库房不再是瓶颈。
运用项目
- Dragonfly:github.com/dragonflyos…
- Nydus:github.com/dragonflyos…
- containerd:github.com/containerd/…
相关数据
峰值缓解 80% 以上
镜像拉取时刻节约 90% 以上
POD 实例服务耗时节约 50%
计划详解
为每月10 亿用户供给安稳性和性能支撑
“在快手,Dragonfly 有效处理了海量文件分发问题。”
——吴宏斌 快手综合运营渠道负责人
关于快手的镜像分发体系升级改造来说,最大的应战不仅仅是镜像库房峰值压力的缓解和镜像拉取加快,怎么让服务分发无缝衔接滑润过渡,尽或许让事务无感、不受体系变化影响相同重要。快手容器云渠道工程师经过调研发现,Nydus 与 Dragonfly 体系深度集成,一起也支撑传统 OCI 镜像,能够以兼容友爱的方式供给快速、安稳、安全、便捷的容器镜像访问,十分容易地就能适配容器云渠道已有作业,完结事务从已有镜像运用方式滑润过渡到新镜像格局。渠道仅有要做的便是将容器运转引擎从 Docker 切换到 containerd,因为 containerd 与 Dragonfly 的集成体会更好。在快手工程师的尽力下,大规模节点的容器引擎平稳切换轻而易举,containerd 和 Dragonfly 均已被快速全面选用。
安稳高效的镜像分发
关于安稳、高效的镜像分发,Dragonfly 给出了完美的答案。在快手,有许多重要的服务需求在短短几分钟内扩容到成千上万个实例,例如快手的818 购物节或双 11 活动的事务扩容需求。这种缩放需求数千 GB 带宽才干直接从镜像库房下载。在另外一些场景中,预测模型和搜索事务需求定期更新模型参数文件和索引文件来保证推荐作用和检索作用,这在技能上意味着有必要立行将数百 GB 的文件分发到每个相关实例。
快手工程师在一切容器云主机布置了 Dragonfly 组件:Dfdaemon 和 Dfget,经过 P2P 算法拉取文件。一起,在每个 AZ 布置了独立的超级节点集群,为 Dfget 规划了 Schedule Server,挑选适宜的超级节点来避免跨 AZ 或者跨 Region 的流量。更重要的是,工程师根据 Dragonfly 独特的片管理 P2P 算法完结了数据流 P2P 传输,降低了磁盘负载。得益于 Dragonfly,数以万计的实例能够一起拉取镜像或下载文件,而不会增加时刻本钱和磁盘负载。
“先进的技能便是第一生产力,快手容器云渠道拥抱 Dragonfly 和 Nydus 后,运用交付效率大幅进步,给事务创新带来了更多或许。”
——孙寅 快手容器云负责人
因为拉取镜像是容器生命周期中比较耗时的步骤之一,为了进一步加快镜像分发和服务发动,工程师们又继续启用了 Nydus 镜像懒加载项目。快手有许多服务有数千个 Pod 实例,其中一些有超过 20G 或更大的镜像,当这些服务升级或扩容时,巨大的镜像和发动时刻会严重减慢服务发动。快手需求一种能够明显进步服务发动速度的处理计划,特别是因为某些服务将其训练模型放入镜像中,这关于服务发动来说或许是灾难性的。
因为快手在 Dragonfly 项目上的运用和施行,工程师们很早就了解到 Nydus 项目。Nydus 是一个强壮的开源文件体系处理计划,能够为云原生作业负载,例如容器镜像,构建高效的镜像分发体系。
得益于 Nydus 全新的镜像规划,每个 Pod 能够在几秒钟内完结发动,这样能够很多节约服务布置实例的发动时刻,让运用尽快为用户供给服务。关于每个集群节点,支撑Nydus的作业并不杂乱,经过容器引擎无损切换(指无需 POD 驱逐)、装备改变即可顺利完结。
在实践中, 针对快手容器云渠道的大局镜像库房中心,我们做了以下工作:
- 容器引擎从 Docker 无损切换到 containerd;
- 在镜像构建阶段支撑运用 Nydus 标准构建镜像;
- 在集群节点间,运用 Dragonfly 的 P2P 技能支撑镜像分发;
- containerd经过装备Dragonfly 的 P2P 代理拉取镜像,并运用 Nydus 镜像发动容器。
当然,以上一切的变动,都继续兼容当时已有的 OCI 镜像格局以及体系已有功用。
综上所述,Dragonfly 和 Nydus 一起为快手容器云渠道供给了处理镜像分发问题的最佳处理计划。数以万计的快手服务大大减少了布置时刻,事务线研发工程师在更新服务时也愈加轻松容易。
Dragonfly 和 Nydus 都是来自 CNCF 的优异开源项目,更进一步说,快手也将继续对该项目进行更多投入,并与社区展开深化合作,使它变得愈加强壮和可继续。云原生技能是基础设施领域的一场革命,尤其是在弹性和无服务器方面,我们信任 Dragonfly 一定会在云原生生态中扮演重要角色。