【问题标题】:Microservice cross-db referencial integrity微服务跨数据库引用完整性
【发布时间】:2020-02-21 15:29:38
【问题描述】:

我们有一个管理代码的数据库,例如有效货币列表、国家代码列表等(以下简称 CodesDB)。

我们还有多个微服务,在单体应用 + 数据库中,这些微服务会对 CodesDB 中的表中的行产生外键约束。

当微服务收到修改数据的请求时,我有哪些选项可以确保请求中传递的代码有效?

我目前倾向于让 CodesDB 微服务将事件发布到服务总线上,宣布何时添加或修改代码 - 然后对这种类型的代码(国家/货币/等)感兴趣的每个其他微服务都可以发出对 CodeDB 微服务的 API 请求,以获取它需要的状态并在其自己的本地数据库中反映更改。这样我们就可以在每个微服务数据库中获得参照完整性。

这是正确的方法吗?还有其他推荐的方法吗?

【问题讨论】:

    标签: microservices


    【解决方案1】:

    基于异步事件的通知是微服务世界中常用的一种模式,用于确保最终一致性。根据您对一致性要求的严格程度,您可能需要确保进行额外检查。

    另一种可能的方法是使用

    使用materialized view 的只读数据存储。这是CQRS 模式的一种形式,其中来自多个服务的数据以非规范化的形式存储在只读数据存储中。使用上述方法异步更新数据。消费者无需查询多个服务即可快速访问数据

    缓存 - 根据您的性能或一致性要求,您还可以使用分布式或复制。

    【讨论】:

      猜你喜欢
      • 2017-10-19
      • 2011-01-01
      • 2022-06-10
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      相关资源
      最近更新 更多