本文档描述了一些关键概念和特性,这些概念和特性使 YARN 成为一流的平台,以便在 YARN 上本机支持长期运行的服务。
实现了一个容器编排框架,以帮助在 YARN 上部署服务。简而言之,该框架是一个 ApplicationMaster,它根据用户提供的服务定义从 ResourceManager 请求容器,并在整个集群中启动容器,同时遵守放置策略。它还执行所有繁重的任务,例如解析服务定义和配置、管理组件生命周期(例如自动重新启动失败的容器)、监控组件的运行状况和准备情况、确保组件之间的依赖启动顺序、增加/减少组件、升级组件等。该框架的最终目标是确保服务按用户期望的状态启动并运行。
此外,它利用 YARN 核心中的许多特性来完成调度约束,例如亲和性和反亲和性调度、服务日志聚合、在容器失败时自动重新启动容器以及对容器进行就地升级。
开发了一个 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 的服务发现消除了这一差距。有关更多详细信息,请参阅此 服务发现文档。