我正在尝试使用API Gateway部署API套件,并使用lambda在Java中实现代码。在一个jar中有许多(当然是相关的)lambda可以吗(我想做的),还是为我想要部署的每个lambda创建一个jar更好?(这很容易变得一团糟)
这确实是一个品味问题,但你必须考虑一些事情。
首先,一次Lambda上传的大小是有限制的(在撰写本文时为50MB)
其次,上传的所有代码的总大小也有限制(目前为1.5GB)。这些限制对于您的用例来说可能不是问题,但值得注意。
接下来你必须考虑的是你想把开销花在哪里。假设您将CRUD接口部署到单个Lambda,然后从API网关传递一个"action"参数,以便在执行Lambda函数时知道要执行哪个操作。这会给您的执行增加一些开销,因为您必须将操作路由到适当的操作。这可能是一个非常快速的路由,但无论如何,它会为您的函数执行增加CPU周期。
另一方面,在多个Lambda函数上部署同一个jar将很快使您接近我前面提到的限制,而且随着这个数字的增长,它还增加了管理Lambda函数的管理开销。当然,它们可以通过CloudFormation或cli脚本进行管理,但这仍然会增加管理开销。
我不会说这样做有对有错。看看你想做什么,想想你需要什么来管理部署,然后从那里开始。如果你做错了,你总是可以从另一种方法开始。
就我个人而言,我喜欢Lambdas这项非常小的服务,它可以进行内部路由,处理的不仅仅是一个操作,但它们仍然非常小,专注于特定类型的任务,无论是数据库表的CRUD,还是管理选定的几个非常密切相关的操作。
serverless.com 上有一些不错的建议
正如聚乙烯公司所说,答案是"视情况而定"。但他们列出了4种方法的利弊:
- 微服务模式
- 服务模式
- 单片图案
- 图形模式
https://serverless.com/blog/serverless-architecture-code-patterns/