赞
踩
国科大学习生活(期末复习资料、课程大作业解析、学习文档等): 文章专栏(点击跳转)
大数据开发学习文档(分布式文件系统的实现,大数据生态圈学习文档等): 文章专栏(点击跳转)
分布式一致性算法是用于在分布式系统中确保数据一致性的一类算法。在分布式计算环境中,数据通常会分布在多个节点或副本中,并且这些节点可能由于网络延迟、故障或其他原因而导致数据的不一致。因此,分布式一致性算法的目标是确保分布式系统中的所有节点最终都能达到一致的状态。
分布式一致性算法可以分为两种主要类型:强一致性和弱一致性。
分布式一致性算法的选择取决于系统的需求和特定的应用场景。强一致性算法提供了严格的一致性保证,但可能会对性能产生较大的影响
。而弱一致性算法可以在某些场景下提供更高的性能,但对数据的一致性要求较低
。
因此,在设计分布式系统时,需要根据实际需求综合考虑一致性和性能之间的权衡。
Paxos是一种分布式系统中的一致性算法,用于解决分布式系统中节点之间的数据一致性问题。它是由Leslie Lamport于1990年提出的。在 Paxos 算法中,把数据修改
用提案标识:Proposal:提案
,即分布式系统的修改请求,可以表示为[提案编号N,提案内容value]
在 Paxos 算法中有三种角色:Proposer,Acceptor,Learners(注意,每个节点都可以身兼数职)
Paxos算法的核心思想是通过多个轮次的消息传递和投票来达成共识。算法的主要流程可以概括如下:
通过多个轮次的消息传递,Paxos算法最终可以使得所有节点达成一致,并选择一个确定的提案作为共识结果。
Paxos示例1:
Paxos示例2:
Paxos算法是一种高度复杂的算法,尤其是在实现细节和各种优化策略方面。它是分布式系统中的重要工具,用于确保数据的一致性和可靠性。
在网络复杂的情况下,一个应用Paxos算法的分布式系统,可能很久无法收敛,甚至陷入活锁的情况:
为解决这种问题的出现,下面我们来介绍另一种一致性算法:Raft。
Raft 是一种分布式一致性算法,用于在分布式系统中实现数据的一致性和高可用性。它由 Diego Ongaro 和 John Ousterhout 在 2013 年提出,并于 2014 年发表的论文中详细描述了算法的设计原则和机制。
根据Paxos的改进:整个系统只有一个Proposer,称之为Leader。
若集群中没有Leader,则在集群中选出一个节点并声明它为第M任Leader。集群的Acceptor只表决最新的Leader发出的最新的提案,其他步骤和Paxos相同。Raft 和 Paxos 一样只要保证 n/2+1 节点正常就能够提供服务;Raft 把算法流程分为三个子问题:
Raft 算法的领导者选举机制具有以下过程:
通过这样的领导者选举机制,Raft 算法保证了集群中只存在一个 Leader,使得整个系统能够稳定运行。而选举过程中使用的随机化和选举超时机制,确保了快速选出新的 Leader,从而减少系统的不可用时间。
相对于其他一致性算法,如 Paxos,Raft 更加易于理解和实现。它的设计模块化,便于扩展和维护。它的目标是提供一个可靠的分布式一致性算法,以简化构建分布式系统的难度。
Raft动态图片演示链接
一定要看!
一定要看!
一定要看!重要的事情说三遍,演示超级详细!!!
Zookeeper是一个用于构建分布式应用的开源协调服务。它提供高度可靠的分布式协调功能,使得分布式应用可以在大规模集群中进行协作和同步。
Zookeeper可以被广泛应用于分布式系统中的各种场景,如分布式锁、领导选举、配置管理、命名服务等。它被许多分布式系统和框架使用,比如Hadoop、Kafka等。Zookeeper的简单和可靠性使得它成为构建可扩展和弹性的分布式系统的重要工具之一。
ZAB(ZooKeeper Atomic Broadcast)是 Apache ZooKeeper 分布式协调服务中使用的一种原子广播协议。它旨在实现分布式系统中的一致性和可靠性。
ZAB 协议将 ZooKeeper 服务集群中的节点分为两个角色:Leader 和 Follower。Leader 负责接收并处理客户端请求,然后将请求广播给集群中的所有节点(包括自己)。Follower 则对 Leader 发送的消息进行复制和追随,以保持整个集群的数据一致性。
选举参数
在介绍选举流程之前,需要介绍几个参数,
另外在选举的过程中,每个节点的当前状态会在以下几种状态之中进行转变。
LOOKING: 竞选状态。
FOLLOWING: 随从状态,同步Leader 状态,参与Leader选举的投票过程。
OBSERVING: 观察状态,同步Leader 状态,不参与Leader选举的投票过程。
LEADING: 领导者状态。
ZAB 协议的核心机制包括两个阶段:崩溃恢复阶段(Leader 选举)和消息广播阶段。
崩溃恢复阶段(Leader 选举):
选举算法:在初始启动或 Leader 崩溃的情况下,ZAB 协议会启动选举算法来选举新的 Leader。节点将发送选举请求(包含自己的 ID 和选举轮次)给所有节点,并等待其他节点的投票。某个节点收到投票请求后,会比较选举轮次和节点 ID 来决定是否投票。最终,根据投票数量和选举规则,选举出新的 Leader 节点。
同步数据:新选出的 Leader 需要将自己的数据状态同步给其他节点,以确保整个集群达到一致性。Leader 会将自己的数据变更记录(事务日志)发送给所有的 Follower 节点,然后等待大多数节点确认接收。
消息广播阶段:
Zookeeper选举机制示例:
注:示例中的服务器ID即为上文中的myid、事务ID即为上文zxid中的count、逻辑时钟即为上文中的epoch
强烈建议观看,毕竟纯文字的形式对于知识的理解不如演示动画的形式来的快
ZAB 协议通过 Leader 选举和日志复制的方式实现了数据的一致性和可靠性。它确保了在集群中只有一个 Leader,避免了数据冲突。同时,ZAB 协议提供了恢复机制,以应对 Leader 崩溃或网络分区等异常情况。这使得 ZooKeeper 可以作为高性能、高可用性的分布式协调服务在实际应用中被广泛使用。
参考文献:
文章名:一文彻底搞懂ZAB算法,看这篇就够了!!!
文章名:Zookeeper核心知识及分布式一致性算法
21点19分 2023年12月15日
近期课程压力变小,于是重新开始学习大数据开发框架知识
书写学习文档一方面是为了督促自己更好的学习,另一方面也是给自己的学习之路留下个痕迹。
身为初学者,难免有表述不准确的地方,欢迎大家积极讨论交流。
不积跬步 无以至千里!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。