Replicated State Machine和WAL
在阅读raft论文的时候,考虑两个问题:
- 为什么要用Replicated State Machine?没有其他方式吗
- 为什么要先写日志再应用到Replicated State Machine,直接应用到Replicated State Machine刷磁盘不行吗?
1 Replicated State Machine
在raft协议中,每一个server中都有一个Replicated State Machine,只要每个server接收到的输入命令是相同的,那么Replicated State Machine最后的结果就是相同的,也就达到了最终的共识性。那么我们可以考虑下,如果不使用Replicated State Machine,还有其他的方式吗。其实一共两种方式的复制方式:
为了令进程实现高可用,我们可以对进程进行备份,而实现进程的主从备份主要有两种方法
- State Transfer(状态转移):主服务器将完整的状态内容都传输给备份服务器
- Replicated State Machine(备份状态机):将需要备份的服务器视为一个确定性状态机 —— 主备以相同的状态启动,以相同顺序导入相同的输入,最后它们就会进入相同的状态、给出相同的输出
第二种就是刚才所说的Replicated State Machine。假设考虑使用第一种,我们需要将server中整个数据复制到每个其他server, 性能成本显然是不可行的,所以在多副本复制的情况下都采用Replicated State Machine,只需要将增量命令应用于状态机就能达到最终的共识。
2 WAL
WAL,Write-Ahead Logging。WAL的中心思想是对数据文件的修改必须发生在这些修改已经记录到日志之后,也就是先写日志落盘然后写数据。如果遵循这一过程,就不需要每次提交事务的时候把数据块刷回磁盘,因为出现奔溃的情况下可以用日志来恢复数据。
那么这有什么好处呢?为什么不直接落盘呢?
- 使用WAL主要的好处就是显著地减少了写磁盘的次数,因为在日志提交的时候只需要把日志文件刷新到磁盘,而不是事务修改的所有数据文件,而且日志文件是顺序写的,因此同步日志的开销远比同步数据块的开销要小。这里我们就回答了刚才的问题,关键点是性能。
- 使用日志还支持回滚等操作
因此,在raft中,leader将log复制到follower后就表示该操作已经被持久化,而复制到大多数后就表示该消息在整个系统中已经不会丢失了(个人理解)
3 参考
- https://www.postgresql.org/docs/9.2/static/wal-intro.html
- https://zhuanlan.zhihu.com/p/33816607
- http://book.51cto.com/art/201201/313209.htm
Replicated State Machine和WAL的更多相关文章
- Finite State Machine 是什么?
状态机(Finite State Machine):状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动 作.完成特定操作的控制中心. 类 ...
- State Machine.(状态机)
What is a State Machine? Any device that changes its state from one to another due to some actions a ...
- Finite State Machine
Contents [hide] 1 Description 2 Components 3 C# - FSMSystem.cs 4 Example Description This is a Dete ...
- Qt: The State Machine Framework 学习
State Machine,即为状态机,是Qt中一项非常好的框架.State Machine包括State以及State间的Transition,构成状态和状态转移.通过状态机,我们可以很方便地实现很 ...
- Android4.0中蓝牙适配器state machine(状态机)的分析
今天晓东和大家来一起看一下Android4.0中蓝牙适配器(Bluetooth Adapter)的状态机变化的过程.首先,我们需要了解一下,蓝牙适配器究竟有哪些状态,从代码可以清晰地看到(framew ...
- 控制结构(3) 状态机(state machine)
// 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guar ...
- 控制结构(3): 状态机(state machine)
// 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guar ...
- 【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 ...
- 【翻译】What is State Machine Diagram(什么是状态机图)?
[翻译]What is State Machine Diagram(什么是状态机图)? 写在前面 在上一篇学习类图的时候将这个网站上的类图的一篇文章翻译了出来,感觉受益良多,今天来学习UML状态机图, ...
随机推荐
- ensp练习:防火墙安全策略配置
一.实验目的:1. 了解华为防火墙安全策略.2. 掌握华为防火墙安全策略的配置.二.实验仪器:计算机.华为ensp模拟器.华为防火墙三.实验内容:在这里插入图片描述根据网络拓扑图如上(交换机不需要配置 ...
- 使用Irony开发译码器
使用Irony开发一个针对G代码的译码器.不想使用Lex&Yacc的原因是: 1.我只会用C#和Python写代码,用Lex&Yacc还得学习新的语法规范,我懒: 2.Lex& ...
- csv/json/list/datatable导出为excel的通用模块设计
导出excel的场景我一般都是一个List直接导出成一张sheet,用Npoi.Mapper库很方便,最近我经常是需要将接口返回的jsonarray转成一张excel表,比如从elasticsearc ...
- GPT-3被超越?解读低能耗、高性能的GlaM模型
原创作者 | LJ GLaM: Efficient Scaling of Language Models with Mixture-of-Experts https://arxiv.org/pdf/2 ...
- MAT工具分析Dump文件(大对象定位)
前段时间线上服务经常发生卡顿,经过排查发现是大对象引起的Fullgc问题,特此记录排查逻辑. 目录 目的 一.获得服务进程 二.生成dump文件 三.下载mat工具 四.使用mat工具导入第二步生成的 ...
- 七天接手react项目-起步
七天接手react项目-起步 背景 假如七天后必须接手一个 react 项目(spug - 一个开源运维平台),而笔者只会 vue,之前没有接触过 react,此刻能做的就是立刻展开一个"7 ...
- Jira8.0.2安装及破解
最近开发部总监需要部署JIRA管理项目,就安装了一个JIRA8.5.7版安装并破解后,有天断电重启了,发现启动不了提示连接不上数据库.后来我又换了台机器重新安装后又进行了重启发现此破解版本存在问题.并 ...
- HTML 基础及超链接练习
实验一:HTML 基础及超链接练习 实验目的: 熟悉 HTML 基础及超链接的使用 实验要求: 1.建立至少 3 个以上的网页: 2.实现任意两网页之间的跳转(建议做个导航菜单): 3.每个网页里面至 ...
- Python入门随记(2)
1.二维列表的声明 [['pygis'],['gis']] 2.CSV格式的本质,是用,作为分隔符. 3.for循环 for -- in -- 例: a=0 for i in range(100): ...
- python-用代码实现队列,处理斐波那契数列
队列在进行数据操作时必须遵循"先进先出(Firstin Firstout,FIFO)"的原则,这一特点决定了队列的基本操作需要在其两端进行 队列(Queue)的基本操作通常在队列的 ...