为什么Netflix推出自己的Node.js功能即服务?


Netflix等公司首创了微服务等概念,并将其技术堆栈转移到Spring Cloud等大众应用,如今他们又走在了serverless无服务器架构前列:
自从hook.io在2014年推出功能即服务(FaaS)以来,开发人员一直在抓住这项新技术,并且有两只手。这是无服务器计算梦想的下一个时代:一个一体化的“no ops无运营”平台,允许开发人员构建、开发、启动和管理应用程序功能 - 没有麻烦,你知道,构建基础架构通常很费事。
仅仅四年之后,FaaS已成为云工程工具包中的一个交钥匙工具,云工程工具包是AWS Lambda,Google Cloud Functions和Microsoft Azure Functions等云服务提供商的内置标准产品。
工程师喜欢FaaS的“无运营”优点,这使得可以简单地将模块化功能块上传到您选择的云提供商,然后将其作为隔离、可靠和低延迟的生产服务执行。企业喜欢他们的开发人员可以比以前更快地将代码部署到生产环境中。
Netflix是一家早期极其有效采用云原生技术的公司,采用FaaS来保持电影顺利播放,使其每天有1.3亿小时的视频流传输给1.3亿客户。

是什么驱使Netflix决定接受FaaS?
FaaS功能非常适合Netflix API平台,它使工程师能够使用JavaScript编写和部署第1层服务,而无需管理基础架构或操作。基于JavaScript的FaaS平台允许工程师将JavaScript功能部署为生产服务,这意味着可以在每个Netflix请求的核心提供对延迟敏感的服务。

在什么时候编写自己的FaaS平台
几年前,Netflix使用无服务器实现了一个引人注目的用例,拥有许多客户团队,每个团队都拥有不同的用户界面 - 这需要快速创新和高可用性。与此同时,客户团队使用后端(BFF)模式作为其UI,这意味着他们拥有的每个UI版本都有一个定制服务。为了创新,每年进行数百次A / B测试,每种测试都有许多变体。为了实现这种快速创新,这些BFF由客户团队自己拥有,并且通常会在每个版本中进行更改。
设计,构建和运行高性能,低延迟和高可用性服务很困难 - 即使对于具有多年经验的经验丰富的服务器工程师也是如此。期望客户端工程师根据这些要求拥有和运营这些服务是不合理的 - 因为他们的核心专长是构建最高级的用户界面。
FaaS和无服务器允许每个客户团队将其服务的架构和操作卸载到团队(API平台团队)维护的公共平台,并允许他们专注于编写区分每个BFF与下一个BFF的业务逻辑。

为什么建立了自己的内部FaaS平台?
无法找到满足需求的第三方FaaS平台,大多数外部FaaS和无服务器产品主要针对延迟不敏感的事件驱动任务,而不是针对大规模延迟敏感型服务。在Netflix上运行高可用性服务需要与Netflix服务堆栈集成。使用现成的FaaS产品很难实现这种紧密集成,这些产品是针对更一般的用例量身定制的。
这个运行平台NodeQuark - 因为它使用Node.js. NodeQuark FaaS平台是一个服务容器,已预先组装了生产就绪服务所需的所有组件。所需要的只是客户端添加他们的业务逻辑。

NodeQuark如何适应Netflix堆栈?
开发人员生产力工具团队构建了一个名为Newt(Netflix Workflow Toolkit)的本地开发工具。通过NEWT为每个工程师引导一致的开发环境,NEWT提供原生开发环境和工作流程。NEWT引导FaaS开发环境,开发人员可以在本地开发,测试和调试功能。在幕后,本地配置一个包含FaaS运行时的Docker容器,工具无缝同步代码并强制容器和本地主机之间 - 通过日志和调试端口提供调试信息。
在构建和管理方面,通过函数,我们构建了一个函数索引,可以不变地对函数进行版本化和存储。由于我们有许多团队使用函数,因此索引是多租户的,并且支持团队和项目的命名空间。
我们使用SpinnakerTitus来管理我们的基础设施。Spinnaker作为CI / CD工具和Titus用于容器编排。Spinnaker允许我们协调支持FaaS所需的复杂部署交互。Titus允许我们可靠地大规模部署容器。Newt通过本地迭代和Titus入门帮助简化容器开发。在Newt和Titus之间拥有一致的容器环境有助于开发人员充满信心地部署。NEWT工具还提供了一个CLI,可以轻松管理部署过程。
在操作上,我们使用Atlas作为指标和仪表板 - 提供运行时对每项服务运行状况的可见性 - 并与PagerDuty集成警报。这些指标,警报和仪表板都是为每个新功能自动生成的,确保每个服务的完全可见性和可操作性。
Netflix拥有一个内部的开发人员生产力工具团队,以确保您的开发人员拥有完美的工具来完成他们的工作。
我们对技术的使用非常务实,理解这一切只是达到支持业务主要目标的手段。您可以在我们采用AWS和许多其他开源技术(如gRPC,Node.js,Docker等)中看到这一点。Netflix几乎完全托管在AWS(EC2)上,满足了我们的许多需求。然而,有时最好的答案仍然是建立自己的。​​​​​​​