目录

  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. Android缩放动画[ScaleAnimation]

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s ...

  2. django中使用memcache的一些注意事项

    最近写django项目时在保存验证码方面要用到memcached,于是便查看了一些教程进行操作,结果确遇到了一系列问题,以下是一些容易遇到的雷区: 1.windows下memcached安装: -wi ...

  3. msfconlose基本命令

    命令 简介 back 从当前上下文 banner 显示显示一个令人敬畏的metasploit横幅 cd 更改当前工作目录 color 切换颜色 connect 与主机通信 edit 使用$ VISUA ...

  4. python猜数字游戏console版本

    加入python学习小组后的第一次作业,python GUI写猜数字游戏.由于加班比较多,第一步先实现console版本,下一步再实现GUI版本. 虽然猜数字游戏是个小游戏,但是涉及到的基础知识点还是 ...

  5. MySQL--Insert Buffer

    在进行数据插入时,需要将数据插入到聚集索引和非聚集索引中,而对于非聚集索引,需要先确定数据要插入的索引页,再将索引页加载到内存中进行修改,而在业务上很难保证插入数据在非聚集索引上也是连续的,因此插入操 ...

  6. 为什么需要提前撰写Spec文档

    Joel on Software(中文名叫<Joel软件随想录>)算得上是一本旧书了,但里面的建议和讨论,真的是历久弥新.特别是,Joel是个有趣.牛逼的家伙:前微软Excel的职员.St ...

  7. Linux基本命令-ls

    ls 作用:显示目标列表,在Linux中是使用率较高的命令.ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件. 参数: -a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影 ...

  8. 【sql注入】浅谈JSP安全开发之SQL注入

    [sql注入]浅谈JSP安全开发之SQL注入 本文转自:i春秋社区 前言不管是用什么语言编写WEB应用程序,他们都或多或少有一些地方存在漏洞.如果你想知道漏洞的运行原理,和防御方案,那么请看完本篇文章 ...

  9. Python学习笔记【第十三篇】:Python网络编程一Socket基础

    什么是⽹络 网络能把双方或多方连在一起的工具,即把数据从一方传递到另一方进行数据传递. 网络编程就是不同电脑上的软件能够进行数据传递.即进程间的通讯. 什么是TCP/IP协议 协议就是大家一起遵守的约 ...

  10. 《http权威指南》读书笔记11

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...