写点什么

Netflix 是如何针对云构建和部署代码的

  • 2016 年 3 月 10 日
  • 本文字数:1958 字

    阅读完需:约 6 分钟

2008 年秋季,Netflix 遭遇了一次严重的数据库故障,连续 3 天无法向成员寄送 DVD,从那时起,他们决定向云迁移。今年 2 月,Netflix宣布完成了向云的迁移。

而与之相应的是,Netflix 的开发工作也要针对上云做很多工作。那么,Netflix 的代码在部署到云上之前,是如何构建的呢?

Netflix 的三位工程师 Ed Bukoski、Brian Moyles 和 Mike McGarr撰文介绍了相关的工具与技术。

Netflix 之前已经开源了其持续交付平台 Spinnaker 。Spinnaker 可以快速可靠地将软件变更发布到多种云平台。

从上图可以看到,很多工作是依托 Spinnaker 平台进行的。

一行代码在进入 Spinnaker 之前,还要经过很多步骤:

  • 在本地使用 Nebula 构建和测试
  • 修改被提交到一个中心 git 仓库
  • 使用 Jenkins 作业执行 Nebula,构建、测试和打包应用,准备部署
  • 将构建“baked”到 Amazon Machine Images 中
  • 使用 Spinnaker 流水线部署和提交代码变更

关键词:文化、云和微服务

Netflix 是一家非常强调“文化”的公司。其中有一点是“ Freedom & Responsibility(自由与责任)”。该文化激励和促使工程师使用自己感觉最适合的工具来完成任务。如果一个工具广为接受,它肯定是很有竞争力,能够带来巨大的价值,并减少大部分工程师的整体认知负荷。团队可以自由地实现替代方案,但也有责任维护这些方案

另外两个关键词也不难理解,前面我们提到,2008 年开始,Netflix 开始向云上迁移,一体化的、基于数据中心的 Java 应用转向基于云的 Java 微服务。

下面就具体看一下代码部署步骤。

构建

Nebula 是 Netflix 开发的 Gradle 插件集合,可以让开发者更方便地使用 Gradle 构建、测试和部署项目。也已经开源。

Gradle 为构建、测试和打包 Java 应用提供了很好的支持。之所以选择它,是因为方便编写可测试的插件,还能减小项目构建文件的大小。Nebula 通过一些插件在依赖管理、发布管理和打包等方面扩展了 Gradle。Nebula 提供了可复用和一致的构建功能,同时减少了每个应用构建文件中的样板代码。

集成

代码在本地经过 Nebula 构建和测试之后,已经为持续集成和交付做好了准备。第一步是将更新后的源代码推送到某个 git 仓库。变更提交会触发一个 Jenkins 作业。

最早,在 Netflix 的数据中心中,只有一个大规模的 Jenkins 主节点,而现在,他们在 AWS 中运行着 25 个主节点。Jenkins 被用于很多自动化任务,不单是简单的持续集成。Jenkins 作业会调用 Nebula 来构建、测试和打包应用代码。根据所构建内容的不同,Nebula 还会构建出.jar 文件、Debian 或 RPM 包,并根据配置发布到相应位置。

Bake

Netflix 的部署策略是围绕 Immutable Server (不可变服务器) 模式进行的。为避免配置漂移 (configuration drift) 并确保部署可以从源代码重复进行,线上修改应该尽量避免。所以每次部署都会创建一个新的 Amazon Machine Image(AMI)。

为从源代码生成 AMI,Netflix 创建了 Bakery。Bakery 提供了一个 API,支持全局创建 AMI。Bakery API 服务会在工作节点上调度真正的 bake 作业,使用 Aminator 来创建 Image。

在 Jenkins 作业成功完成时,通常会触发 Spinnaker 流水线。Spinnaker 会读取 Nebula 生成的操作系统包,并调用 Bakery API 来触发 bake。

部署

一旦 bake 完成,Spinnaker 就可以将生成的 AMI 用于部署了。

未来探索

Netflix 希望进一步改进开发者的体验,做得更好。目前还面对一些挑战。

一个是积极解决二进制文件的依赖。Nebula 提供了简化 Java 依赖管理的工具,不过还有很大的改进空间。

另一个是 bake 时间。

随着 Netflix 的不断增长,很多非 JVM 语言应用也越来越多,像 JavaScript/Node.js、Python、Ruby 和 Go 等,最好能有一套语言无关的方案和工具。

更多细节,可以阅读 Netflix 的相关技术博客

号外

代码的构建与部署,本质上是一个工程效率问题。各公司研发体系内部会有很多工具及平台。他们和产品并没有直接的关系,但是这些工具及平台是工程师使用最多的。提高这部分的效率实际上对整个工程效率影响非常大,可以极大缩短开发的周期及人力投入。

因此,在4 月21~23 日的 QCon 北京大会上,我们专门设置了《工程效率提升》专题,分享典型的互联网公司在提高工程效率方面的各种最佳实践以及典型思路。专题的出品人是58 赶集技术工程平台部高级总监王海龙。他目前负责58 赶集研发体系的自动构建部署发布平台,持续集成及自动化测试平台,以及研发管理平台等工程平台的研发与管理。之前曾在百度,淘宝网,阿里巴巴,用友软件等多家企业从事高级技术管理工作。

届时,百度工程效率部高级经理夏仲璞将分享《支持百度万人开发的工具装备及百度工程能力建设》。阿里巴巴技术专家刘昕(唐容)将分享《云上应用Docker 化持续交付实践》。

另外,《七周七并发模型》作者 Paul Butcher 、阿里云研究员余锋(褚霸)等专家也会在 QCon 上分享。想进一步了解,可以查看大会日程信息。

2016 年 3 月 10 日 10:561781
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 122.5 次阅读, 收获喜欢 31 次。

关注

评论

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

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路

JackJiang

微信 架构设计 即时通讯

开源镜像仓库Harbor的镜像安全

运维研习社

Docker Harbor 漏洞扫描 镜像安全 私有仓库

LeetCode题解:714. 买卖股票的最佳时机含手续费,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

架构大作业1

J

两会热词“区块链”,打开传统溯源的一扇大门!

源中瑞-龙先生

区块链 两会

程序员必须知道的数据结构:队列与栈

老王说编程

数据结构 队列

2021年阿里巴巴Java百亿级并发系统设计笔记(全彩版)

Java架构追梦

Java 阿里巴巴 面试 架构师 百亿级并发

区块链电子合同应用平台-助力企业数字化转型

13530558032

【回溯算法】借助最后一道「组合总和」问题来总结一下回溯算法 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

互联网信贷风险与大数据 风险管理&信贷准入

张老蔫

28天写作

区块链药品溯源解决方案-区块链技术监管医药溯源

13530558032

《不看后悔》38个JVM精选问答,让你变成专家

Java 架构 面试 JVM虚拟机原理

Flutter 2 来了

SamGo

flutter

总结近期腾讯+阿里+百度Java岗高频面试题,提问率高达98%,看到这篇文章基本offer稳了

Java架构之路

Java 程序员 架构 面试 编程语言

饿了么刚给我确认了p7的职位,对自己的经历,做一个面试总结。

Java架构之路

Java 程序员 架构 面试 编程语言

用c++创作一个简单小游戏

张鹤羽

28天写作 3月日更

萌新不看会后悔的C++基本类型总结(二)

花狗Fdog

程序员必须知道的数据结构:线性表与链表

老王说编程

Java 链表 线性表

LARAVEL SMTP 服务泄露,laravel env暴露

kaer

laravel 信息安全 漏洞 ENV SMTP

【金三银四】这才是打开Java面试的正确方式,吃透这份【Java面试手册】offer稳了

Java 编程 面试

mock 请求分发

blueju

JavaScript React Mock umi umijs

恋物志(二):独居者的智能生活指南

脑极体

说完列表说字典,说完字典说集合,滚雪球学 Python

梦想橡皮擦

28天写作 3月日更

智慧党建系统开发,智慧组工平台建设

13530558032

Elasticsearch Index Types and Mappings

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

正则表达式.01 - 元字符

insight

正则表达式 3月日更

阿里面经最新分享:Java面试指南/成长笔记(金三银四程序员必备)

比伯

Java 编程 程序员 架构 面试

Wireshark数据包分析学习笔记Day3

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

架构大作业2

J

简单工厂模式、工厂模式、抽象工厂模式比较

良知犹存

设计模式

Netflix是如何针对云构建和部署代码的_QCon_臧秀涛_InfoQ精选文章