AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

迁移到 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:534057
用户头像

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

关注

评论

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

如何设计一个实时数据同步系统

golang redis 系统设计 数据同步

Qt Group与高通公司合作,简化工业物联网的用户界面开发

财见

AMD 以全新第二代 Versal 系列器件扩展领先自适应 SoC 产品组合

财见

大型连锁企业异地组网稳定性提升指南

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商 异地组网 SDWAN

杭州悦数 2023 年回顾:领航创新,多维突破

悦数图数据库

图数据库

2024-04-10:用go语言,考虑一个非负整数数组 A, 如果数组中相邻元素之和为完全平方数,我们称这个数组是正方形数组。 现在要计算 A 的正方形排列的数量。 两个排列 A1 和 A2 被认为是

福大大架构师每日一题

福大大架构师每日一题

教你构建一个优秀的SD Prompt

程序那些事

程序那些事 AIGC Stable Diffusion

实用指南:使用Pytest Allure测试框架添加用例失败截图

霍格沃兹测试开发学社

【干货】零售商的商品规划策略

第七在线

小红书笔记详情API接口解析:轻松抓取内容数据,提升业务效率

技术冰糖葫芦

API Explorer api 货币化 API】 pinduoduo API

探索314协议代币合约开发:解析AVE热搜上币与项目推广

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

零基础到精通,Postman安装使用教程(一)

霍格沃兹测试开发学社

沙丘世界,如何抵抗勒索病毒的入侵?

脑极体

数据安全

表设计的18条军规

苏三说技术

数据库 表设计

软件测试学习笔记丨测试框架体系 TDD DDT BDD ATDD 介绍

测试人

软件测试 测试开发

云手机解决海外社媒运营的诸多挑战

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机 跨境云手机

基于istio实现单集群地域故障转移

华为云开发者联盟

微服务 istio 华为云 华为云开发者联盟 企业号2024年4月PK榜

选择国外云主机的五大理由以及优劣势分析

一只扑棱蛾子

国外主机

抓包神器wireshark安装保姆级教程

霍格沃兹测试开发学社

GPT-4 Turbo 融合视觉能力;Google 新添 AI 视频应用 Vids丨 RTE 开发者日报 Vol.181

声网

eBPF 开发者大会倒计时!4 月 13 日不见不散

乘云数字DataBuff

智能运维 ebpf Kubernetes, 云原生, eBPF 一体化可观测平台Databuff 云原生运维

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