DynamoDB“单表设计”是否可以与微服务架构很好地配合使用?

时间:2019-02-12 19:34:30

标签: amazon-dynamodb microservices

微服务-多个数据库/表

当我第一次了解微服务(MS)时,最引人注目的一件事是每个MS都有自己的数据库。我想我现在已经理解了这个概念,并且正在接受它。

NoSQL数据库-单个表

然后我开始研究NoSQL DB,即DynamoDB。我观看了deep dive video,演示者讨论了采用关系模型的想法-例如4个表,并在一个表中表示数据。然后,他使用各种技术使数据即使在规模上也可以超快地查询。

再次,我想我理解这个概念。

将两者结合是我很困惑的地方。 MS希望我将事情分解成单独的服务,因此要分开DB(或表),但NoSQL模式要我拥有一个表。...

这两种设计模式/体系结构不能一起使用吗?或者我缺少什么?

1 个答案:

答案 0 :(得分:2)

如果将这两种想法结合在一起,那么最终您将获得每个微服务都有其自己的数据库,而每个数据库仅具有一个表。

如果您在同一个AWS账户中运行多个微服务,我会明白为什么您可能会感到困惑,因为您最终在dynamodb中拥有多个表。我将解决一些问题,以尝试为您解决问题。

如何在DynamoDB中拥有单独的数据库?

在DynamoDB中,“分离数据库”的概念不是一个非常有意义的想法。从DynamoDB的角度来看,每个表都独立于其他表(与关系数据库不同)。您无需管理任何硬件,因此无法查看表是否在同一服务器上,并且绝对没有数据库实例的概念。

如果DynamoDB没有“单独的数据库”,我如何拥有单独的数据库?

目标不一定是每个微服务都有一个单独的数据库。目的是确保微服务之间的唯一耦合是通过微服务提供的API发生的。拥有单独的数据库是帮助实现这一目标的一种方法(这样,微服务就不会与共享的内部数据模式绑定),但这并不是唯一的方法。

那我该怎么办?

每个微服务都应具有使其起作用所需的任何表。任何给定的表都只能由一个微服务读取和写入。为了实现在同一AWS账户中运行的微服务之间的隔离,您应该使用IAM策略来确保每个微服务仅访问其自己的dynamodb表。在某些情况下,最好将每个微服务放入其自己的AWS账户中,以在它们之间提供更高的隔离度。 (这种方法的另一个好处是,如果其中一个帐户遭到入侵,则攻击者只能访问其中一个微服务。)