auto commit
This commit is contained in:
parent
4a5384dc4b
commit
594031cca8
|
@ -1,13 +1,13 @@
|
|||
<!-- GFM-TOC -->
|
||||
* [两阶段提交协议](#两阶段提交协议)
|
||||
* [Paxos 协议](#paxos-协议)
|
||||
* [Raft 协议](#raft-协议)
|
||||
* [拜占庭将军问题](#拜占庭将军问题)
|
||||
* [参考资料](#参考资料)
|
||||
* [一、两阶段提交协议](#一两阶段提交协议)
|
||||
* [二、Paxos 协议](#二paxos-协议)
|
||||
* [三、Raft 协议](#三raft-协议)
|
||||
* [四、拜占庭将军问题](#四拜占庭将军问题)
|
||||
* [五、参考资料](#五参考资料)
|
||||
<!-- GFM-TOC -->
|
||||
|
||||
|
||||
# 两阶段提交协议
|
||||
# 一、两阶段提交协议
|
||||
|
||||
Two-phase Commit(2PC)。
|
||||
|
||||
|
@ -15,7 +15,7 @@ Two-phase Commit(2PC)。
|
|||
|
||||
两类节点:协调者(Coordinator)和参与者(Participants),协调者只有一个,参与者可以有多个。
|
||||
|
||||
## 1. 运行过程
|
||||
## 运行过程
|
||||
|
||||
1. 准备阶段:协调者询问参与者事务是否执行成功;
|
||||
|
||||
|
@ -26,13 +26,13 @@ Two-phase Commit(2PC)。
|
|||
|
||||
需要注意的是,在准备阶段,参与者执行了事务,但是还未提交。只有在提交阶段协接收到协调者发来的通知后,才进行提交或者回滚。
|
||||
|
||||
## 2. 存在的问题
|
||||
## 存在的问题
|
||||
|
||||
- 参与者发生故障。解决方案:可以给事务设置一个超时时间,如果某个参与者一直不响应,那么认为事务执行失败。
|
||||
|
||||
- 协调者发生故障。解决方案:将操作日志同步到备用协调者,让备用协调者接替后续工作。
|
||||
|
||||
# Paxos 协议
|
||||
# 二、Paxos 协议
|
||||
|
||||
用于达成共识性问题,即对多个节点产生的值,该算法能保证只选出唯一一个值。
|
||||
|
||||
|
@ -44,7 +44,7 @@ Two-phase Commit(2PC)。
|
|||
|
||||
<div align="center"> <img src="../pics//0aaf4630-d2a2-4783-b3f7-a2b6a7dfc01b.jpg"/> </div><br>
|
||||
|
||||
## 1. 执行过程
|
||||
## 执行过程
|
||||
|
||||
规定一个提议包含两个字段:[n, v],其中 n 为序号(具有唯一性),v 为提议值。
|
||||
|
||||
|
@ -74,27 +74,27 @@ Acceptor 接收到接受请求时,如果提议号大于等于该 Acceptor 承
|
|||
|
||||
<div align="center"> <img src="../pics//8adb2591-d3f1-4632-84cb-823fb9c5eb09.jpg" width="500"/> </div><br>
|
||||
|
||||
## 2. 约束条件
|
||||
## 约束条件
|
||||
|
||||
**2.1 正确性**
|
||||
### 1. 正确性
|
||||
|
||||
只有一个提议值会生效。
|
||||
|
||||
因为 Paxos 协议要求每个生效的提议被多数 Acceptor 接收,并且 Acceptor 不会接受两个不同的提议,因此可以保证正确性。
|
||||
|
||||
**2.2 可终止性**
|
||||
### 2. 可终止性
|
||||
|
||||
最后总会有一个提议生效。
|
||||
|
||||
Paxos 协议能够让 Proposer 发送的提议朝着能被大多数 Acceptor 接受的那个提议靠拢,因此能够保证可终止性。
|
||||
|
||||
# Raft 协议
|
||||
# 三、Raft 协议
|
||||
|
||||
Raft 和 Poxas 类似,但是更容易理解,也更容易实现。
|
||||
|
||||
Raft 主要是用来竞选主节点。
|
||||
|
||||
## 1. 单个 Candidate 的竞选
|
||||
## 单个 Candidate 的竞选
|
||||
|
||||
有三种节点:Follower、Candidate 和 Leader。Leader 会周期性的发送心跳包给 Follower。每个 Follower 都设置了一个随机的竞选超时时间,一般为 150ms\~300ms,如果在这个时间内没有收到 Leader 的心跳包,就会变成 Candidate,进入竞选阶段。
|
||||
|
||||
|
@ -114,7 +114,7 @@ Raft 主要是用来竞选主节点。
|
|||
|
||||
<div align="center"> <img src="../pics//111521118640738.gif"/> </div><br>
|
||||
|
||||
## 2. 多个 Candidate 竞选
|
||||
## 多个 Candidate 竞选
|
||||
|
||||
① 如果有多个 Follower 成为 Candidate,并且所获得票数相同,那么就需要重新开始投票,例如下图中 Candidate B 和 Candidate D 都获得两票,因此需要重新开始投票。
|
||||
|
||||
|
@ -124,7 +124,7 @@ Raft 主要是用来竞选主节点。
|
|||
|
||||
<div align="center"> <img src="../pics//111521119368714.gif"/> </div><br>
|
||||
|
||||
## 3. 日志复制
|
||||
## 日志复制
|
||||
|
||||
① 来自客户端的修改都会被传入 Leader。注意该修改还未被提交,只是写入日志中。
|
||||
|
||||
|
@ -142,11 +142,11 @@ Raft 主要是用来竞选主节点。
|
|||
|
||||
<div align="center"> <img src="../pics//11.gif"/> </div><br>
|
||||
|
||||
# 拜占庭将军问题
|
||||
# 四、拜占庭将军问题
|
||||
|
||||
> [拜占庭将军问题深入探讨](http://www.8btc.com/baizhantingjiangjun)
|
||||
|
||||
# 参考资料
|
||||
# 五、参考资料
|
||||
|
||||
- 杨传辉. 大规模分布式存储系统: 原理解析与架构实战[M]. 机械工业出版社, 2013.
|
||||
- [区块链技术指南](https://www.gitbook.com/book/yeasy/blockchain_guide/details)
|
||||
|
|
Loading…
Reference in New Issue
Block a user