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