我想要一个允许管理json对象、调用SOAP服务和通过一组lambda服务上的Spring数据访问DB的解决方案。但是在网上我读到lambda函数应该非常简单。也许春天的云是解决方案?
对
在我看来,Spring Boot不是AWS Lambda的一个好的技术选择,但它是可能的。开始使用它的最佳方法是签出aws-serverless-java-container中的不同包装器和帮助器。如果你感兴趣的话,这里还有一篇关于Spring Cloud Functions on AWS Lambda的博文。
互联网告诉你Lambda函数应该是简单的,因为这样它们更容易扩展。如果你在AWS Lambda上使用Spring Boot创建了另一个单体,那么这不是AWS Lambda应该做的。
下面我列出了在AWS Lambda中使用Spring Boot的优点和缺点。可能还有更多,但这些是我首先想到的。- 你可以设置一个API网关与代理集成到AWS Lambda,然后处理所有的REST端点,就像你习惯了与Spring Boot。
- 你不需要管理你的实例,因为AWS Lambda正在为你做这些。
- 只要一个Lambda函数实例启动了Spring Boot容器,这个函数就会以一致的方式响应Java的性能预期(至少这是我使用Java Lambda函数的经验)。
缺点
- 更复杂,因为你需要将API网关事件映射到Spring Boot可以处理的HTTP事件。这就是上面提到的包装器已经为你做的。
- Lambda函数的冷启动时间较长,因为Spring Boot太慢,无法像Lambda函数那样快速启动。这意味着,当启动一个新的Lambda函数实例时,您的响应时间会出现峰值。如果这是不可接受的,那么不要选择Spring Boot with AWS Lambda。
- 您将有多个Spring Boot容器在没有太多控制的情况下运行,因为AWS Lambda在需要时自动启动实例。您可以控制实例的最大和最小数量,但仅此而已。
- 由于实例数量无法控制,从AWS Lambda进行SQL查询可能会很痛苦。如果一个峰值击中你的Lambda函数,你可能很快就会耗尽连接,因为它会旋转越来越多的实例。
话虽如此,我过去使用过Java Lambda函数,在后台运行它们做一些数据处理是很棒的。然而,我不相信它们是"面对客户"的好选择。端点像REST API(除非你保持最少的Lambda实例运行,但你可以质疑AWS Lambda是否适合你)。