我来自Java / Java EE背景,是微服务和AWS的新手;不过,我做了很多阅读。我尝试了第一次使用Spring启动的微服务,我对Spring Boot印象深刻。我过去2个月也使用过AWS,现在我对它很熟悉。
现在我正在研究一个大型应用程序,并考虑设计完整的后端(API)并希望使用微服务 - 尽管我仍然只使用少量微服务:一个用于管理用户,另外三个用于管理用户商业逻辑。我还必须处理身份验证。
根据我的研究和工作,我正在考虑两种选择:
选项1:AWS Cognito(用于社交媒体登录支持)+ AWS API网关+多个AWS Lambdas(Java代码)+一个DynamoDB(最好是RDS MySQL)。 我关心的是我可以编写复杂的业务逻辑并处理AWS lambda中的复杂表关系(例如多对多;渴望/懒惰的提取等),这些关系在Spring Boot + Spring Data JPA中非常巧妙地完成
选项2:从Spring引导中编写业务逻辑开始,即使用MySQL或DynamoDb作为后端的四个Spring引导应用程序;并将它们部署在AWS EC2上;我还可以使用JWT再实现一个Sprint启动应用程序进行身份验证 我关注的是如何管理多个Spring启动应用程序的身份验证(所有API的一个入口点);如果我将面临与AWS API Gateway集成的挑战(用于身份验证和授权的集中管理);如果我想要社交媒体登录,我是否会面临与AWS Cognito集成的挑战
我不希望在后期出现很多并发症,因此,我需要帮助才能做出决定。
非常感谢
答案 0 :(得分:1)
如果您有复杂的业务逻辑/复杂关系,这可能需要更多时间来执行,那么在使用Lambda
和API Gateway
的组合时需要谨慎,原因如下:
Api Gateway
在编写API时非常有用,只要您确定自己的API速度很快并且会在短时间内完成响应。目前,API gateway
在29秒后 超时硬限制 。这意味着如果您的API需要超过29秒,那么它将直接终止该请求。lambda
类似的东西也是如此。 Lambdas
专门用于处理较小的处理块。目前它支持 最大内存3008 MB,超时5分钟 。 5分钟后,lambda将终止处理请求。因此,您的选项1具有这些限制,否则使用该组合和AWS Cognito
非常容易,时间和成本效益。
现在让我们看看您的选项2。
选项2通常广泛用于单片应用,因为它们很大,更复杂且耗时。
如果您打算使用它,那么我想告诉您API Gateway
由于上面提到的超时硬限制而无法使用JWT
。
在这种情况下,可以使用广泛使用的技术来完成身份验证,例如OAuth
,Basic Auth
,AWS Cognito
甚至NativeScript quick setup
。
所以,在我看来,如果你有基于微服务的架构,那么在时间性能得到尊重的情况下,选项1不应该出现任何问题!
快乐的编码!
答案 1 :(得分:0)
经过调查,我选择了AWS lambdas。我的应用程序是一个事件管理应用程序,我想要事件驱动架构。一般来说问题应该是容器vs lambdas,我发现了一个很好的comparison。从Spring开始很容易,因为它对Java背景非常熟悉。用业务逻辑编写微服务并作为HTTP REST API公开是很好的。我正在阅读域驱动设计,最好根据边界(有界上下文)来决定微服务的大小。
但我也看到使用Spring启动我必须管理身份验证(对于我们需要社交媒体登录支持的事件管理应用程序),授权,用户,角色,策略,最后还要将微服务与API网关集成。 AWS无服务器身份验证和授权非常sophisticated。使用NoSQL数据库(如DynamoDB)遵循一些微服务指南,例如CQRS。使用Lambdas,边界将会太小,但在我的用例中,AWS Lambdas更适合。