如何检测 Aeron Cluster 中事务/消息级别的分歧?

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

我们如何检测 Aeron 集群中的分歧并将分歧节点从集群中取出?

例如,如果我们有一个 3 节点 aeron 集群,如果集群中的一个节点与其他两个节点出现分歧,我们如何在分歧发生时立即监控和检测并防止分歧节点被选举为领导者。

  1. 我们可以定期在集群中的所有 3 个节点上生成状态快照,对快照进行哈希处理并验证它们是否相同。

但是快照只是定期生成,并且可能检测到差异时为时已晚。并且分歧的节点可以被选为领导者。

  1. 每次处理消息/事务时,应比较每个集群节点上的结果状态/结果,如果发现分歧,则生成一条消息记录/警报,标识其处理导致分歧的消息/事务以及分歧节点被移出集群。

(我认为)应该考虑的一个问题是,3 个集群成员可能不会同时处理事务/消息。一个或多个成员在处理来自日志的消息时可能落后于其他成员,因此比较可能必须等到所有成员都有机会处理消息。

这在 Aeron 集群中可能吗?

我尝试使用快照并将交易结果写入存档并跟踪存档位置以检测差异。

但想看看是否有更好的方法来检测分歧

messaging state-machine aeron
1个回答
0
投票

每个集群节点在处理日志中的消息/事务后,可以将处理结果作为消息发布回集群日志。

在同一集群中运行的单独集群服务可以查找所有结果,检查是否有任何结果与其他结果不同并确定差异。我们会确切地知道哪笔交易导致了分歧。

一旦检测到分歧,就必须检查 Aeron 是否允许通过从集群中删除分歧节点来动态重新配置集群。

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