Netflix是如何构建代码的?
众所周知,Netflix是供大众观看电视节目的知名网站。殊不知,在每个人爱看的节目流式播放之前,Netflix在做大量的幕后工作。这家公司使用许多工具和技术,将源代码变成一项部署到位的服务,从而将影视节目发送到全球各地超过7500万的Netflix用户。
Netflix的一些工程师共同撰写了一篇博文,这篇文章让广大开发人员和Netflix爱好者得以深入了解一行代码部署到云之前发生的一切。Netflix的技术团队将来会向公众发布许多技术性博文,这篇只是其中之一。
据Netflix的博客(http://techblog.netflix.com/2016/03/how-we-build-code-at-netflix.html)介绍,Netflix的工程师将代码部署到他们使用的持续交付平台:Spinnaker之前,要做下列工作:
使用Nebula,在本地构建并测试代码;
将变更的代码提交到中央Git代码库;
Jenkins作业执行Nebula,负责构建、测试和包装准备部署的应用程序;
构建好的代码“集成”到亚马逊机器镜像(Amazon Machine Image);
Spinnaker管道(Spinnaker pipeline)用来部署和推广变更的代码。
Netflix的工程师们表示,Netflix的文化立足于“自由和责任”,这种企业文化帮助他们弄清楚哪些工具最适合每一项任务。在接受使用某个工具之前,他们考虑其价值,确定该工具是否可以为绝大多数Netflix工程师减轻总的认知负担。早在2008年,由于Netflix将整体式、基于数据中心的Java应用程序向云转变,于是开始将流媒体服务迁移到亚马逊网络服务(AWS)。
部署应用程序或服务的第一步是构建代码。为此,Netflix创建了Nebula,这是面向Gradle构建系统的一套插件,“可帮助处理构建应用程序方面的繁重任务”,工程师们说。
“Gradle为构建、测试和包装Java应用程序提供了一流的支持,而Java应用程序占了我们的大多数代码。之所以选择Gradle,是由于很容易编写可测试的插件,同时缩小了项目的构建文件的大小。Nebula为依赖项管理、版本管理、包装及众多任务提供了一套开源插件,从而扩展了Gradle提供的强大的构建自动化功能。”
技术团队写道,未来的一篇博文会深入探讨Nebula及他们开源的功能。
一旦代码使用Nebula在本地构建并测试完毕,技术团队就将更新后的源代码发布到Git代码库。Jenkins在Netflix全面用于自动化任务,所以一旦提交了变更的代码,就会触发Jenkins作业。
Netflix里面的每次部署都始于创建亚马逊机器映像;为了利用源代码生成亚马逊机器镜像,Netflix创建了所谓的“Bakery”。据博客介绍,Bakery暴露了便于全球范围创建亚马逊机器映像的API。
等到部署,并且在“集成”完成之后,技术团队就会使用Spinnaker,管理多个区域的部署、金丝雀版本(canary release)以及红/黑部署。
工程师们说:“就一句话,Spinnaker管道为技术团队提供了极大的灵活性,可以灵活控制如何部署代码。”
Netflix在继续关注开发体验,确定如何还可以改进开发体验。它面临的一个挑战是,管理二进制依赖项,并缩短集成时间。Netflix表示,容器有望是一种解决办法,技术团队在考虑容器如何有助于改善当前的构建、集成和部署体验。
将来,Netflix的技术团队会发布最新资讯,表明如何解决面临的其他难题,敬请关注。
云头条编译|未经授权谢绝转载
相关阅读:
编程未来的九大预测:人人都知道如何编程,可很少有人会编写“真正的代码”。
编程群欢迎加入,群主微信:aclood