目录

  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. Maven搭建SSH框架

    工具:Eclipse(Maven管理工具)+Tomcat+Mysql. 1.新建一个Maven工程(maven-archetype-webapp). 打开File ——>new——>Mav ...

  2. CodeSampler DX9 Full-screen initialization

    D3D新手,请轻拍. 最近在学CodeSampler上的DX9范例.编译环境是VS2012.搭编译环境用了一两天,另行开文吐槽(有时间的话). 本文讲讲Full-screen initializati ...

  3. C#实现全局快捷键(系统热键)响应(转)

    转自http://www.cnblogs.com/Randy0528/archive/2013/02/04/2892062.html 在应用中,我们可能会需要实现像Ctrl+C复制.Ctrl+V粘贴这 ...

  4. 行业相关的webgl项目

    炼钢厂污水处理http://www.hightopo.com/demo/CirculatingWaterPump/index.html智能idc机房http://www.hightopo.com/de ...

  5. c#图像处理入门(-bitmap类和图像像素值获取方法)

    c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义 ...

  6. VS Code 调试 Angular 和 TypeScript 的配置

    一.安装插件 在 Visual Studio Code 中打开扩展面板(快捷键 Ctrl+Shift+X),搜索安装 Debugger for chrome 插件). 二.配置启动参数 在 Visua ...

  7. Android 视频播放器 (一):使用VideoView播放视频

    一.简介 作为Android开发,我们不可避免的会接触到视频播放,VideoView做为最简单的播放器,我们是不应该不会的. 下面简单介绍一下VideoView: VideoView是使用MediaP ...

  8. ADB驱动

    Windows 7 64位下使用ADB驱动 什么是ADB? adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试An ...

  9. 生成uuid唯一标识符

    generate_uuid: function(){ var d = new Date().getTime(); if(window.performance && typeof win ...

  10. Linux — 文件、目录管理

    目录与路径 .  此层目录 .. 上层目录 -  之前一个工作目录 ~ 主文件夹 ~ account 指定用户的主文件夹,account --账号名称 cd 切换目录 pwd (print worki ...