本地无服务器与无服务器Express

4

目前,我正在遵循由Serverless Stack团队准备的指南。他们正在使用React和许多AWS功能,如lambdaAPI getaway。为了练习,我正在使用Serverless堆栈重新编写我的旧的Express示例。

我还看到了一个名为aws-serverless-express库或工具。这个库或工具允许您以serverless形式运行您的express应用程序。

这可能是一个奇怪的问题,但我想知道本地 serverless构建和serverless express之间的区别。

Cold start(冷启动)已经有劣势了,我意识到了。除此之外,serverless express的正面和负面方面是什么?
本地 serverless的正面和负面方面是什么?


自2019年12月起,Lambda函数的冷启动将变得更加轻松-https://aws.amazon.com/blogs/aws/new-provisioned-concurrency-for-lambda-functions/. 如果您将应用程序设置为快速启动100-500毫秒,则几乎不会看到它们。如果您有express应用程序,则很容易将其移植到lambda-aws-serverless-express只是一个代理请求的包装器。 - Traycho Ivanov
请查看关于aws-serverless-express的评估:https://medium.com/@ac052790/the-pros-and-cons-of-aws-serverless-express-789996e4be32 - Allan Chua
4个回答

4

另一个缺点是您无法为单个路由(资源)提供内存量。 - Paulo Mendonça

2
“本地”无服务器的构成可能存在争议,它包括了一定的范围。有一些方法可以利用托管服务,从而将 Lambda 函数使用最小化,但也有很多用例需要自定义逻辑,例如与第三方服务集成。
首先,你应该问问自己现有的应用程序是做什么的,以及为了尽可能地实现“无服务器”,你需要投入多少时间进行重构。如果这是一个纯粹用于学习目的的项目,你可能希望进行完全转换,以最大化你的学习效果。如果这是一项为业务带来收入的应用程序,这可能是一种不合适的资源使用方式。
话虽如此,当前最佳实践无服务器和使用 serverless-express 的主要区别将是:
  • 存在额外的依赖项。这将需要一些额外的时间在运行时解决[1],需要在部署时正确管理(打包),并需要额外的工作来更新/修补/审计(安全)。
  • 权限粒度 - 所有路由管理都委托给 express,你将无法在基础架构层面上为每个路由设置粒度权限。
  • 你将无法在每个路由上设置资源限制
另一方面:
  • 你将避免使用大型云模板
  • 利用现有的工具和对Express的了解

虽然这取决于应用程序是/做什么,但与单一用途的Lambda函数相比,你不太可能注意到很多冷启动惩罚,这可能是过早优化的情况。服务器无状态思维方式的一部分是关注价值——所以如果我在做这个,我会尽可能少地在Lambda中运行应用程序——开始使用X-Ray和CloudWatch [2]来检测路由,然后优化需要的路由。

从学习的角度来看,如果你选择使用serverless-express,你可能会错过学习更多关于服务集成、VTL转换、请求/响应映射等方面的机会,如果你采取更分散的方法,你将接触到这些内容。你可以通过API Gateway和DynamoDB构建一些非常酷的东西——甚至不必接触Lambda函数。

这并不意味着以这种方式使用Express是一件坏事 - AWS本身指出这是构建无服务器应用程序的有效方式,而像API Gateway的HTTP API功能[3]这样的新功能有助于实现这一点。实际上,AWS发布的[4]真实世界无服务器应用程序示例遵循单函数原则,尽管是针对Java而不是Express应用程序。[1]https://www.freecodecamp.org/news/just-how-expensive-is-the-full-aws-sdk-3713fed4fe70/ [2]https://theburningmonk.com/2019/11/check-list-for-going-live-with-api-gateway-and-lambda/ [3]https://aws.amazon.com/blogs/compute/announcing-http-apis-for-amazon-api-gateway/ [4] https://github.com/awslabs/realworld-serverless-application 这是一个 GitHub 链接,无法直接翻译。

非常出色和详细的回答 - 谢谢Matthew,这真的帮助了我的理解。 - paddyfields

0

在无服务器编程中,保持代码尽可能简单是最好的选择,Lambda 只应运行您的业务逻辑,这应该只是一个函数。

如上所述,冷启动是无服务器的主要限制。

在无服务器上运行 express 是没有意义的,因为它运行一个 Node 服务器并监听某个端口,这是不必要的。Lambda 并不总是可用的,它只在运行时存在。


回答跳过了 CloudFormation 限制问题和 serverless express 路由直接连接到 Lambda 请求的事实 - 也就是说,serverless express 是一个脆弱的无服务器框架。 - okigan

0

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