Netflix开源其容器管理平台Titus


【编者的话】Titus由Netflix在内部构建,用于制作Netflix流媒体,推荐和内容系统,为管理计算资源提供了一个便捷的模型。它允许开发人员仅维护他们的应用程序工件,并通过利用Netflix专注于容器的工程工具,从开发人员的笔记本电脑到生产提供一致的开发人员体验。下面是关于开源的介绍:

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

Titus支撑着Netflix业务的关键部分,这包括流媒体、推荐和内容系统,为管理计算资源提供了一个便捷的模型。它允许开发人员仅维护他们的应用程序工件,并通过利用Netflix专注于容器的工程工具,从开发人员的笔记本电脑到生产提供一致的开发人员体验。

在过去的三年中,Titus从最初的支持批处理发展到运行服务应用程序(包括内部的,最终是关键的客户端)。通过这种演变,Netflix的容器使用已经从每周数千个增加到2018年4月每周的300万个。Titus在全球范围内托管了数以千计的应用程序,跨越了成千上万的EC2虚拟机。Titus的开源技术共享了经过3年的容器管理和执行的生产经验。

我们为什么要开源?

在过去的几年里,我们被一遍又一遍的问起,“你们什么时候开放源代码?”。 很明显,我们讨论的是各种各样的公司的想法、问题和解决方案,无论大小。我们希望通过分享Titus,能够帮助加速志同道合的团队,并将我们在容器管理社区中所学到的经验带给我们。

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

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

最后,我们开源的原因之一就是我们希望在Netflix之外回馈并与社区分享。 我们希望借助开源推动我们和正在从事类似项目挑战的其他公司的积极合作。 我们的团队成员也喜欢能够在外部展示他们的工作,未来的团队成员可以了解他们有什么工作机会。

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

为了确保我们在Netflix的投产是明智的,我们需要非常了解现成的基础架构技术。 除了前面提到的容器编排方面,我们还与Docker(Moby,container-d)和CRI-O等底层容器运行时技术的方向和挑战保持着紧密联系。 我们经常会与建立这些解决方案的公司的工程团队以及在他们的生产基础设施中使用它们的团队会面。 通过平衡现有解决方案对我们的需求所提供的知识,我们相信Titus是Netflix容器管理的最佳解决方案

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

首先是Titus与亚马逊和Netflix基础架构之间的紧密集成。鉴于Netflix基础设施如此广泛地利用AWS,我们决定无缝集成,并利用AWS所提供的功能。 Titus先进的ENI和安全组管理支持不仅涵盖了我们的网络结构,而且还涵盖了我们的调度逻辑。这使我们能够将ENI和IP作为资源来处理,并确保安全的大规模部署考虑EC2 VPC API呼叫速率限制。我们的IAM角色支持允许安全的EC2应用程序保持不变,通过我们的Amazon EC2元数据代理提供。此代理还允许Titus提供容器特定的元数据视图,该视图启用各种应用程序方面(如服务发现)。我们利用AWS Auto Scaling来提供容器群集自动扩展功能,并使用与虚拟机相同的策略。我们还与AWS合作设计了应用负载平衡器的IP目标群组,这些群集为完整的IP堆栈容器和AWS负载均衡提供了支持。所有这些功能一起使集装箱式应用程序能够与内部应用程序和亚马逊服务透明地集成。

为了逐步使应用程序转换到容器,同时保持尽可能多的系统熟悉,我们决定利用现有的Netflix云平台技术,使它们能够识别容器。 我们选择这个路径来确保虚拟机和容器之间的通用开发人员和操作方法。 通过我们的Spinnaker支持,我们的服务发现支持(Eureka),telemetry系统(Atlas)的变化以及性能洞察技术,这一点很明显。

接下来是规模,它有很多维度。 首先,我们运行了一千多个不同的应用程序,其中一些计算量非常大(媒体编码),一些是Netflix面向客户的关键服务,一些内存和GPU使用量大(算法训练),一些是网络绑定(流处理) 对资源的利用(大数据调度)感到满意,有些则不是。 我们每天推出高达50万个容器和20万个集群。 我们还每月轮换数十万台EC2虚拟机,以满足我们的弹性工作负载。 虽然有解决方案可以帮助解决其中的一些问题,但我们并不认为现有的解决方案可以应对这些规模上的挑战。

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

在调度层,我们支持高级概念,如产能管理、代理管理和动态调度配置文件。 产能管理确保所有关键应用程序都具有所需的产能。 代理管理提供了支持数千台主机所需的多种功能。 代理管理包括主机注册和生命周期,自动处理故障主机以及自动调节主机的效率。 我们拥有动态调度配置文件,可以理解应用程序类型(面向客户的服务与内部服务与批次)之间的调度所需的差异,以及正常或降级运行状况期间所需的调度差异。 这些调度配置文件可帮助我们优化调度,考虑可靠性,效率和工作启动时间延迟之间的真实世界折衷。

在容器的执行中,我们有一个独特的方法来处理容器组成,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配置中所依赖的配置。

通过这些伙伴关系,我们收一些反馈,Titus确实因为我们的Amazon AWS集成和平台的生产重点操作方面而受到影响。我们还听说了如何操作一个复杂的容器管理平台(如Titus)对很多人来说都是一个挑战。

考虑到所有这些知识,我们努力创建最好的文档来让Titus启动并运行。我们已经在Titus文档网站上获取了这些信息。

结束语

开源Titus标志着经过三年发展、运营的强化、客户的关注以及与我们的同行的分享/协作,这是一个重要的里程碑。我们希望这一努力能够帮助其他人面对他们所面临的挑战,并为整个OSS社区的容器管理带来新的选择。

在不久的将来,我们将保持Titus中的功能开发与Netflix的产品方向保持一致。 我们计划分享我们的路线图,以满足其他人有兴趣看到我们的计划和贡献。

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

0 个评论

要回复文章请先登录注册