Distributed Systems-leader based分布式一致性协议

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feilengcui008/article/details/50843779 上一篇文章推导了基本Paxos算法,并引出了在实际使用中其存在的问题,然后说明了leader-based分布式一致算法的优势。
版权声明:本文为博主原创文章,未经博主允许不得转载。 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中的实现来说明。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
4天前
|
架构师 Java 数据中心
二阶段提交:确保分布式系统中数据一致性的关键协议
【10月更文挑战第16天】在分布式系统中,数据一致性的维护是一个至关重要的挑战。为了应对这一挑战,二阶段提交(Two-Phase Commit,简称2PC)协议应运而生。作为一种经典的分布式事务协议,2PC旨在确保在分布式系统中的所有节点在进行事务提交时保持一致性。
15 0
|
1月前
|
监控
分布式-Zookeeper-Zab协议
分布式-Zookeeper-Zab协议
|
12天前
|
消息中间件 缓存 算法
分布式系列第一弹:分布式一致性!
分布式系列第一弹:分布式一致性!
|
1月前
|
网络协议 网络安全 网络架构
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
|
13天前
|
算法 Java 关系型数据库
漫谈分布式数据复制和一致性!
漫谈分布式数据复制和一致性!
|
1月前
|
机器学习/深度学习 自然语言处理 数据可视化
分布式表示(Distributed Representation)
分布式表示(Distributed Representation)
98 15
|
2月前
|
存储 算法 NoSQL
(七)漫谈分布式之一致性算法下篇:一文从根上儿理解大名鼎鼎的Raft共识算法!
Raft通过一致性检查,能在一定程度上保证集群的一致性,但无法保证所有情况下的一致性,毕竟分布式系统各种故障层出不穷,如何在有可能发生各类故障的分布式系统保证集群一致性,这才是Raft等一致性算法要真正解决的问题。
99 11
|
2月前
|
机器学习/深度学习 自然语言处理 数据可视化
分布式表示(Distributed Representation)
分布式表示(Distributed Representation)
|
2月前
|
存储 算法 索引
(六)漫谈分布式之一致性算法上篇:用二十六张图一探Raft共识算法奥妙之处!
现如今,大多数分布式存储系统都投向了Raft算法的怀抱,而本文就来聊聊大名鼎鼎的Raft算法/协议!
104 8

热门文章

最新文章