网站首页 > 文章精选 正文
分布式算法对于保证分布式一致性非常的重要,也是构建分布式的基石,下面我就重点详解4大主流分布式算法@mikechen
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
Paxos算法
Paxos算法是一种用于分布式一致性的协议,主要解决:分布式系统中的一致性问题,确保多个节点对共享状态达成一致。
在Paxos算法中,有三种角色,分别是:提议者(proposer)、接收者(acceptor)和学习者(learner)。
如下图所示:
Paxos算法:是基于议员们如何就提案达成一致的一个隐喻而命名,提议者负责提出提案,接收者负责接受、或拒绝提案。
Paxos算法主要分为三个阶段:
- 准备阶段(Prepare Phase):提议者向大多数接收者发送一个编号为n的准备请求,要求接收者回复已经接受过的最大编号的提案;
- 提案阶段(Proposal Phase):如果提议者收到了大多数接收者的回复,表示接收者已经接受了编号小于n的提案,那么提议者就可以向接收者发送一个编号为n的提案;
- 学习阶段(Learn Phase):如果一个提案被大多数接收者接受,那么学习者就可以学习到这个提案。
应用场景:
Paxos算法通常用于:实现分布式数据库、分布式锁、一致性哈希等需要强一致性的分布式系统中。
Raft算法
Raft算法是一种用于分布式一致性的算法,Raft算法可以简要理解为Paxos算法的精简版。
因为Paxos算法过去难以理解,而Raft算法做了精简,主要涉及到3大角色:
分别是:领导者(Leader)、跟随者(Follower)、和候选人(Candidate)。
1、领导者(Leader)
领导者是Raft算法中的核心角色,负责:处理客户端的请求,并通过日志复制机制,确保所有的跟随者都复制了领导者的日志条目。
领导者定期发送心跳消息给其他节点,以保持自己的领导地位。
2、跟随者(Follower)
跟随者是Raft算法中的普通节点,它们接受:来自领导者的指令,并复制领导者的日志。
在正常情况下,大多数节点都是跟随者,它们不处理客户端请求,只负责接收、和复制领导者的日志。
3、候选人(Candidate)
候选人是在选举过程中的节点状态,当一个节点处于候选人状态时,它向其他节点发送选举请求,试图成为新的领导者。
在Raft算法中,选举过程是通过投票机制实现的,候选人需要获得大多数节点的支持才能成为新的领导者。
如果候选人在一定时间内没有获得足够的选票,那么它将重新进入跟随者状态。
Raft算法的基本思想是:
通过定期的选举过程来选出一个领导者,领导者负责处理客户端请求,并确保日志的一致性;
在领导者的领导下,所有的跟随者,都复制领导者的日志,并且只有领导者有权向日志中添加新的条目。
应用场景
Raft算法,适用于各种需要一致性复制的分布式系统,包括:分布式数据库、分布式文件系统......等。
ZAB算法
ZAB算法,全程是ZooKeeper Atomic Broadcast,该算法是Apache ZooKeeper用于实现一致性的协议。
ZAB算法:是一种基于原子广播的算法,用于确保分布式系统中的多个节点之间的一致性。
大致流程如下:
- ZAB算法将整个一致性过程分为两个阶段:领导者选举阶段和广播阶段;
- 在领导者选举阶段,节点通过投票选举出一个领导者,领导者负责处理客户端请求,并将请求广播给其他节点。;
- 在广播阶段,领导者将客户端请求广播给所有节点,并等待大多数节点的确认。
应用场景
ZAB算法通常用于构建分布式协调服务,例如:Apache ZooKeeper。
Gossip算法
Gossip算法是一种分布式通信算法,用于实现分布式系统中的信息传播、和状态同步。
原理:
Gossip算法的核心是:随机通信、和信息传递,每个节点都定期与其他节点进行通信,并将自己的信息传播给其他节点。
当一个节点收到其他节点的信息时,它会更新自己的状态并将信息,传播给其他节点,从而实现状态的同步和信息的传播。
这就类似在病毒传播中,病毒通过感染一个人然后传播给另一个人,逐步扩散。
类似地,Gossip算法中的节点通过、与邻居节点进行通信,将自己的信息传播给其他节点,逐步扩散。
应用场景:
Gossip算法适用于构建分布式存储系统、分布式计算系统.....等,需要信息传播和状态同步的场景。
这些算法在分布式系统中都发挥着重要作用,可以根据具体的需求、和场景选择合适的算法,来实现分布式一致性。
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
猜你喜欢
- 2025-08-02 分布式事务:SpringCloud 项目中的一致性密码解锁
- 2025-08-02 raft 协议简介
- 2025-08-02 超融合介绍-SmartX
- 2025-08-02 分布式事务:如何保证多个系统间的数据一致性
- 2025-08-02 分布式事务详解、理论分析、及强一致性(2PC、3PC)剖析
- 2025-08-02 分布式事务
- 2025-08-02 什么是分布式文件存储系统 ?
- 2025-08-02 Paxos 协议
- 2025-08-02 elasticsearch--分布式原理
- 2025-08-02 分布式事务之三阶段提交,你了解多少?
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)