每周运行30万个容器实例 - Netflix 的容器化实践

原创 2017年11月15日 13:58:19


Netflix 是谁?



Netflix 是欧美地区最大的网络视频提供商,超过了 Youtube。全球每天有超过190个国家,一亿多会员在 Netflix 上观看1.2亿小时的电影,电视剧和纪录片等等。Netflix 也制作了像纸牌屋这样广受欢迎的电视剧。


为了应对巨大的并发流量,Netflix 用了7年时间,网站架构从传统巨石应用演进成为业界超前的微服务架构。目前,Netflix 的云平台上运行了500个微服务,每天会有1000次的变更部署到线上环境。线上环境部署在亚马逊3个 Region,9个可用区,为全球用户提供稳定的网络视频服务。



Netflix 为什么使用容器技术?



Netflix 在亚马逊 EC2 上已经运行了上万台虚拟机,他们的虚拟机集群非常的稳定,实现了云原生应用的转型而且非常易于扩展,为什么还需要用容器技术?



使用容器技术提升了 Netflix 的创新速度。笔者之前的文章也提到,在 Netflix 研发团队的文化里,创新是排名第一位,其次是产品的稳定性。所以 Netflix 对于应用的容错性做的非常强,这样即使创新的应用失败,也可以将失败的范围控制到最小,开发者也就更敢于做创新的尝试。Chaos Monkey 就是 Netflix 团队发布的专门做灾难性测试的工具。


使用容器可以更好的管理应用以及应用的依赖,将所有内容都打包在容器里易于管理和发布。当线上容器出现了问题,可以随时 Pull 下来到本地进行调试,让开发者更快的重现问题。


使用容器的 UseCase


1. 视频媒体转码

之前使用虚拟机进行大量视频流媒体的转码需要一个月的时间,使用容器进行高并发转码,只需要一周。


2. 统一代码构建,打包和测试系统

之前 Netflix 团队发布包之后,只会跑包本身的测试用例,并不会做上游包(UpStream)的集成测试,所以经常发布包会破坏上游包的测试,上游开发者需要反复调试,修复问题。使用容器之后,Netflix 会在容器里跑上游包的测试用例,如果上游测试用例失败,这次包发布也会失败,这叫做 Fail Fast。


3. 开发者无需关心环境

例如 NodeJs 的开发者,他们完全不关心运行的系统是什么,也不想关心,所以使用容器可以让这些开发者专注于开发上,减少 APP 运维的成本。


Netflix 的容器管理平台 Titus


Netflix 最开始并没有使用 Docker,而是使用 CGruop,之后使用了 Mesos 进行容器的管理,目前推出了自行研发的 Titus 容器管理平台,实现容器的管理。


市场上已有了很多容器管理平台,为什么需要自行研发容器管理平台?由于市面上的平台多数关注于数据中心的建设,支持混合云的方案,且目前市面上的方案没有能够满足 Netflix 如此大规模的容器使用情况。


Titus 的最初是用来管理 Netflix 内部大量的 Batch 任务,主要包括视频转码,加水印,生成每日 CDN 网络流量的报表。 这些任务有些共同的特点,耗时较长,属于计算资源密集型的任务,并且不依赖于平台,比较适合用容器来运行。


后来 Titus 开始接管 Services,Services 的要求比 Batch 任务要高很多,需要实时扩容,且需要不间断的运行,服务有更多的状态管理需求,难以升级等等。对此,Titus 做了很多容器管理的改进。


网络管理



在 VPC 网络里使用 Docker。通过 Titus 的执行器,可以创建一个 Namespace,创建并启动一个 Pod root container,类似于 K8S 的 Pods。随后创建 Veth,路由的规则,iptables 等等。


Metadata Proxy


Metadata Proxy 是 Titus 基于亚马逊的 Metadata Service 实现的统一网络管理模块。它解决的是容器的安全问题,它统一管理的容器的 “whoami” 的信息,例如容器的 IP,权限,容器的宿主机 ID,域名等等,容器本身无法知道宿主机的更多信息,从而确保容器的网络安全性。将 VPC 网络和 Metedata Proxy 合起来,就是下面的这张图:



和 Spinnaker CI/CD 集成


Titus 和 Netflix 现有的CI/CD 工具 Spinnaker 进行了集成。在创建 Spinnaker 的集群时,Spinnaker 提供了 AWS 虚拟机集群的创建,和 Titus 容器集群的创建。



当某个容器 Push 到了 Artifactory Docker 注册中心,这个 tag 会实时的显示在 Spinnaker 部署的任务里供用户选择 Docker 镜像的版本。



Titus 也集成了 Chaos Monkey,在 Chaos Monkey里执行线上环境破坏性测试的时候,选择 Titus,就会随机销毁在线上运行的容器。



Fenzo 任务调度框架


Netflix 开源了任务调度框架 Fenso,它是一个可扩展的任务调度框架,用于管理所有调度任务的生命周期。



你只要给 Fenzo 一个任务列表,并且给 Fenzo 一堆可以的计算资源,Fenzo 就会自行决策,进行任务的执行。如果你给的计算资源太少,不足以执行所有任务,Fenzo 会告诉你需要多少计算资源,如何扩容。


Titus 和 Fenzo 集成



为了实现计算资源利用率的最大化,Netflix 的生产环境和 Batch 任务会共用容器资源。某些 Batch 任务会占用大量的计算资源,导致在生产环境的 APP 需要扩容时,得等待 Batch 任务执行完成,才能获取资源。


为了解决这个问题,Fenzo 将容器分为核心层和 Flex 层,核心层的应用会保障扩容的能力。Flex 层会将低优先级的任务进行排队执行。


Titus 的现状


之前 Titus 是和 Netflix 内部的 Mesos 的平台进行容器管理,目前已使用 ECS 替换了 Mesos 作为容器编排的平台。 



Titus 支持了 OutBound 和 Inbound 的请求处理,从 OutBound 可以实现 ECS 里容器的启动和停止。如果容器停止,CloudWatch 会监测到 ECS 的变化,并且通知 Titus 里任务的状态变化。


未来 Titus 将会专注于基于:

1. 服务的自动扩容,以及跨数据中心的容器负载均衡。

2. 实现核心层任务的 SLA 保障,当核心层的计算资源达到上限时,会将 Flex 层的资源抢占过来,保障核心层任务的 SLA。

3. 更好的支持动态扩容。


作者:王青

目前任职 JFrog 中国首席架构师,之前在 IBM,HPE,爱奇艺,新浪,VIPKID 等公司做过研发和架构,是有十多年开发经验的互联网老兵,专注于软件生命周期管理,微服务架构,云原生应用,容器化等领域。

欢迎转载,但转载请注明作者与出处。谢谢!

版权声明:本文为博主原创文章,未经博主允许不得转载。

一个可供参考的企业应用容器化实践案例

本文分为两个部分,第一部分比较常规,介绍如何用OpenShift搭建自动化测试、开发环境。第二部分介绍了在容器使用过程中遇到的问题,以及应对方案。作者在原有的OpenShift Router仅支持7层...
  • M2l0ZgSsVc7r69eFdTj
  • M2l0ZgSsVc7r69eFdTj
  • 2018年01月26日 00:00
  • 46

应用容器化之Kubernetes实践

主要以ZooKeeper、Redis、Kafka、MongoDB等应用容器化在Kubernetes平台上面实践。从计算、网络、存储方面解析应用在集成中的问题,以及部分传统应用在容器化过程中设计的应用二...
  • horsefoot
  • horsefoot
  • 2016年08月15日 08:34
  • 14880

Android容器化框架

标题标题Alibaba Atlas Atlas是阿里移动基础团队的核心中间件之一,Atlas特别适用于大规模团队的协同开发。通过提供组件化、动态性、解耦化的支持,Atlas能够实现每个业务在开发阶段...
  • ThePromonkeyOf_HeLuo
  • ThePromonkeyOf_HeLuo
  • 2017年06月18日 11:34
  • 455

Kubernetes(K8s)容器设计模式实践案例 单节点多容器模式

K8s与容器设计模式 目前K8s社区推出的容器设计模式主要分为三大类: 第一类,单容器管理模式; 第二类,单节点多容器模式; 第三类,多节点多容器模式; 一类比一类更复杂。 ...
  • xuguokun1986
  • xuguokun1986
  • 2016年11月28日 10:54
  • 794

【Container讲师专访】容器化技术在长安汽车中的实践

希云为大家转载以下“CSDN采访长安汽车分布式技术架构师主任黄俊精彩的对话内容”,目的是为了让大家了解车联网在生产环境中是如何成功使用Docker容器技术的!...
  • sisiy2015
  • sisiy2015
  • 2017年12月14日 10:35
  • 477

【容器化思维】容器化技术和容器管理平台

概要简述 时至今日,企业IT领域中最主要的问题在于如何解决不同功能部门之间的固有摩擦。一方面,业务线的主要诉求是在市场上实现差异性竞争优势,其具体体现包括更出色的应用程序、客户服务以及始终领先于...
  • English0523
  • English0523
  • 2016年10月28日 09:41
  • 2158

虚拟化与容器化关系

以 Docker 为代表的容器技术一度被认为是虚拟化技术的替代品,然而这两种技术之间并不是不可调和的。作者分别列举了容器技术以及虚拟化技术的优缺点,并提出将两者结合取长补短的解决方案。 容器为应...
  • permike
  • permike
  • 2016年08月31日 18:15
  • 1444

有容云:微服务容器化的挑战和解决之道

注: 本文根据6月是18日七牛云微服务课堂-微服务容器化的挑战和解决之道演讲内容整理而成,演讲者:有容云联合创始人兼首席架构师马洪喜,与大家一起探讨了如何通过容器技术将微服务和 DevOps 落...
  • yourun_cloud
  • yourun_cloud
  • 2016年07月14日 10:31
  • 1872

运维容器化技术比较

1 mesos    主要解决集群计算资源的动态分配
  • u012333307
  • u012333307
  • 2016年03月02日 19:32
  • 415

为什么容器技术(docker)将主宰世界,docker的意义

转自:http://blog.csdn.net/gaoyingju/article/details/49616295 为什么容器技术将主宰世界 由于本文篇幅较长(我竟然写了7千多字),...
  • zxp_cpinfo
  • zxp_cpinfo
  • 2016年12月22日 14:59
  • 1695
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:每周运行30万个容器实例 - Netflix 的容器化实践
举报原因:
原因补充:

(最多只允许输入30个字)