Netflix的容器管理平台Titus开源了


【编者的话】Netflix开源了其自用容器管理平台Titus,Titus用于支撑Netflix的视频流、推荐和机器学习、大数据、内容编码、演播室技术、内部工程工具和其他Netflix工作负载等。

今天,Netflix开源了其自用容器管理平台——Titus



Titus支撑着Netflix业务中的一系列关键部分,包括视频流、推荐和机器学习、大数据、内容编码、演播室技术、内部工程工具和其他Netflix工作负载等。另外,Netflix还提供更多容器工程工具,确保无论是在个人计算机上抑或生产环境中,开发都能获得一致的使用体验。

在过去的三年中,Titus从最初仅支持批处理发展到可运行服务应用程序(包括各类内部服务以及最为关键的服务客户端)。通过这种演变,Netflix的容器使用量已经从每周数千个增加到2018年4月的每周300万个。Titus在全球范围内托管有数以千计的应用程序,跨越成千上万EC2虚拟机。Titus开源技术将共享Netflix公司3年间在容器管理和执行领域积累下的宝贵经验。


我们为什么选择开源?

在过去的几年里,我们被一遍又一遍问起,“你们什么时候开放源代码?”。 很明显,我们需要讨论的是不同规模企业的各自思路、问题与解决方案。我们希望通过分享Titus,帮助志同道合的团队加快脚步,并将我们在容器管理社区中所学到的经验分享给大家。



在过去的两年中,已经有多种容器管理平台(Kubernetes、Mesosphere DC/OS和Amazon ECS)在整个行业中得到采用,进而为不同用户带来诸多收益。此外,一些具有一定规模的互联网公司已经在Apache Mesos上开发出解决方案,旨在满足其独特的企业级需求。Titus同样以Apache Mesos为基础,并通过优化来解决Netflix的生产需求。



我们与业内同行交流的经验表明,其他组织也在容器管理平台中寻求着类似的技术。 通过将代码开源,我们希望其他人能够帮助整个容器社区消化这些技术。 我们也很高兴Titus的概念和功能能够在其他容器管理解决方案中真正落地。 从长远角度来看,这对Netflix也是一种利好,因为它将在未来为我们提供更好的现成解决方案。



最后,我们开源的原因之一,在于我们希望在Netflix之外提供回馈并实现社区共享。 我们希望借助开源社区推动我们同正在从事类似项目的其他公司开展积极合作。 我们的团队成员也乐于展示自己的工作成果,帮助潜在的未来团队成员了解他们能够在Netflix获得怎样的工作机会。


Titus和其他容器管理平台有何不同?

为了确保Titus就是Netflix需要的正确选择,我们首先必须透彻了解现有基础架构技术。 除了前面提到的容器编排领域,我们还高度关注着Docker(Moby、container-d)和CRI-O等底层容器运行时技术方案的发展方向与挑战。 我们经常会与对方公司的工程团队以及企业生产用户会面。 通过权衡现有解决方案在解决我们需求方面的实际表现,我们坚信Titus就是Netflix的最佳容器管理解决方案.



以下是一些需要特别强调的原因:



首先是Titus与亚马逊和Netflix基础设施之间的紧密集成。鉴于Netflix基础设施正广泛利用AWS,我们决定与之实现无缝集成,同时充分利用AWS所提供的功能。 Titus先进的ENI与安全组管理支持不仅涵盖了我们的网络结构,而且还涵盖了我们的调度逻辑体系。这使我们能够将ENI和IP作为资源来处理,并确保在大规模部署场景下充分考量EC2 VPC API调用率限制。通过我们的Amazon EC2元数据代理机制,我们的IAM角色支持方案能够始终为EC2应用程序提供安全保障。此代理还允许Titus提供容器专用的元数据视图,并在示例中启用各类实用功能(如服务发现)。我们利用AWS Auto Scaling来提供容器群集自动扩展功能,并使用与虚拟机相同的管理策略。我们还与AWS合作设计出应用负载均衡器的IP目标群组,这些群组为完整的IP堆栈容器与AWS负载均衡能力提供着重要支持。所有这一切,共同使容器化应用程序得以与内部应用程序及亚马逊服务以透明方式紧密集成。



为了逐步将应用程序迁移到容器,同时继续保持系统的熟悉度,我们决定利用现有Netflix云平台技术并为其赋予容器感知能力。 通过这种方式,我们将能够确保虚拟机与容器之间具备通行的开发者与运营方法。作为我们服务发现(Eureka)机制的支持功能,Spinnaker已经彻底改变了我们的遥测系统(Atlas)以及各类性能洞察技术的实际效能。



接下来是规模,其中包含多个维度。 首先,我们运行有一千多款不同的应用程序,其中一些计算量非常大(媒体编码),一些属于Netflix面向客户的关键服务,一些拥有庞大的内存和GPU使用量(算法训练),一些属于网络绑定类任务(流处理) ,或者对资源需求非常高(大数据调度)。 我们每天启动高达50万个容器和20万个集群。 我们还每月轮换数十万台EC2虚拟机,旨在满足我们的弹性工作负载。 虽然已经存在能够解决其中部分问题的解决方案,但我们认为现有解决方案无法切实应对如此庞大规模背景下的实际挑战。



最后,Titus允许我们快速、灵活地随需求发开发新增有价值功能,并且随着我们业务需求的提升而支持更多新型用例。 我们尽可能保持“刚好够用”和“以防万一”的理念,以便尽可能保持简单性与可维护性。 以下是我们为响应不断演变的业务与用户需求而快速开发出的一些功能示例:



在调度层,我们支持高级概念,如容量管理、代理管理和配置文件动态调度。 容量管理确保所有关键应用程序都具有所需的容量。 代理管理提供了能够支持数千台主机实际需求的多种功能。 代理管理包括主机注册与生命周期,自动处理故障主机以及自动调节主机效率等具体方向。 我们还实现了配置文件动态调度,其能够识别应用程序类型(面向客户的服务vs内部服务vs批量任务)之间的调度差异,以及正常或降级运行期间的调度差异。 这些调度配置文件可帮助我们优化调度效果,同时考虑可靠性、效率与工作启动延迟之间的实际权衡结论。



在容器的执行中,我们采用一套独立方案以实现容器组成、Amazon VPC网络支持以及日志管理隔离; 另有一套独立方案用于清除废弃节点。此外,我们还为其配备一套高级运营健康检查子系统。在容器组成方面,我们将系统服务注入容器中,然后在容器中运行用户工作负载。我们使用BPF对容器网络流量进行分类,并使用HTB/ECN来执行QoS,确保我们能够在各个容器之内提供高性能、稳定且持续的吞吐量。我们将日志上传和stdio处理工作隔离在容器的cgroup中。利用Spinnaker,我们能够将升级节点清除操作进行独立转移,从而避免争用固有负载的资源储备。我们已经实现了对内核、容器运行时、EC2及容器控制面板健康问题的检测和修复。对于安全需求,我们使用namespaces运行所有容器,并允许用户以透明方式直接访问容器。



Titus的设计目的在于满足Netflix公司复杂的可伸缩性需求,深入与亚马逊和Netflix的基础设施相集成,同时在我们精确调度和容器执行基础上让Netflix获得最大限度的创新能力。通过详尽了解我们的迭代历程,希望大家能够意识到Titus的容器管理方法将给您的用例带来切实有效的提升。


开源前的准备工作

在2017年第四季度,我们向一批试点企业开放了Titus的源代码,旨在帮助这些在容器管理领域面临着类似技术挑战的公司解决难题。在此之前,其中一部分企业正在Mesos上寻求现代容器批处理与服务调度程序,有些在寻找能够与亚马逊AWS紧密结合的容器管理平台,还有一些公司在寻找一套能够与Spinnaker及Eureka等NetflixOSS技术方案对接的容器管理平台。



通过与这些公司开展合作以实现Titus与AWS账户的无缝连接,我们了解到如何借助开源的力量帮助Titus做好准备。这些经验让我们了解到该如何将Titus从内部Netflix系统中分离出来,人们上手Titus时需要怎样的说明文档作为辅助,以及我们在EC2配置中所依赖的具体配置。



通过上述合作关系,我们收到大量积极反馈——人们表示由于我们在内部环境中的Amazon AWS集成与以生产为重点的平台开发思路,Titus确实拥有令人眼前一亮的优势。与此同时,我们也意识到操作一套复杂的容器管理平台(如Titus)对很多人来说都堪称一项重大挑战。



考虑到上述情况,我们努力创建最好的说明文档来帮助人们启动并运行Titus。我们已经在Titus文档网站上发布了相关信息。


结束语

Titus的开源,标志着经过三年发展、运营强化、客户关注以及与我们同行的分享/协作,Titus项目终于迎来了自己的里程碑。我们希望这一努力能够帮助其他人更好地应对其面临的挑战,并为整个OSS社区的容器管理需求带来新的选项。

着眼未来,我们将继续开发Titus功能并确保其与Netflix的产品方向保持一致。 我们计划分享我们的技术路线图, 帮助有意参与我们计划与贡献工作的朋友们迅速投身其中。

原文链接:Titus, the Netflix container management platform, is now open source (翻译:ylzhang)

0 个评论

要回复文章请先登录注册