![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
raft
文章平均质量分 79
从未想放弃
这个作者很懒,什么都没留下…
展开
-
【Raft】学习九:成员变更ConfChangeV2
前言在分布式系统中,节点的增删是常见也是必须的操作,对于实用的共识算法Raft自然也提供了关于节点变更的理论基础。在Raft算法中一次变更一个节点是天然支持的,如果一次涉及多个节点的变更,对于一个稳定的系统来说就具有一定风险。例如,在前面的介绍leader选举时,leader的选举依赖集群中的大多数,如果改变了这个大多数,就会导致leader在选举出现问题。如下图(图来源于这里)所示,当新配置占据大多数,而原leader在老配置中就可能会产生新两个leader。因而本文基于Raft的理论和etcd/raf原创 2022-04-29 00:05:38 · 602 阅读 · 0 评论 -
【raft】学习:论文In Search of an Understandable Consensus Algorithm (Extended Version)翻译
摘要raft 是一个用来管理多副本的共识算法, 他的功能等价于多阶Paxos,且和paxos效率不相上下,不过结构不同于Paxos;相比于Paxos,raft更容易理解,为构建可实践系统提供了更好的基础。为了增强可理解性,raft拆分了共识的关键要素,如主节点选举、日志复制和安全,除此增强了连贯性(coherency)以减少必须考虑的状态数。从使用学习结果来看,相比于Paxos,raft更有容易学习对于学生来说。Raft还包含了改变集群成员关系的方案,采用了大多数重叠以保证安全性。概述共识算法允许一组翻译 2022-04-24 11:11:12 · 314 阅读 · 0 评论 -
【raft】学习八:ReadIndex
本文主要了解了一下一致性的一些基本知识,以及跟随etcd/raft的代码逻辑,探讨了一个只读请求需要经历哪些操作,主要探讨了两种方式:readIndex和lease read。原创 2022-04-18 19:38:07 · 851 阅读 · 0 评论 -
【raft】学习七:etcd/raft节点启动流程
前言在前面的raft学习中,探讨了基于etcd/raft的一些数据结构和raft的日志存储,以及Leader选举算法。随着对raft的使用和了解,本次将带着前面的学习,看看raft 节点的启动流程和一些准备工作,从而在使用raft时能够更加简单地将raft运用到我们的实际工作中。准备工作raft本身是一种一致性同步协议,因而需要实体节点来运行协议并提供输入和输出,RawNode是原生的 raft 节点的实体,里面包含了raft协议层和一些状态信息。RawNodetype RawNode struc原创 2022-04-16 18:26:49 · 1463 阅读 · 0 评论 -
【raft】学习六:etcd/raft 选举和选举优化
前言又到了王家村一年一度的村支书选举时间,依据王家村的历史经验,王家村中依法享有选举权和被选举权的每位村民都可以参与选举。由于村支书这个职位在王家村备受好评,因而王家村每年的村长选举都非常激烈。村支书选举委员每年都非常头疼,由于王家村的村民大多数都没有在家,导致一次选举时常出现一些问题,因此王家村每年都在线上展开选举。由于每年王家村的村民报名参加的人数比较多,但王家村的村民都遵守村支书选举委员会定制的规则,且选举委员公正无私,因而王家村选举委员会面临以下几个问题;怎么发起选举,且有序地进行?具有相同原创 2022-04-15 17:00:45 · 1045 阅读 · 0 评论 -
【raft】学习五:日志结构raftLog
基于etcd/raft 对raftLog的学习原创 2022-04-14 16:34:00 · 1057 阅读 · 0 评论 -
【raft】学习四:重要接口学习 Storage和Node
前言在前面的三次学习中,我们学习了一些重要的数据结构,今天主要探讨一下重要的接口,这些接口使得整个raft得以健康地运行。NodeNode接口承载了应用层与raft协议层的桥梁这个角色,相互传递消息和命令。// Node represents a node in a raft cluster.type Node interface { // Tick 主要传递应用层的心跳和选举给raft协议层 Tick() // Campaign 致使节点状态转换到候选状态并开始竞选成为领导者 Campa原创 2022-04-08 14:58:25 · 335 阅读 · 0 评论 -
【raft】学习三:消息结构
今天我们学习一下etcd raft的一些实体数据结构type Message struct { Type MessageType `protobuf:"varint,1,opt,name=type,enum=raftpb.MessageType" json:"type"` // 消息的接受者 To uint64 `protobuf:"varint,2,opt,name=to" json:"to"` // 消息的发送者 From uint64 `protobuf:"var原创 2022-04-02 10:30:04 · 150 阅读 · 0 评论