一致性介绍

Agenda
1.    什么是一致性
a.    CAP theorem
b.    一致性模型
2.    强一致性
a.    Paxos
b.    Raft
c.    ZAB
Detail
1.    什么是一致性
1.1    CAP theorem
对于一个分布式系统,不能同时满足以下三点:
一致性(Consistency)
可用性(Availability)
分区容错性(Partition Tolerance)
 
1.2    一致性模型
弱一致性
最终一致性
DNS(Domain Name System)
Gossip(Cassandra的通信协议)
         强一致性
              同步
              Paxos
              Raft(multi-paxos)
              ZAB(multi-paxos)
 
2.    首先 –明确问题(强一致性解决的问题)
数据不能存在单点上。(鸡蛋不要放在同一个篮子里)
分布式系统对fault tolorence的一般解决方案是state machine reolication。
其实我们今天讨论的准确的说,应该是state machine reolication的共识(consensus)算法。
Paxos其实是一个共识算法。系统的最终一致性,不仅需要达成共识,还会取决于client的行为。
3.    强一致性算法—主从同步
主从同步复制
 
1.    Master接受写请求
2.    Master复制日志至slave
3.    Master等待,直到所有从库返回
问题:一个节点失败,Master阻塞,导致整个集群不可用,保证了一致性,可用性却大大降低
4.    强一致性算的—多数派
基本思想:
多数派!
每次写都保证写入大于N/2个节点,每次读保证从大于N/2个节点中读
多数派还不够!:
在并发环境下,无法保证系统正确性,顺序非常重要。例如:
Inc 5:代表加5;set 0:代表置为0
执行顺序不同,结果不同,前两个是先加5,再置为0,第三个是先置为0,再加5
 
5.    强一致性算法—paxos
Lesile Lamport,Latex的发明者。
为描述paxos算法,Lamport虚拟了一个叫做paxos的希腊城邦,这个岛按照议会民主制的政治模式制定法律,但是没有人愿意将自己的全部时间和精力放在这种事。所以无论是议员,议长或者传递纸条的服务员都不能承诺别人需要时一定会出现,也无法承诺批准决议或者传递消息的时间。
Paxos
Basis Paxos
Multi Paxos
Fast Paxos
6.    强一致性算法—Basic Paxos
角色介绍:
Client:系统外部角色,请求发起者。像民众。(不参与投票)
Propser:接受client请求,向集群提出提议(propose)。并在冲突发生时,起到冲突调节的作用。像议员,替民众提出议案。
Acceptor(voter):提议投票和接收者,只有在形成法定人数(quorum,一般即为majority多数派)时,提议才会最终被接受。像国会。
Learner:提议接受者,backup,备份,对集群一致性没什么影响。像记录员。(不参与投票)
步骤、阶段(phases):
1.    Phase 1a:prepare
Proposer提出一个提案,编号为N,此N大于这个proposer之前提出提案编号,请求acceptor的quorum接受。
2.    Phase 1b:promise
如果N大于次acceptor之前接受的任何提案编号则接受,否则拒绝。
3.    Phase 2a:accep
如果达到了多数派,proposer会发出accept请求,此请求包含提案编号N,以及提案内容。
4.    Phase 2b:accepted
如果此acceptor在此期间没有收到任何编号大于N的提案,则接受此提案内容,否则忽略。
Learner可以理解为备份数据,记录过程
 
 
 
 
7.    强一致性算法—Multi Paxos
Basic Paxos的问题:
难实现、效率低(2轮RPC)、活锁
Multi Paxos:
新概念,Leader:唯一的propser,所有请求都需经过此leader。
Leader故障的话,就会重选leader,第N任总统就换为N+1任了。
关键点在于,Multi Paxos有唯一一个proposer,也就是说Multi paxos的prepare只用来竞选总统。Multi paxos只在没有proposer的时候需要竞选。
     


8.    强一致性算法—Raft
Raft
   划分成三个子问题:
       Leader Election
       Log Replication
       Safety
   重定义角色:
       Leader
       Follower
       Candidate
   原理动画解释:http://thesecretlivesofdata.com/raft/
一致性并不一定代表完全正确!
三个可能结果:成功、失败、unknown
Raft 5 nodes example:
Client写请求,leader向followers同步日志,此时集群中有3个节点失败,2个节点存活,结果是?
场景测试:https://raft.github.io/
9.    强一致性算法—ZAB
基本与raft相同。
在一些名词的叫法上有些区别:如ZAB将某一个leader的周期称为epoch,而raft则称为term。
实现上也有些许不同:如raft保证日志连续性,心跳方向为leader至follower。ZAB则相反。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenGd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值