微服务遵循哪个选项:Spring Boot 或 AWS Lambda

Which option to follow for microservices: Spring Boot or AWS Lamba

我来自 Java / Java EE 背景并且是微服务和 AWS 的新手;不过,我读了很多书。我用 Spring boot 尝试了我的第一个微服务,Spring Boot 给我留下了深刻的印象。过去 2 个月我也使用 AWS,现在对它有点熟悉了。

现在我正在开发一个大型应用程序并考虑设计完整的后端 (APIs) 并且想为其使用微服务 - 尽管我仍然只会使用少数微服务:一个用于管理用户,另外三个与业务逻辑有关。我还必须处理身份验证。

根据我的研究和工作,我正在考虑两种选择:

选项 1:AWS Cognito(用于社交媒体登录支持)+ AWS API 网关 + 多个 AWS Lambdas(Java 代码)+ 一个 DynamoDB(最好是 RDS MySQL) . 我担心的是我能否在 AWS lambdas 中编写复杂的业务逻辑并处理复杂的表关系(例如多对多;eager/lazy 获取等),这些在 Spring Boot 中非常巧妙地完成+ Spring 数据 JPA

选项 2:开始在 Spring 启动中编写业务逻辑,即四个 spring 启动应用程序,使用 MySQL 或 DynamoDb 作为后端;并将它们部署在 AWS EC2 上;我还可以使用 JWT 实现另一个 Sprint 启动应用程序以进行身份​​验证 我在这里关心的是如何管理多个 spring 引导应用程序的身份验证(所有 API 的一个入口点);如果我在与 AWS API 网关集成时面临挑战(用于身份验证和授权的集中管理);如果我想登录社交媒体,我在与 AWS Cognito 集成时会面临挑战

不想后期出现很多并发症,所以需要大家帮忙做决定。

非常感谢

如果您拥有复杂的业务 logic/complex 关系,执行起来可能需要更多时间,那么您在使用 LambdaAPI Gateway 的组合时需要谨慎,原因如下:

  1. Api Gateway 在写 API 的情况下非常有用,只有当你确定你的 API 很快并且会很快带来响应时。目前,API gateway29 秒后超时的硬限制。这意味着如果您的 API 花费超过 29 秒,那么它将直接终止该请求。
  2. lambda 也有类似的情况。 Lambdas 专门设计用于处理较小的处理块。目前支持最大内存3008MB,超时5分钟。 5 分钟后,lambda 将终止请求的处理。

因此,您的选项 1 有这些限制,否则与 AWS Cognito.

一起使用该组合真的很容易且时间和成本效益高

现在让我们看看您的选项 2。

选项 2 通常广泛用于单体应用程序,因为它们体积大、更复杂且耗时。

如果您正在考虑使用它,那么我想让您知道 API Gateway 将不会有用,因为上面提到的超时硬限制。 在这种情况下,可以使用 JWTOAuthBasic Auth 甚至 AWS Cognito.

等广泛可用的技术来完成身份验证

因此,在我看来,如果您拥有基于微服务的架构,那么选项 1 应该不会有任何问题,前提是时间性能得到尊重!

编码愉快!

经过调查我选择了AWS lambdas。我的应用程序是一个事件管理应用程序,我想要事件驱动的架构。一般来说,问题应该是容器 vs lambda,我发现了一个很好的 comparison。从 Spring 开始很容易,因为它对具有 Java 背景的人来说非常熟悉。编写具有业务逻辑的微服务并公开为 HTTP REST APIs 是很好的。我正在阅读领域驱动设计,最好根据边界(有界上下文)来决定微服务的大小。

但我也看到 Spring 引导我将必须管理身份验证(对于事件管理应用程序,我们需要社交媒体登录支持)、授权、用户、角色、策略,最后还要集成微服务使用 API 网关。 AWS Serverless 认证授权很sophisticated。使用 NoSQL 数据库(例如 DynamoDB)遵循一些微服务准则,例如 CQRS。使用 Lambdas,边界会太小,但在我的用例中,AWS Lambdas 更适合。