问题标签 [raft]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - python线程方法卡住了
我有一个类MyClass
在初始化时创建 7 个线程。一个线程是 TCPServer,另外六个是MyClass
TCPServer 用来处理请求的对象。
我的目的是创建可以在后台运行MyClass
并维护 6 个线程的方法。这 6 个线程对应于 2 个分布式对象obj1
,并obj2
通过名为 PySyncObj 的 Raft 实现进行复制。每个对象有三个线程。
每个对象集群obj_1_cluster
都有obj_2_cluster
一个领导者,服务器必须跟踪它,因为对对象的所有更改都必须只发送给领导者。
当我运行这段代码时,我看到的唯一输出是......
直到我用 ctrl-C 终止进程。
有没有办法改变这一点,以便这两个进程可以使用自己的线程运行——在需要更改对象时忙于检查对象的状态?我已经阅读了很多关于线程的内容,但我不明白为什么这目前没有按照我认为的方式工作。
环境:我在 MacOS 10.13.3 上运行 python 2.7.14。
consensus - Raft 共识协议是否处理与领导者失去联系但与其他节点没有联系的节点?
在网络分区的情况下,Raft 保持一致。但是,如果只有一个节点只与领导者失去联系,成为候选人并要求投票,会发生什么?
这是设置,我调整了http://thesecretlivesofdata.com/raft/中的示例以满足我的需要:
节点B
是当前的领导者,并向追随者发送心跳(红色)。B
和之间的连接C
丢失,在选举超时后C
成为候选人,为自己投票并要求节点A
,D
并E
为它投票(绿色)。
会发生什么?
据我了解 Raft,nodesA
和D
shouldE
投票选出C
下C
一个领导者(第 2 学期)。然后,我们有两个领导者各自发送心跳,并希望节点发送心跳,并且A
由于任期较低D
而E
将忽略这些心跳。B
这是正确的还是有更好的机制?
distributed-computing - Raft 领导人在任期开始时提交无操作条目
最近看了一篇关于 Raft 共识算法的论文。新领导者不知道当前提交索引是多少。
无操作如何 解决这个问题?
distributed-computing - Raft 共识算法是拜占庭容错(bft)算法吗?
raft共识算法是拜占庭容错算法吗?
需要多少(百分比)节点才能达成一致/共识?
ssl - Corda 筏 TLS V1
是否已更改 Corda 版本 3 上的 RAFT 实现,或者它与版本 2 类似并且无法禁用 TLS v1?
我们知道 Corda 使用 TLS v1.2,但 v1 仍然处于活动状态,我们需要完全禁用。有没有办法做到这一点?
谢谢!!
consensus - 在 Raft 中,follower 何时知道条目已提交?Can an out-of-date node can win a election?
在 raft 中,如果日志复制到多数,则认为它已在领导者中提交。然后leader发送msg给follower,告诉follower一个entry变为commit。如果没有,follower如何以及何时知道一个entry变为commit?
Another question,if an out of date can win an election in the following case? 5个节点集群,节点A是当前leader。
答: 0 1 2 3 4
乙: 0 1 2 3 4
C: 0 1 2 3 4
D: 0 1 2 3
E: 0 1
当节点 A(当前领导者)收到请求(条目 4)时,将其记录并复制到节点 B 和节点 C。然后节点 A 在状态机中应用条目 4 并回复客户端(此时条目被认为已由节点提交B 和节点 C 与否?)。Then node A and node B crash, node D start new election vote itself and get vote by node E, then win the election . 这种情况会发生吗?
blockchain - Quorum 中的 RAFT 共识算法如何保证确定性扩链?
在 Quorum 的RAFT 共识文档中提到
这种链扩展逻辑是确定性的:集群中的每个节点都会发生相同的行为,从而使区块链保持同步。
在leader发生变化的情况下,共识算法如何保证所有follower节点拥有相同的账本?是不是有一些follower节点先从前一个leader那里得到一个新块,而一些节点先从新leader那里得到一个新块?是否有任何同步机制来避免这种行为?
distributed-system - 在 Raft 分布式共识中,我将 votedFor 设置为什么?
我正在尝试实现 Raft 共识算法。以下是我对设置服务器状态的term
和votedFor
属性的所有时间的一般理解:
- 启动时
term
为 0 并且votedFor
是null
- 在服务器的选举超时后,服务器成为候选者,将其增加
term
1,并将其设置votedFor
为自身。 - 当服务器接收到一个高于它自己的
RequestVote
RPC 时,它应该更新观察到的数量,然后如果接收服务器有一个of并且它的日志不比发送者的日志更新,则更新给发送者。term
term
votedFor
votedFor
null
- 当候选者收到一个
AppendEntries
RPC,并且发送者的term
值高于或等于它自己的,候选者应该将其更新term
为发送者,term
然后将其设置votedFor
为发送者并使其状态变为跟随者,从而确认发送者为其合法领导者。 - 在所有其他情况下,当服务器接收到任何包含
term
高于其自身的 RPC 请求或响应时,它应将其自己的设置term
为接收到的服务器term
并设置votedFor
为null
.
term
这些一起构成了 Raft 正确实现中仅有的 5 种方式votedFor
吗?这些案例是否被正确总结了?我对此感到困惑,因为该论文仅提到在某些时候节点将转换为跟随者,而没有指定是否votedFor
应该是具有较高期限的发送者的值或null
。我担心案例 4 是错误的,应该是这样:AppendEntries
如果发送者的期限更长,那么接收者应该将它们更新为发送者的期限term
,然后设置votedFor
为发送者,无论接收者是否是追随者、候选人或过时的领导者。
etcd - etcd 如何保证发送消息的顺序?
我似乎不知道 etcd 如何保证按顺序接收同一(跟随者)节点发送的消息。该message
结构似乎不包含“已发送索引”,例如,MSGProp
它甚至不包含该术语。
同样,如果消息延迟了怎么办?是否有删除消息的时间戳?
raft - Could Raft elect a leader with uncommitted log?
Suppose a cluster of 5 nodes(ABCDE), node-A is elected leader at the beginning, and while leader-A issues AppendEntries RPCs to the follower(BCDE) to replicate log entry(log-X),only node-B receives and returns success, at this point leader-A crashes.
If node C(or D or E) wins the next leader election then everything's fine, because only node B has log-X, and that means log-X is not committed.
My question is, could node-B (which has the highest term and longest log) win the next leader election? If so, will node-B spread log-X to other nodes?