写点什么

Etsy 是如何做到每天 50 次以上部署的

2014 年 4 月 01 日

Daniel Schauenberg 伦敦QCon 大会上描述了 Etsy 是如何做到每天 50 次部署的。Etsy 以其 DevOps 和持续交付的实践而闻名。一个完全自动化的部署管道、全面的应用监控和基于 IRC(互联网中继聊天)的协作是能达到这个变更频率的同时又保持最小风险的重要因素。

Etsy 的开发策略是反复围绕着做许多小的、连续的变更。这样做的一个直接后果就是需要每天做很多次部署。用 Daniel Schauenberg 的话来说,在任何时刻每个 Etsy 的开发人员都需要知道下面这个问题的答案:“我现在有足够的信心来部署这个变更吗?”。为了能够每次都可以轻松部署,Etsy 采取了一系列的工具和做法:强制基于 IRC 的沟通、开发者虚拟机、持续集成、一键式部署、全面的应用和系统监控、对于开发和运营团队都采取免责怪的事后检查(post-mortem)和随叫随到的政策。

每个开发人员都拥有自己的通过 Chef 配置的 KVM (基于内核的虚拟机)。在线上运营中使用的 cookbooks 也同样地用在了开发人员的虚拟机中,这意味着每个开发者都有自己完整的 Etsy 栈。任何人都可以通过 Virtual Madness (一个可以实现整个过程自动化的 Web 应用) 来提供一个虚拟机。

在持续集成方面,Daniel 解释了 Try 是如何成为所有过程的核心。Try 是一个工具,它允许开发人员在 Jenkins (在 Etsy 中使用的持续集成工具) 中测试他的代码变更,而不需要先提交到trunk 中。Try 有助于保持trunk 干净从而实现可部署,而同时让开发人员能够快速、可靠地测试他们的变更。CI(持续集成) 集群必须强大到足以支持150 名​工程师,以及每天超过 14000 个测试集的运行 LXC (Linux 容器)会平衡工作的负载,它们还提供了隔离机制,确保不同测试的执行之间不会冲突。

部署管道会经过 Princess,或者工作台,这是一种上线前的环境。Princess 的所有意图和目的就是上线环境,但只有 Etsy 的员工可以访问它。 Deployinator 是由 Etsy 构建并使用的部署工具,提供一键式部署。

配置标志,也被称为功能标志,是部署过程中的一个主要组成部分。通过其功能API ,Etsy 能够做 A/B 测试,即完全启用或者禁用某一功能或一个给定功能的变体。

监控是 Etsy 团队建立信心做持续交付的关键。开发人员做自己的功能监控,而且每个人都可以通过仪表盘看到所有的监控图表。Etsy 具有这样一个策略,在默认情况下所有可以被绘制的信息都会被制成图表。随着时间的推移,指标的数量一直稳步增加,所以Etsy 建立了 Kale 来帮助检测异常模式。所有的日志都可以通过 Supergrep 展现出来,Supergrep 是一个基于 Web 的日志展示工具,这增加了日志的信噪比。

IRC 是贯穿 Etsy 的主要沟通工具,也是 Etsy 协作文化的关键。里面有很多不同的聊天室,每一个都具有特定目的。例如,在聊天室#warroom 中仅允许中断事故有关的会谈。聊天室是用来协调调查,讨论应对措施和解决方案监控的。与其他的聊天室一样,#warroom 是个鼓励新工程师们潜水的地方,因为这些聊天室被认为是学习的好地方。

每次中断发生,或接近中断的时候,所有人被邀请来做事后检查。事后检查是一个重要的文化活动,如果财务和支持人员需要,他们也可以参与。事后检查是为了成为一个学习的机会,所以它们不应该包含责备。所有事后检查相关的信息被记录在 Morgue 里面:日期、严重性、IRC 日志、图表和补救措施。Morgue 是 Etsy 为了保存事后检查记录而特别构建的另一种工具。

对于运营、开发、支付和支持部门的员工都采取随叫随到的政策。开发人员通常轮流地在每四个星期里的某一周提供随叫随到的支持。该政策的目的是让每个人都意识到上线产品每天所面临的问题,使他们能够在开发新功能或改进现有流程时考虑到这些问题。

Etsy 拥有约 60 万的月访问量和每月 15 亿页面浏览量。

查看英文原文 How Etsy Deploys More Than 50 Times a Day


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 4 月 01 日 01:363364

评论

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

【架构训练营】第二期

云064

依赖倒置(DIP)

Lane

极客大学架构师训练营

架构师训练营 - 学习总结 - 第二讲

吕浩

架构师训练营-第二周 - 总结

lei Shi

数据库大咖讲坛活动6月18日墨天轮平台线上举行,阿里腾讯达梦众多数据库大咖齐聚!

墨天轮

数据库 腾讯云 阿里云 数据库设计

第二周作业:设计原则

Larry

依赖倒置原则

Young

架构师训练营 第二周 学习总结

极客

第二周总结

Young

不要再用面向对象语言编写面向过程的代码了

鸠摩智

依赖倒置和接口隔离

allen

架构师训练营——设计模式篇_作业

独孤魂

作业

架构师训练营第 0 期 - 第 2 周 - 学习总结

极客大学架构师训练营

架构师训练营第二周感悟

路人

依赖倒置原则 & 类图优化

lei Shi

架构学习第二周作业

云峰

最初的梦想

小天同学

写作 成长 梦想

架构师训练营-第二周-学习总结

A Matt

极客大学架构师训练营

第二周学习总结

CP

架构师训练营 - 第二周 - 学习总结

Anrika

架构师 极客大学架构师训练营

第二周总结

Linuxer

极客大学架构师训练营

接口隔离原则设计缓存Cache工具类

Arvin

Week02 作业

极客大学架构师训练营

week2作业

雪涛公子

架构师训练营 - 第二周 - 命题作业

Anrika

架构师 极客大学架构师训练营

第二周作业

CP

架构师训练营第 02 周——总结

李伟

极客大学架构师训练营

架构师系列之面向对象即设计原则

彭阿三

架构

架构师训练营作业 (第二周)

小遵

week2 总结

雪涛公子

实现自己架构的主要手段

重新来过

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

Etsy是如何做到每天50次以上部署的-InfoQ