写点什么

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:003064
用户头像

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

关注

评论

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

膜拜!多次霸榜Github的springboot 实战派文档到底有多强?

Java 程序员 架构 面试

太为难我了,阿里面试了7轮(5年经验,拿下P7岗offer)

Java 程序员 架构 面试

Flink的流数据SQL

五分钟学大数据

flink 5月日更

5.29 相约杭州!云原生 Meetup 第二期杭州站报名开启!

青云技术社区

云原生

原来,GitHub标星90K+的Leetcode刷题手册长这样

Java架构师迁哥

hive的DDL语法基本操作

大数据技术指南

hive 5月日更

AI医疗发展中的机遇与有效监管

CECBC

Python3 Note 浮点类型误差问题

awen

Python 浮点型 decimal

Docgeni,开箱即用的 Angular 组件文档工具

PingCode研发中心

开源 研发工具

PingCode 3.0 发布,开启国产研发自动化时代

爱吃小舅的鱼

敏捷开发 研发管理 开发 研发工具 项目经理

用 Java 实现坦克大战,这个有点强了!

Java架构师迁哥

硬核出击,只为守护你的秘密!

亚马逊云科技 (Amazon Web Services)

GitHub上下载量突破100000+阿里巴巴的这份开源项目如此牛逼

阿里巴巴 开源 编程 Java 25 周年

团队项目进度跟踪难?延期风险高?国内企服排行榜第一的通用项目管理工具在这里了

爱吃小舅的鱼

进度条 PMP Certification 项目经理 项目管理工具

Flutter 混合开发基础

网易云信

flutter 框架

工业绿色发展可视化管理——高炉炼铁厂可视化系统

一只数据鲸鱼

数据可视化 工业物联网 智慧工厂 三维可视化 高炉炼铁

阿里云黄博远:AI工程化是发挥算法及数据价值的效能中枢

阿里云大数据AI技术

直播点播窄带高清之 JND 感知编码技术

网易云信

音视频 视频编码

Python3 Note 如何合理使用assert

awen

Python assert

FIL矿池挖矿算力分发系统开发搭建

薇電13242772558

数字货币 算力

5G加油站,需要中频段

脑极体

中台反思:云原生下API网关的选择

孤岛旭日

网关 api 网关 平台 技术中台

打造生态“朋友圈”,英特尔以生态之道培育AI创新“大气候”

E科讯

打破固有思维(十九)

Changing Lin

如何入门数据分析?

数据社

大数据 数据分析 5月日更

看德威学校如何通过亚马逊云科技开启青少年AI探索之旅

亚马逊云科技 (Amazon Web Services)

极狐GitLab 13.11功能回顾,含Kubernetes Agent和流水线合规性

极狐GitLab

系统运维 安全监控审计 #on-call #GitLab 极狐GitLabs

5分钟速读之Rust权威指南(十)

wzx

rust

Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?

Linux服务器开发

redis 后端 多线程 Linux服务器开发 网络io

helm-kubernetes的包管理器

片风

云原生 Helm 包管理工具

SUSECON 2021首日重点新闻:SLES 15 SP3和SUSE Rancher 2.6全新发布

Rancher

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