在事件一致性环境中,系统创建的所有消息都需要保留,直到每个对等节点都接收到该消息(==事件一致性)。但是您不想永久保留消息,因此您需要一种方法来告诉哪些消息已被所有节点接收并且可以删除,这就是为什么使用矩阵时钟。 矩阵时钟是矢量时钟列表,因此您知道系统中每个节点的当前状态。基于此,您可以知道每个对等方已经接收了哪些消息。当您与系统中的另一个节点交换消息时,您会比较矩阵时钟,并始终记住每个节点的最高值。然后,您可以删除之前发送的消息,因为节点必须已经接收到它们。 这是TSAE(时间戳反熵)协议的简要描述。您可以在Richard Andrew Golding于1992年撰写的论文项目《弱一致性组通信和成员资格》中了解更多信息(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.7385&rep=rep1&type=pdf),从第5章开始。
- peter
8
2是的,您需要与每个点对点通信以获取其向量时钟并了解它们所知道的内容。矩阵时钟可以为您提供与每个节点通信的信息。 - peter
我还没有遇到过使用矩阵时钟的真实世界系统。这些高可用的分布式系统只有在所有并发消息都是可交换的情况下才能工作。如果系统中有足够多的参与者,大多数消息将与其他消息并发,基本上所有消息都必须是可交换的,以确保每个人最终达到相同的状态。而这很难实现。你可以尝试使用CRDTs,但你不能用CRDTs来建模所有东西。 - peter