版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feilengcui008/article/details/50843779

上一篇文章推导了基本Paxos算法,并引出了在实际使用中其存在的问题,然后说明了leader-based分布式一致算法的优势。这篇文章分析一下选主的本质,选出一个主对整个算法的影响,以及采用选主会存在的问题以及基本Paxos协议是怎么样保证这些问题不会影响一致性的。

1.为什么选主

至于为什么选主?个人认为有如下原因:

  • 避免并发决议导致的livelock和新丢失的问题

  • 可以采用一定方法在选主时(raft),选主中或者选主后保证leader上有最新的达成多数派(达成多数派应该用多数派已经将值写入持久化日志来判定),这样可以优化针对同一个项的读请求,不然每次客户端读请求也需要走一遍基本Paxos

  • 选出leader可以保证在一个leader的统治期间内只有这一个leader可以接收客户端请求,发起决议(至于脑裂的问题,后面会分析),

2.不同的选主算法,其本质是什么?

前面说了在一个leader统治期间内,不可能存在多个leader同时对一个项达成多数派(如果一个leader也没有自然满足,包括脑裂后面会分析到也是满足的),但是对于选主本身来说,实际上其本质上就是一个分布式一致性问题,并且可能有多个proposer并发提出选主决议,所以可以使用基本Paxos来解决,这就回到了基本的Paxos算法了!所以我们需要为每次选主决议编号,比如raft算法的term,这个实际上就对应基本Paxos算法的proposal id。

3.选主后对整个算法造成什么影响?

前面提到了”选出leader可以保证在一个leader的统治期间内只有这一个leader可以接收客户端请求,发起决议”。这样实际上基本Paxos的第一阶段prepare就没有必要了,因为对于下一个项来说,在这个leader统治期内,在达成多数派之前,不可能有其他人提出决议并达成多数派,所以可以直接使用客户端的值进入第二阶段accept。

4.选主可能会导致的问题?

最大的问题应该是脑裂了,也就是说可能存在多个分区多个leader接收客户端响应,但是由于多数派的限制,只能最多有一个分区能达成多数派。我们假设最简单的情况,A/B/C/D/E五台机器,两个分区P1有三台A/B/C和P2有两台D/E,那么可能的情况是:

(1).P1有leader;P2没有leader

(2).P1有leader;P2也有leader

显然由于多数派的限制,只有P1可能达成决议

5.新的leader选出来后的操作

一般来说,新的leader选出来后,我们需要对leader进行日志恢复,以便leader决定下一次客户端请求的时候该用哪个日志槽位或者说哪个项吧,这里也是不同的算法差异较大的地方,比如raft,viewstamped replication,zab以及lamport 《Paxos Made Simple》里面第三节描述的方法。在lamport论文的描述中,还是采用基本的Paxos,对未明确知道达成多数派的项重新走一遍基本Paxos算法,具体可以参照原论文,细节还是挺多。对于raft来说,由于其保证日志是连续的,且保证在选主的时候只选择具有最新的日志的机器,所以选主之后,新的leader上的日志本身就是最新的。

下一篇会着重分析在新的leader选举后,新leader怎么恢复日志记录以及怎么确定已提交的日志,这一点还是通过对比lamport在《Paxos Made Simple》第三节提到的方法以及raft中的实现来说明。

Distributed Systems-leader based分布式一致性协议相关推荐

  1. 简述分布式一致性协议(2pc、3pc、paxos、zab)

    分布式一致性协议 二阶段提交协议(2pc) 三阶段提交协议(3pc) paxos zab 在分布式系统中,每个机器都可以确定自己进行的事务操作是否成功,但是无法直接了解其他机器的操作结果.因此,当一个 ...

  2. [分布式一致性协议] ------ raft协议的解释与理解

    前言 在分布式系统中,为了保证容错性,一般会维护多个副本集群,提高系统的高可用,但与之带来的问题就是多个副本的一致性(consensus)问题. 我们认为,对于一个具有一致性的的集群中,同一时刻所有节 ...

  3. 分布式一致性协议:Raft协议

    文章目录 1. Raft协议 ①:Leader选举 ②:集群节点数据同步 ③:发生网络分区,出现脑裂如何处理? 1. Raft协议 Raft协议动态演示图 nacos的CP架构是通过Raft协议来实现 ...

  4. 一文说清各种分布式一致性协议

    本文来说下各种常见的分布式协议 文章目录 概述 CAP定理 Base理论 2PC 2PC 阶段一 2PC阶段二 举个例子 3PC CanCommit阶段 PreCommit阶段 doCommit阶段 ...

  5. 浅谈分布式一致性协议之2PC

    由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议.其中比较著名的有二阶提交协议(2 Phase Commitment Protocol),三阶提交协议(3 Pha ...

  6. raft算法_学习分布式一致性协议:自己实现一个Raft算法

    前言 MIT6.824是麻省理工学院开设的一个很棒的分布式系统公开课程,课程的Schedule在这里 ,这门课程的学习方式主要是通过教授的 lecture 讲解.Paper阅读.FAQ答疑,以及实践l ...

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

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

  8. 分布式一致性协议Raft,以及难搞的Paxos

    Raft这玩意,网上已经有好多解读文章了,大概比Paxos还要多一些,所以,这篇,不求细节,但求核心思想方面,追一下本源,然后,给自己做个笔记. Raft是什么,它想解决什么问题? 所以Raft是什么 ...

  9. 分布式一致性协议三部曲-深入理解一致性协议Paxos

    在理解分析分布式一致性协议前,我们必须先看下CAP理论 CAP CAP是指在一个分布式系统中,一致性(Consistency).可用性(Availability).分区容错性(Partition to ...

最新文章

  1. 关于python导入模块和package的一些深度思考
  2. canvas剪辑区域
  3. 北斗导航 | 大规模点云地图的自动化构建(高翔:SLAM十四讲)
  4. getResource(String name)用法及源码分析
  5. hiveserver或者hive启动出现Expected authority at index 7问题解决
  6. 底层软件工程师的一次冒险经历
  7. Java 算法 解二元一次方程
  8. 【转】Jenkins+Ant+Jmeter接口自动化集成测试实例
  9. 找出随Windows自启动程序的『十大藏身之处』
  10. 我的实用设计模式之关于Policy-based design
  11. js字符串去空格回车换行
  12. Word 重复引用同一个脚注
  13. 欧姆龙服务器数码管不显示问题,数显仪表常见故障的原理分析以及解决方案
  14. mac下统计代码行数方法
  15. k8s - service
  16. 初学者学习 - Unity中的热更新 - Lua和C#通信
  17. 如何分发大文件、大文件传输解决方案
  18. xshell 免费版本下载
  19. iPhone 中常用、好用的提醒类软件(闹钟、提醒事项、日历、滴答清单)
  20. Linux系统rootfs切换到真正的根文件系统详细源码解析(附工作项目手动制作根文件实例)

热门文章

  1. 五个计算机软件,近五个交易日计算机软件概念股市复盘(4月19日)
  2. tms570 can 接收大量数据_CAN通讯系列--CAN总线基础3
  3. LA3644简单并查集判环
  4. hdu4845 状态压缩BFS
  5. hdu3986 spfa + 枚举最短路上的边
  6. 【Git】Git 基础命令 ( 添加暂存文件 git add | 提交文件至版本库 git commit | 查看版本库状态 git status | 查询文件修改 git diff )
  7. 【C 语言】字符串模型 ( 两头堵模型 | 将 两头堵模型 抽象成业务模块函数 | 形参返回值 | 函数返回值 | 形参指针判空 | 形参返回值操作 )
  8. 【错误记录】Visual Studio 中编译 NDK 报错 ( error : cannot use ‘throw‘ with exceptions disabled )
  9. 【Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )
  10. R语言与概率统计(六) 主成分分析 因子分析