目录

  1. 三个状态
  2. 什么是任期
  3. 节点之间的通信

1. 三个状态

Raft 设计了 3 个状态,用于表示节点的状态,分别是跟随者,候选者,领导者。

  1. 领导者:通常只有一个领导人,并且其他节点都是跟随者。
  2. 跟随者:跟随者不会发送任何请求,只是简单的响应领导者或者候选人的请求,由领导人处理所有的客户端请求(如果客户端请求了跟随者,那么跟随者会将请求转发给领导者)
  3. 候选者:选举新的领导人时使用。

3 个角色的转换关系和流程:

可以看到,这张图里的几个概念:

  1. 初始化:所有服务器启动时,都是跟随者
  2. 超时:当初始时, 没有收到领导人的心跳,便开始选举。如果候选者选举的时候,也超时了,便重新选举。
  3. 大多数的选票:成为领导人的关键是 —— 获取大多数服务器的选票,可以看做是鸽笼原理。

2. 什么是任期

目录:

  1. 2 个阶段
  2. 任期
  3. 服务器之间的通信

背景:由于机器的物理时间是不可靠的,所以需要一个逻辑时间。称之为任期(term)。

从 2 个阶段开始说起

集群节点通常有 2 个节点:

  1. 选举阶段
  2. 领导者正常运行

例外:当选举失败,会进行加时赛,即连续有 2 个选举过程。

见下图:

图 2 可见任期 3 选举失败,然后进行了重新选举。

重新选举会继续失败吗?

答:如果不做限制,是会理解失败的。

Raft 使用了一个限制来规避:每台服务器在选举的时候,使用一个随机数(150 -200),即每个服务器在不同的时间发出选举。防止冲突。称之为“加时赛”。

任期号

在上文中说道:由于机器的物理时间是不可靠的,所以需要一个逻辑时间。称之为任期(term)。

有关任期的几个特点:

  1. 节点有可能观察不到任何一次选举或者任期。
  2. 任期充当逻辑时钟,服务器节点可以通过任期号查明过期的领导者或过期的信息。
  3. 每个节点存储当前任期号,单调递增。
  4. 服务器之间的每次通信,都会交换当前任期号,交换任期号的目的: 4.1 如果一个服务器的当前任期号比其他人小,则更新自己。 4.2 如果一个候选人或者领导人发现自己的任期号过期了,立刻将自己变成跟随者状态。 4.3 如果一个节点收到一个过期的任期号的请求,直接拒绝。

3. 节点之间的通信

服务器之间通过 RPC 通信,即远程方法调用。

在 Raft 中,RPC 分成 3 种:

  1. 请求投票: RequestVote 由候选人在选举任期发起
  2. 附加条目 AppendEntries 由领导人发起,用来复制日志和提供心跳。
  3. 为了传输快照单独增加的 RPC。

备注:当服务没有及时收到 RPC 的响应时,会发起重试。

Summary

  1. 3 个状态的意义和他们之间切换
  2. 任期的设计背景,任期在节点通信时的作用,任期在增长策略。
  3. 节点直接的通信 RPC 类型以及策略。

Raft 基础的更多相关文章

  1. 分布式一致性算法:Raft 算法(论文翻译)

    Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的 ...

  2. 【转】分布式一致性算法:Raft 算法(Raft 论文翻译)

    编者按:这篇文章来自简书的一个位博主Jeffbond,读了好几遍,翻译的质量比较高,原文链接:分布式一致性算法:Raft 算法(Raft 论文翻译),版权一切归原译者. 同时,第6部分的集群成员变更读 ...

  3. Raft 一致性算法论文译文

    本篇博客为著名的 RAFT 一致性算法论文的中文翻译,论文名为<In search of an Understandable Consensus Algorithm (Extended Vers ...

  4. 从raft论文出发

    介绍 Raft是一种为了管理复制日志的一致性算法.为了提升可理解性,Raft 将一致性算法分解成了几个关键模块,例如领导人选举.日志复制和安全性.同时它通过实施一个更强的一致性来减少需要考虑的状态的数 ...

  5. Raft协议--中文论文介绍

    本篇博客为著名的 RAFT 一致性算法论文的中文翻译,论文名为<In search of an Understandable Consensus Algorithm (Extended Vers ...

  6. 分布式共识算法 (三) Raft算法

    系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.引子 1.1 介绍 Raft 是一种为了管 ...

  7. 10分钟弄懂Raft算法

    分布式系统在极大提高可用性.容错性的同时,带来了一致性问题(CAP理论).Raft算法能够解决分布式系统环境下的一致性问题. 我们熟悉的ETCD注册中心就采用了这个算法:你现在看的这篇微信公众号文章, ...

  8. Raft翻译

    英文原文:https://web.stanford.edu/~ouster/cgi-bin/papers/raft-atc14 In Search of an Understandable Conse ...

  9. 30分钟带你理解 Raft 算法

    为什么需要 Raft? Raft 是什么? Raft 的目标 前置条件:复制状态机 Raft 基础 Leader 选举(选举安全特性) 日志复制(Leader只附加.日志匹配) 安全 学习资料 使用 ...

随机推荐

  1. 3、MHC主要组织相容性复合体

    主要组织相容性复合体 (major histocompatibility complex MHC) 位于脊椎动物某对染色体上紧密连锁的基因群,其编码的蛋白是主要组织相容性抗原,是移植排斥反应的主要抗原 ...

  2. Jmeter学习过程中遇到的那些坑

    开个新帖,持续记录学习jmeter过程中遇到的坑... (1)出师不利 由于公司的产品都是客户端模式,所以所有的接口测试都从获取access-token开始.妹的...上来就是一个坑... 一开始的配 ...

  3. python网络爬虫开发实战(崔庆才)_14页_chromedriver环境配置和加载

    自己1,环境配置,我下载了相对应的Chromedriver(其实我也不知道对不对应,都是下载最新版的我猜应该会对应),然后在任何文件夹下输入command+shift+G,打开输入窗口,任何输入  / ...

  4. android项目生成aar和引用aar解决方案

    引用依赖在项目中很常见,java开发一般是引用jar,所以android大家一般也是引用jar,但是android引用jar有时候会出现各种包冲突,很头痛!, 其实android有自己独特的引用aar ...

  5. css实现圆形倒计时效果

    实现思想: 1.最外层包裹内部的div1(.box) 2.内部左右两边div2(.left_box和.right_box),宽度为div1的一半,通过overflow:hidden隐藏其内部的div ...

  6. MapReduce多种join实现实例分析(二)

    上一篇<MapReduce多种join实现实例分析(一)>,大家可以点击回顾该篇文章.本文是MapReduce系列第二篇. 一.在Map端进行连接使用场景:一张表十分小.一张表很大.用法: ...

  7. 了解iOS消息推送一文就够:史上最全iOS Push技术详解

    本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...

  8. 抓包工具 Fiddler 使用介绍

    简介 Fiddler是一个抓包工具,可以将网络传输发送与接收的数据包进行截获.重发.编辑等操作.也可以用来检测流量.原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口 ...

  9. Python学习笔记【第七篇】:文件及文件夹操作

     介绍 我们用pytthon.C#.Java等这些编程语言,想要把文件(文字.视频....)永久保存下来就必须将文件写入到硬盘中,这就需要我们应用程序去操作硬件,我们这些编程语言是无法直接操作硬件的. ...

  10. Java NIO工作机制简介

    前言 本博客只简单介绍NIO的原理实现和基本工作流程 I/O和NIO的本质区别 NIO将填充和提取缓冲区的I/O操作转移到了操作系统 I/O 以流的方式处理数据,而 NIO 以缓冲区的方式处理数据:I ...