如何在 AWS Lambda 上构建无服务器框架和微服务

How to architect the serverless framework and microservices on AWS Lambda

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

我 read/watch 的每个示例和视频都使用简单的 CRUD 微服务作为简单 'todo' 应用程序或类似应用程序的一部分。我的问题是业务逻辑在哪里?如果我正在构建一个复杂的应用程序,我不希望我的所有业务逻辑都在我的前端 Angular 应用程序中。或者我呢?我可以构建一个应用程序 API,它反过来调用 CRUD 微服务,但这感觉就像是一种整体方法。

我知道可能没有明确的答案,但有人可以就最佳实践向新手提出建议吗?

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

  • 从只有几个微服务开始(前期越少越好,除非你确切知道服务应该如何分离,延迟拆分的决定)
  • 分离进入 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。