【问题标题】:How to architect the serverless framework and microservices on AWS Lambda如何在 AWS Lambda 上构建无服务器框架和微服务
【发布时间】:2018-05-07 04:33:49
【问题描述】:

我一直在研究微服务和无服务器解决方案,并且正在使用托管在 S3 和 Lambda 函数上的 Angular 前端,这些函数通过 AWS 上的 API 网关与各种 DynamoDb 表对话。

我阅读/观看的每个示例和视频都使用简单的 CRUD 微服务作为简单的“待办事项”应用程序或类似应用程序的一部分。我的问题是业务逻辑在哪里?如果我正在构建一个复杂的应用程序,我不希望我的前端 Angular 应用程序中的所有业务逻辑。还是我?我可以构建一个应用程序 API,然后调用 CRUD 微服务,但这感觉像是一种单一的方法。

我很感激可能没有明确的答案,但任何人都可以就最佳实践向新手提出建议吗?

【问题讨论】:

    标签: microservices serverless


    【解决方案1】:

    我在设计无服务器微服务时遵循了几个最佳实践

    • 仅从少量微服务开始(越少越好,除非您确切知道服务分离应该如何,从而延迟做出拆分的决定)
    • 分离到 API 的业务逻辑,并使用处理程序作为 MVC 中的控制器来调用业务逻辑。 (这也有助于在不依赖 Lambda 的情况下对逻辑进行单元测试)。
    • 不必在 API 中只编写简单的 CRUD。这取决于您的域和所需的业务逻辑。 (但不要在没有将代码分离到不同服务的情况下构建另一个单体应用程序。一些 AWS 服务限制也会为您提供一些关于服务中应该有多少端点等的指导。)
    • 应用可用于微服务的设计模式(例如,如果您想在每个微服务之间同步数据库,请使用使用 SNS、DynamoDB Streams 和 Lambda 的 Pub-Sub 模式)
    • 使用 Angular 应用来放置大部分表示逻辑。
    • 使用 CloudFront 作为代理和 CDN 以避免 COR。

    如果您需要更多信息,可以参考我写的以下文章。

    注意:您可以使用 Deploying Angular/React Apps in AWS 中的 CloudFormation 以通过最佳实践自动创建 S3 和 CloudFront。

    【讨论】:

    • 感谢您的回复,非常感谢。在我们发言时阅读您的文章,不久将重新讨论这个问题。
    • 阅读您的文章,谢谢。对我的问题还是有点困惑。例如;如果我有 2 个 CRUD 微服务,一个用于“帖子”,一个用于“用户”,并且我需要检索带有相关用户详细信息的帖子,您是否会创建另一个端点来根据需要检索/组合数据并由我的 Angular 前端使用?感谢您的宝贵时间。
    • 如果您有两个微服务用于帖子和用户,请确保每个服务都是自包含的。例如,在查询帖子时,应该将作者信息存储在服务中。这是像 AWS DynamoDB 这样的文档数据库适合存储的地方。假设用户微服务中有用户更新方法。然后在用户数据更新时,如果你有一个 pubsub 消息系统,应该可以同步数据。也可以使用 DynamoDB 流、Lambda 和 SNS 实现 pubsub 消息传递。
    • 精彩的回复,谢谢。澄清;我应该根据他们的个人帖子存储用户的详细信息。如果用户更新他们的用户名,我会通过针对他们之前发布的每个帖子更新他们的用户名来与帖子服务同步?再次感谢您的所有帮助。这是一种非常新的方法,对我来说很陌生:-)
    • 是的。要执行此同步,请使用 pubsub,以便每个服务都是松散耦合的
    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2014-01-08
    • 2019-06-22
    • 2021-06-03
    • 2023-03-16
    • 2020-05-29
    • 2021-10-06
    相关资源
    最近更新 更多