[转帖]一致性入门之--RAFT论文理解

一致性,入门,raft,论文,理解 · 浏览次数 : 0

小编点评

**一致性算法**是解决分布式系统中,各个子部分对于某一个共同过程所达成的共识的方法。 **CAP理论**是一个存储系统一致性理论,其重点不在一致性,有兴趣的同学自行google。 **RAFT** 是一个用于保证一致性的工程实现方法,其复杂程度相比于Paxos要低很多,使得该算法更容易于理解和工程实现。 **raft 的主要功能包括:** * **Leader 负责**:负责 client 端的请求处理,并发送到其他 follower 上,处理与follower的同步。 * **Follower 负责**:负责接收 leader 的副本,可以看作leader的备份。 * **Candidate 在投票阶段**:在投票阶段存在的角色,负责将自己的投票发送出去,同时处理收到的投票。 **raft 的一些关键特性包括:** * **Election Safety:**每个时间片内最多选出一个 leader,任何 candidate 在获得大多数的投票之后就会成为 leader。 * **Leader Append-Only:**leader 可以添加新的 entries 不能删除或重写。 * **Log Machine:**如果两个 log 有相同的 index 和 term,他们之前的所有 log 一定相同。 * **Leader Completeness:**提交的 committed 的 log 会一直存在下去。

正文

https://whoiami.github.io/RAFT

 

RAFT 是为了保证一致性的工程实现方法。其想法来自于Paxos,由于Paxos极其难以理解以及高复杂性,在工程上实现难度异常大。Diego Ongaro 和 John Ousterhout 提出了一种便于理解和工程实现的一致性算法,其复杂程度相比于Paxos要低很多,因而使得该一致性算得到了更好的普及。

何为一致性算法?

个人理解一致性算法是为了解决分布式系统中,各个子部分对于某一个共同过程所达成的共识。在分布式存储理论中有一个非常有名的理论CAP theory。当然该理论的重点不在一致性,有兴趣的同学自行google。这里借用CAP theroy对于一致性的定义,也就是所谓的C(consensus)。

在CAP theory, Wikipedia 的解释

Consensus:Every read receives the most recent write or an error.

在一个存储系统中,在同一时间,每一次读一定是一样的最新的数据或者读到一个error。

为什么需要一致性算法?

在存储系统当中,这个问题的第一反应一定是为了保证数据的一致性。更具挑战的是保证在故障频繁发生的条件下保证数据的一致性。对于一个完整的存储系统,存储节点的单点故障应该是常态。对于三副本系统来说,保证大多数的副本存活(两副本存活)就可以保证数据的一致性,这也解决了单点故障的问题。

RAFT论文

角色:

Leader:负责client端的请求,并发送到其他follower上,处理与follower的同步。

Follower:负责接收Leader的副本,可以看作leader的备份。

Candidate:在投票阶段存在的角色,负责将自己的投票发送出去,同时处理收到的投票。

Overview:

可以看到抽象的系统流程如上图所示。client将请求发送到leader上,leader负责将副本发送到其他follower上,在收到大多数的follower回复之后,将这个log同步到state machine上。最后返回客户端。

Raft论文主要论证了Raft会保证一下的性质:

Election Safety:每个时间片(term)内最多选出一个leader

个人理解,由于raft是一个大多数的游戏,任何candidate在获得了大多数的投票之后就会变成leader,所以在一组candidates中只能最多有一个candidate拿到大多数选票,既只能最多有一个leader。

Leader Append-Only:leader只能添加新的entries不能删除或者重写。

个人理解,要注意这里是leader的限制。由于raft算法中strong leader的特性,leader对于follower的log有绝对的主导权。也就是说follower的log是可以由leader改变的。

Log Machine:如果两个log 有相同的index 和term,他们之前的所有log 一定相同。

个人理解,这是一条非常重要的特性,对于后边的safety证明(leader拥有所有committed entries)有重要的作用。为了保证这一特性,在主从同步log的时候,主会带着当前同步点之前一个序号的log信息(假设A),从需要拥有这一条log才能接受当前的主同步的index为A+1的log。以此类推,主从同步点之前的log一定是相同的。

Leader Completeness:提交的committed的log一定会一直存在下去。

个人理解,新主一定会拥有之前所有提交的committed的log。这里比较抽象,具体的证明在5.4.3小节,有兴趣的同学强烈建议读原文。简而言之,每一次选主的时候由于选择的是拥有更大的term或者更长的log的candidate。每一次即使有candidate宕机重启,也会选出大多数中拥有那次committed的那个candidate。当然如果半数以上的candidate都宕机了,那根本没有一致性可言了,不是raft考虑的范围之内。

如上图所示A为leader,B,C为follower。A收到B的(大多数)response 的时候就会commit log n以及log p。这时候如果A 宕机,B由于拥有更长的log选为新的leader,这时候会将log 同步给C完成log的复制。

运用以上性质raft论文讨论了三个问题

  1. Leader Election
  2. Log Replication
  3. Safety

对于问题1,RAFT给出了极其详细的工程实现,具体流程参考 RAFT流程概述。在接下来的博客中会结合RAFT优秀实现FLOYD 源码对问题1 进行详细的讨论。敬请期待。

Reference

分布式系统一致性的发展历史

In Search of an Understandable Consensus Algorithm

Floyd source code

Wikipedia defination

与[转帖]一致性入门之--RAFT论文理解相似的内容:

[转帖]一致性入门之--RAFT论文理解

https://whoiami.github.io/RAFT RAFT 是为了保证一致性的工程实现方法。其想法来自于Paxos,由于Paxos极其难以理解以及高复杂性,在工程上实现难度异常大。Diego Ongaro 和 John Ousterhout 提出了一种便于理解和工程实现的一致性算法,其复

[转帖]电脑硬件入门——基础之CPU架构解读

https://zhuanlan.zhihu.com/p/65840506 前言 上一篇文章我们从整体上介绍了电脑的各个部件以及功能,CPU可以说是整台电脑中最核心的部件。这篇文章里面,给大家介绍一下CPU里面都有什么。 我们家里用的电脑,CPU只有两家厂商在生产:Intel和AMD。每家厂商都提供

[转帖]Python学习之十七_django的入门

# Python学习之十七_django的入门 ## 前言 ``` Python学习了一周, 慢慢总结摸索. 自己还是有多不会的地方. 感慨这些年浪费的时间. 所有的时间都是选择大于努力. 努力最多感动自己. 生活是需要的是正确的选择. 平凡的实在人太难在一个固化的社会生存. 共勉. ``` ##

[转帖]Linux性能调优之内存负载调优的一些笔记

https://zhuanlan.zhihu.com/p/548770928 写在前面 整理一些Linux内存调优的笔记,分享给小伙伴 博文没有涉及的Demo,理论方法偏多,可以用作内存调优入门 博文内容涉及: Linux内存管理的基本理论 寻找内存泄露的进程 内存交换空间调优 不同方式的内存回收

[转帖]19.awk报告生成器,文本解释器

在本博客中,AWK是一个系列文章,本人会尽量以通俗易懂的方式递进的总结awk命令的相关知识点。 awk系列博文直达链接:AWK命令总结之从放弃到入门 我们先来用专业的术语描述一下awk是什么,如果你看不懂,没关系,我们会再用”大白话”解释一遍。 awk是一个报告生成器,它拥有强大的文本格式化的能力,

[转帖]ELKStack入门篇(一)之ELK部署和使用

ELKStack入门篇(一)之ELK部署和使用 https://www.cnblogs.com/linuxk/p/9272965.html 一、ELKStack简介 1、ELK介绍 中文指南:https://www.gitbook.com/book/chenryn/elk-stack-guide-c

[转帖]LVS入门篇(四)之LVS实战

LVS入门篇(四)之LVS实战 https://www.cnblogs.com/linuxk/p/9360922.html 一、LVS的NAT模式实战 1、环境说明: HOST OS role remask 192.168.56.12 Centos 7.4 LVS调度器(1.2.7) VIP:192

[转帖]LVS入门篇(五)之LVS+Keepalived实战

LVS入门篇(五)之LVS+Keepalived实战 https://www.cnblogs.com/linuxk/p/9365189.html 一、实验架构和环境说明 (1)本次基于VMware Workstation搭建一个四台Linux(CentOS 7.4)系统所构成的一个服务器集群,其中两

[转帖]技术派-epoll和IOCP之比较

直入正题 Epoll 用于Linux系统; IOCP 是用于 Windows; Epoll 是当事件资源满足时发出可处理通知消息; IOCP 则是当事件完成时发出完成通知消息。 从应用程序的角度来看, Epoll 本质上来讲是同步非阻塞的; IOCP 本质上来讲则是异步操作; 举例说明吧 有一个打印

[转帖]bcc入门

学习bcc已经有一段时间,稍微总结一下已知的一些内容。 1. 安装bcc bcc/INSTALL.md at master · iovisor/bcc · GitHubBCC - Tools for BPF-based Linux IO analysis, networking, monitorin