在阅读raft论文的时候,考虑两个问题:

  1. 为什么要用Replicated State Machine?没有其他方式吗
  2. 为什么要先写日志再应用到Replicated State Machine,直接应用到Replicated State Machine刷磁盘不行吗?

1 Replicated State Machine

在raft协议中,每一个server中都有一个Replicated State Machine,只要每个server接收到的输入命令是相同的,那么Replicated State Machine最后的结果就是相同的,也就达到了最终的共识性。那么我们可以考虑下,如果不使用Replicated State Machine,还有其他的方式吗。其实一共两种方式的复制方式:

为了令进程实现高可用,我们可以对进程进行备份,而实现进程的主从备份主要有两种方法

  1. State Transfer(状态转移):主服务器将完整的状态内容都传输给备份服务器
  2. Replicated State Machine(备份状态机):将需要备份的服务器视为一个确定性状态机 —— 主备以相同的状态启动,以相同顺序导入相同的输入,最后它们就会进入相同的状态、给出相同的输出

第二种就是刚才所说的Replicated State Machine。假设考虑使用第一种,我们需要将server中整个数据复制到每个其他server, 性能成本显然是不可行的,所以在多副本复制的情况下都采用Replicated State Machine,只需要将增量命令应用于状态机就能达到最终的共识。

2 WAL

WAL,Write-Ahead Logging。WAL的中心思想是对数据文件的修改必须发生在这些修改已经记录到日志之后,也就是先写日志落盘然后写数据。如果遵循这一过程,就不需要每次提交事务的时候把数据块刷回磁盘,因为出现奔溃的情况下可以用日志来恢复数据。

那么这有什么好处呢?为什么不直接落盘呢?

  1. 使用WAL主要的好处就是显著地减少了写磁盘的次数,因为在日志提交的时候只需要把日志文件刷新到磁盘,而不是事务修改的所有数据文件,而且日志文件是顺序写的,因此同步日志的开销远比同步数据块的开销要小。这里我们就回答了刚才的问题,关键点是性能。
  2. 使用日志还支持回滚等操作

因此,在raft中,leader将log复制到follower后就表示该操作已经被持久化,而复制到大多数后就表示该消息在整个系统中已经不会丢失了(个人理解)

3 参考

  1. https://www.postgresql.org/docs/9.2/static/wal-intro.html
  2. https://zhuanlan.zhihu.com/p/33816607
  3. http://book.51cto.com/art/201201/313209.htm

Replicated State Machine和WAL的更多相关文章

  1. Finite State Machine 是什么?

    状态机(Finite State Machine):状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动       作.完成特定操作的控制中心. 类 ...

  2. State Machine.(状态机)

    What is a State Machine? Any device that changes its state from one to another due to some actions a ...

  3. Finite State Machine

    Contents [hide]  1 Description 2 Components 3 C# - FSMSystem.cs 4 Example Description This is a Dete ...

  4. Qt: The State Machine Framework 学习

    State Machine,即为状态机,是Qt中一项非常好的框架.State Machine包括State以及State间的Transition,构成状态和状态转移.通过状态机,我们可以很方便地实现很 ...

  5. Android4.0中蓝牙适配器state machine(状态机)的分析

    今天晓东和大家来一起看一下Android4.0中蓝牙适配器(Bluetooth Adapter)的状态机变化的过程.首先,我们需要了解一下,蓝牙适配器究竟有哪些状态,从代码可以清晰地看到(framew ...

  6. 控制结构(3) 状态机(state machine)

    // 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guar ...

  7. 控制结构(3): 状态机(state machine)

    // 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guar ...

  8. 【UML】-NO.43.EBook.5.UML.1.003-【UML 大战需求分析】- 状态机图(State Machine Diagram)

    1.0.0 Summary Tittle:[UML]-NO.43.EBook.1.UML.1.003-[UML 大战需求分析]- 状态机图(State Machine Diagram) Style:D ...

  9. 【翻译】What is State Machine Diagram(什么是状态机图)?

    [翻译]What is State Machine Diagram(什么是状态机图)? 写在前面 在上一篇学习类图的时候将这个网站上的类图的一篇文章翻译了出来,感觉受益良多,今天来学习UML状态机图, ...

随机推荐

  1. Clickhouse 分布式表&本地表 &ClickHouse实现时序数据管理和挖掘

    一.CK 分布式表和本地表 (1)CK是一个纯列式存储的数据库,一个列就是硬盘上的一个或多个文件(多个分区有多个文件),关于列式存储这里就不展开了,总之列存对于分析来讲好处更大,因为每个列单独存储,所 ...

  2. C语言中sizeof()的用法

    语法 sizeof有三种语法形式: 1.sizeof(object); //sizeof(对象); 2.sizeof(type_name); //sizeof(类型); 3.sizeof object ...

  3. 关于python的turtle详解(转载)

    详解文章见turtle--海龟绘图--python3.10.2文档

  4. 【Windows身份认证】NTLM

    前言 前几天自己在学习域渗透时突然对Windows的身份认证机制产生了兴趣,但看了好几天自己还是懵懵懂懂,期间自己看了许多师傅的优质文章,也做了一些例子的复现,于是有了这篇文章,可以说是自己的笔记或总 ...

  5. Oracle的发展历程

    我们学习的是ORACLE(甲骨文)公司(就是收购Sun公司的甲骨文公司)的Oracle数据库(Oracle Database).Oracle数据库是关系型数据库中的大型数据库,存储量大,而且也非常安全 ...

  6. idea教程--使用mave创建普通java项目

    1.点击箭头所示的"Create New Project"选项 2.勾选图示所示的"Create From Archetype"复选框,在下面的下拉选项中我们选 ...

  7. 量化研究之“大A打板敢死队”是如何做换手板与撬板的?

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 涨停跌停板分类 涨停.跌停是A股特有的现象,其他主要市场,例如美股.港股都不存在涨跌停的规则.涨停.跌停 ...

  8. python 镜像仓库获取最新版本号

    #/bin/python# -*- coding: utf-8 -*-import requestsfrom urllib import parsefrom requests.auth import ...

  9. 矩池云上安装yolov4 darknet教程

    这里我是用PyTorch 1.8.1来安装的 拉取仓库 官方仓库 git clone https://github.com/AlexeyAB/darknet 镜像仓库 git clone https: ...

  10. javaScript阻止浏览器F5刷新

    1 <script type="text/javascript"> 2 //禁止用F5键 3 document.onkeydown = function (e) { 4 ...