10 亿月活用户下,快手基于 Dragonfly 的超大规模镜像分发实践

简介: Dragonfly 和 Nydus 都是来自 CNCF 的优秀开源项目,更进一步说,快手也将继续对该项目进行更多投入,并与社区展开深入合作,使它变得更加强大和可持续。云原生技术是基础设施领域的一场革命,尤其是在弹性和无服务器方面,我们相信 Dragonfly 一定会在云原生生态中扮演重要角色。

背景


挑战


快手容器云平台旨在为快手不断增长、不断变化和多样化的业务,提供基于容器化部署的超大规模基础设施服务。为了实现这一目标,快手工程师需要解决弹性、稳定性、效率和无服务器架构等挑战,在这些挑战中,镜像分发的稳定性和效率也是最棘手的问题之一。


解决方案


为了让快手容器云平台的镜像分发更加稳定和高效,快手容器云技术团队携手阿里云、蚂蚁集团在龙蜥社区适配优化落地解决方案。事实证明,Dragonfly 及其子项目 Nydus 是当前场景下合适的解决方案,该方案能够与现有系统很好地兼容,在现有能力基础上平滑过渡,同时也为服务交付带来了大幅的效率提升。


效果


Dragonfly 上线后,整个集群通过 P2P 组建分发网,所有节点帮助中心化镜像仓库缓解网络带宽压力。镜像仓库的网络带宽压力平均缓解 70% 以上,峰值压力缓解 80% 以上,镜像分发系统变得更加稳定、可靠、高效,系统能够同时支持更多数量的镜像并发拉取请求,尤其是在应对 Daemonset 部署和关键、大批量实例业务服务更新的场景中,高并发镜像拉取仓库不再是瓶颈。


使用项目



相关数据


峰值缓解 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,数以万计的实例可以同时拉取镜像或下载文件,而不会增加时间成本和磁盘负载。


1.png


“先进的技术就是第一生产力,快手容器云平台拥抱 Dragonfly 和 Nydus 后,应用交付效率大幅提升,给业务创新带来了更多可能。”

——孙寅 快手容器云负责人


由于拉取镜像是容器生命周期中比较耗时的步骤之一,为了进一步加速镜像分发和服务启动,工程师们又继续启用了 Nydus 镜像懒加载项目。快手有许多服务有数千个 Pod 实例,其中一些有超过 20G 或更大的镜像,当这些服务升级或扩容时,巨大的镜像和启动时间会严重减慢服务启动。快手需要一种能够显著提高服务启动速度的解决方案,特别是因为某些服务将其训练模型放入镜像中,这对于服务启动来说可能是灾难性的。


由于快手在 Dragonfly 项目上的应用和实施,工程师们很早就了解到 Nydus 项目。Nydus 是一个强大的开源文件系统解决方案,可以为云原生工作负载,例如容器镜像,构建高效的镜像分发系统。


得益于 Nydus 全新的镜像设计,每个 Pod 可以在几秒钟内完成启动,这样可以大量节省服务部署实例的启动时间,让应用尽快为用户提供服务。对于每个集群节点,支持Nydus的工作并不复杂,通过容器引擎无损切换(指无需 POD 驱逐)、配置变更即可顺利完成。


在实践中, 针对快手容器云平台的全局镜像仓库中心,我们做了以下事情:


  1. 容器引擎从 Docker 无损切换到 containerd;
  2. 在镜像构建阶段支持使用 Nydus 标准构建镜像;
  3. 在集群节点间,使用 Dragonfly 的 P2P 技术支持镜像分发;
  4. containerd通过配置Dragonfly 的 P2P 代理拉取镜像,并使用 Nydus 镜像启动容器。


当然,以上所有的变动,都继续兼容当前已有的 OCI 镜像格式以及系统已有功能。


2.png


综上所述,Dragonfly 和 Nydus 一起为快手容器云平台提供了处理镜像分发问题的最佳解决方案。数以万计的快手服务大大减少了部署时间,业务线研发工程师在更新服务时也更加轻松容易。


Dragonfly 和 Nydus 都是来自 CNCF 的优秀开源项目,更进一步说,快手也将继续对该项目进行更多投入,并与社区展开深入合作,使它变得更加强大和可持续。云原生技术是基础设施领域的一场革命,尤其是在弹性和无服务器方面,我们相信 Dragonfly 一定会在云原生生态中扮演重要角色。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
内存技术
STM32F103 五个时钟源
STM32F103 五个时钟源
1048 0
|
Web App开发 搜索推荐 Android开发
AppsFlyer 研究(三)OneLink平台归因、跳转、深度链接
AppsFlyer 研究(三)OneLink平台归因、跳转、深度链接
2619 0
|
9月前
|
人工智能 关系型数据库 分布式数据库
PolarDB Supabase 助力快速构建现代应用
简介:本文介绍了在AI时代背景下,如何通过阿里云瑶池推出的全托管Supabase服务快速构建现代应用。该服务基于开源Supabase与PolarDB-PG数据库,提供一站式后端解决方案,涵盖实时数据库、身份认证、文件存储及AI能力,助力开发者高效迭代业务,降低运维复杂度。适用于协作类应用、SaaS平台、移动开发等多种场景。
|
存储 监控
显示器中的HDR10、HDR400、HDR600有什么区别?
HDR10是通用的HDR标准,无需支付版权费;HDR400、HDR600等是VESA的DisplayHDR等级,根据亮度、色域、色深等指标划分,数值越高代表性能越强,如HDR400要求400nit亮度,HDR600则需600nit以上。
|
NoSQL Redis 数据库
Redis单线程模型 redis 为什么是单线程?为什么 redis 单线程效率还能那么高,速度还能特别快
本文解释了Redis为什么采用单线程模型,以及为什么Redis单线程模型的效率和速度依然可以非常高,主要原因包括Redis操作主要访问内存、核心操作简单、单线程避免了线程竞争开销,以及使用了IO多路复用机制epoll。
492 0
Redis单线程模型 redis 为什么是单线程?为什么 redis 单线程效率还能那么高,速度还能特别快
|
数据可视化 数据挖掘 数据处理
【源码解析】深入Pandas的心脏DataFrame 含十大功能、源码实现与编程知识点
【源码解析】深入Pandas的心脏DataFrame 含十大功能、源码实现与编程知识点
github—如何在README.md文件中添加图片
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80551021 1、在github上的仓库建立一个存放图片的文件夹,文件夹名字随意。
11551 1
|
存储 Dragonfly 缓存
Dragonfly 基于 P2P 的文件和镜像分发系统
Dragonfly 是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。
Dragonfly 基于 P2P 的文件和镜像分发系统
|
存储 SQL 缓存
下一篇
开通oss服务