auto commit

This commit is contained in:
CyC2018
2019-11-02 17:33:10 +08:00
parent 906d2ff2f9
commit 23d7c89fbe
319 changed files with 803 additions and 803 deletions

View File

@ -70,7 +70,7 @@ EXPIRE 指令可以为一个键值对设置一个过期时间,从而避免了
Zookeeper 提供了一种树形结构的命名空间/app1/p_1 节点的父节点为 /app1
<div align="center"> <img src="pics/aefa8042-15fa-4e8b-9f50-20b282a2c624.png" width="320px"> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/aefa8042-15fa-4e8b-9f50-20b282a2c624.png" width="320px"> </div><br>
### 2. 节点类型
@ -113,7 +113,7 @@ Zookeeper 提供了一种树形结构的命名空间,/app1/p_1 节点的父节
协调者询问参与者事务是否执行成功参与者发回事务执行结果
<div align="center"> <img src="pics/44d33643-1004-43a3-b99a-4d688a08d0a1.png" width="550px"> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/44d33643-1004-43a3-b99a-4d688a08d0a1.png" width="550px"> </div><br>
#### 1.2 提交阶段
@ -121,7 +121,7 @@ Zookeeper 提供了一种树形结构的命名空间,/app1/p_1 节点的父节
需要注意的是在准备阶段参与者执行了事务但是还未提交只有在提交阶段接收到协调者发来的通知后才进行提交或者回滚
<div align="center"> <img src="pics/d2ae9932-e2b1-4191-8ee9-e573f36d3895.png" width="550px"> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/d2ae9932-e2b1-4191-8ee9-e573f36d3895.png" width="550px"> </div><br>
### 2. 存在的问题
@ -149,14 +149,14 @@ Zookeeper 提供了一种树形结构的命名空间,/app1/p_1 节点的父节
2. 之后将本地消息表中的消息转发到消息队列中如果转发成功则将消息从本地消息表中删除否则继续重新转发
3. 在分布式事务操作的另一方从消息队列中读取一个消息并执行消息中的操作
<div align="center"> <img src="pics/476329d4-e2ef-4f7b-8ac9-a52a6f784600.png" width="740px"> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/476329d4-e2ef-4f7b-8ac9-a52a6f784600.png" width="740px"> </div><br>
# CAP
分布式系统不可能同时满足一致性CConsistency可用性AAvailability和分区容忍性PPartition Tolerance最多只能同时满足其中两项
<div align="center"> <img src="pics/a14268b3-b937-4ffa-a34a-4cc53071686b.jpg" width="450px"> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/a14268b3-b937-4ffa-a34a-4cc53071686b.jpg" width="450px"> </div><br>
## 一致性
@ -220,7 +220,7 @@ ACID 要求强一致性,通常运用在传统的数据库系统上。而 BASE
- 接受者Acceptor对每个提议进行投票
- 告知者Learner被告知投票的结果不参与投票过程
<div align="center"> <img src="pics/b988877c-0f0a-4593-916d-de2081320628.jpg"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/b988877c-0f0a-4593-916d-de2081320628.jpg"/> </div><br>
## 执行过程
@ -230,19 +230,19 @@ ACID 要求强一致性,通常运用在传统的数据库系统上。而 BASE
下图演示了两个 Proposer 和三个 Acceptor 的系统中运行该算法的初始过程每个 Proposer 都会向所有 Acceptor 发送 Prepare 请求
<div align="center"> <img src="pics/1a9977e4-2f5c-49a6-aec9-f3027c9f46a7.png"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/1a9977e4-2f5c-49a6-aec9-f3027c9f46a7.png"/> </div><br>
Acceptor 接收到一个 Prepare 请求包含的提议为 [n1, v1]并且之前还未接收过 Prepare 请求那么发送一个 Prepare 响应设置当前接收到的提议为 [n1, v1]并且保证以后不会再接受序号小于 n1 的提议
如下图Acceptor X 在收到 [n=2, v=8] Prepare 请求时由于之前没有接收过提议因此就发送一个 [no previous] Prepare 响应设置当前接收到的提议为 [n=2, v=8]并且保证以后不会再接受序号小于 2 的提议其它的 Acceptor 类似
<div align="center"> <img src="pics/fb44307f-8e98-4ff7-a918-31dacfa564b4.jpg"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/fb44307f-8e98-4ff7-a918-31dacfa564b4.jpg"/> </div><br>
如果 Acceptor 接收到一个 Prepare 请求包含的提议为 [n2, v2]并且之前已经接收过提议 [n1, v1]如果 n1 > n2那么就丢弃该提议请求否则发送 Prepare 响应 Prepare 响应包含之前已经接收过的提议 [n1, v1]设置当前接收到的提议为 [n2, v2]并且保证以后不会再接受序号小于 n2 的提议
如下图Acceptor Z 收到 Proposer A 发来的 [n=2, v=8] Prepare 请求由于之前已经接收过 [n=4, v=5] 的提议并且 n > 2因此就抛弃该提议请求Acceptor X 收到 Proposer B 发来的 [n=4, v=5] Prepare 请求因为之前接收到的提议为 [n=2, v=8]并且 2 <= 4因此就发送 [n=2, v=8] Prepare 响应设置当前接收到的提议为 [n=4, v=5]并且保证以后不会再接受序号小于 4 的提议Acceptor Y 类似
<div align="center"> <img src="pics/2bcc58ad-bf7f-485c-89b5-e7cafc211ce2.jpg"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/2bcc58ad-bf7f-485c-89b5-e7cafc211ce2.jpg"/> </div><br>
### 2. Accept 阶段
@ -252,13 +252,13 @@ Proposer A 接收到两个 Prepare 响应之后,就发送 [n=2, v=8] Accept
Proposer B 过后也收到了两个 Prepare 响应因此也开始发送 Accept 请求需要注意的是Accept 请求的 v 需要取它收到的最大提议编号对应的 v 也就是 8因此它发送 [n=4, v=8] Accept 请求
<div align="center"> <img src="pics/9b838aee-0996-44a5-9b0f-3d1e3e2f5100.png"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/9b838aee-0996-44a5-9b0f-3d1e3e2f5100.png"/> </div><br>
### 3. Learn 阶段
Acceptor 接收到 Accept 请求时如果序号大于等于该 Acceptor 承诺的最小序号那么就发送 Learn 提议给所有的 Learner Learner 发现有大多数的 Acceptor 接收了某个提议那么该提议的提议值就被 Paxos 选择出来
<div align="center"> <img src="pics/bf667594-bb4b-4634-bf9b-0596a45415ba.jpg"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/bf667594-bb4b-4634-bf9b-0596a45415ba.jpg"/> </div><br>
## 约束条件
@ -284,47 +284,47 @@ Raft 也是分布式一致性协议,主要是用来竞选主节点。
- 下图展示一个分布式系统的最初阶段此时只有 Follower 没有 LeaderNode A 等待一个随机的竞选超时时间之后没收到 Leader 发来的心跳包因此进入竞选阶段
<div align="center"> <img src="pics/111521118015898.gif"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/111521118015898.gif"/> </div><br>
- 此时 Node A 发送投票请求给其它所有节点
<div align="center"> <img src="pics/111521118445538.gif"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/111521118445538.gif"/> </div><br>
- 其它节点会对请求进行回复如果超过一半的节点回复了那么该 Candidate 就会变成 Leader
<div align="center"> <img src="pics/111521118483039.gif"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/111521118483039.gif"/> </div><br>
- 之后 Leader 会周期性地发送心跳包给 FollowerFollower 接收到心跳包会重新开始计时
<div align="center"> <img src="pics/111521118640738.gif"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/111521118640738.gif"/> </div><br>
## 多个 Candidate 竞选
- 如果有多个 Follower 成为 Candidate并且所获得票数相同那么就需要重新开始投票例如下图中 Node B Node D 都获得两票需要重新开始投票
<div align="center"> <img src="pics/111521119203347.gif"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/111521119203347.gif"/> </div><br>
- 由于每个节点设置的随机竞选超时时间不同因此下一次再次出现多个 Candidate 并获得同样票数的概率很低
<div align="center"> <img src="pics/111521119368714.gif"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/111521119368714.gif"/> </div><br>
## 数据同步
- 来自客户端的修改都会被传入 Leader注意该修改还未被提交只是写入日志中
<div align="center"> <img src="pics/71550414107576.gif"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/71550414107576.gif"/> </div><br>
- Leader 会把修改复制到所有 Follower
<div align="center"> <img src="pics/91550414131331.gif"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/91550414131331.gif"/> </div><br>
- Leader 会等待大多数的 Follower 也进行了修改然后才将修改提交
<div align="center"> <img src="pics/101550414151983.gif"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/101550414151983.gif"/> </div><br>
- 此时 Leader 会通知的所有 Follower 让它们也提交修改此时所有节点的值达成一致
<div align="center"> <img src="pics/111550414182638.gif"/> </div><br>
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/111550414182638.gif"/> </div><br>
# 参考
@ -346,4 +346,4 @@ Raft 也是分布式一致性协议,主要是用来竞选主节点。
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-1.png"></img></div>
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-2.png"></img></div>