课前必读
分布式系统指标
分布式的目的是用更多的机器,处理更多的数据和更复杂的任务
- 性能
- 资源占用
- 可用性
- 可扩展性
分布式系统通过扩展集群机器规模提高系统性能 (吞吐、响应时间、 完成时间)、存储容量、计算能力的特性
第一站 分布式协调与同步
03 分布式互斥
分布式系统里排他性的资源访问方式 临界资源: 被互斥访问的共享资源
04 分布式选举
为什么要有分布式选举
选举的作用就是选出一个主节点,由它来协调和管理其他节点,以保证集群有序运行和节点间数据的一致性
分布式选举的算法
1. Bully 算法(长者为大)
在所有活着的节点中,选取 ID 最大的节点作为主节点;
-
节点的角色 :普通节点 主节点 -
选举中消息类型 :
- Election 消息,用于发起选举;
- Alive 消息,对 Election 消息的应答;
- Victory 消息,竞选成功的主节点向其他节点发送的宣誓主权的消息。
-
假设条件
集群中每个节点均知道其他节点的 ID
-
选举过程
- 集群中每个节点判断自己的 ID 是否为当前活着的节点中 ID 最大的,如果是,则直接向 其他节点发送 Victory 消息,宣誓自己的主权;
- 如果自己不是当前活着的节点中 ID 最大的,则向比自己 ID 大的所有节点发送 Election 消息,并等待其他节点的回复;
- 若在给定的时间范围内,本节点没有收到其他节点回复的 Alive 消息,则认为自己成为主节点,并向其他节点发送 Victory 消息,宣誓自己成为主节点;若接收到来自比自己 ID 大的节点的 Alive 消息,则等待其他节点发送 Victory 消息;
- 若本节点收到比自己 ID 小的节点发送的 Election 消息,则回复一个 Alive 消息,告知其他节点,我比你大,重新选举。
算法优缺点
- 选举速度快、算法复杂度低、简单易实现
- 每个节点有全局的节点信息,因此额外信息存储较多;主节点,如果频繁退出、加入集群,就会导致频繁切主
- 应用:MongoDB 的副本集故障转移功能
2. Raft 算法(民主算法)
算法总结 核心思想是 “少数服从多数”。Raft 算法中,获得投票最多的节点成为主
- 节点角色
- Leader,即主节点,同一时刻只有一个 Leader,负责协调和管理其他节点;
- Candidate,即候选者,每一个节点都可以成为 Candidate,节点在该角色下才可以被选为新的 Leader;
- Follower,Leader 的跟随者,不可以发起选举。
选举流程
- 初始化时,所有节点均为 Follower 状态。
- 开始选主时,所有节点的状态由 Follower 转化为 Candidate,并向其他节点发送选举请求。
- 其他节点根据接收到的选举请求的先后顺序,回复是否同意成为主。这里需要注意的是,在每一轮选举中,一个节点只能投出一张票。
- 若发起选举请求的节点获得超过一半的投票,则成为主节点,其状态转化为 Leader,其他节点的状态则由 Candidate 降为 Follower。Leader 节点与 Follower 节点之间会定期发送心跳包,以检测主节点是否活着。
- 当 Leader 节点的任期到了,即发现其他服务器开始下一轮选主周期时,Leader 节点的状态由 Leader 降级为 Follower,进入新一轮选主。
优缺点
- 选举速度快、算法复杂度低、易于实现
- 每个节点都可以相互通信,通信量大
- 对比Bully 较稳定,当新节点加入或者节点回复故障,不一定真正切主
- 应用 :etcd 的集群管理器 etcds
3. ZAB算法(优先级的民主投票)
较于 Raft 算法的投票机制,ZAB 算法增加了通过节点 ID 和数据 ID 作为参考进行选主,节点 ID 和数据 ID 越大,表示数据越新,优先成为主;
ZAB 算法尽可能保证数据的最新性,ZAB 算法可以说是对 Raft 算法的改进
- 节点角色
- Leader,主节点;
- Follower,跟随者节点;
- Observer,观察者,无投票权。
- 问题:ZAB性能为什么比Raft 算法性能高, 参考
- Raft系统中的事务消息是通过双向的RPC来完成的,而Zab中,则是单向的,一来一回两个消息来完成的。明显Zab的性能更加,不需要浪费leader一个线程去等待follower完成业务操作。
- 角色Zk引入了 Observer的角色来提升性能,既可以大幅提升读取的性能
- 算法比较
05分布式共识
PoW 算法
以每个节点或服务器的计算能力,即“算力”,来竞争记账权的机制。类似于按劳分配,谁工作量大,谁拿的多。其实竞争的就是挖矿设备,看谁的挖矿设备的 CPU、GPU 等更厉害,缺点就是费电、污染环境。
PoS 算法
由系统权益代替算力来决定区块记账权,拥有的权益越大,获得记账权的概率就越大。这种方法的优点是节能,不需要挖矿了,但缺点是容易形成垄断
DPoS 算法
是一种委托权益证明算法。持有币的人可以通过投票选举出一些节点,来作为代表去记账,类似于全国人民代表大会制度,基于Pow 和Pos 算法
| PoW | PoS | DPoS |
---|
计算消耗 | 高 | 中 | 低 | 结构类型 | 去中心化 | 去中心化 | 去中心化(多中心) | 交易量/秒 | | PoW<PoS <DPoS | | 交易服务费 | 高 | 低 | 低 | 应用区块链平台 | 比特币 | 以太坊 | 比特股 |
06 分布式事务
分布式事务
分布式事务,就是在分布式系统中运行的事务,由多个本地事务组合而成
ACID
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
1. 基于 XA 协议的二阶段提交方法
第一阶段:投票
协调者 ----------CanCommit---------->参与者(执行操作,记录日志,但不提交)
成功:协调者 <----------YES----------参与者
失败:协调者 <----------NO---------- 参与者
第二阶段:提交
全部成功:协调者----------DoCommit---------->参与者
存在失败:协调者 ----------DoAbort-----------> 参与者
最后返回:协调者 <----------HaveCommitted----------- 参与者
不足
- 同步阻塞问题:本地资源管理器占有临界资源时,他资源管理器如果要访问同一临界资源,会处于阻塞状态
- 单点故障问题:事务管理器发生故障,整个系统都处于停滞状态
- 数据不一致问题:DoCommit 请求之后,如果发生了局部网络异常,部分提交,部分没有提交
2. 三阶段提交方法
三阶段提交引入了 超时机制 和 准备阶段
- 如果协调者或参与者在规定的时间内没有接收到来自其他节点的响应,就会根据当前的状态选择提交或者终止整个事务
- 在预提交阶段排除一些不一致的情况,保证在最后提交之前各参与节点的状态是一致的。
完整流程:
第一,CanCommit 阶段
第二,PreCommit 阶段
第三,DoCommit 阶段
07 分布式锁
基于数据库实现分布式锁
redis分布式锁
ZooKeeper 分布式锁
小结:
08 分布式技术如何引爆人工智能
|