写点什么

Netflix 是如何构建代码的

  • 2016-04-04
  • 本文字数:1119 字

    阅读完需:约 4 分钟

三名 Netflix 工程师 Ed Bukoski Brian Moyles Mike McGarr 在一篇博文中解释了Netflix 如何持续交付向7500 万观众提供电视节目和电影的代码。

Immutable Server 模式是 Netflix 部署的基础。每次部署都会创建一个全新的亚马逊机器镜像(AMI)。

Netflix 的微服务架构让 Netflix 团队可以松耦合。变更推送速度让每个团队都很舒服。

Netflix 不要求任何团队使用任何工具集,但他们要负责维护他们实现的工具。在 Netflix,有团队会集中提供工具,作为“铺好的路”的一部分,以减少大多数 Netflix 工程师的认知负担。

这个“铺好路”的代码交付过程由几个步骤组成。代码使用 Nebula 在本地构建和测试。变更提交到中心 Git 版本库。一个 Jenkins 作业构建、测试并打包应用程序用于部署。这些程序包使用 Netflix 的全球持续交付平台 Spinnaker 部署到亚马逊机器镜像(AMI)。

构建

Nebula Gradle 构建系统的一组插件,它可以构建、测试并打包 Java 应用程序。Netflix 的大多数代码都是用 Java 编写的。这些插件扩展了 Gradle 的自动化功能,包括依赖管理、发布管理以及打包。一个项目的构建文件声明了用到的依赖和插件。

集成

下一步是将本地构建、测试并打包的源代码推送到 Git 版本库。具体的流程由团队选择。

提交完成后,会触发一个 Jenkins 作业构建、测试并打包代码用于部署。程序包类型会根据构建对象是一个库还是一个应用程序作出恰当的选择。

部署

Netflix “Bakery”暴露了一个 API 用于创建 AMI。具体的镜像使用 Aminator 创建。用户指明将什么基础镜像和程序包放入该 AMI。基础镜像是一个 Linux 环境,包含与 Netflix 生态系统集成所需的约定、工具和服务。

当 Jenkins 集成任务执行成功后,它会触发 Spinnaker 管道。Spinnaker 读取 Nebula 程序包,并使用 Bakery API 创建 AMI。

然后,Spinnaker 会向数以十计、百计或千计的实例提供该 AMMI。

第一次部署是到测试环境,部署会执行自动化集成测试。在通过这些测试后,Spinnaker 为团队提供了自定义生产环境部署过程的灵活性,例如多区域部署、金丝雀发布或者红/ 黑部署。

该自动化过程非常高效,举例来说, Janitor Monkey 云弹性和维护服务从代码检入到多区域部署只要 16 分钟就可以完成。

未来方向

在 Netflix,语言无关的需求与日俱增。非 JVM 语言需要包含进构建过程。

部署时间有一大部分是“烘焙(baking)”过程,Netflix 正设法减少这部分时间。

此外,Netflix 还在研究容器是否能够帮助他们应对上述两个挑战。

容器还可以改进当前的构建、烘焙和部署过程,进而改善开发测试周期。可以在本地部署的容器,无需修改就可以部署到生产环境,这对于确定一个 Bug 是否是由环境差异导致的非常有帮助。这让工程师可以专注于新特性。

查看英文原文 How Code is Built at Netflix

2016-04-04 19:003525
用户头像

发布了 1008 篇内容, 共 447.4 次阅读, 收获喜欢 346 次。

关注

评论

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

TNFE-Weekly[第七十二周已更新]

莹姐🙈

小程序 大前端 周刊

什么是云服务器,ECS它能干什么?

德胜网络-阳

LeetCode题解:1. 两数之和,Map+队列+双指针,JavaScript,详细注释

Lee Chen

大前端 LeetCode

看动画学算法之:排序-快速排序

程序那些事

排序 快速排序 数据结构和算法 看动画学算法

从linux源码看epoll

无毁的湖光

Linux TCP Linux Kenel

中途转行学Java,如何赛过科班生?你只需要做到这几点

小Q

Java 程序员 架构 技术 基础

实践案例丨基于Raft协议的分布式数据库系统应用

华为云开发者联盟

raft 华为云

【写作群星榜】9.1~9.13写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 文章

将DevOps视为哲学——实施DevOps的绝佳方式

禅道项目管理

DevOps 测试 开发 持续交付

不想码代码,你还能做什么?(一)

研发管理Jojo

项目管理 技术管理 PMO

USDT承兑商支付系统搭建,区块链支付平台开发

使用Valgrind调试Linux C++程序

Simon

c++ gdb Valgrind memcheck 内存泄漏

5分钟带你掌握Makefile分析

华为云开发者联盟

makefile 脚本

Python中的with是测试常用到的资源打开利器

陈磊@Criss

程序员快乐器之JAVA代码生成工具

Philips

敏捷开发 程序设计 软件架构 开发工具

大项目写代码写到晕头转向?敏捷多项目框架解君愁

Learun

敏捷开发 软件开发

图计算黑科技:打开中文词嵌入训练实践新模式

腾讯云大数据

大数据

一定要写点什么?!

东方证券企业架构之技术架构转型实践

BoCloud博云

云计算 容器 微服务 PaaS 博云

想学习数据结构和算法,推荐给你 10 本优质书单

沉默王二

数据结构 算法 书单推荐

案例解析丨Spark Hive自定义函数应用

华为云开发者联盟

spark UDF

区块链永续合约交易所搭建,永续合约系统开发

java中实现List集合中对象元素按其属性的中文拼音排序

云辰

创建spring boot starter

曾彪彪

Java spring Boot Starter

基于electron桌面级脚手架的设计

久违

设计 大前端 全栈

中国云计算的云栖“坐标”

脑极体

记一次node项目重构改进

华为云开发者联盟

Java 项目 方案

同城双活与异地多活架构分析

vivo互联网技术

架构 高可用 架构设计 高可用系统的架构

碰撞率下降75%!Mobileye与所托瑞安宣布双方合作重大进展

最新动态

docker 安装consul

云辰

Docker映射详解,没问题了!

程序员的时光

Docker

Netflix是如何构建代码的_DevOps & 平台工程_Michael Stiefel_InfoQ精选文章