Distributed Systems-leader based分布式一致性协议
上一篇文章推导了基本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分布式一致性协议相关推荐
- 简述分布式一致性协议(2pc、3pc、paxos、zab)
分布式一致性协议 二阶段提交协议(2pc) 三阶段提交协议(3pc) paxos zab 在分布式系统中,每个机器都可以确定自己进行的事务操作是否成功,但是无法直接了解其他机器的操作结果.因此,当一个 ...
- [分布式一致性协议] ------ raft协议的解释与理解
前言 在分布式系统中,为了保证容错性,一般会维护多个副本集群,提高系统的高可用,但与之带来的问题就是多个副本的一致性(consensus)问题. 我们认为,对于一个具有一致性的的集群中,同一时刻所有节 ...
- 分布式一致性协议:Raft协议
文章目录 1. Raft协议 ①:Leader选举 ②:集群节点数据同步 ③:发生网络分区,出现脑裂如何处理? 1. Raft协议 Raft协议动态演示图 nacos的CP架构是通过Raft协议来实现 ...
- 一文说清各种分布式一致性协议
本文来说下各种常见的分布式协议 文章目录 概述 CAP定理 Base理论 2PC 2PC 阶段一 2PC阶段二 举个例子 3PC CanCommit阶段 PreCommit阶段 doCommit阶段 ...
- 浅谈分布式一致性协议之2PC
由于BASE理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议.其中比较著名的有二阶提交协议(2 Phase Commitment Protocol),三阶提交协议(3 Pha ...
- raft算法_学习分布式一致性协议:自己实现一个Raft算法
前言 MIT6.824是麻省理工学院开设的一个很棒的分布式系统公开课程,课程的Schedule在这里 ,这门课程的学习方式主要是通过教授的 lecture 讲解.Paper阅读.FAQ答疑,以及实践l ...
- 【人工智能 Open AI】解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明。
解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明. 文章目录 Raft 简介 Raft Protocol Description Raft 协议讲解 Raft vs. Paxos Raft ...
- 分布式一致性协议Raft,以及难搞的Paxos
Raft这玩意,网上已经有好多解读文章了,大概比Paxos还要多一些,所以,这篇,不求细节,但求核心思想方面,追一下本源,然后,给自己做个笔记. Raft是什么,它想解决什么问题? 所以Raft是什么 ...
- 分布式一致性协议三部曲-深入理解一致性协议Paxos
在理解分析分布式一致性协议前,我们必须先看下CAP理论 CAP CAP是指在一个分布式系统中,一致性(Consistency).可用性(Availability).分区容错性(Partition to ...
最新文章
- 关于python导入模块和package的一些深度思考
- canvas剪辑区域
- 北斗导航 | 大规模点云地图的自动化构建(高翔:SLAM十四讲)
- getResource(String name)用法及源码分析
- hiveserver或者hive启动出现Expected authority at index 7问题解决
- 底层软件工程师的一次冒险经历
- Java 算法 解二元一次方程
- 【转】Jenkins+Ant+Jmeter接口自动化集成测试实例
- 找出随Windows自启动程序的『十大藏身之处』
- 我的实用设计模式之关于Policy-based design
- js字符串去空格回车换行
- Word 重复引用同一个脚注
- 欧姆龙服务器数码管不显示问题,数显仪表常见故障的原理分析以及解决方案
- mac下统计代码行数方法
- k8s - service
- 初学者学习 - Unity中的热更新 - Lua和C#通信
- 如何分发大文件、大文件传输解决方案
- xshell 免费版本下载
- iPhone 中常用、好用的提醒类软件(闹钟、提醒事项、日历、滴答清单)
- Linux系统rootfs切换到真正的根文件系统详细源码解析(附工作项目手动制作根文件实例)
热门文章
- 五个计算机软件,近五个交易日计算机软件概念股市复盘(4月19日)
- tms570 can 接收大量数据_CAN通讯系列--CAN总线基础3
- LA3644简单并查集判环
- hdu4845 状态压缩BFS
- hdu3986 spfa + 枚举最短路上的边
- 【Git】Git 基础命令 ( 添加暂存文件 git add | 提交文件至版本库 git commit | 查看版本库状态 git status | 查询文件修改 git diff )
- 【C 语言】字符串模型 ( 两头堵模型 | 将 两头堵模型 抽象成业务模块函数 | 形参返回值 | 函数返回值 | 形参指针判空 | 形参返回值操作 )
- 【错误记录】Visual Studio 中编译 NDK 报错 ( error : cannot use ‘throw‘ with exceptions disabled )
- 【Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )
- R语言与概率统计(六) 主成分分析 因子分析