写点什么

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

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

关注

评论

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

Path Finder for Mac(强大的文件管理工具)v2202中文

春天的风暖暖的

SwitchResX for Mac:全能型屏幕分辨率与显示管理工具

春天的风暖暖的

构建一个高效的 YashanDB 环境

数据库砖家

基于YashanDB数据库构建智能客服系统的技术指南

数据库砖家

如何解读YashanDB数据分析能力

数据库砖家

如何在Mikrotik路由器上配置DHCP-PD客户端实现IPv6前缀委派

qife122

网络配置 ipv6 DHCP-PD Mikrotik

Scrivener for Mac:专业写作者的全能创作工具

春天的风暖暖的

绕过Cloudflare IP白名单限制的两种实用方法

qife122

网络安全 IP白名单

游戏启动错误代码分析与解决方案

qife122

游戏故障排除 Windows系统修复

在Incus容器中运行Docker的完整指南

qife122

容器技术 Incus

智能图像清晰修复软件Perfectly Clear Workbench中文

春天的风暖暖的

在AI技术唾手可得的时代,挖掘新需求成为创新关键——某知名AI创作工具需求洞察

qife122

需求分析 AI创作

大数据-113 Flink 源算子详解:非并行源(Non-Parallel Source)的原理与应用场景

武子康

Java 大数据 flink spark 分布式

ZoneAlarm防火墙强制更新引发用户不满

qife122

网络安全 防火墙 软件更新

谷歌Chrome多重漏洞可导致任意代码执行

qife122

网络安全 漏洞分析

RAW Power for Mac:基于Apple RAW引擎的专业图像处理工具

春天的风暖暖的

如何管理YashanDB中的数据访问权限

数据库砖家

告别相机!OpenAI用Sora2重新发明了短视频!

阿星AI工作室

人工智能 AI AIGC aid ai短视频

工业数字化 信息化经验总结(10)

万里无云万里天

数字化 信息化 工业 工厂运维

设备点检 设备维护经验总结(8)

万里无云万里天

工业 设备维护 工厂运维 设备点检

AI出海第一步省下200刀! 亲测Stripe Atlas注册美国公司

阿星AI工作室

产品 AI 独立开发 出海

在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名Linux命令学习框架需求探索

qife122

开源项目 需求分析 linux命令 技术文档

如何建立基于YashanDB的统一数据平台

数据库砖家

修复不安全软件生命周期——将安全融入现有开发流程的实用技巧

qife122

DevSecOps 安全开发 软件安全

Noir – Dark Mode for Safari:Safari浏览器的智能暗色模式扩展

春天的风暖暖的

如何结合YashanDB数据库构建智能供应链平台

数据库砖家

如何结合YashanDB数据库塑造数据驱动型企业

数据库砖家

Snagit for mac(最强大的屏幕截图软件)v2025

春天的风暖暖的

DMG Canvas for Mac:专业级DMG磁盘映像定制工具

春天的风暖暖的

Visio Viewer for Mac(Visio文件查看工具)

春天的风暖暖的

如何解决YashanDB使用中的常见问题

数据库砖家

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