如何检查异步(事件驱动)系统中的数据完整性/一致性

问题描述 投票:0回答:1

假设我们有一个异步事件驱动系统,其中服务 A 拥有一些数据,发布事件,服务 B 正在使用它们并将数据副本存储在其本地数据库中。

我希望能够检查B中的本地副本是否与A中的源一致。我不关心最终一致性,我明白B可以落后。我关心的是检查那个

  1. 事件产生代码是正确的
  2. 我们在传输过程中没有丢失任何消息
  3. 消费者密码正确

我看到的所有文献要么处理最终一致性,要么默默地假设事件处理代码不包含任何错误。对我来说这是不现实的。有人可以指出我在哪里可以了解该主题吗?

我们的想法:

  1. 事件流是真相的来源。现在我们应该检查源数据库和事件流是否同步。这是可行的
  2. 切换到A中的事件溯源。我们不想完全重写A
  3. 在 A 上的同步端点上公开数据并使用它来检查不一致(并在需要时修复它们)。
  4. 忽略它并希望系统保持一致,如果不一致,没有人会注意到:-)
architecture microservices consistency event-driven data-consistency
1个回答
0
投票

这通常使用连续的序列号来处理,以确保消息以正确的顺序应用。它肯定会导致更多的流失,因为每次重新排序消息都需要退避/重试逻辑,但它确实确保您具有一致性。

问题是,当你缺乏一致性时,你会怎么做?如果您 do 错过了一条消息,或者处理它时发生错误,您的后备计划是什么?

最终一致性设计通常只允许这种情况发生,并且有某种周期性的“清理”同步,可以批量提取所有数据并确保一切都是干净的。

© www.soinside.com 2019 - 2024. All rights reserved.