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日志并进行多维度分析。
相关文章
|
1月前
|
机器学习/深度学习 边缘计算 人工智能
第二届边缘计算与并行、分布式计算国际学术会议(ECPDC 2025) 2025 2nd international Conference on Edge Computing, Parallel and Distributed Computing
第二届边缘计算与并行、分布式计算国际学术会议(ECPDC 2025) 2025 2nd international Conference on Edge Computing, Parallel and Distributed Computing 机器学习 计算学习理论 数据挖掘 科学计算 计算应用 数字图像处理 人工智能
64 6
|
9天前
|
存储 缓存 负载均衡
一致性哈希:解决分布式难题的神奇密钥
一致哈希是一种特殊的哈希算法,用于分布式系统中实现数据的高效、均衡分布。它通过将节点和数据映射到一个虚拟环上,确保在节点增减时只需重定位少量数据,从而提供良好的负载均衡、高扩展性和容错性。相比传统取模方法,一致性哈希能显著减少数据迁移成本,广泛应用于分布式缓存、存储、数据库及微服务架构中,有效提升系统的稳定性和性能。
50 1
|
2月前
|
JSON 分布式计算 前端开发
前端的全栈之路Meteor篇(七):轻量的NoSql分布式数据协议同步协议DDP深度剖析
本文深入探讨了DDP(Distributed Data Protocol)协议,这是一种在Meteor框架中广泛使用的发布/订阅协议,支持实时数据同步。文章详细介绍了DDP的主要特点、消息类型、协议流程及其在Meteor中的应用,包括实时数据同步、用户界面响应、分布式计算、多客户端协作和离线支持等。通过学习DDP,开发者可以构建响应迅速、适应性强的现代Web应用。
|
2月前
|
架构师 Java 数据中心
二阶段提交:确保分布式系统中数据一致性的关键协议
【10月更文挑战第16天】在分布式系统中,数据一致性的维护是一个至关重要的挑战。为了应对这一挑战,二阶段提交(Two-Phase Commit,简称2PC)协议应运而生。作为一种经典的分布式事务协议,2PC旨在确保在分布式系统中的所有节点在进行事务提交时保持一致性。
45 0
|
3月前
|
监控
分布式-Zookeeper-Zab协议
分布式-Zookeeper-Zab协议
|
3月前
|
网络协议 网络安全 网络架构
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
分布式基础-网络通信协议讲解
|
3月前
|
机器学习/深度学习 自然语言处理 数据可视化
分布式表示(Distributed Representation)
分布式表示(Distributed Representation)
227 15
|
2月前
|
消息中间件 缓存 算法
分布式系列第一弹:分布式一致性!
分布式系列第一弹:分布式一致性!
|
2月前
|
算法 Java 关系型数据库
漫谈分布式数据复制和一致性!
漫谈分布式数据复制和一致性!
|
4月前
|
存储 算法 NoSQL
(七)漫谈分布式之一致性算法下篇:一文从根上儿理解大名鼎鼎的Raft共识算法!
Raft通过一致性检查,能在一定程度上保证集群的一致性,但无法保证所有情况下的一致性,毕竟分布式系统各种故障层出不穷,如何在有可能发生各类故障的分布式系统保证集群一致性,这才是Raft等一致性算法要真正解决的问题。
127 11