- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
LMAX Disruptor 通常使用以下方法实现:
如本例所示,Replicator 负责将输入事件\命令复制到从节点。跨一组节点进行复制需要我们应用共识算法,以防我们希望系统在出现网络故障、主故障和从故障时可用。
我正在考虑将 RAFT 共识算法应用于这个问题。一项观察是:“RAFT 要求在复制期间将输入事件\命令存储到磁盘(持久存储)”(引用此链接)
这种观察本质上意味着我们无法执行内存复制。因此,我们可能必须结合复制器和日志器的功能才能成功地将 RAFT 算法应用于 LMAX。
有两种方法可以做到这一点:
选项 1:使用复制的日志作为输入事件队列
最佳答案
关于将复制和日志折叠到 Raft 组件中,您的直觉是正确的。但是,Raft 协议(protocol)准确地规定了何时需要将内容存储在磁盘上。
这里有两种不同的方式来看待它。
我假设在复制之前没有大量的计算,例如事务处理,因为您的图表中没有任何计算。
我个人会做第一个,因为它将关注点分成不同的流程。如果我自己实现 Raft,我会采用第二个场景的前半部分并将其放入自己的进程中。
外部 Raft 复制
其中 Raft 是由外部进程实现的。
复制组件将复制的业务外包给外部的 Raft 进程。一段时间后,Raft 响应复制组件,它实际上已被复制。复制组件更新环形缓冲区中的项目,并将其发布的光标向前移动。业务逻辑看到发布的游标(通过 waitFor
)并使用新复制的数据。
在这种情况下,复制组件可能有很多正在进行的事件,因此它的读取游标远远领先于它发布到业务逻辑的游标。
在这种情况下不需要日志组件,因为外部 raft 系统会为您执行日志。
请注意,复制可能是系统中最慢的组件!
集成 Raft 复制
其中 raft 在与“Real Business Logic”相同的过程中实现。
在 Raft 中,复制是业务逻辑。实际上,您有多个级别的业务逻辑,或者等效地,业务逻辑的多个阶段。
为此,我将使用两个输入中断器和两个输出中断器来强调单独的业务逻辑。您可以根据自己的喜好组合、拆分或重新排列。或者你的分析器的内容。
正如我所提到的,第一阶段是 Raft 复制。客户端事件进入复制输入中断器。 Raft 逻辑可能会分批拾取它,然后发送到复制输出中断器上的跟随者。所有 Raft 消息也会进入 Replication Input Disruptor。 Raft 逻辑也拾取这些并将适当的响应发送到复制输出中断器上的适当追随者/主控者)。
Journaler 组件挂起 Input Ring Buffer;它只需要处理 Raft 规定的某些类型的消息。这可能是系统中最慢的部分。
当数据被认为是复制时,它通过“Real Business Logic”输入中断器移动到第二阶段。它在那里被处理,发送给客户出站干扰器,然后发送给您数百万满意的付费客户之一。
关于replication - LMAX Replicator Design - 如何支持高可用性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23535740/
LMAX Disruptor 通常使用以下方法实现: 如本例所示,Replicator 负责将输入事件\命令复制到从节点。跨一组节点进行复制需要我们应用共识算法,以防我们希望系统在出现网络故障、主故障
我对这两个概念感到困惑:In-graph replication和 Between-graph replication阅读 Replicated training 时在 tensorflow 的官方
我对这两个概念感到困惑:In-graph replication和 Between-graph replication阅读 Replicated training 时在 tensorflow 的官方
我在事件监视器中收到以下错误, The row was not found at the Subscriber when applying the replicated command. (Sourc
我正在尝试设置 mysql 复制。我看到了在不同地方使用的两个提到的选项。我觉得replicate-rewrite-db是在master和slave中的数据库名称不同的情况下使用的。这是这两个选项之间
我正在关注 Realm Postgres Connector 引用,用于将我们的 Realm 数据库与我们的 Heroku PostgreSQL 数据库同步:https://docs.realm.io
我很难找到数据同步和复制之间的差异。 据我所知,复制使 2 个数据库之间的所有数据都相同。同步不一定使两个数据库之间的所有数据都相同。复制是一次传输,同步可以是小更新以保持数据一致吗?我不太确定,请在
我们刚刚成功地将一个主服务器备份到了一个热备服务器上。但是,当我们尝试查询热备时,会出现以下错误: ERROR: cannot assign TransactionIds during recover
有两个进程访问共享变量x,y和z。每个进程访问用于保存这些变量的存储的不同副本。 x,y和z的初始值是0。 流程1: x = 1; if (y == 0) z++; 和过程2: y = 1; if
我需要一个图形数据库,该数据库需要备份并可能在较低的抽象级别上访问。为了负载平衡,它也必须分布,(单主复制就可以了)。 我知道可以使用自引用键值存储来实现图形数据库。 Git 对象数据库就是这种模式的
我正在构建一个解决方案,该解决方案将部署在全局多个地区的多个数据中心,每个数据中心都有一个在每个地区主动更新的数据副本。我将在每个数据中心有多个数据库和文件系统的组合,它们的状态必须保持一致(在一个数
我有 2 个数据库 X“生产”和 Y“测试” 数据库 X 的结构应与 Y 相同。但是,他们并不是因为我的疯狂而对制作进行了很多改动。现在,我需要以某种方式导出 X 并将其导入 Y 而不会破坏任何复制。
使用REPLICATE(以指定的次数重复字符表达式)函数 REPLICATE函数用于以指定的次数重复字符表达式。 语法: REPLICATE (character_expression,int
我的理解在这里可能有误。据我了解,Couchbase 使用智能客户端来自动选择要在集群中写入或读取的节点。我不明白的是,当这些数据被写入/读取时,它是否也立即写入所有其他节点?如果是这样,在节点发生故
我目前正在处理 Crystal Reports 中的一个项目,该项目拒绝使用 Oracle 10g 中允许的未记录函数 WM_CONCAT。 这是WM_CONCAT头信息 WM_CONCAT(p1 I
我有一个在防火墙后面运行的 SOLR 实例。我即将建立另一个不会被防火墙保护的实例。但是,SOLR 似乎只支持拉复制而不支持推送复制。 为了保持相同的安全级别,我有哪些选择?我宁愿不要在防火墙中打开太
有人可以解释为 RavenDB 设置复制的基本步骤吗?我正在使用 build 888。根据我在网上找到的内容,我可以猜测可能需要做什么,但我宁愿确定。 我相信这是复制的官方文档: http://rav
我想在SQL Server和MySQL之间设置复制,其中SQL Server是主数据库服务器,而MySQL是从属服务器(在Linux上)。 有没有办法设置这种情况?帮我 。 最佳答案 我的答案可能来不
我想了解以下 Lotus-Domino 服务器到服务器复制场景中会发生什么: 服务器 A 有 A 数据库的副本。 服务器 B 具有相同数据库的副本。 两台服务器都对数据库具有管理员访问权限,包括删除文
我有一个 2 节点的 cassandra 集群,复制因子为 2,AutoBootStrap=true。启动期间一切正常,两个节点都能看到对方。让我们称这些节点为 A 和 B。 通过节点 A 向 cas
我是一名优秀的程序员,十分优秀!