干扰模式 - 主节点和从节点如何保持同步?

nmd*_*mdr 3 failover disruptor-pattern lmax

LMAX Disruptor模式中,复制器用于将输入事件从主节点复制到从节点.所以设置可能如下所示:

在此输入图像描述

主节点的复制器将事件写入数据库(尽管我们可以考虑比写入数据库更好的机制 - 但它对问题语句并不重要).从节点的接收器从DB读取并将事件放入从节点的环形缓冲器.

从节点的输出事件被忽略.

现在,主节点的业务逻辑处理器可能比从节点的业务逻辑处理器慢.例如,主节点的BL可以在时隙102处,其中从节点可以在106处.(这可以发生,因为复制器在业务逻辑处理器之前从环形缓冲器读取事件).

在这种情况下,如果主节点发生故障并且从节点现在成为主节点,则外部系统可能会遗漏一些关键事件.这可能发生,因为节点2在充当从节点时会忽略其输出.

Martin Fowler确实说复制器的工作是保持节点同步:"之前我提到LMAX在集群中运行其系统的多个副本以支持快速故障转移.复制器使这些节点保持同步"

但我不确定它如何使Business Logic Processor保持同步?有任何想法吗?

Mar*_*son 7

复制直接从主节点到从节点,而不是通过数据库.复制在来自从站的确认时关闭.

http://www.infoq.com/presentations/LMAX

上面的链接更详细,值得阅读有关演示文稿的评论讨论.

  • Disruptor是一种用于线程间消息传递的模式.您的问题是关于如何在事件源系统中实现高可用性,因此超出了Disruptor的范围.Martin Folwer的文章只是如何使用Disruptor的一个例子. (2认同)