微服务的数据库架构

时间:2018-09-27 10:30:30

标签: microservices

正如我大多数时候听到的那样,在微服务架构中,对于每个微服务,我们都必须创建一个单独的数据库。

但是如果我必须在不同数据库之间维护外键约束,那是不可能的。就像我在身份验证微服务中有一个用户表,我想在我的目录服务(用户表中的用户ID列)中使用它一样

那怎么解决呢?

预先感谢

2 个答案:

答案 0 :(得分:1)

您可以通过事件源(例如,可以使用Rabbit MQ或apache kafka进行异步消息传递)在目录服务中维护用户表的卷影副本(仅包含有用的信息,例如,仅userid列有用的信息)。

目录服务将以只读模式使用用户信息。但是,此解决方案仅在用户信息不经常更改时才有效。否则,异步通信可能会效率低下且成本高昂。 在这种情况下,您可以实现从目录服务到用户服务的API调用,以对用户数据进行任何验证。

答案 1 :(得分:0)

使用Saga Pattern来维护跨服务的数据一致性。

  

传奇是一系列本地交易。每个本地交易   更新数据库并发布消息或事件以触发   传奇中的下一次本地交易。如果本地交易失败   因为它违反了业务规则,所以传奇故事执行了一系列   补偿交易,撤消由   之前的本地交易。