在LMAX Disruptor模式中,复制器用于将输入事件从主节点复制到从节点。所以设置可能如下所示:
主节点的复制器将事件写入数据库(尽管我们可以认为比写入数据库更好的机制——这对问题陈述不是很重要)。从节点的 Receiver 从 DB 中读取数据并将事件放到从节点的环形缓冲区中。
从节点的输出事件被忽略。
现在主节点的业务逻辑处理器有可能比从节点的业务逻辑处理器慢。例如,主节点的 BL 可能位于插槽 102,而从节点可能位于 106。(这可能是因为复制器在业务逻辑处理器之前从环形缓冲区读取事件)。
在这种情况下,如果主节点发生故障并且从节点现在成为主节点,则外部系统可能会错过一些关键事件。这可能是因为节点 2 在充当从节点时忽略了其输出。
Martin Fowler 确实指出复制器的工作是保持节点同步:“之前我提到 LMAX 在集群中运行其系统的多个副本以支持快速故障转移。复制器使这些节点保持同步”
但我不确定它如何保持业务逻辑处理器同步?有任何想法吗?