文章目录

  • 前言
  • CAP理论
    • C consistency 一致性
    • A availability 可用性
    • P partition tolerance 分区容错性
  • 一致性模型
    • 弱一致性
    • 强一致性
  • 强一致性算法
    • 需要明确的问题
    • 强一致算法: 主从同步
    • 强一致性算法:多数派
    • 强一致算法:Paxos
      • Basic Paxos
      • Multi Paxos
        • 第一个版本:使用Proposer表示唯一的一个Leader
        • 第二个版本:将算法角色进一步简化
    • 强一致算法: Raft(基于log replicated的共识算法)
    • 强一致算法:ZAB
  • 总结

前言

分布式系统是当前互联网领域的一个重要且大势所趋的一种解决计算,存储,网络相关问题的方向,利用数量庞大的服务器节点作为底层,在其之上搭建一个可以跨省甚至跨国的庞大系统。

它能够保证用户数据的一致性,对用户提供服务的高可用性,以及跨地域的分区容错性,而分布式一致性算法就是为了保证分布式系统能够满足其特性。

分布式一致性算法,我将其划分到了分布式存储技能树中的分布式理论中:


本文的总结,将按照以下导图进行知识点的总结和梳理

CAP理论

提到分布式系统,那么CAP理论便无法绕过了。自从2000年,Eric Brewer教授提出了分布式系统设计一定会遵循:一致性,可用性,分区容错性的三个原则之后,互联网界的分布式系统便都将其作为自己的衡量标准。后续的分布式系统设计也都按照CAP理论进行设计,但是任何一个系统都只能在三个原则中满足两个,无法三个都满足,即使像最近的亚马逊S3和google spanner等全球分布式系统也只能满足CP两种,对于A则也只能提供多个9的可用性。

后续该理论上升为定理之后也有相关的证明论文,本节只是将其作为一个基本理论扫盲的介绍。

C consistency 一致性

在分布式系统中有多个节点,整个系统对外提供的服务应该是一致的。即用户在不同的系统节点访问数据的时候应该是同样的结果,不能出现1号节点是结果1, 2号节点是结果2这种不一致的情况。

A availability 可用性

分布式系统为用户提供服务,需要保证能够在一些节点异常的情况下仍然支持为用户提供服务。

P partition tolerance 分区容错性

分布式系统的部署可能跨省,甚至跨国。不同省份或者国家之间的服务器节点是通过网络进行连接,此时如果两个地域之间的网络连接断开,整个分布式系统的体现就是分区容错性了。

在这种系统出现网络分区的情况下系统的服务就需要在一致性 和 可用性之间进行取舍。

如果为了在出现网络分区之后提供仍然能够提供可用性,那么一致性必然无法满足。因为可用性的要求是系统仍然能够提供服务,但是这个时候分布式系统在两个地域之间无法通信,那么America的请求无法同步到China的服务节点上,整个系统的一致性显然不能满足。

同理 为了保证一致性,那么可用性也必然不能满足,因为一致性的要求是请求A写入America之后从China中读,一定要能够读到这个请求(强一致性)或者 经过一段时间之后也能够读到(弱一致性)。但是两地域已经出现了网络分区,那么请求会阻塞从而降低可用性。

所以CAP理论一定是无法全部满足三者,只能满足其中的两者。

一致性模型

弱一致性

弱一致性体现的是最终一致性,即如上CAP理论中 ,两个地域的请求分别通过两地的节点写入,可以不用立即进行同步,而是经过一段时间之后两地的用户数据变为一致。这种一致性成为弱一致性,即最终一致性。
也就是用户一地写入之后从另外一个节点读取,无法立即读到刚才写入的数据。

比如DNS域名系统,Cassandra的 Gossip协议等都是最终一致性的体现。

全球目前的域名系统可以看作一个域名树,由一个根域名节点.cn下辖多个.edu,.org,.com等子域名节点,而这一些子域名之下

分布式一致性(共识)算法(Paxos,raft,ZAB)的一些总结相关推荐

  1. 分布式共识算法丨Raft丨Raft-Extended 论文翻译

    Raft-Extended 翻译 原文:https://pdos.csail.mit.edu/6.824/papers/raft-extended.pdf 辨析 consensus vs consis ...

  2. 架构成长之路 | 图解分布式共识算法Paxos议会协议

    作者:码途   阿里云智能-全球技术服务部 在系列的前一篇文章中,阐述了 Paxos 的单法令教会协议,也在文章的总结中提到了教会协议只是作为 Paxos 最核心的共识算法,并不具备实际的单独应用场景 ...

  3. 【人工智能 Open AI】解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明。

    解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明. 文章目录 Raft 简介 Raft Protocol Description Raft 协议讲解 Raft vs. Paxos Raft ...

  4. JUST技术:分布式一致性协议概念及Raft协议简介

    分布式系统通常由异步网络连接的多个节点构成,每个节点的计算和存储相互独立.分布式一致性指多个节点对某一变量的取值达成一致,一旦达成一致,则变量的本次取值被确定.本文将简单介绍一致性的一些基本概念,以及 ...

  5. 分布式一致性hash算法

    写在前面   在学习Redis的集群内容时,看到这么一句话:Redis并没有使用一致性hash算法,而是引入哈希槽的概念.而分布式缓存Memcached则是使用分布式一致性hash算法来实现分布式存储 ...

  6. 分布式环境Raft一致性共识算法解读

    Raft是分布式环境下的一致性算法,它通过少数服从多数的选举来维持集群内数据的一致性.它与RBFT算法名称有点像,然而Raft算法里不能存在拜占庭节点,而RBFT则能容忍BFT节点的存在.Raft非常 ...

  7. 架构成长之路 | 图解分布式共识算法Paxos教会协议

    作者:码途   阿里云智能-全球技术服务部 分布式共识算法是保证分布式一致性的基础,本文主要以简化类比的方式阐述了Paxos算法中的单法令教会会议(The Single-decree SYNOD)的算 ...

  8. 分布式共识算法——Paxos算法(图解)

    文章目录 Paxos Paxos概念 Paxos角色 Paxos算法流程 Paxos算法两个阶段 第一阶段:准备阶段 第二阶段:批准阶段 总结: 图解算法流程 举例说明算法流程 图解说明 一个简单的提 ...

  9. 分布式一致性协议 之 Paxos协议

    1.什么是Paxos Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一. Paxos由 莱斯利· ...

最新文章

  1. 大二暑假周进度报告之四
  2. C#比较数组内元素相等-冒泡
  3. Angular单元测试框架beforeEach和it的执行顺序
  4. oracle的al32utf8,oracle字符集修改(AL32UTF8-UTF8)
  5. 我发誓:下辈子再也不学JavaScript了
  6. java基础语法day03
  7. Java毕设项目电影票网上订票系统计算机(附源码+系统+数据库+LW)
  8. 华表Cell应用 - 在IE中使用华表Cell插件 | #华表Cell #报表
  9. 【20保研】四川大学网络空间安全学院2019年优秀大学生暑期夏令营招生简章
  10. 一文了解间隙配合、过盈配合、过渡配合的特点、区别及适用范围
  11. 洛谷 P3957 跳房子
  12. DirectX是什么
  13. 分享《Essential Linux Device Drivers》中文版高清电子版
  14. 云主机搭建Git服务器
  15. 世纪互联数据中心有限公司
  16. 【HCIA-cloud】【4】服务器虚拟化之存储资源管理:存储资源类型说明、存储配置模式说明【普通、精简、延迟置零】、虚拟机磁盘类型说明、FusionCompute中操作添加存储
  17. 开发者举报:“除了每年收我的钱,苹果似乎什么都不想做”
  18. 并发问题简介以及研究现状
  19. GAMES101-计算机图形学学习笔记-基本线性代数
  20. 游戏设计模式之策略模式(二)

热门文章

  1. 自行车为什么前轮和后轮受到的摩擦力相反呢 自行车前轮后轮转动方向一样 自行车运动原理...
  2. svn官方备份hot-backup.py强烈推荐
  3. SharePoint使用BCS开发你第一个应用程序(三)
  4. C#实现网页截图功能
  5. C#创建Windows服务
  6. 铜陵新松工业机器人项目_投资10亿元,茶山德威工业机器人和精密模具项目动工...
  7. python 深度 视差 计算_开源双目视觉BM算法-Matlab/Python/Javascript
  8. c 找文件服务器文件,Linux C/C++项目:虚拟文件服务器(功能匹配百度网盘)
  9. android 创建资源别名,android – 将具有相同名称的布局资源别名化为不同的屏幕限定符...
  10. python中get和set使用_Python对象属性的set和get方法