今年 2 月,我们发布了Fleet(Formerly Hole),这是一个基于 Node.js 的 FaaS 平台,它比其他平台更快,并与生态系统建立更忠实的集成。在这篇文章中,我将阐明所有这些是如何工作的,以及我们为无服务器生态系统带来的不同之处,在下一篇文章中,我将评论该平台。

  • 什么是舰队功能?

*常见问题

*车队解决方案

  • 缩放

  • HTTP 休息

  • 用例

什么是舰队功能?

它是一种能够执行由 HTTP 请求调用的 Node.js 函数的技术,自动缩放到零或 N,并且能够在冷启动几乎为零的情况下执行这些函数。

export default (req, res) => {
    res.send({ message: 'ƒ Fleet Simple HTTP Endpoint!' });
};

进入全屏模式 退出全屏模式

Live 示例:https://examples.runfleet.io/simple-http-endpoint/

常见问题

关于冷启动的简要说明是当您的服务收到请求并且平台必须提供其功能以能够处理请求时,通常遵循以下流程:

1.事件调用

2.启动新虚拟机

  1. 下载代码(通常来自 S3。)

4.设置运行时

5.初始化函数

[其他平台功能配置示例](https://res.cloudinary.com/practicaldev/image/fetch/s--OB5hwRck--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// /fleetfn.com/images/blog/other-platforms%25402x.png)

从 2 到 4 的步骤就是我们所说的冷启动,在接下来的调用中,如果实例可用并被缓存,提供者可以跳过这些步骤来执行热启动中的功能。对冷启动有一些误解,当一个函数已经在运行并接收到一个新的调用时,提供者会调用一个冷启动的新实例,当你的应用程序同时接收到许多调用时也会发生同样的情况,都是冷启动.

一些人采用的解决方案之一是不时 ping 以保持实例处于活动状态或使用并发配置服务,这将增加您的费用并要求您准确了解应用程序的流量峰值是什么,需要监控以防止不必要的费用对于某些人来说,这是非常糟糕的,因为它消除了您不担心基础设施的想法......

车队解决方案

[车队解决方案](https://res.cloudinary.com/practicaldev/image/fetch/s--T1H1Ch-t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://fleetfn. com/images/fleet-isolate-sandbox-function%403x.png)

对此的 Fleet Function 解决方案是安全快速地执行其功能,因此我们专注于能够在单个 Node.js 进程中执行多个功能,该进程能够同时处理数千个功能,在隔离环境中执行,安全快捷。

  • 隔离能够使用隔离内存执行功能,并允许他们根据规定的限制使用CPU。

  • Safe在同一实例中,一个函数无法观察另一个函数或从其他函数获取资源(例如来自 process.env、上下文、请求...的信息),这也包括访问到文件系统。

  • Fast我们去掉了“Start new VM”和“Setup runtime”步骤,源代码在每个可用功能的区域都可用,接近执行时间。我们能够在同一进程中更快地执行这些功能。

这意味着我们可以比其他平台更快地运行 Node.js 函数,并且函数消耗的内存少一个数量级,同时保持安全性和隔离环境。

为了施加安全环境,Fleet 必须限制一些 Node.js API以提高安全性并防止可疑函数访问资源,每个正在运行的函数只能访问已授予它的资源。

缩放

Fleet 的主要区别之一是我们如何扩展其 Node.js 功能。与仅通过并发扩展其功能的其他平台不同,即 VM 的每个实例一次只能处理一个调用,如果它很忙,它将提供一个新实例,但有一个限制,通常为 1000 个实例并发。

[Fleet 根据异步限制扩展功能](https://res.cloudinary.com/practicaldev/image/fetch/s--DRDtbrZF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https: //fleetfn.com/images/blog/hole-technology%25402x.png)

与 Fleet的不同之处在于,我们已经管理它的功能可以在配置的限制内一次处理许多异步请求,如果在一段时间内达到此限制,则在短短几毫秒内为其功能配置一个新实例。这意味着在您的函数运行期间,它可以处理许多请求并利用在多个请求期间与您的数据库建立的连接。

在 Fleet 中没有明确的并发限制,它是按区域动态的。我们尽一切努力处理最大数量的请求,您可以控制异步限制,因此您可以成倍增加您的应用程序可以处理的请求数量。

HTTP 休息

[部署概述](https://res.cloudinary.com/practicaldev/image/fetch/s--Z7q6rAjR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/i/9bizerx6prehpau1qkc5.png)

Fleet Functions 通过 HTTP Rest 调用,不需要额外的 API Gateway 服务,每个新部署 Fleet 都会生成一个新的 URL 用于预览部署(在<uid>-<project-name>.runfleet.io中),并且您可以使用一个选项来定义生产部署与专有子域在<project-name>.runfleet.io

所有部署都是在console.fleetfn.com上创建的项目上进行的,能够邀请成员加入具有特权的团队......这是另一篇文章的主题。

您可能想在这里阅读更多关于它的信息。

用例

Fleet 旨在更快地运行 Node.js 函数,并且很快将使用 WebAssembly 运行其他语言的函数。考虑到这一点,Fleet 不会像 Cloud Run 那样处理容器配置,也不会允许您创建自己的自定义运行时环境。

可以很好地处理您的应用程序的 API,能够满足高需求并以低需求保存。

Fleet 可以非常自信地处理微服务、函数之间的调用和流量变化。我们正在开发我们称之为虚拟专用功能或 VPF的专用功能网络,它将 VPF 内部的功能与外部世界隔离开来,只允许 VPF 内部的一些功能被外部世界,它还允许在 VPF 之间更好地监控和共享,在未来,我们还希望允许您将当前网络安全地连接到 VPF 网络。此外,我们正在研究Traffic Shifting是我们的服务,能够使用基于数据的一组规则进行金丝雀部署,您可以定义一组自治规则来提高执行拆分的流量更改的可靠性,例如例如,一定数量的成功或失败请求可以增加特定部署的流量百分比。这适用于对代码问题或测试新功能敏感的服务。

虽然 Fleet 的重点不在于网站托管,但您也可以使用 React](https://github.com/fleetfn/examples/tree/master/react-ssr)处理[服务器端渲染,将静态文件部署到 S3 并使用这些函数进行路由。


我邀请您访问我们的网站、我们的文档和示例存储库,请随意探索,如果您对此感兴趣并且您有兴趣对其进行测试,我们正处于私人测试阶段,其中一些人们已经在测试,我们每周都会发送邀请。注册非常简单:

  • 转到console.fleetfn.com

  • 继续使用 Github 并希望您很快会收到一封电子邮件

如果您想在抢先体验列表中优先考虑您的电子邮件,您可以填写我们的快速问卷。

我们每周都会发布我们的每周更新日志,您可以密切关注我们的twitter @fleetfn,其中包括一些主要资源的短视频,我们总是在我们的特定页面上发布更新日志,并提供更详细的描述fleetfn.com /更改日志。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐