当前位置: 首页 > 知识库问答 >
问题:

中断模式-主节点和从节点如何保持同步?

支才
2023-03-14

在LMAX中断器模式中,复制器用于将输入事件从主节点复制到从节点。因此,设置可能如下所示:

主节点的复制器将事件写入DB(尽管我们可以想到比写入DB更好的机制,但这对问题陈述并不重要)。从节点的接收器从DB读取数据,并将事件放入从节点的环形缓冲区。

从节点的输出事件将被忽略。

现在,主节点的业务逻辑处理器有可能比从节点的业务逻辑处理器慢。例如,主节点的BL可以位于插槽102处,其中as从节点可以位于106处。(这可能是因为复制器在业务逻辑处理器之前从环形缓冲区读取事件)。

在这种情况下,如果主节点发生故障,从节点现在成为主节点,外部系统可能会错过一些关键事件。这可能是因为节点2在充当从属节点时忽略了其输出。

Martin Fowler确实指出,replicator的工作是保持节点同步:“前面我提到,LMAX在集群中运行其系统的多个副本,以支持快速故障切换。replicator保持这些节点同步”

但我不确定它如何保持业务逻辑处理器同步?有什么想法吗?

共有2个答案

谯阳伯
2023-03-14

如果丢弃事件的成本很低,那么您可以忽略它(?)。

作为一个简单的实现,您可以让主服务器上的输出中断器通知从服务器它已完成发送数据包。将其视为两阶段复制器——一个用于复制事件,第二个复制器用于确认事件已发送。

在实际实现中,您可能需要在体系结构中提供额外的下游支持(尤其是重播/重试)。根据您的应用程序需求,您需要能够检测输出事件中是否存在间隙,并根据需要获取它们。假设您的事件是幂等的,那么应该没有问题可以及时返回并重播事件。

假设您的出站通道上丢失了一个数据包,或者您的internet线路中断?即使它成功地从破坏者那里发出,它仍然可能丢失。这取决于您的具体应用程序,需要比这里更多的考虑,以了解您可以容忍哪些故障场景。

万俟沛
2023-03-14

复制直接从主节点复制到从节点,而不是通过数据库。从机确认时的复制门。

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

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

 类似资料:
  • 本文向大家介绍zookeeper 怎么保证主从节点的状态同步?相关面试题,主要包含被问及zookeeper 怎么保证主从节点的状态同步?时的应答技巧和注意事项,需要的朋友参考一下 zookeeper 的核心是原子广播,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 zab 协议。zab 协议有两种模式,分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,z

  • 有人知道如何从kubernetes主节点删除pod吗?我在裸机ubuntu服务器上有一个主节点。当我试图用“kubectl删除pod…”删除它时,或者从那里强制删除:https://kubernetes.io/docs/tasks/run-application/force-delete-stateful-set-pod/它不起作用。pod正在一次又一次地创建…

  • 我目前正在为XML文档流开发一个自定义管道组件,其中根节点和该根节点的第一个子节点需要剥离,只剩下第二个子节点(现在是新的根节点)。 我正在使用XDocumt作为XML文档的容器类。我写了一些代码,获取第二个子节点,并创建一个新的XML文档,将该节点作为根节点,从而从图片中删除两个不需要的节点。 但是当我在Biztalk中测试这个设置时,我只得到一个空文档作为响应。它似乎创建了一个空的XML文档,

  • 问题内容: 我正在使用Jenkins Build Flow插件来实现并行化。Groovy DSL执行某些文件操作。即使该选项设置为在特定从属服务器上运行作业,但DSL仍在主服务器上运行。这不是故意的。 有人可以告诉我如何限制DSL在指定的从站上运行吗?即使有一种方法可以通过DSL访问从文件系统,也应该可以。 通常,我们如何使用Groovy从Jenkins主节点访问节点从节点上的文件? 工作空间位于

  • 我已经实现了一个TreeModel来调整存量数据模型,以便将其可视化为JTree。我遇到了一个问题,节点有多个相同的子(叶)节点。例如,考虑一个JTree,它的叶节点是Strings。每当父节点包含具有相同String值的子节点时,就会出现问题。这些叶节点的TreePath是相同的,作为Strings,equals()返回true。留档明确地调用这个: JTree及其相关类广泛使用TreePath

  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?