跨不同微服务的数据库的数据完整性

时间:2017-05-19 08:37:06

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

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

2 个答案:

答案 0 :(得分:8)

  

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

这是一个很好的问题。但是,它缺少一个重要的维度,即你希望建立参照完整性的时间范围

如果您问,"我如何确保我的所有数据始终100%一致?" - 答案是你不能。如果你想要,你需要强制执行它,或者通过外键约束(在数据库之间不可用),或者确保你永远不会写入一个数据库而不是一些分布式事务之外的其他数据库(这是荒谬的,并且会打败使用面向服务的目的。)

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

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

答案 1 :(得分:0)

以下堆栈问题的可能重复项,该问题围绕同一主题进行了很好的讨论:

Data Consistency Across Microservices