无服务器 - 在Lambda函数中运行Express实例,好还是坏?

11

在学习 Serverless Framework 的过程中,我看到了几篇教程,介绍如何在 Lambda 中运行 Express 实例。这对我来说似乎是一种浪费,而且与 Lambda 函数的目的相违背。

通常的方法涉及在 Lambda 中运行一个 Express 实例,并将 API Gateway 请求代理到 Express 路由器进行内部处理。

对于我来说,简单的方法就是在 API Gateway 中创建一个API,并将单个请求路由到用于处理的Lambda。我有什么遗漏的吗?

考虑到 Lambdas 的执行时间为 15 分钟,在内存方面只是启动 Express 实例不是非常昂贵吗?此外,最多只能并发执行 100 个 Lambda 将会造成瓶颈,不是吗?在这种情况下,使用 EC2 实例会更加适合吗?像这样使用 Lambda 似乎有些过度。

我看到在 Lambda 中运行 Express 实例仅有两个好处:

  1. 在迁移现有的用 Express 编写的应用程序时,可以逐步将应用程序拆分为 API Gateway 终端点。
  2. 内部处理路由,而不依赖于 API Gateway 的请求/响应模型(代理到 Express 路由器)。

如果我遗漏了什么,这种方法的好处是什么?

一些推广此方法的资源:


这是一篇介绍框架不同优缺点的文章!希望能对您有所帮助。https://medium.com/@ac052790/the-pros-and-cons-of-aws-serverless-express-789996e4be32 - Allan Chua
1个回答

13

大部分观点都是正确的,将Express运行在API网关之后的Lambda函数内确实可以被称为反模式。

需要注意的是初始化时间并不是非常值得关注的。虽然单个调用的执行时间被限制在15分钟内,但是单个Lambda实例在启动后会为多个请求提供服务。经常调用的单个Lambda实例通常具有6到9小时的生命周期,并且在约30分钟的闲置时间后被清理。(请注意,AWS没有公开披露这些参数,这些数字只应作为估算值)。但是无论如何,谁是不幸的人会遇到冷启动并吃掉初始化延迟,他可能会遇到数千毫秒的额外延迟。

这种方法的主要优势是,正如您所说,为具有现有Express知识和应用程序的Node开发人员提供了迁移路径。但是,当您从头开始开发应用程序并实现惯用的无服务器模式时(例如利用API Gateway路由),通常不应考虑此方法。

请再强调一下,这种方法的主要缺点:

  • 由于放弃了API Gateway功能(路由等),导致整体代码复杂度更高
  • 较长的初始化时间导致冷启动时间更长
  • 更多依赖导致代码占用空间更大
  • 由于内部路由,失去了树摇和单独打包的能力,导致代码足迹更大。
  • 附注:如今主要竞争对手可能不是专用的EC2实例,而是在Node.js中运行Express的Fargate容器。这种模式具有与无服务器相同的许多优点,同时保持现有的开发模式和工具基本不变。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接