【发布时间】:2014-06-25 11:44:42
【问题描述】:
LMAX Disruptor 通常使用以下方法实现:
与本例一样,Replicator 负责将输入事件\命令复制到从节点。跨一组节点进行复制需要我们应用共识算法,以防我们希望系统在出现网络故障、主故障和从故障时可用。
我正在考虑将 RAFT 共识算法应用于这个问题。一种观察是:“RAFT 要求在复制期间将输入事件\命令存储到磁盘(持久存储)”(参考此链接)
这个观察本质上意味着我们不能执行内存复制。因此,我们可能必须结合复制器和日志器的功能才能成功地将 RAFT 算法应用于 LMAX。
有两种选择:
选项 1:使用复制的日志作为输入事件队列
- 接收器将从网络读取并将事件推送到复制日志而不是环形缓冲区
- 单独的“阅读器”可以读取日志并将事件发布到环形缓冲区。
- 可以使用 RAFT 跨节点复制日志。我们不需要复制器和日志器,因为功能已经由 RAFT 的复制日志完成
我认为这个选项的一个缺点是我们做了一个额外的数据复制步骤(接收器到事件队列而不是环形缓冲区)。
选项 2:使用 Replicator 将输入事件\命令推送到从站的输入日志文件
我想知道 Replicator 的设计是否还有其他解决方案?人们为复制器采用了哪些不同的设计选项?特别是任何可以支持内存复制的设计?
【问题讨论】:
-
您最终是否使用 RAFT 开发 HA 和日记功能?如果是这样,您是自己推出的还是使用了几个预建库之一?
-
不,我还没有实现它。很高兴听到您的用例,您可以分享任何链接吗?
标签: replication high-availability disruptor-pattern lmax raft