【问题标题】:Data integrity across the databases of different Microservices跨不同微服务数据库的数据完整性
【发布时间】:2017-10-19 07:09:29
【问题描述】:

假设我正在为我的微服务使用关系数据库。我有CustomersMService,它有自己的数据库,表Customer,然后我有OrdersMService,它也有自己的数据库,但表Order,该表有列CustomerId。我的问题是如何确保数据库之间的数据完整性,Orders 表不会指向不存在的客户?

【问题讨论】:

  • “产品特定”是什么意思? @philipxy
  • 他的意思是你用的是什么栈。
  • 答案取决于您使用的 DBMS(或提供类似 DBMS 功能的系统)。请添加适当的标签。主题是分布式数据库。

标签: database foreign-keys relational-database rdbms microservices


【解决方案1】:

我的问题是如何确保数据库之间的数据完整性,Orders 表不会指向不存在的客户?

这是一个很好的问题。但是其中缺少一个重要维度,即您希望在其上建立参照完整性的时间跨度

如果您问:“如何确保我的所有数据始终 100% 一致?” - 答案是你不能。如果您希望,您将需要通过外键约束(跨数据库不可用)或确保您永远不会写入一个数据库而不是某个分布式事务之外的另一个数据库(这是荒谬的,并且会违背了使用面向服务的目的)。

如果您问“如何确保我的所有数据在合理的时间跨度后 100% 一致?”,那么您可以做一些事情。一种常见的方法是在您的服务之间实现持久的异步eventing。这确保可以在本地写入更改,然后以可靠但离线的方式远程分派。您可以做的另一件事是有一个预定的看守流程,该流程会定期修复您数据中的不一致性。

但是必须说,在事务之外,即使在合理的时间跨度内,也无法绝对保证一致性。如果绝对一致性是您的应用程序的要求,那么面向服务可能不适合您。

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2015-09-15
    • 2019-12-11
    • 2011-01-01
    相关资源
    最近更新 更多