netflix 网飞netflix官网网址( 三 )


延迟敏感型应用程序像 Sagan 这样的 Cosmos 服务对延迟敏感 , 因为它们是面向用户的 。例如 , 一位正在制作社交媒体帖子的艺术家 , 在剪辑最新一季的 《纸钞屋》(Money Heist)的视频时不想等太久 。对于 Stratum , 延迟是执行工作的时间加上获取计算资源的时间的函数 。当工作非常繁忙时(通常是这样) , “获取资源的时间”就成为了重要因素 。举个例子 , 假设你购物时通常会买卫生纸 。正常情况下 , 把它放进购物车 , 通过收银台是没有问题的 , 整个过程需要你花费 30 分钟 。

netflix 网飞netflix官网网址

文章插图
(资源稀缺)
然后有一天 , 一种糟糕的病毒爆发了 , 并且每个人都决定要买更多的卫生纸 。由于总需求超过了可用容量 , 你卫生纸的延迟时间现在从 30 分钟增加到了两周 。Cosmos 应用程序(尤其是 Stratum 函数)在面对突发和不可预测的需求时也有同样的问题 。Stratum 通过以下几种方式来管理函数的执行延迟:
资源池(Resource pools) 。最终用户可以为自己的业务用例保留 Stratum 计算资源 , 并且资源池是分层的 , 允许用户组共享资源 。容量预热(Warm capacity) 。最终用户可以提前请求计算资源(例如容器) , 以减少 Stratum 中的启动延迟 。微批次(Micro-batches) 。Stratum 还使用微批次处理 , 这是在 Apache Spark 等平台上学到的一种减少启动延迟的技巧 。其思想是将启动成本分摊到许多函数调用中 。如果你调用函数 10000 次 , 那么该函数可能在 10000 个容器上运行一次 , 也可能在 1000 个容器上运行 10 次 。优先级(Priority) 。当需要在成本和低延迟的需求之间进行平衡时 , Cosmos 服务通常会落在中间的某个位置:有足够的资源来处理典型的突发事件 , 但没有足够的资源来处理延迟最低的最大突发事件 。通过对工作进行优先级排序 , 即使在资源短缺的情况下 , 应用程序仍可以确保以较低的延迟处理最重要的工作 。Cosmos 服务所有者可以允许最终用户设置优先级 , 或者在 API 层或工作流中自己设置优先级 。吞吐量敏感型应用程序像 Tapas 这样的服务对吞吐量非常敏感 , 因为它们会消耗大量的计算资源(例如每天数百万个 CPU 小时) , 并且更关心一段时间内(数小时或数天内)完成的任务 , 而不是完成单个任务的时间 。换句话说 , 服务等级目标(SLO)是以每天的任务和每项任务的成本来衡量的 , 而不是以每秒的任务来衡量的 。
【netflix 网飞netflix官网网址】对于吞吐量敏感的工作负载 , 最重要的 SLO 是由 Stratum 的 Serverles 层提供的 。构建在 Titus 容器平台之上的 Stratum 允许吞吐量敏感的工作负载通过灵活的资源调度使用“机会主义”计算资源 。例如 , 如果一个 Serverles 函数调用愿意等待一个小时再执行 , 那么它的成本可能会更低 。
Strangler Fig我们知道 , 移动一个像 Reloaded 这样庞大而复杂的遗留系统将是一个跨越危险鸿沟的大跃进 , 这个鸿沟里到处都是失败的重新设计后的项目碎片 , 但毫无疑问 , 我们必须跳下去 。为了降低风险 , 我们采用了 Strangler Fig(绞杀榕)模式 , 让新系统围绕旧系统扩展 , 并最终完全取代旧系统 。
仍然在学习我们于 2018 年开始建造 Cosmos , 并从 2019 年初开始投入生产 。今天 , 我们大约有 40 个 Cosmos 服务 , 并且预计还会增长更多 。我们仍处于中期阶段 , 但我们可以分享一些我们迄今为止所学到的重点知识:
1. Netflix 的文化起到了关键的作用
众所周知 , Netflix 的工程文化依赖于个人判断 , 而不是自上而下的控制 。软件开发人员有承担风险和做出决策的自由和责任 。我们中没有人有软件架构师的头衔;我们所有人都在扮演着这个角色 。在这种背景下 , Cosmos 从局部优化的不同尝试中脱颖而出 。Optimus、Plato 和 Stratum 是独立构思的 , 并最终整合成一个单一的平台愿景 。团队中的应用程序开发人员让每个人都专注于用户友好的 API 和开发人员的生产力 。基础设施和媒体算法开发人员之间建立了强有力的合作关系 , 才将愿景变为现实 。我们不可能在自上而下的工程环境中做到这一点 。