netflix 网飞netflix官网网址( 二 )


Optimus , 一个将外部请求映射到内部业务模型的 API 层 。Plato , 一个用于业务规则建模的工作流层 。Stratum , 一个 Serverless 层 , 用于运行无状态以及计算密集型函数 。所有这些子系统都通过 Timestone(一种大规模、低延迟的优先级队列系统)进行异步通信 。每个子系统处理服务的不同关注点 , 并且可以通过专门构建的托管持续交付流程独立部署 。这种关注点的分离使得编写、测试和操作 Cosmos 服务更加容易 。

netflix 网飞netflix官网网址

文章插图
(平台与应用程序分离)
Cosmos 服务请求
netflix 网飞netflix官网网址

文章插图
(Cosmos 服务请求的跟踪图)
上图是我们的观察门户网站 Nirvana 的截图 。它展示了 Cosmos 中的一个典型服务请求(在本例中是一个视频编码器服务):
有一个用于编码的 API 调用 , 其中包括视频源和“配方” 。视频被分成 31 个块 , 并且有 31 个编码函数并行运行 。组装函数只被调用一次 。索引函数只被调用一次 。8 分钟后工作流完成 。服务分层Cosmos 支持服务的分解和分层 。由此产生的模块化架构允许团队专注于他们自己的专业领域 , 并控制自己的 API 和发布周期 。
例如 , 上面提到的视频服务只是众多用于创建可在设备上播放的流的服务之一 。这些服务还包括检查、音频、文本和包装 , 它们是用更高级别的服务精心编排的 。其中最大、最复杂的是 Tapas , 它负责从工作室获取资源 , 并使这些资源可以在 Netflix 服务上播放 。另一个高级服务是 Sagan , 它用于工作室的操作 , 如营销剪辑或日常制作编辑代理等 。
netflix 网飞netflix官网网址

文章插图
(Cosmos 服务分层)
当制作工作室有新作品时 , 它会触发一个 Tapas 工作流 , 该工作流会编排执行检查的请求、编码视频(多种分辨率、质量、视频编解码器)、编码音频(多种质量、编解码器)、生成字幕(多种语言)并打包结果输出(多个播放器格式) 。因此 , 对 Tapas 的单个请求可能导致对其他 Cosmos 服务的数百个请求以及数千个 Stratum 函数调用 。
下面的跟踪示例展示了一个顶级服务中的请求是如何向下流到较低级别的服务中 , 从而导致许多不同操作的 。在这种情况下 , 请求需要 24 分钟才能完成 , 数百个不同的行动涉及 8 个不同的 Cosmos 服务和 9 个不同的 Stratum 函数 。
netflix 网飞netflix官网网址

文章插图
(通过多个层的服务请求跟踪图)
工作流规则或者我们应该说是一些工作流规则?Plato 是一种粘合剂 , 它通过为服务开发人员提供一个定义领域逻辑和编排无状态函数 / 服务的框架来将 Cosmos 中的一切内容联系在一起 。Optimus API 层具有内置的工具 , 可以调用工作流并检查它们的状态 。Stratum 的 Serverless 层生成强类型的 RPC 客户端 , 使调用 Serverless 函数变得简单且直观 。
Plato 是一个前向链接规则引擎 , 它有助于我们算法的异步性和计算密集性 。与 Netflix 的 Conductor 这样的程序化工作流引擎不同 , Plato 使创建“始终在线”(“always on”)的工作流变得更容易 。例如 , 当我们开发出更好的编码算法时 , 我们基于规则的工作流会自动管理更新现有的视频 , 而无需触发和管理新的工作流 。此外 , 任何工作流都可以调用另一个工作流 , 从而实现上述服务的分层 。
Plato 是一个多租户系统(使用 Apache Karaf 实现) , 可以极大地减少操作工作流的操作负担 。用户在自己的源代码库中编写和测试他们的规则 , 然后通过将编译后的代码上传到 Plato 服务端来部署工作流 。
开发人员通过用 Emirax(一种基于 Groovy 构建的特定领域语言)编写的一组规则来指定他们的工作流 , 每条规则有 4 个部分:
匹配(match):指定要触发此规则必须满足的条件 。动作(action):指定触发该规则时要执行的代码;在这里 , 你可以调用 Stratum 函数来处理请求 。响应(reaction):指定当动作代码成功完成时要执行的代码 。错误(error):指定遇到错误时要执行的代码 。在这些部分中 , 你通常首先要记录工作流状态的变化 , 然后执行使工作流向前推移的步骤 , 例如 , 执行 Stratum 函数或返回执行结果 。