【问题标题】:Multiple micro-services backed by the same DynamoDB table?由同一个 DynamoDB 表支持的多个微服务?
【发布时间】:2018-08-19 14:50:47
【问题描述】:

如果多个微服务对同一个 DynamoDB 表进行读/写,这是一种反模式吗?

请注意:

  • 我们有一个固定的架构,不会很快改变。
  • 所有读/写都将通过 API 网关 + Lambda 通过 REST 服务进行
  • 微服务部署在 Kubernetes 或 Lambda 上

【问题讨论】:

    标签: amazon-dynamodb microservices aws-api-gateway


    【解决方案1】:

    在编写微服务时,建议不要共享数据库。那是因为它提供了轻松的扩展,并为每个服务提供了在涉及到他们的数据集时有自己的发言权。它还使这些服务之一能够对如何保存数据进行调用,并可以随意更改数据。这为服务提供了灵活性。

    即使您的架构没有改变,您也可以确定一项服务在受到限制时不会影响其他服务。

    如果您的所有 crud 调用都通过休息服务进行引导,那么您确实在数据库前面有一个服务层,是的,您可以根据微服务指南这样做

    我仍然不会将这种方法称为反模式。只是集体经验表明,出于我上面提到的某些原因,最好不要与一个数据库交谈。

    【讨论】:

      【解决方案2】:

      我在这里有不同的看法,我将这种方法称为反模式。这里违反了一些关键原则:

      1. 每个 MS 都应该有自己的有界上下文,如果所有这些都共享相同的数据集,那么它们的业务边界就会变得模糊。
      2. 如果 DB 出现故障,则 DB 会出现单点故障,您的所有服务都会出现故障。
      3. 如果您尝试扩展单个服务并生成多个实例,则会影响数据库性能,并最终影响其他微服务的性能。

      解决方案,..IMO,

      1. 首先分析您是否有 MSA 案例,如果您的数据非常紧密耦合并相互依赖,那么您不需要此架构。
      2. 探索 CQRS 模式,您可能希望有不同的 DB 用于读取和写入,并通过事件模式同步它们。

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2017-05-16
        • 1970-01-01
        • 1970-01-01
        • 2017-04-28
        • 2020-03-18
        • 2021-10-19
        • 2020-10-12
        • 1970-01-01
        • 2013-07-04
        相关资源
        最近更新 更多