Paxos
文章目录
前言
一致性:
- CAP
- BASE
一致性模型及算法:
-
弱一致性
-
最终一致性
DNS
Gossip
-
-
强一致性
主从同步
Paxos:basic-paxos、multi-paxos、fast-paxos
Raft(multi-paxos)
ZAB(multi-paxos)
说明:
- 数据不能存在单点上
- 多副本状态机
复制策略对比
-
主从异步复制
1、master收到写请求
2、master写入
3、master应答ok
4、master复制数据到slave
数据丢失:3完成,4未完成之间,master宕机
-
主从同步复制
12、…
3、master复制数据给所有slave
4、所有slave完成,master应答ok
可用性降低:某个slave宕机,无法写入,整个系统不可用
-
主从半同步复制
12、…
3、master复制数据给所有slave
4、x个slave完成,master应答ok
x:足够多的机器,但不需要全部机器
可靠性:较高的可靠性
一致性:存在某种不一致(可能每个slave都缺失数据,比起master)——>不完整
-
多数派写(读)
写:写入半数以上机器
读:从半数以上机器读
场景:node1和2写入x=y1;node2和3写入x=y2;读取node1和3,结果为y1和y2,如何选择?最新
避免歧义,需要一个全局递增时间戳/版本号,最后一次写入覆盖之前写入
又一个场景:node2和3写入y2时,node2失败,读取12返回y1,读取23返回y2,整个系统对外提供的数据仍不一致
又一个场景:请求顺序
Basic-Paxos
是什么
在分布式系统中保证多副本数据强一致的算法
作用:协同,实现一致性
角色
角色 | 说明 |
---|---|
client | 请求者,请求 |
proposer | 提议者,提议 |
acceptor/voter | 接受者,投票 |
learner | 学习者,备份 |
case
case-1 无冲突
-
Phase-1
Proposer:发出提案,编号为1,请求[1]
Acceptors:Quorum设置last_round=1,响应[-,-]
-
Phase-2
Proposer:收到Quorum,选择值(自定义),请求[round=1, v=‘x’]
Acceptor:Quorum比对round和last_round,设置v=‘v’,存储[last_round=1, v=‘x’, round=1],响应’Accepted’
case-2 XY冲突,X失败Y成功
-
X-1:X完成写前读取,Quorum记录last_round=1
-
Y-1:Y完成写前读取,Quorum记录last_round=2
-
X-2:X以round=1发出写,失败
原因:不满足Quorum,只有Acceptor-1 Accepted,Acceptor-2 Fail
-
Y-2:Y以round=2发出写,成功
原因:满足Quorum
case-3 在case-2基础上,X发出round=3
-
X-1:写前读取,round=3,Quorum记录last_round=3,并响应y2和x1
不同响应,则选取round最大的v,即选取y2,并作为选择的值进行phase-2
-
X-2:写,round=3且v=y2,成功
步骤
-
Phase-1 写前读取
-
Prepare req{ round=n1 }
-
Promise rsp
n1小于等于last_round,拒绝
n1大于last_round,响应{ v, round}
-
-
Phase-2 提交介绍(前提 Quorum)
-
Accept req{ round=n1, v}
v的取值:Promise响应携带值,则使用round最大的值,否则自定义值
-
Accepted rsp
n1等于last_round,接受
n1不等于last_round,拒绝
-