NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

迁移到 Docker:艰难的最后一半路程

  • 2016-07-14
  • 本文字数:2994 字

    阅读完需:约 10 分钟

作为一家提供对多云平台统一访问接口的公司,RightScale 帮助客户管理云计算提供商的 IT 流程。随着 Docker 的流行,该公司也开始关注这一概念。而且随着对 Docker 的了解,RightScale 公司发现了该容器的好处,并准备将软件开发和部署过程迁移到 Docker 中。Tim Miller 是 RightScale 公司的副总工程师,领导着公司的产品开发与部署工作。在 Tim Miller 的第一篇博客文章中,他讲述了RightScale 决定要迁移到Docker 的原因。之后,Tim Miller 又发表了Project Sherpa 项目和我们为什么迁移到Docker 的系列文章的第二篇第三篇第四篇,讲述了Sherpa 项目启动两周前后的进展。最近,RightScale 的高级软件工程师Ryan Williamson 和Tim Miller 联合编写了该系列文章的第五篇,讲述了Sherpa 项目后一半任务的进展情况。

在之前的几篇文章中,Tim Miller 一直试图以周为单位来记录Sherpa 项目的进展和相关情况。然而,项目启动后的第三、第四和第五周已经很难严格区分了——工程师们都在连夜赶工来完成迁移工作。

对于一项新的技术,工程师们总是会抱着极大的兴趣和热情,非常愿意在项目中进行尝试。因此,Sherpa 项目团队确立了将所有需要完成的迁移工作进行纵向划分的计划——每个小团队分别负责不同的服务。这也是他们所知道的保持团队成员高效工作的唯一方法。在计划确定一周后,每一个小团队都进行了热情高涨的状态——成员积极学习相关内容,喜欢正在做的事并积极对核心模板和部署方法的巨大改变进行宣传。这些行为经常与其他团队的想法是完全相反的。这使得Sherpa 项目的运维团队负责人Mark Dotson 非常不开心。他更喜欢T.G.I Friday 餐厅那种放松的感觉。因此,他的观点是:“想法非常好!在我们做完这个之后,可以讨论实现你的伟大想法。但是现在,还是让我先使用这个不是很好、但经过测试的方法”。

对于每一项服务,其迁移过程的第一个里程碑就是“传统部署”对象的Docker 化的1:1 替代版本部署到了集成环境中。在这之后,Mark 会接手,为模拟和生产环节做准备,并保证所有的服务都能够一起工作。为了让项目架构更加清晰,Sherpa 团队将服务依据Docker 化所需要的时间和服务是否会被逻辑部署在一起划分为了三个组。首先,他们确定了第一组应用各自进入模拟环节的目标日期。然后,再依次确定了第二组和第三组的时间。

随着每一组服务依次到达截止时间,这种划分一直没有问题。然而,他们很快便遇到了团队别阻塞的情况——构建集成环境的版本库各个分支变化太快,以至于合并后的版本没法和分支保持一致来支持Docker 版本。这就意味着,如果每个团队都不再将主分支合并到特征分支中,团队就没办法将代码提交到集成环境中。

例如,如果他们将主分支中的变化合并到了_tagservice_,每个工程师都需要更新_tagservice_。否则,由于依赖的应用无法工作,一些不相关的服务会突然崩溃。这就使得拥有一个稳定的配置更加困难,拉慢了所有人的速度。他们终于将所有工作进行到了模拟阶段,但在这个点遇到了难题。运维团队的负责人Mark 花费了15 个小时在他T 恤上加了一句话:“请将主分支合并到特征分支中…请记着一直这样做。”。

在最新的这篇文章发表时,他们已经进行到了项目的第五周。相比于之前的计划,项目进度有些落后。第一组服务进入生产环境的时间落后计划10 天;第二组服务进入生产环境的时间与计划时间刚好吻合;第三组服务只有3 个应用,预计还需要一周才能进入生产环境。引起时间延迟的主要原因就是集成环节——开发结束之后,容器需要移动到模拟环境,并且需要在移动到生产环境之前保证所有的回归测试通过。还有一部分延迟是服务的开发时间比预期长了一些。

目前的模拟环境包含了容器化的服务和传统部署的服务,而让两种服务一起工作是非常复杂也非常耗时的任务。由于之前的自动化工具并不能处理这种混合的情况,他们选派了一个运维工程师来保证这项任务的质量。因此,该任务就成为了一个瓶颈。但这名工程师也非常了解了如何让两类服务一起工作。尽管工作有所延期,之前采用的“置之死地而后生”的策略被证明为正确的决定。

重新定义工程师的每日工作任务

对于其开发团队而言,Sherpa 项目引起了工程师每天工作任务的两大变化:GitHub 的分支策略和本地开发应用的方式。之前,他们在GitHub 中设置了_master_、_staging_ 和_production_ 三个分支,来分别对应运行在各个系统中的代码。现在,他们重新定义了_staging_ 和_production_ 分支,将其对应为提交到驱动工作流的master 分支的指针。当代码提交到master 时,自动化工具会创建一个标记为“lastest”的镜像。该镜像会一直随着工作堆栈前进,直到进入生产环节。这使得该团队可以在追求持续交付方面走得更远。

Sherpa 项目的其中一个目标就是通过使用 Docker 来进行本地开发,增加开发和测试的速度和迭代效率。他们需要为开发人员提供两种机制来与微服务进行本地交互:

  1. 为开发人员提供一种机制来从应用的版本库中检出代码,并在容器中建立应用和所有的依赖关系。
  2. 为开发人员提供一种机制,利用现有的依赖关系的容器,来使用开发人员的本地源代码构建应用。

当开发人员正在编写与服务交互的代码,而他又并非该服务方面的专家时,第一种方法非常有用。配置和引导服务的速度越快,实际想做的事可以花费的时间也就越多。在这种用例中,他们使用了 docker-compose.yml 和标准的 Docker Compose 工具。一个简单的“docker-compose up”命令即可实现一个应用的自我安装、创建数据库并配置为与任何有依赖关系的微服务进行通信。

第二种用例是针对那些工作在其所擅长的应用的开发人员的。利用第二种方法,开发人员可以运行容器所需要的所有依赖关系,并对自己编写的代码在不必建立开发环境的情况下进行迅速迭代修改。RightScale 的架构师 Tony Spataro 编写的一个开源 RubyGem 在这方面提供了很大帮助。

到目前为止一切顺利

目前为止,迁移到 Docker 的行动已经取得了一些预期的成果,包括极大的提高了开发人员和 QA 团队的迭代速度。之前,当测试一个 bug 修复时,RightScale 的 QA 团队需要建立一个集成环境,并运行测试集才能重新生成之前的问题。然后,他们将代码放到一个单独的服务中来让系统运行到一个状态——系统正在运行包含修复的代码,之后重新运行测试集以验证之前的 bug 是否被修复,而且没有新的回归被引入。该工程通常需要 1-2 个小时。现在,RightScale 的 QA 团队可以在本地运行他们所需要的服务,将其作为基准进行测试,将包含修复的 Docker 镜像来下来,重新本地运行测试集,并可以在 20 分钟之内完成他们的任务。对一个 bug 修复而言,其速度提供了 3-6 倍。

此外,Tim Miller 等还发现移植后的服务可以节约服务器密度提高所带来的花销。未来,他会分享 Sherpa 项目的更多统计数据。至此,Sherpa 项目已经离终点很近了。接下来,他们只需要再加把劲,就可以完成整个迁移任务。

想了解更多 Tim Miller 团队如何使用 Docker 的内容,可以观看其在线研讨会。它包括了:

  • 安全产生高质量、易于管理的 Docker 镜像的建议
  • 在笔记本和云之间多宿主机互联的建议
  • 在产品中编排 Docker:服务发现、配置以及可审核性
  • Docker 带来的宿主机密度的增加
  • 用于 Docker 容器的动态监控和警告

感谢陈兴璐对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-07-14 16:533767
用户头像

发布了 268 篇内容, 共 118.2 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

直播平台源码搭建协议讲解篇:传输控制协议TCP

山东布谷科技

TCP 软件开发 网络协议 直播平台源码 传输控制协议

illustrator2023最新版 矢量图形编辑软件ai2023简体中文版下载

mac

Illustrator ai2023 苹果mac 矢量图形编辑软件 illustrator2023

实时云渲染的关键技术是什么?

Finovy Cloud

云计算 3D 云渲染 实时云渲染

打造基于AI的一站式节能减碳方案,南洋万邦助力工业园区实现“双碳”目标

飞桨PaddlePaddle

人工智能 paddle 百度飞桨

【代码实践】使用FastAPI+Supabase+LangChain开发AI应用

张文平

FastApi 应用开发 Supabase #人工智能 #LangChain

iStat Menus for Mac中文下载附激活码

mac大玩家j

Mac软件 系统检测工具

数据库国产化应用改造实践

鲸品堂

数据库 国产化 企业号 8 月 PK 榜

Apache Paimon 实时数据湖 Streaming Lakehouse 的存储底座

Apache Flink

大数据 flink 实时计算

查询速度最高提升50倍!火山引擎ByteHouse在广告投放领域实践分享

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号 8 月 PK 榜

小灯塔系列-中小企业数字化转型系列研究——CRM测评报告

向量智库

Databend 开源周报第 107 期

Databend

高性能网络 SIG 月度动态:ANCK 首次支持 SMCv2.1,virtio 规范支持隧道报文内头部哈希

OpenAnolis小助手

高性能网络 龙蜥社区 anck 龙蜥sig smc

蓝易云:JAVA使用HTTP代理教程。

百度搜索:蓝易云

Java 云计算 Linux 运维 HTTP

华为云classroom赋能--Toolkit系列插件DevSecOps助力开发者提速

华为云PaaS服务小智

DevOps 开发工具 华为云

SRE 与开发的自动化协同 -- 生产环境出现 bug 自动生成异常追踪

观测云

异常追踪 智能巡检

数字化转型与架构-架构设计篇|建模之“静态”模型

数字随行

数字化转型

百度工程师浅析解码策略

百度Geek说

解码 企业号 8 月 PK 榜 生成模型

峰会回顾第7期 | 视窗绘制技术演进和新趋势

OpenHarmony开发者

OpenHarmony

Audition 2021 mac完整版 音频编辑软件audition新功能

mac

苹果mac 音频编辑软件 Windows软件 audition 2021 audition

蓝易云:shell简单命令大全。

百度搜索:蓝易云

云计算 Linux 运维 Shell 云服务器

使用 FastGPT 构建高质量 AI 知识库

米开朗基杨

人工智能 云计算 AI ChatGPT FastGPT

全链路数据湖开发治理解决方案2.0重磅升级,全面增强数据入湖、调度和治理能力

阿里云大数据AI技术

火山引擎DataWind产品可视化能力揭秘

白露为霜

数据可视化 商业智能 BI 分析工具 图表库 BI 报表

2023中国算力大会,和鲸科技携手生态伙伴共同推动算力创新发展与应用

ModelWhale

AI 算力 云算力 2023中国算力大会

How IPQ9574, IPQ9554, QCN9274, and QCN6274 Qualcomm Chipsets Harness the Full Potential of WiFi7 Features

wallyslilly

WiFi7 ipq9554 qcn9274 qcn6274 ipq9574

学习微服务必推荐的天花板级别微服务架构笔记

小小怪下士

Java 程序员 微服务 springboot

最好用的Java开发工具:IDEA 2023激活中文+安装教程

胖墩儿不胖y

Mac 软件 Java 开发 java开发工具

WIFI6E moudle-QCN9074+WiFi6 MT7915-support 2.4GHz and 5GHz-M.2-MINI PCIE how to choose?

wifi6-yiyi

wifi6 WIFI6E

迁移到Docker:艰难的最后一半路程_语言 & 开发_Tim Miller_InfoQ精选文章