假设我有 X 服务器的动态网络(随着时间的推移不固定),在仅附加数据库中具有所有事件的相同副本。现在我想支持在这 10 台服务器中的任何一台服务器上创建新事件,并让它们达成共识,复制事件并产生完全相同的事件顺序。我知道这是一个常见问题,并且有一些算法应该处理这样的事情。但我并没有完全掌握它们,我对特别是与事件溯源有关的共识有一些疑问。
我假设服务器永远无法完全确定它认为已达成共识的值真的是最终成为“正确”值的值吗?我基于这样一个事实,即新服务器可以随时加入网络并倾斜平衡以支持另一个价值。这也可能在很久以后发生。但是在这种情况下,服务器应该如何处理一个新的“正确”值呢?在事件溯源中,添加补偿事件以进行更正是正常的,但这些补偿事件是否也必须复制到所有服务器?为了确保所有服务器都具有完全相同的事件,我的意思是。
如果不添加补偿事件而只是“弹出”已经提交的事件,我猜我们不必复制这些事件,但我们会遇到其他问题。如果(错误地)提交的事件在事件总线上发送出去,以便其他服务可以对它们做出反应,我们不能只是将它们从我们的事件数据库中弹出而不搞砸。
还是在短时间内达成共识后,真正承诺一个价值会更好?然后冷冷对待所有新的/迟到的服务器?还是让他们接受结果?如果新服务器连接到它自己的网络,该网络比第一个更大,并且它们都已就另一个值达成共识,该怎么办?