概念

本文档描述了一些关键概念和特性,这些概念和特性使 YARN 成为一流的平台,以便在 YARN 上本机支持长期运行的服务。

YARN 上的服务框架(ApplicationMaster)

实现了一个容器编排框架,以帮助在 YARN 上部署服务。简而言之,该框架是一个 ApplicationMaster,它根据用户提供的服务定义从 ResourceManager 请求容器,并在整个集群中启动容器,同时遵守放置策略。它还执行所有繁重的任务,例如解析服务定义和配置、管理组件生命周期(例如自动重新启动失败的容器)、监控组件的运行状况和准备情况、确保组件之间的依赖启动顺序、增加/减少组件、升级组件等。该框架的最终目标是确保服务按用户期望的状态启动并运行。

此外,它利用 YARN 核心中的许多特性来完成调度约束,例如亲和性和反亲和性调度、服务日志聚合、在容器失败时自动重新启动容器以及对容器进行就地升级。

用于在 YARN 上部署/管理服务的 Restful API 服务器

开发了一个 restful API 服务器,允许用户通过简单的 JSON 规范在 YARN 上部署/管理其服务。这避免了用户处理低级 API,编写复杂代码将他们的服务引入 YARN。REST 层充当基于创建和 YARN 服务生命周期管理的统一 REST 入口。服务范围可以从简单的单组件应用程序到最复杂的多组件应用程序,需要特殊的编排需求。请参阅此 API 文档 以获取详细的 API 文档。

API 服务器是无状态的,这意味着用户可以简单地启动多个实例,并让负载均衡器为其提供支持,以支持 HA,分配负载等。

服务发现

实现了一个 DNS 服务器,以通过标准机制(DNS 查找)在 YARN 上启用服务发现。

框架将容器信息(如主机名和 IP)发布到 YARN 服务注册表 中。DNS 服务器本质上通过将它们转换为 DNS 记录(如 A 记录和 SRV 记录)来公开 YARN 服务注册表中的信息。然后,客户端可以通过标准 DNS 查找来发现容器的 IP。

YARN 服务注册表的先前读取机制仅限于特定于注册表的 (java) API 和 REST 接口,并且难以连接现有的客户端和服务。基于 DNS 的服务发现消除了这一差距。有关更多详细信息,请参阅此 服务发现文档