BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Netflix如何部署代码

| 作者 Zef Hemel 关注 0 他的粉丝 ,译者 孙镜涛 关注 2 他的粉丝 发布于 2013年6月15日. 估计阅读时间: 3 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

著名的电影流媒体网站Netflix每天都会进行上百遍部署,它们没有使用ChefPuppet,没有一个质量保证部门,也没有发布工程师。为了实现自己的目标,Netflix构建了一个先进的内部PaaS(平台即服务)平台,所有的团队都能够通过这个平台部署自己的基础设施部分,同时部署也没有时间和次数上的限制。在QCon New York 2013期间,Jeremy Edberg 介绍了这个Netflix为了满足快速迭代的需要而基于Amazon AWS构建的基础设施。

Netflix在实现API的时候使用了面向服务的架构,该架构会处理网站的大部分请求(每天有20亿次请求)。在幕后,API被分离成了很多服务,每一个服务都由一个团队进行管理,这使得团队能够相对独立地进行工作,也能够独立决定何时以何种频率部署新软件。

Netflix在DevOps方面的投入很大。开发者构建、部署并维护他们自己的服务器集群,同时还需要对错误负责。如果发生了错误,便需要组织一个会议调查问题出现的根本原因,讨论防止此类问题将来继续发生的方案——类似于5个为什么

Netflix中的部署完全是自动化的。如果一个服务需要部署,那么开发者首先会将代码推到一个源代码仓库。之后Jenkins 会捕获到这个代码推动事件并执行构建生成一个应用程序包。再往后便会基于基础镜像(包含一个Linux发布版本)和所有Netflix服务器上运行的软件(包括JVM和Tomcat,将来可能会允许团队做进一步的自定义)产生一个新的VM镜像(AMI)。在上面这些基础内容安装完成之后会安装应用程序包。由此,一个AMI便产生并注册到系统中了。

为了将VM镜像部署到它的基础设施中, Netflix 构建了Asgard。VM镜像能够通过Asgard Web接口实例化并创建新的EC2集群。每一个集群都会包含至少3个EC2实例用于冗余,这些实例会散步到多个可用区域中。部署新版本的时候,在新版本被实例化运行的同时,运行之前版本的集群仍将继续运行。在新版本启动并将自己注册到称为Eureka 的Netflix服务注册表之后,负载均衡器便会进行切换将所有的流量导向到新集群。新集群会被仔细地监控并保持运行一整夜。如果所有的事情都运行良好,旧集群便会被销毁。如果有任何问题发生,那么负载均衡器便会切换回旧集群。

在Netflix基础设施中会不断地产生错误。软件需要能够处理硬件故障、网络连接故障以及其他类型的错误。虽然错误并不会自然而然地产生,但是使用Simian Army还是极有可能诱发错误。Simian Army中包含了很多(软件)“猴子”能够随机地引入错误。例如,Chaos 猴子会随机地导致服务器崩溃,而Latency猴子会随机地引发网络延迟。如果团队认清了错误会时常发生的事实,那么他们就有可能忽略错误并创建一种错误弹性至上的文化。

Netflix基础设施中的很多部分现在都已经开源了,你可以通过GitHub获取。Netflix的最终目标便是完全发布它的基础设施,让其他的公司能够从中受益。

查看英文原文How Netflix Deploys Code

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT