一致性理论模型
CAP
强一致性,系统的可用性,网络的分区容忍性是不可同时获得的
ACID 与 BASE
acid是关系数据库原则,获得了高可靠性与强一致性
base是NoSQL原则,牺牲了强一致性来获得高可用性
数据为中心的一致性
强一致性
对于数据的更改,所有进程获得的数据是一致的
最终一致性
只要最后会一致即可,可以有一个不一致窗口
因果一致性
最终一致性一种,同样含有不一致窗口,但是要保证具有因果的进程一致
同一进程,先读再写有因果关系
不同进程,先写再读有因果关系
readyourwrite
保证自己写后能读到最新的值
会话一致性
特殊的ReadYourWrite,使得会话成为一个‘事务’。
用户为中心的一致性
单调读
若用户读后,整个系统不应读到比该版本更老的版本
单调写
即写是按顺序进行的
副本数据更新策略
主从更新
1.等待所有从机更新完成后再返沪用户
2.不等待(或等待部分,即为混合方式)直接返回用户
服务器应答
1.仅主服务器应答
2.从服务器也可应答(可能造成读不单调,通过R+W>N,保证读到一个同步节点)
任意节点更新
任意节点可称为主节点
一致性协议协议
两阶段提交
vote阶段与commit/abort阶段。(还是一个分布式的提交,只是有一个集中式的决策者)
向量时钟
(A:a,B:b,C:c,D:d)
RWN
Read+Write >N(总进程数)
paxos
lamport 时钟(以log副本以及内部状态机实现)
prepare阶段
1.PROPOSER向ACCEPTOR广播prepare(n),
2.ACCEPTOR接收到PROPOSER的广播开始检检查prepare(n)。
若n为接收到的最大,就响应PROPOSER且返回max(n)的accept(n,v)。
若n并非最大,不作任何响应
accept阶段
1.PROPOSER计数大多数的prapare(n),并返回accept(n,v)。对于v的选择
(1).选取所有PROPOSER返回的accept(n,v)选择max(v)作为v
(2).random(v)
2.ACCEPTOR接受任意accept(n,v)除非已经接受更大n的prepare(n)
最终可以选择出全局唯一的v
raft
paxos实际应用上难以证明其正确性,raft退而求其次,将应用划分为3个独立子问题(损失拓展性?类似mapreduce思想?)领导者选举,log复制,安全性。且采用主从结构(损失性能?)
1.follower不会发出rpc
2.若follower没有接收到心跳的启动选举程序
3.选举时follower(每个超时时间均不同)转为candidata并广播投票信息
投票
仅投给同term的且仅投一个
状态转换
若赢得选举在->candidata-leader
若另一个服务器宣称自己是服务器->candidata-follower
没有新的leader->term++;candidata不变
log复制
1.全局索引以及term编号确定唯一log
2.该唯一确定的log可递归证明前驱log也相同
安全性
仅包含所有已提交log的candidata才有资格成为leader
仅新leader提交过的log才被认为是被真正提交的