共计 2377 个字符,预计需要花费 6 分钟才能阅读完成。
背景
挑战
快手容器云平台旨在为快手一直增长、一直变动和多样化的业务,提供基于容器化部署的超大规模基础设施服务。为了实现这一指标,快手工程师须要解决弹性、稳定性、效率和无服务器架构等挑战,在这些挑战中,镜像散发的稳定性和效率也是最辣手的问题之一。
解决方案
为了让快手容器云平台的镜像散发更加稳固和高效,快手容器云技术团队携手阿里云、蚂蚁团体在龙蜥社区适配优化落地解决方案。事实证明,Dragonfly 及其子项目 Nydus 是以后场景下适合的解决方案,该计划可能与现有零碎很好地兼容,在现有能力根底上平滑过渡,同时也为服务交付带来了大幅的效率晋升。
成果
Dragonfly 上线后,整个集群通过 P2P 组建散发网,所有节点帮忙中心化镜像仓库缓解网络带宽压力。镜像仓库的网络带宽压力均匀缓解 70% 以上,峰值压力缓解 80% 以上,镜像散发零碎变得更加稳固、牢靠、高效,零碎可能同时反对更多数量的镜像并发拉取申请,尤其是在应答 Daemonset 部署和要害、大批量实例业务服务更新的场景中,高并发镜像拉取仓库不再是瓶颈。
应用我的项目
- Dragonfly:https://github.com/dragonflyo…
- Nydus:https://github.com/dragonflyo…
- containerd:https://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 肯定会在云原生生态中表演重要角色。