• 我的订阅
  • 科技

从 3 分以上到 40 秒,Docker 容器 5 倍速度部署实战!

类别:科技 发布时间:2023-03-09 19:00:00 来源:CSDN

【CSDN 编者按】使用 pex 使我们能够在 Docker 之上建立一个可重复的、一致的环境,我们很高兴使用这个 pex-on-docker 组合来探索其他的可能性。

原文链接:https://dagster.io/blog/fast-deploys-with-pex-and-docker

作者 | Shalabh Chaturvedi

译者 | 邓晓娟 责编 | 王子彧

出品 | CSDN(ID:CSDNnews)

无服务器开发和反馈循环

Dagster 是一个数据编排器。在无服务器 Dagster 云上,不需要建立本地开发环境或云基础设施,就可以开发和部署 Dagster 代码。当你向 GitHub 提交修改时,GitHub Action 会直接构建和部署你的代码到 Dagster 云。你可以在用户界面中查看和互动你的 Dagster 对象。借助 Dagster 云,远程环境通常用于让使用自动创建的暂存环境与合作者共享部署。个人本地开发和共享远程环境相结合,形成了一个强大的开发周期。

从 3 分以上到 40 秒,Docker 容器 5 倍速度部署实战!

最初,我们在这上面使用了基于 Docker 的标准构建流程。然而我们很快发现,这让编辑-部署-运行的周期变得非常繁琐缓慢。为了加快速度,我们构建了一个系统,实现在 Docker 镜像之外运送代码。这篇文章描述了我们分析的问题、确定的解决方案,以及在这个过程中做出的各种权衡。

从 3 分以上到 40 秒,Docker 容器 5 倍速度部署实战!

Shalabh Chaturvedi 分享了 Dagster Cloud 新的快速部署能力的高水平概述,详情请观看视频:https://youtu.be/mPT3FBFSw6g

Docker镜像的问题

当我们在 GitHub 上构建 Docker 镜像并将其部署到 Dagster 云时,每次提交都需要3到5分钟才能在 Dagster 用户界面上显示出来。无服务器开发人员通常会在每次迭代中对代码进行小的改动,但却每次都要等待3分钟以上才能看到改动的效果,这种无意义的等待很容易让人厌烦。我们分析了一个问题:“当你修改一行代码并提交后,会发生什么?”发现了以下的情况。

我们分析了 "当你改变一行代码并提交时会发生什么",发现了以下情况。

从 3 分以上到 40 秒,Docker 容器 5 倍速度部署实战!

20s > 提供 GitHub 运行器并下载动作 10s > 下载基于 Docker 的行动 60s > 建立并上传用户的 Docker 镜像*。90s > 在 AWS 中运行用户的 Docker 镜像 180s的运行时间

* 在启用缓存的情况下需要60秒(如果没有改变依赖关系的话);如果依赖关系有变化,则需要90秒以上。

如你所见,花费时间最长的两件事是:构建一个 Docker 镜像(60-90多秒)部署 Docker 容器(90秒)

那就让我们来看看这两件事都做了些什么。

构建 Docker 镜像

关于构建 Docker 镜像需要注意的一些事情。Docker 镜像是由堆栈中的多个层堆叠而成的,其中每一层都是由 Docker 文件中的一个命令子集构建的;使用 GitHub Actions 缓存 在 GitHub 构建机上重建镜像时,会将所有未受影响的层从缓存中拉到构建机上。请注意,如果你的项目中有大量的依赖关系没有改变,它们会在构建过程中从缓存中一起被复制到构建机器上;Docker 的构建不是确定性的。如果你用完全相同的内容构建一个镜像两次,每次都可能产生不同的哈希值。(虽然不直接相关,但我们想记录一下这个意外的观察结果。作为一个极端案例,考虑到一个新构建的大层与已经在注册表中的层相同,仍然可能作为一个新的层被上传)。

启动 Docker 容器

关于启动 Docker 容器需要注意的是,我们使用 AWS Fargate,它需要45到90秒的时间来配置和启动一个镜像。且不提供任何图像缓存。启动一个新的容器会从注册表中下载所有的层到配置的容器上。

其他限制

在 Docker 镜像建立和启动后,我们运行用户的代码来提取元数据,显示在用户界面上。这一步无法避免,可能需要几秒钟到30秒,甚至更久,这取决于元数据的计算方式(比如它可以连接到数据库来读取模式)。这个代码服务器保持活动状态,为元数据请求提供服务,直到推送新版本的代码,然后启动一个新的容器。

我们的一个关键要求是 可重复性:我们需要能够多次重新部署完全相同的代码和环境。使用 Docker 镜像的哈希值作为代码和环境的标识符,可以很好地满足这一要求。

备选方案综述

除了上述的方案以外,我们还探索和讨论了一些替代方案。从 Fargate 切换到 EC2,以加快容器的启动。 这将增加我们的运营负担,要求我们预先提供、监控和扩展我们的集群。我们仍然会遇到 Docker 构建缓慢的问题;换成不同的 Docker 构建系统,如 AWS CodeBuild。 这将需要更多的部署工作,并与 GitHub 进行更深入的整合。目前还不清楚这样做的回报是否值得;切换到 AWS Lambda,启动时间快得多。 Lambda 环境有自己的基础镜像,对于自定义需求来说不太友好。而且它的执行时间还有15分钟的限制,这对运行时间较长的服务器来说,需要复杂的变通方法;通过构建并只上传修改后的代码到同一服务器,重新使用长期运行的代码服务器。 这里的挑战是实现打包和运行机制,以确保一个可靠和可重复的执行环境。我们研究了各种打包和分发 Python 环境的方法,包括 rsync、poetry、nix、shiv 和 pex。还考虑了使用 EFS卷来挂载Python环境,与这些工具相结合。

我们作出最终决定背后的有一个关键因素,是意识到虽然 Docker 镜像是行业标准,但如果我们只需要同步一个小的变化时,就去移动100多兆的镜像,是很不必要的繁重操作。考虑到 Git 只提供差异,但却能产生完整而一致的存储库。因此我们倾向于方案4,只需要能找到一个合适的工具来做大部分的工作。经过一些实验,我们发现 pex 的许多功能对我们的用例非常有效。

什么是 PEX?

pex是 Python Executable 的缩写,它是一种将 Python 包捆绑到称为 pex 文件的工具。这些是可执行文件,其中包含 Python 包和一些引导代码。例如,我们可以把 dagster 包和它的依赖项捆绑成一个文件,然后运行它。% pex dagster --python=python3. 8-o dagster.pex % ./dagster.pexPython 3.8. 16(default, Dec 72022, 01:24:57) [Clang 14.0. 0(clang- 1400.0. 29.202)] on darwin Type "help", "copyright", "credits"or"license"formore information. (InteractiveConsole)>>> import dagster >>>

将整个环境放在一个文件中,便于运输和存储在 S3 中。pex 提供的不仅仅是一个 "文件中的虚拟环境",以下是我们使用的其他功能。隔离

在运行时,pex 环境与其他网站范围内的包完全隔离。环境中唯一存在的包是那些捆绑在 pex 文件中的包。我们将多个 pex 文件运送到同一台机器上,而不必担心环境隔离问题。确定性

使用相同的输入包会产生位对位的相同的 pex 文件。$pex dagster pandas -o out.pex | sha256sum e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -$pex dagster pandas -o out.pex | sha256sum e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -组成

多个 pex 文件可以在运行时合并,有效地将环境合并成一个。% pex pandas -o pandas.pex% pex dagster -o dagster.pex% PEX_PATH=pandas.pex ./dagster.pexPython 3.8. 16(default, Dec 72022, 01:24:57) [Clang 14.0. 0(clang- 1400.0. 29.202)] on darwin Type "help", "copyright", "credits"or"license"formore information. (InteractiveConsole)>>> import pandas >>> import dagster >>>

我们用它把代码分成两部分,在运行时合并:一个包含所有依赖关系的 deps.pex 文件和一个只包含用户代码的 source.pex 文件。跨平台的构建

我们在无服务器云中使用 Linux python :*-slim 衍生的基础镜像。只要软件包的轮子可用, pex 工具可以在任何平台上为 Linux 构建 pex 文件。

快速部署

我们使用 pex 与 S3 相结合来存储 pex 文件,建立了一个系统,其中快速路径避免了构建和启动 Docker 镜像的开销。

我们的系统是这样工作的:当你向 GitHub 提交代码时,GitHub Action 要么进行完全构建,要么进行快速构建,这取决于你的依赖关系自上次部署后是否有变化。我们跟踪 setup.py 和 requirements.txt 中指定的依赖项。

对于一个完整的构建,将项目依赖性构建到 deps.pex 文件,将代码构建到 source.pex 文件。两者都被上传到 Dagster 云端。对于快速构建,只构建和上传 source.pex 文件。

在 Dagster 云中,可以重新使用一个现有的容器或提供一个新的容器作为代码服务器。将 deps.pex 和 source.pex 文件下载到这个代码服务器上,并使用它们在一个隔离的环境中运行代码。我们从不在用户之间共享一个容器,一个容器上的所有环境都属于同一个用户。快速部署的最佳情况和最坏情况的时间线如下。

从 3 分以上到 40 秒,Docker 容器 5 倍速度部署实战!

其结果是,在快速构建(Fast Build)的路径中,当我们进行快速构建并重用现有容器时,整个过程只需40秒,而不像以前一样需要3分钟以上。

我们将这一功能称为【快速部署】,现在所有新注册的无服务器用户都默认开启这一功能。

权衡与问题

快速部署极大地提高了部署速度(4-5倍),但它伴随着一些需要权衡的问题和其他因素,我们已经进行了调整:虽然我们现在可以在一个代码服务器上运行多个环境,并且它们在代码上是隔离的,但它们仍然共享相同的内存和 CPU。如果我们在一个容器上放了太多的环境,而且一个环境占用了太多的内存,就会对同一容器中的其他运行环境产生不利的影响;Docker 可以在任何操作系统上为 Linux 构建 Python 包,因为目标 Linux 操作系统和 Python 解释器在构建过程中是可用的。pex 只能为 Linux 构建提供 轮子 的包的 pex 文件。作为退路,我们在构建过程中使用 Docker 容器 来处理 源码分发 。这个步骤可以在未来被移到一个单独的共享服务中;在构建 Docker 镜像时,可以进行深度定制,例如,你可以指定一个自定义的基础镜像,而不是默认的 python :*-slim 镜像之一。为了实现功能上的平等,我们必须实施一种方法,让用户指定他们自己的基础 Docker 镜像,我们在快速部署时使用这种镜像。

GitHub 工作流程和 pex

很多人可能已经注意到,原图中,过去基于 Docker 的下载操作需要10秒左右。那么我们是如何完全消除这个步骤的呢?

以前我们把 GitHub Action 代码打包成 Docker 镜像,然后使用 Docker 容器操作。而现在,我们把动作代码打包成一个 pex 文件,将其检入动作仓库,直接在 GitHub 运行器上运行。这就省去了下载和启动 Docker 动作镜像的时间,同时仍然允许我们打包所有的依赖项。

我们做的另一个小优化是,只使用一个 GitHub 工作流作业。在 GitHub 中的每一个工作启动都需要10秒钟来配置一个新的运行器。

结论

将部署时间从 3 分钟以上减少到 40 秒,是一个显著的加速,我们对这个结果非常满意,特别是当测试自己的服务时。使用 pex 使我们能够在 Docker 之上建立一个可重复的、一致的环境,我们很高兴使用这个 pex-on-docker 组合来探索其他的可能性。

☞ 奇瑞汽车回应要求员工周六上班:本意不是压榨员工;Google发布史上最大通才模型PaLM-E;Chrome 111发布|极客头条

☞ 创业 5 年暂未发布任何新品,由苹果前高管打造的初创公司,拥抱 AI 后,再获 1 亿美元融资!

☞“我们聘请 ChatGPT,让它当了一天 ML 工程师” 返回搜狐,查看更多

责任编辑:

以上内容为资讯信息快照,由td.fyun.cc爬虫进行采集并收录,本站未对信息做任何修改,信息内容不代表本站立场。

快照生成时间:2023-03-13 00:45:07

本站信息快照查询为非营利公共服务,如有侵权请联系我们进行删除。

信息原文地址:

构建Docker镜像提速40倍!这家创企获种子轮融资,顶尖孵化器YC参投
智东西8月23日消息,据VentureBeat 8月22日报道,专注于容器化技术的创业公司Depot宣布完成了410万美元种子轮融资
2024-08-24 09:30:00
基于品高基础云+容器云的DevOps双模应用探索
...可执行文件、安装包,也可以根据需要生成品高云虚机或容器,分别存放于虚机镜像仓库或容器镜像仓库。在持续部署方面,可以根据需要在品高云上直接拉起新虚机通过品高云的自动化编排工具进
2023-08-18 15:00:00
升级RASP 领航ADR 边界无限入选IDC Innovators推荐厂商
...通过DevOps流程(如CI/CD)开发/管理的分布式技术(如微服务、容器、容器编排框架)相结合为特征的平台。这种虚拟化、计算和存储技术的结合使得能够部署容器化的、支持微服务
2023-06-25 20:00:00
性能提升70% 最懂国人的NAS来了!极空间Z4 Pro评测:实战20分钟搞定2台虚拟机
...了这些新增的功能,极空间Z4 Pro还有很多亮点,比如支持容器(Docker)、拥有双2.5Gbps网口并能聚合为5Gbps
2023-11-29 12:02:00
Kubernetes 原生 CI/CD 管道入门
...可以在此步骤中构建软件工件;例如,我们可以构建一个容器镜像,或者它可以是一个二进制可执行文件。CD代表“持续交付”,即您在自动化过程中将软件工件推送到生产/暂存环境。在这种情
2023-05-08 09:16:00
中亦科技:如何应对云原生时代中间件运维面临的挑战
...用管理、配置自动化、DEVOPS、云平台能力、云原生安全、容器及k8s能力等。银行核心系统架构的发展历程在云原生的“新技术、新领域、新挑战”的冲击下,中亦科技中间件团队为了更
2023-08-11 18:00:00
硬核|绿联 NAS 异地组网教程:免费 4Mbps带宽
...用不了了呢?其实,想要实现异地组网远程访问NAS管理Docker容器并不难。接下来将为大家详细介绍,如何通过Docker实现跨平台异地组网
2024-09-10 09:27:00
OpenShift 与 Kubernetes:不公平的较量
...ubernetes,让我告诉你,这种比较远非公平。当今最流行的容器编排软件替代品是OpenShift和Kubernetes
2023-04-23 15:47:00
Node Docker 官方镜像使用方法
有关如何使用Node的官方图像创建Docker容器的分步教程,这将使您的工作过程更轻松、更高效。什么是Node.js?Node
2023-05-19 10:30:00
更多关于科技的资讯:
稳就业 稳企业 稳市场 稳预期|从 “设备制造” 到 “全链服务”:陕西电子长岭电气纺织机电产业的进阶之路
9月29日,由陕西省委宣传部举办的“稳就业、稳企业、稳市场、稳预期”主题媒体行活动,带领陕西多家主流媒体走进陕西电子陕西长岭电气有限责任公司参观考察
2025-10-08 17:51:00
近日,中国物流与采购联合会公布全国第十批5A级供应链服务企业名单,华远国际陆港集团正式通过评审,获评“5A级供应链服务企业”
2025-10-08 18:01:00
货丰价稳、活动密集、销售井喷、消费升级……在这个中秋国庆假期,我市消费市场“热”力值拉满,处处繁荣兴旺、活力十足。10月8日
2025-10-08 18:32:00
佳盛机电乘风而上,今年前8月产值同比增长超38%抢占新赛道,270多名员工假期忙“冲刺”南报网讯(通讯员单维亮记者张希)“我们是智能电网产业链条上的配套企业
2025-10-07 08:41:00
培育壮大十大千亿级产业集群丨十堰臻融:创新与技改“双轮”驱动 产值同比增长30%
十堰广电讯(全媒体记者 何旭 通讯员 胡新)科技创新是提升核心竞争力关键。十堰臻融汽车科技有限公司以智能化装备升级与专利技术研发为双引擎
2025-10-07 20:43:00
沉浸式AR科技盛宴:打造“可触摸”的科普实验室,重构科普新形态
这个国庆去哪玩?中国科学技术馆告诉你!2025年10月1日——10月7日由中国科学技术馆、北京峰火文化科技有限公司、Rokid联合打造的以“探境・AR科技智慧”为主题的AR体验活动正火热开展中
2025-10-07 09:05:00
2025年全国大学生计算机大赛总决赛落幕 西工大获奖数量质量再创新高
近日,2025年全国大学生计算机系统能力大赛各赛道总决赛圆满落幕。本届大赛吸引了来自清华大学、北京大学、复旦大学、华中科技大学
2025-10-07 11:40:00
太划算!遵义多重补贴点燃消费热情
多彩贵州网讯国庆中秋“双节”同至,遵义市推出的“悦·遵义‘双节’欢乐购”促消费活动覆盖整个长假,其中“焕新过节·乐享生活”家电家居促销活动形式丰富
2025-10-07 14:51:00
□南京日报/紫金山新闻记者 张安琪9月23日,2025南京金秋经贸洽谈会开幕式上,一批全球首个、国内首批、性能全球最高的科技成果密集亮相
2025-10-06 09:49:00
国庆中秋长假期间,新能源汽车已成为众多家庭出游的重要选择。为进一步破解高速服务区“充电难、排队久”的现实困境,山西交控集团坚持“科技创新+服务升级”双轮驱动
2025-10-06 18:01:00
邮储信用卡气球雨惊喜派对即将空降青岛李沧万达,国庆中秋邀您共启幸运之旅!
鲁网9月30日讯2025年国庆、中秋双节同庆之际,为回馈广大市民与持卡人长期以来的支持,邮储银行青岛分行将于10月1日-8日
2025-10-06 14:11:00
□南京日报/紫金山新闻记者 于洁尘 通讯员陈天骄“干我们这行的,哪有节假日?越是假期越要忙。”10月5日一大早,28岁的陈潇离开南京
2025-10-06 09:48:00
节日我在岗丨十堰高周波:抓创新赶订单 全力冲刺年度目标
十堰广电讯(全媒体记者 陈林)在国庆中秋假期,位于十堰经济开发区的十堰高周波科工贸有限公司抓创新赶订单,全力冲刺年度目标
2025-10-05 20:21:00
节日我在岗丨艾斯卓智能科技:节日不休 赶制订单
十堰广电讯(全媒体记者 耿吉国)放假不放松,生产不停工。国庆中秋长假,我市各生产企业铆足干劲抓生产、赶订单,奋力冲刺年度目标任务
2025-10-05 20:21:00
普阳钢铁工程机械用高强高韧宽厚板全国市场占有率名列前茅一块宽厚板的靶向发力——“铁疙瘩”怎样变成“金娃娃”(十)从矿山到港口
2025-10-05 07:47:00