文档章节

Raft 与 Paxos的区别

cloud-coder
 cloud-coder
发布于 2016/07/14 09:34
字数 561
阅读 1673
收藏 11

Raft

Raft概述

        Raft一致性算法用于保证在分布式的条件下,所有的节点可以执行相同的命令序列,并达到一致的状态。这类的问题可以归结为“Replicated state machines”问题。

关于Raft一致性协议的概要

Raft一致性算法的保证

关于Raft一致性协议的概要

Raft特点

        相比于Paxos,Raft最大的特点就是可理解性。相信读过Paxos论文的人应该对此深有体会。

Raft把一致性问题,分解成三个比较独立的子问题,并给出每个子问题的解决方法:

选举:描述Raft是如何选择一个leader的,这个部分很受容易理解了。

日志复制:描述Raft的leader是如何把日志复制到集群的各个节点上的。

安全性:描述Raft是如何保证“State Machine Safety Property”。

参考

官方资源(包括了论文、各个语言的实现、一些学习视频)

根据Raft论文整理的一个中文文章

一个概括性的中文PPT

中文翻译

Paxos

概述

Paxos 协议是一个解决分布式系统中,多个节点之间就某个值(提案)达成一致(决议)的通信协议。它能够处理在少数派离线的情况下,剩余的多数派节点仍然能够达成一致

paxos两阶段提交

        总体说来,paxos就是通过两个阶段确定一个决议:
Phase1:确定谁的编号最高,只有编号最高者才有权利提交proposal;
Phase2:编号最高者提交proposal,如果没有其他节点提出更高编号的proposal,则该提案会被顺利通过;否则,整个过程就会重来。

        你编号高,我比你更高,反复如此,算法永远无法结束,这叫活锁。FLP Impossibility已经证明,在异步通信中不存在任何一致性算法,活锁便是Paxos无法解决的硬伤。

        Phase1,Phase2非常像2PC中的两个阶段,因此paxos本质上是多个2PC交替执行!
另外,即使你明白了,在实现时会知道有多难,工程实现与理论差距很大!

© 著作权归作者所有

cloud-coder
粉丝 248
博文 194
码字总数 141537
作品 0
广州
架构师
私信 提问
TIDB 架构及分布式协议Paxos和Raft对比

近来newsql大热,尤以TIDB最火,pingcap不断打磨TiDB,现如今版本已经迭代到3.0,产品已经基本趋于成熟。 对于TiDB,整体架构图如下图所示 是由四个模块组成,TiDB Server,PD Server,TiKV ...

liuminkun
04/11
0
0
Distributed Systems-选主与同步

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feilengcui008/article/details/50850299 在上一篇文章中讨论了leader选举对于基本Paxos算法在实际工程应用中...

feilengcui008
2016/03/10
0
0
分布式系统的共识(consensus)算法比较

这是一篇比较分布式系统中服务器之间获得状态最终一致性也就是取得共识consensus几个流行算法,包括Paxos、Egalitarian Paxos、Hydra、Fast Paxos、Ios、VRR(Viewstamped Replication Revis...

大糊涂
2016/04/10
614
0
深入浅出分布式系统Raft协议

一、Raft协议和Paxos的因缘 读过Raft论文《In Search of an Understandable Consensus Algorithm》的同学都知道,Raft是因为Paxos而产生的。Paxos协议是出了名的难懂,而且不够详细,紧紧依据...

HOT_POT
2018/07/26
0
0
Use Hashicorp Raft to build a Redis sentinel

Use Hashicorp Raft to build a Redis sentinel Siddon's Blog2015-05-03338 阅读 golang Redis Sentinel We use Redis not only for cache, but also storing important data, and we build......

Siddon's Blog
2015/05/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

研究下这代码,用到了guava和线程池

import com.google.common.util.concurrent.FutureCallback;import com.google.common.util.concurrent.Futures;import com.google.common.util.concurrent.ListenableFuture;import c......

暗中观察
3分钟前
0
0
《css 揭秘》 之垂直居中的实现

最近看了 Lea Verou 的 《css揭秘》一书,让我对自己的 css学习产生了深深的怀疑。这本书真是太棒了,里面涉及到很多优雅又有趣的效果实现,真的是非常棒。如果你有时间,十分建议你去看看。...

IrisHuang
9分钟前
0
0
java 抽象类(2)

/*需求: 描述一个图形、圆形、 矩形三个类。不管哪种图形都会具备计算面积与周长的行为,但是每种图形计算的方式不一致而已。常量的命名规范:全部字母大写,单词与单词 之间 使用下...

hellation_
11分钟前
0
0
总结:堆和栈

堆 堆比较好理解,即存放对象的地方。这里的对象由GC管理 1、类变量(static修饰的变量):在程序加载时系统就为它在堆中开辟了内存,堆中的内存地址存放于栈以便于高速访问。静态变量的生命...

浮躁的码农
17分钟前
1
0
JavaScript 新语法详解:Class 的私有属性与私有方法

译者按: 为什么偏要用**#**符号? 原文:JavaScript's new #private class fields 译者:Fundebug 本文采用意译,版权归原作者所有 proposal-class-fields与proposal-private-methods定义了 ...

Fundebug
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部