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

Netflix自2008年遭遇严重数据库故障后,决定将其业务迁移到云端。本文介绍了Netflix如何利用其开源的持续交付平台Spinnaker,以及一系列自研工具如Nebula和Bakery,实现代码的构建、测试、打包、部署到云平台的过程。

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

\\

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

\\

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

\\

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

\\

1af2b834e925a189b22af588de7cd22b.png

\\

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

\\

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

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

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

\\

Netflix是一家非常强调“文化”的公司。其中有一点是“Freedom \u0026amp; 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上分享。想进一步了解,可以查看大会日程信息。

VS2010下开发的环境配置,及创建HELLO CLOUD的过程,包括所有屏幕抓图。 VS2010开发之(1)――VS开发环境配置及HelloCloud 一、环境安装 1、 安装VS2010专业版 说明: (1)XP环境下不能进行环境的开发,建议用Win7以上系统。 (2)VS2010的版本必须为专业版、express版,对于MSDN上的版本旗舰版,都不能进行开发。 (3)在安装VS2010时,必须选择把SQL Server Exprss 2008安装上。 2、下载安装以下SDK中文语言包:  (1)Windows Azure SDK Windows Azure Tools for Microsoft Visual Studio(2011 年 3 月),下载地址: http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=7a1089b6-4050-4307-86c4-9dadaa5ed018&displaylang=zh-cn 下载: VSCloudService.exe  18.9MB) WindowsAzureSDK-x86.exe 9.1MB (2)Windows Azure Tools for Microsoft Visual Studio 2010 1.4(2011 年 8 月) 下载地址: http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=F6D1609F-08AA-40D6-ABD1-119503ECB1F9   VSCloudService.VS100.en-us.msi 11.6MB 下载 VSCloudService.VS100.zh-hans.msi  二、HelloCloud 1、启动Visual Studio 2010,然后创建一个新项目。在“Cloud”模板中选择“Windows Azure 项目”。 2、点击了“OK”以后,它会让你选择一个“Role”。这里,我们添加了一个ASP.Net Web 角色。 3、然后,它会创建两个项目:HelloCloud (Azure服务项目)WebRole1 (ASP.Net项目)。Azure服务项目用于配置这个应用程序,或者创建一个部署包。ASP.Net项目(WebRole1)就是一个正常的Web项目。如下所示: 4、打开Default.aspx,添加Hello Cloud. 大功告成! 5、运行启动: (1)现在把“HelloCloud”设置为你的启动项目,然后运行它。当你运行它的时候,Azure模拟环境会被初始化,然后它会启动development storagedevelopment fabric。 先进行初始化: 如果你右键点击任务栏中的Azure模拟器,然后选择“Show computr Emulator”,你可以会看到运行在你机器上的Azure服务。 (2) 如果你选择“WebRole1”作为你的启动项目,然后运行这个解决方案,那么它会作为一个正常的ASP.Net项目来运行,托管在本地的“localhost”上。 运行结果: 如果没有安装NuGet,第一次运行时,出现下面的提示: 有关NuGet的资料: http://msdn.microsoft.com/zh-cn/magazine/hh547106.aspx http://developer.51cto.com/art/201201/311365.htm 从下面的地址下载:NuGet.Tools.vsix(注意后缀是vsix) http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c 安装后正确提示: 也可以直接从VS中下载安装: 打开Visual Studio 2010,打开Tool->Extension Manager窗体.选择Online Gallery,在搜索框中输入NuGet看到。点击Download下载会自动安装
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值