Netflix是如何构建代码的

三名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是否是由环境差异导致的非常有帮助。这让工程师可以专注于新特性。

本文转自d1net(转载)

时间: 2024-08-30 23:24:30

Netflix是如何构建代码的的相关文章

Netflix: 使用 React 构建高性能的电视用户界面

本文讲的是Netflix: 使用 React 构建高性能的电视用户界面, 我们在为 Netflix 会员努力寻找最佳体验的过程中也在不断优化其电视界面.例如,在进行 A/B 测试 .眼球追踪研究以及研究用户反馈之后,我们最近推出了 视频预览 功能来帮助会员们更好地决定看什么.我们在之前写的 一篇文章 中讲到了我们的电视应用是由一个预装在设备上面的 SDK,一个可以随时更新的 JavaScript 应用以及一个被称为 Gibbon 的渲染层组成的.在这篇文章中,我们会着重讲解在优化 JavaScr

Jenkins+Maven+SonarQube构建代码质量检测平台

使用SonarQube扫描仪分析Maven 安装jenkins 参考:http://blog.csdn.net/wh211212/article/details/53644980 安装Maven 参考:http://blog.csdn.net/wh211212/article/details/69578996 安装SonarQube 参考:http://blog.csdn.net/wh211212/article/details/77371831 配置Jenkins + Maven + Sona

WebSphere Commere增量代码的自动构建与部署框架介绍

其中包括涉及的概念,使用的工具,框架结构和环境的准备.通过阅读本文,读者能够对如何实现自动化代码构建和部署有一个基本的了解. Agile -敏捷开发.近些年开始被人们广泛关注.它提倡将一个完整的软件版本划分为多个迭代周期.每个迭代实现不同的特性.重大的,优先级高的特性优先实现,风险高的特性优先实现.在项目的早期就将软件的原型开发出来,并基于这个原型在后续的迭代中不断完善. Delta Code -增量代码.在 Agile 开发模式中,开发人员基于软件原型不断的编写代码对其进行完善和扩充.这些代码

Netflix首席执行官里德·哈斯廷斯

国外媒体近日刊载文章,讲述了流媒体视频服务提供商Netflix及其首席执行官里德·哈斯廷斯如何经历并熬过了一次次的失误,最终加入硅谷"精英社团"的故事. 以下是这篇文章的全文: 在正常情况下,周末晚上Netflix在美国家庭互联网流量中所占比例通常会占到近三分之一,高于YouTube.Hulu.亚马逊.HBO Go.iTunes和BitTorrent所占流量之和.无论是在哪个时区,流向Netflix的互联网流量通常都会在晚上10点钟左右达到高峰;在这个时间点上,互联网流量图表看起来就像

真正的持续集成:分布式代码仓库和依赖

微服务架构为软件开发带来了极大的灵活性,并加快了交付速度,但同时也带来了依赖管理问题.传统的解决方案虽然能够解决依赖管理问题,但都太极端,顾此失彼.于是,Netflix尝试着寻找自己的解决方案,期待着在整个组织层面做到真正的持续集成.本文内容来自Netflix技术博客,已获得翻译授权,查看英文原文 Towards true continuous integration:distributed repositories and dependencies. 在过去的8年间,Netflix基于AWS构

Netflix逆袭

摘要: Netflix首席执行官里德哈斯廷斯 国外媒体近日刊载文章,讲述了流媒体视频服务提供商Netflix及其首席执行官里德哈斯廷斯如何经历并熬过了一次次的失误,最终加入硅谷精英社团的故事 Netflix首席执行官里德·哈斯廷斯 国外媒体近日刊载文章,讲述了流媒体视频服务提供商Netflix及其首席执行官里德·哈斯廷斯如何经历并熬过了一次次的失误,最终加入硅谷"精英社团"的故事. 以下是这篇文章的全文: 在正常情况下,周末晚上Netflix在美国家庭互联网流量中所占比例通常会占到近三

.NET下的动态代码编译探索

编译|动态 不能确定动态代码编译在什么地方是有意义的?一个普通情况就应该可以帮助阐明这个问题.假如你不得不从一个数据库中取出数据并将它放入另一个数据库.你应该只需使用一个SQL语句从源数据库中选取数据并插入目标数据库中,这只是小菜一碟,对不对?如果你正在拷贝生产数据以生成测试数据并需要改变数据以确保目标数据在以后开发中使用是安全的又将如何?你可能会构建一个数据传输系统(DTS)或某个其它传输机制,但是如果你这样做超过足够多的数据,这就会变成你每次为拷贝数据建立数据-擦除(data-scrubbi

开发基于Web的CSS设计器.代码参考

css|web|参考|设计 这里对前面文章讲的CSS设计器系统关键代码作一些小结,如果没有看过前面文章的请先参看"开发基于Web的CSS设计器" 解析CSS样式文件 这段代码主要作用是把CSS文件分解为多个样式类,并按名称/文本属性生成ClassItem对象,并保存在一个ArrayList(cssList)中(C#代码) //读取文件FileInfo theSource= new FileInfo (@m_filePath);StreamReader reader = theSourc

基于Agile模式的WebSphere Commerce产品的自动化构建与部署框架(1)

增量代码的自动构建与部署框架介绍 概念和工具介绍 Agile 与 Delta Code Agile -敏捷开发.近些年开始被人们广泛关注.它 提倡将一个完整的软件版本划分为多个迭代周期.每个迭代实现不同的特性.重大的,优先级高的特性优先实 现,风险高的特性优先实现.在项目的早期就将软件的原型开发出来,并基于这个原型在后续的迭代中不断完 善. Delta Code -增量代码.在 Agile 开发模式中,开发人员基于软件原型不断的编写代码对其进 行完善和扩充.这些代码就称之为增量代码. 本文介绍的