写点什么

Buzzfeed 部署架构的改进

  • 2017-06-22
  • 本文字数:2102 字

    阅读完需:约 7 分钟

Buzzfeed 工程师团队分享了他们的部署演化做法。他们构建了一个称为Rig 的内部框架,在其中使用了Docker、AWS ECS 和Jenkins 等工具,将先前需数日的基于单体应用的部署,演化为每日可达150 次部署。由此实现了迁移到面向服务的架构,并构建了一个协作度更高的工程团队。

有一些工程团队已经分享了他们在改进架构部署 DevOps 文化中的做法。Buzzfeed 作为一家媒体和技术站点,是最近实施了架构改进的企业之一。一开始,Buzzfeed 是一个小型单体应用。随着特性与用户的逐步增加,Buzzfeed 的规模和发布范围上也在同步增长。其整套产品在不断的扩展,其中每个产品具有不同的需求,因而部署过程也变得繁琐。部署的推送和验证开始需要数日的时间。

为改进部署,架构团队中的一个小组在 Buzzfeed 内部启动了一个采用了容器技术的 PaaS 项目。为详细了解这一部署架构转换的情况,InfoQ 采访了 Buzzfeed 的工程副总 Matt Reiferson:

针对如何巩固并改进我们的配置管理系统及相关工具,我们进行了多次讨论。最终,我们认识到,方法只会对现有的工作流产生很小的改进。我们的设想是,与其从 Puppet、Chef 或 Ansible 这类工具中选取,不如完全避免用户与工具交互的必要性。首要的一点是,我们缺失一种高层抽象,使得团队可以聚焦于解决自身的实际问题,并快速地迭代。容器是一种天然的解决方案,极大地简化了“配置管理”,并为统一的“服务”抽象提供了基底。我们认识到,所有的容器编排解决方案需要关联在一起,以给出我们所想要提供的一致的开发和配置体验。

除了这样的工具集之外,团队还决定对自身的应用采用一种面向服务的架构(SOA,Service Oriented Architecture)。SOA 本身尚具有一系列的挑战,无论是文化上的,还是技术上的。为采用 SOA,团队必须得到授权,并需要在组织上是成熟的。Reiferson 详细介绍了 Buzzfeed 在采纳 SOA 上的体验:

我们已经采纳了一种基于 Spotify 模型的松散组织架构,分隔为由“小队”任务驱动的“组”所组成,其中每个小队的成员具有适当的技能集,可以完成自身的目标。这一转化的关键在于需要对架构进行投资。之后,Rig 将围绕开发流程、运营所有权、可观察性和一致性,对我们所寻求的那些团队和个人应具备的行为具体化,并加以鼓励。我们已制订了一系列的内部文档,称为《BuzzFeed 计算机使用指南》,其中详细地说明了我们的技术选择、工作流以及前端(FE)/ 后端(BE)/ 移动架构。最为重要的是,这些文档深入地研究了我们所考虑的权衡问题,不只是要做什么,而且包括做事的原因,这为在构建新系统时做出好的选择提供了场景。我们还组建了一个架构审核委员会,并提供了团队可用的项目提交模板。

Rig 的一些灵感来自于 paasta 开源项目。每个服务的架构需求可以使用 YAML 文件和 Dockerfile 定义,用于容器镜像的创建。设计人员采用了一些运行时的通用惯例,其中一些来自“十二要素(Twelve Factor)原则”,此外还有一些惯例,类似于对所有基于HTTP 的服务不给出本地状态和健康检查端点。架构层是基于虚拟机的,其中部署由Web 界面启动, Terraform 用于提供云架构服务。在容器编排上,团队使用了 Amazon 的 Elastic Container Service(ECS)。此外还采用了其它一些 AWS 服务,用于 DNS 和负载均衡等。

在改进旧系统的全部工作中,首当其冲的是使开发和部署流水线易于操作、对 App 接口的标准化,以及提高所有团队在部署后的参与度。这些工作的目标是实现更好的协作和站点可靠性。正确的工具集对于开发(Dev)、质量保证(QA)和运行(Ops)是必要的,尤其是那些改进可见性的工具。可观察性是 Buzzfeed 团队构建自身工具集中的首要原则之一,它将为“系统和应用的分布式日志、仪表化(Instrumentation)及监控提供开箱即可用的支持”。

Buzzfeed 使用 Datadog 做度量采集,监控工具是基于 Nagios 架构的。Nagios 是与 PagerDuty 集成的,关键的和应付诸行动的报警置于 Nagios 架构中。Reiferson 指出,“这些报警也发送给一些特定于团队的 Slack 通道,这是声明在各自的服务配置中的“。Buzzfeed 依然正在探索如何能更好地定义 Nagios 和 Datadog 间的集成,以构建逐步上升的有效策略。

一个从代码提交开始的典型部署流水线,将会经历一个基于 Jenkins 的构建服务,该服务还会构建一个容器镜像,并在容器上运行测试。镜像在成功完成运行测试后,就被推送到一个容器 Registry 中。

在从概念验证(POC,Proof Of Concept)迁移到生产级工具的过程中,团队曾面对一些挑战,例如能力不足以胜任 Docker 的操作,还有新发布(指在当时是新发布的,对此Infoq 曾专门撰文介绍)的AWS ECS。但是,ECS 是基于AWS 中已验证架构元素之上的,使得团队无需操作容器调度的繁琐事宜,可聚集于在ECS 中运行的机器和软件栈。

迁移是按阶段完成的。其中,低风险、小工作负载的系统率先迁移。这一影响是多个方面的,在Rig 上线后,平均每天有约150 次部署。从公司文化上看,团队在服务的一致性、低代价实验和更大的所有权上也发生了改变。

本文中的图片由 https://tech.buzzfeed.com/deploy-with-haste-the-story-of-rig-ca9a58b5719a 提供。

查看英文原文: Evolution of Deployment Architecture at Buzzfeed

2017-06-22 19:001223
用户头像

发布了 227 篇内容, 共 74.2 次阅读, 收获喜欢 28 次。

关注

评论

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

「架构实战营」模块七 王者荣耀商城异地多活架构设计

hxb

「架构实战营」

入门Python之后还是搞不定面试、做不来项目,推荐读读这本书

图灵教育

Python 编程 程序员

运维人必知必会的Zabbix核心命令

博文视点Broadview

解决两大难题,TDengine 助力亿咖通打造自动驾驶技术典范

TDengine

数据库 tdengine 物联网

写作社区 2 周年,全员狂欢燥起来!

InfoQ写作社区官方

热门活动 InfoQ写作社区2周年

OneBlock | 区块链人才聚集地,面向全球的Substrate 开发者社区

One Block Community

技术社区 #区块链#

架构实战营 - 模块7 - 作业

凌波微步

「架构实战营」

解读谷歌Pathways架构(一):Single-controller与Multi-controller

OneFlow

人工智能 机器学习 深度学习 架构 深度学习框架

一文搞懂Netty发送数据全流程 | 你想知道的细节全在这里

bin的技术小屋

网络编程 Netty Java’ 4月月更 Reactor多线程

如何在云端重塑内容生产?来看这场虚拟人主持的发布会

阿里云视频云

阿里云 音视频 视频剪辑 智能生产 视频云

智能足球裁判,能否突破专业运动的技术瓶颈​

这不科技

团队在线协作文档工具推荐

小炮

团队协作 文档协作

王者荣耀商城异地多活架构设计

浪飞

Linux驱动开发-编写MMA7660三轴加速度传感器

DS小龙哥

4月月更

基于云服务器ECS搭建网页游戏《浪剑天下》

阿里云弹性计算

玩转ECS 游戏服务器

EMQ 映云科技 & 阿里云推出“一站式工业数字化解决方案”,共建产业数据湖生态圈

EMQ映云科技

阿里云 开源 物联网 IoT emq

重学架构之王者荣耀商城异地多活架构设计

陈华英

架构实战营 「架构实战营」

一文扫清DDD核心概念理解障碍

慕枫技术笔记

后端 4月月更

web前端培训-ES6 教程:全面了解 ES6 模块

@零度

前端 ES6

Java培训-怎样通过 Bucket4j 提供速率限制

@零度

JAVA开发 Bucket4j

Redis Stream 专为队列而生,别再用 List 实现队列了

码哥字节

Redis Stream Redis 数据结构 4月月更

大数据培训-Hive高频面试题分享

@零度

hive 大数据开发

王者荣耀(商城)异地多活架构模拟设计

随欣所遇

架构训练营5期

如何使用阿里云容器服务保障容器的内存资源质量

阿里巴巴云原生

MacOS 系统如何把PHP版本升级到 7.4或者更高的版本呢,今天教程来啦

CRMEB

幸运哈希值竞猜游戏系统开发方案

薇電13242772558

区块链 哈希值

王者荣耀商城异地多活架构设计

tom

Springfox swagger2 API文档

Rubble

4月日更

CityClub 北京站马上开始!线下沙龙等你来!

InfoQ写作社区官方

热门活动

在不确定性中寻找确定性(28/100)

hackstoic

创业 创业心态

深度学习,如何选择GPU服务器?

Finovy Cloud

人工智能 深度学习 GPU服务器

Buzzfeed部署架构的改进_DevOps & 平台工程_Hrishikesh Barua_InfoQ精选文章