NodeJS 本机无服务器与无服务器Express

33qvvth1  于 2023-03-29  发布在  Node.js
关注(0)|答案(4)|浏览(171)

现在,我正在遵循Serverless Stack Team准备的指南。他们正在使用React和许多AWS特性,如lambdaAPI getaway。为了实践它,我正在使用Serverless堆栈重写我的一个旧的Express示例。
我还看到了一个库或工具,叫做aws-serverless-express。这个库或工具可以让你以serverless的方式运行你的express应用。
这将是一个奇怪的问题,但我想知道native serverlessbuild和serverless express之间的区别。
Cold start已经有缺点了,我知道了。除此之外,无服务器快递还有哪些负面或正面的方面?

  • *native serverless**的消极或积极方面是什么?
vsmadaxz

vsmadaxz1#

无服务器快递的缺点

1.这些额外的依赖项可能导致额外的冷启动时间
1.无法为每个路由提供单独的粒度权限(例如,一个路由访问S3,另一个访问DynamoDB)

优点

1.减少样板文件
1.避免CloudFormation堆栈中的资源限制
更多信息:
https://github.com/jeremydaly/lambda-api#why-another-web-framework
https://www.jeremydaly.com/build-serverless-api-serverless-aws-lambda-lambda-api/#comment-19036

z9smfwbn

z9smfwbn2#

什么是“原生”无服务器可能会引起争论,并构成一个频谱。有一些方法可以利用托管服务,使lambda函数的使用最小化,但也有很多用例需要自定义逻辑,例如与第三方服务集成。
我首先要问你自己,你现有的应用程序是做什么的,为了尽可能地重构为“无服务器”,你要投入多少时间。如果这是一个纯粹用于学习的项目,你可能想做一个完整的转换,以最大限度地提高你的学习效果。如果这是一个为企业创收的应用程序,这可能是对用于支付的资源的不适当使用。
也就是说,当前最佳实践serverless和serverless-express的主要区别是:

  • 存在额外的依赖关系。这将需要一些额外的时间在运行时解决[1],需要在部署时正确管理(打包),并需要额外的工作来更新/修补/审计(安全)。
  • 权限粒度-由于所有路由管理都被委托为express,因此您将无法在基础架构级别为每个路由设置粒度权限。
  • 您将无法在每个路由的基础上设置资源限制

另一方面:

  • 您将避免大的云形成模板
  • 利用您现有的工具和express知识

虽然这取决于应用程序是什么/做什么,但你不太可能注意到单一用途lambda函数的冷启动损失,并且可能是过早优化的情况。无服务器心态的一部分是关注价值-所以如果是我做这件事,我会尽可能少地让应用程序在lambda中运行-开始使用X-Ray和CloudWatch [2]检测路由,然后优化需要它的路由。
从学习的Angular 来看,如果你选择使用serverless-express,你可能会错过学习更多关于服务集成,VTL转换,请求/响应Map等的机会,如果你采取更分段的方法,你会接触到这些。你可以只用API Gateway和DynamoDB构建一些非常酷的东西-甚至不必接触lambda函数。
这并不是说以这种方式使用express是一件坏事- AWS自己也注意到这是构建无服务器应用程序的有效方法,而API Gateway的HTTP API功能[3]等新功能有助于实现这一点。事实上,AWS发布的[真实的世界的无服务器应用程序]示例遵循单函数原则,尽管是针对Java而不是express应用程序。
[1][https://www.freecodecamp.org/news/just-how-expensive-is-the-full-aws-sdk-3713fed4fe70/](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/](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/](https://aws.amazon.com/blogs/compute/announcing-http-apis-for-amazon-api-gateway/)
[4][https://github.com/awslabs/realworld-serverless-application](https://github.com/awslabs/realworld-serverless-application)

icnyk63a

icnyk63a3#

最好保持无服务器代码尽可能简单,lambda应该只运行您的业务逻辑,这应该只是一个函数。
如上所述,冷启动是无服务器的主要限制。
在serverless上运行express是无用的,因为它运行一个节点服务器并监听一些端口,这不是必需的。Lambda并不总是可用的,它总是在运行时。

mcdcgff0

mcdcgff04#

还有其他解决方案使用AWS Lambda和无服务器基础设施来创建快速和可扩展的应用程序,其中之一是genezio:https://genez.io/这里有一个入门链接,它可能会帮助你。https://genez.io/blog/getting-started-with-genezio/
免责声明:我是genezio的创始人之一

相关问题