正如我大多数时候听到的那样,在微服务架构中,对于每个微服务,我们都必须创建一个单独的数据库。
但是如果我必须在不同数据库之间维护外键约束,那是不可能的。就像我在身份验证微服务中有一个用户表,我想在我的目录服务(用户表中的用户ID列)中使用它一样
那怎么解决呢?
预先感谢
答案 0 :(得分:1)
您可以通过事件源(例如,可以使用Rabbit MQ或apache kafka进行异步消息传递)在目录服务中维护用户表的卷影副本(仅包含有用的信息,例如,仅userid列有用的信息)。
目录服务将以只读模式使用用户信息。但是,此解决方案仅在用户信息不经常更改时才有效。否则,异步通信可能会效率低下且成本高昂。 在这种情况下,您可以实现从目录服务到用户服务的API调用,以对用户数据进行任何验证。
答案 1 :(得分:0)
使用Saga Pattern来维护跨服务的数据一致性。
传奇是一系列本地交易。每个本地交易 更新数据库并发布消息或事件以触发 传奇中的下一次本地交易。如果本地交易失败 因为它违反了业务规则,所以传奇故事执行了一系列 补偿交易,撤消由 之前的本地交易。