由同一个DynamoDB表支持的多个微服务?

时间:2018-08-16 01:52:09

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

如果多个微服务从同一DynamoDB表读取/写入数据,这是一种反模式吗?

请注意:

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

2 个答案:

答案 0 :(得分:3)

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

即使您的架构没有更改,您也可以确定一个服务受到限制的事实不会影响其他服务。

如果所有原始呼叫都是通过rest服务传递的,那么您确实在数据库的前面有一个服务层,是的,您可以按照微服务指南进行操作

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

答案 1 :(得分:1)

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

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

解决方案,.. IMO,

  1. 首先分析一下您是否有MSA案例,如果您的数据紧密耦合并相互依赖,那么您就不需要这种架构。
  2. 探索CQRS模式,您可能希望使用不同的数据库进行读写,并通过事件模式对其进行同步。

希望这会有所帮助!