图解分布式一致性协议paxos 20150311

51
2015.03 王先明 图解分布式致性协议 Paxos

Upload: alic-wang

Post on 12-Apr-2017

104 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: 图解分布式一致性协议Paxos 20150311

2015.03王先明

图解分布式⼀一致性协议Paxos

Page 2: 图解分布式一致性协议Paxos 20150311

1分布式事务

2Paxos 算法

3Zab 应⽤用

Page 3: 图解分布式一致性协议Paxos 20150311

分布式事务1

Page 4: 图解分布式一致性协议Paxos 20150311

一台服务器提供数据服务

性能不足以提供服务?

服务器宕机? 服务器掉电?服务器断网? 服务器硬盘坏?

响应时间?吞吐量?

Page 5: 图解分布式一致性协议Paxos 20150311

2. 数据镜像:所有的服务器上都有相同的数据

扩展数据服务常用手段

1. 数据分区:把数据分块分布在不同的服务器上

Page 6: 图解分布式一致性协议Paxos 20150311

最经典的Case:“A帐号向B帐号汇钱”

6. 把余额结果写回B帐号中

1. 从A帐号中把余额读出来

2. 对A帐号余额做减法操作

3. 把余额结果写回A帐号中 4. 从B帐号中把余额读出来

5. 对B帐号余额做加法操作

Page 7: 图解分布式一致性协议Paxos 20150311

Partition Tolerance

Consistency Availability

?

AC

ID

BASE

Page 8: 图解分布式一致性协议Paxos 20150311

一致性级别

2. 单调一致性(monotonic consistency)

3. 会话一致性(session consistency)

1. 强一致性(strong consistency)

4. 最终一致性(eventual consistency)

5. 弱一致性(weak consistency)

Page 9: 图解分布式一致性协议Paxos 20150311

网络延迟/分区恢复/补偿错误

并发更新

一致性为什么难

Page 10: 图解分布式一致性协议Paxos 20150311

主从异步复制Client Slave. 1 Slave. 2Master

1. 写请求2. 写⼊入磁盘

3. 回应

4.1. 从主库复制到从库

4.2. 从主库复制到从库

5.1. 回应

5.2. 回应

Page 11: 图解分布式一致性协议Paxos 20150311

主从同步复制Client Slave. 1 Slave. 2Master

1. 写请求2. 写⼊入磁盘

3.1. 从主库复制到从库

3.2. 从主库复制到从库

5. 回应

4.1. 回应

4.2. 回应

Page 12: 图解分布式一致性协议Paxos 20150311

主从半同步复制Client Slave. 1 Slave. 2Master

1. 写请求2. 写⼊入磁盘

3.1. 从主库复制到从库

3.2. 从主库复制到从库

4. 回应

5.1. 回应

5.2. 回应

Page 13: 图解分布式一致性协议Paxos 20150311

多数派写Client Node. 2 Node. 3Node. 1

1.1. 写请求

2.1. 回应

1.2. 写请求

1.3. 写请求

2.2. 回应

2.3. 回应

Page 14: 图解分布式一致性协议Paxos 20150311

多数派写 - 并发更新X 2..1 nil..02..1 Y

get i

X 3..2 3..22..1set i+1

3..2 3..22..1 Yset i+2

X 5..3 5..32..1get i

i=5?

i=2

i=3

get ii=2

i=4

更新丢失

Page 15: 图解分布式一致性协议Paxos 20150311

Paxos 算法2

Page 16: 图解分布式一致性协议Paxos 20150311

两阶段提交

Cohort Cohort

QUERY TO COMMIT

Coordinator

Request

The flow of message with protocol (Two-Phase Commit )

An * next to the record type means that the record is forced to stable storage.

QUERY TO COMMIT

VOTE YES/NOVOTE YES/NO prepare*/abort*

COMMIT/ROLLBACK COMMIT/ROLLBACKcommit*/abort*

ACKNOWLEDGMENT ACKNOWLEDGMENT

prepare*/abort*

commit*/abort* commit*/abort*

Page 17: 图解分布式一致性协议Paxos 20150311

三阶段提交

Cohort Cohort

canCommit?

Coordinator

Request

yes

haveCommitted

Uncertain Timeout cause abort

Committed

Soliciting Votes…canCommit?

yes Uncertain Timeout cause abort

preCommit

ack

preCommit

ack

Commit authorized Timeout cause abort

The flow of message with protocol (Three-Phase Commit )

An * next to the record type means that the record is forced to stable storage.

Prepare to commit Timeout cause abort

Prepare to commit Timeout cause abort

doCommitdoCommit Finalizing commit Timeout cause abort

Done CommittedhaveCommitted

Page 18: 图解分布式一致性协议Paxos 20150311

拜占庭将军(Byzantine Generals)

2. 一般假设整个系统中发生故障的服务器(拜占庭服务器)不超过F台,且每个请求满足两个指标

1.1. 所有非拜占庭服务器使用相同的输入信息,产生一致的结果

1. 拜占庭容错系统是指在一个拥有N台服务器的系统中,整个系统对于每一个请求满足两个条件

1.2. 信息正确输入,那么所有非拜占庭服务器必须接受这个信息,并计算相应的结果

2.1. 安全性:任何已经完成的请求都不会被更改,且可以被之后请求看到

2.2. 活性:可以执行非拜占庭客户端的请求,且不会被任何因素影响导致不能执行

Page 19: 图解分布式一致性协议Paxos 20150311

SUCCESSFAILURE网络服务3种状态之 SUCCESS | FAILURE

Page 20: 图解分布式一致性协议Paxos 20150311

TIMEOUTNO!

NO!

NO!

网络服务3种状态之 噩梦般的TIMEOUT

Page 21: 图解分布式一致性协议Paxos 20150311

那么,每个节点最后都能得到一致的状态

在分布式数据库系统中,假设1. 每个节点的初始状态一致

2. 每个节点都执行相同的操作序列

Page 22: 图解分布式一致性协议Paxos 20150311

I WANT YOU

Page 23: 图解分布式一致性协议Paxos 20150311
Page 24: 图解分布式一致性协议Paxos 20150311
Page 25: 图解分布式一致性协议Paxos 20150311
Page 26: 图解分布式一致性协议Paxos 20150311

Proposers Acceptors

Phase 1

1) Choose new proposal number n 2) Broadcast Prepare(n) to all servers

3) Respond to Prepare(n): if n > maxN then

maxN = n return (acceptedN, acceptedV)

Phase 2

4) When responses received from majority: if any acceptedV returned then

replace v with acceptedV for highest acceptedN 5) Broadcast Accept(n, v) to all servers

6) Respond to Accept(n, v): if n >= maxN then

maxN = n acceptedN = n acceptedV = v return (maxN)

7) When responses received from majority: v is chosen

Acceptors must record maxN, acceptedN and acceptedV on stable storage (disk)

Page 27: 图解分布式一致性协议Paxos 20150311

maxN=0

Paxos Basic - Phase1

0, nil 0, nil0, nilN=1

X

acceptedN=0acceptedV=nil

1, nil 0, nil1, nil

Proposer

X

Acceptor

maxN=1

maxN=0

3) Respond to Prepare(n): if n > maxN then

maxN = n return (acceptedN, acceptedV)

1) Choose new proposal number n 2) Broadcast Prepare(n) to all servers

Page 28: 图解分布式一致性协议Paxos 20150311

maxN=0

4) When responses received from majority: if any acceptedV returned then

replace v with acceptedV for highest acceptedN 5) Broadcast Accept(n, v) to all servers

Paxos Basic - Phase2

0, nil 0, nil0, nil

X 1, any 0, nil1, any

Proposer

X

Acceptor

maxN=1

6) Respond to Accept(n, v): if n >= maxN then

maxN = n acceptedN = n acceptedV = v return (maxN)

7) When responses received from majority: v is chosen

maxN=0

acceptedN=1acceptedV=any

maxN=1

acceptedN=1

Page 29: 图解分布式一致性协议Paxos 20150311

maxN=1

maxN=0

Paxo

s B

asic

- 并

发更

2, nil 2, nil1, any1X

maxN=2

acceptedN=1acceptedV=any1

maxN=1

Y

Proposer

0, nil 0, nil0, nilN=1

Proposer

X

Acceptor

maxN=0

X

acceptedN=0acceptedV=nil

1, nil 0, nil1, nil

maxN=1

maxN=0

1, nil 0, nil1, nil

maxN=1

N=2

Y

maxN=2

2, nil 2, nil1, nilacceptedN=1

acceptedV=nilacceptedN=2

acceptedV=nil

2, nil 2, nil1, any1

maxN=2maxN=1

maxN=2

2, any2 2, any21, any1

maxN=2maxN=1

Y

YacceptedN=2

acceptedN=2acceptedV=any2

P1 for X

P1 for Y

P2 for X

P2 for Y

Page 30: 图解分布式一致性协议Paxos 20150311

3, any3 2, any23, any3

maxN=2maxN=3

Proposer CAcceptor A

maxN=3

2, any2 2, any23, any3

maxN=2maxN=1

Acceptor C Acceptor E

XtimeoutX

Proposer EProposer A

一条日志在 A/C 上持久化成功,已经形成多数派,然后C宕机

一条日志只在 A 上持久化成功,超时未形成多数派,然后C宕机

最终的状态都是 A 上有这条日志,E 上没有,怎么处理?

最大 Commit 原则

Page 31: 图解分布式一致性协议Paxos 20150311

Zab 应⽤用3

Page 32: 图解分布式一致性协议Paxos 20150311

Zookeeper 保证

2. 原子性:更新要么成功,要么失败,不会出现部分更新

3. 单一性:无论客户端连接哪个Server,都会看到同一个视图

1. 顺序一致性:按照客户端发送请求的顺序更新数据

4. 可靠性:一旦数据更新成功,将一直保持,直到新的更新

5. 及时性:客户端会在一个确定的时间内得到最新的数据

Page 33: 图解分布式一致性协议Paxos 20150311

Zookeeper 服务过程Zookeeper Services

Follower Leader Follower

Client Client Client Client Client Client

write

read read read read read

Server Server Server

Page 34: 图解分布式一致性协议Paxos 20150311

Zookeeper 状态同步

Leader Follower2. Leader确定同步点,发送同步消息

3. 完成同步点,通知Leader,并修改自己状态

1. Follower连接Leader,发送最大zxid

Page 35: 图解分布式一致性协议Paxos 20150311

Zab广播模式

Follower Follower

Propose

Leader

Request

Commit

ACK

Propose

Commit

ACK

The flow of message with protocol

Page 36: 图解分布式一致性协议Paxos 20150311

Zab广播模式Follower

Leader

Follower

Follower

Follower

FollowerClient

Zookeeper Ensemble

Server: Leader && Follower

1. request

6. response

2. request

5. Commit

4. ack

3. Propose

Page 37: 图解分布式一致性协议Paxos 20150311

Zab广播模式

两阶段提交

VS.

(Two-Phrase Commit)

Page 38: 图解分布式一致性协议Paxos 20150311

Follower 工作流程

向Leader发送请求 /接收Leader回应

接收Client请求

PING REVALIDATE SYNC/UPTODATE Proposal

Y判断是否写请求

返回结果给Client

开始

N

Page 39: 图解分布式一致性协议Paxos 20150311

Leader 工作流程

开始

请求类型接收Learner请求,是否同步

恢复数据(恢复模式)

N

与Learner同步

Y

PING

REQUEST

ACK

REVALIDATE

加入处理队列

更新session时间(延长)

发起Leader

选举

保持与Follower的心跳

Y

是否有超过半数的Follower同意

Commit

是否有超过半数的Follower

N

Y

Page 40: 图解分布式一致性协议Paxos 20150311

Zookeeper 谁是Leader?Zab 协议(Zookeeper Atomic Broadcast Protocol) 当任一Client通过某集群节点向集群发起读写请求时,该集群节点会向Leader节点发出投

票请求,如果投票通过(超过一半节点同意)则该请求被执行,否则该请求被驳回。通过Paxos

算法,Zookeeper的保持了数据模型的一致性,同时保持了任何操作的原子性。

Page 41: 图解分布式一致性协议Paxos 20150311

Zab恢复模式Server1

Server2

X

Server3

C1

P1 P2

P1 P2

C1 P3 C2

P1 P2

Page 42: 图解分布式一致性协议Paxos 20150311

P1 P2

Zab恢复模式Server1

Server2

Server3

X

P10000001 P10000002 C10000001

C1 P3 C2

P1 P2

P1 P2

C1 C2

P10000001 P10000002 C10000001

C1 C2

Page 43: 图解分布式一致性协议Paxos 20150311

Paxos一致性Leader Server1

Follower Server2

Follower Server3

P1 <01, “/zk”>

P2 <02, “/a”>P3 <03, “/a/b”>

P1P1

P1 <01, “/zk”>

P1 <01, “/zk”>

< t , v >

Zxid

事务epoch counter

高32位 低32位

XX

Page 44: 图解分布式一致性协议Paxos 20150311

Paxos一致性Leader Server1

Follower Server2

Leader Server3

P1 <01, “/zk”>

P2 <02, “/a”>P3 <03, “/a/b”>

P2i

P1 <01, “/zk”>

P2i <02, “/c”>

P1 <01, “/zk”>

P2i <02, “/c”>

< t , v >

Zxid

事务epoch counter

高32位 低32位

XXX

Page 45: 图解分布式一致性协议Paxos 20150311

Paxos一致性Leader Server1

Follower Server2

Leader Server3

P1 <01, “/zk”>

P2 <02, “/a”>P3 <03, “/a/b”>

P3

P1 <01, “/zk”>

P2i <02, “/c”>P3 <03, “/a/b”>

P1 <01, “/zk”>

P2i <02, “/c”>

< t , v >

Zxid

事务epoch counter

高32位 低32位

X

Page 46: 图解分布式一致性协议Paxos 20150311

Zab一致性Leader Server1

Follower Server2

Follower Server3

P1 <01, “/zk”>

P2 <02, “/a”>P3 <03, “/a/b”>

P1P1

P1 <01, “/zk”>

P1 <01, “/zk”>

< t , v >

Zxid

事务epoch counter

高32位 低32位

XX

Page 47: 图解分布式一致性协议Paxos 20150311

Zab一致性Leader Server1

Follower Server2

Leader Server3

P1 <01, “/zk”>

P2 <02, “/a”>P3 <03, “/a/b”>

P2i

P1 <01, “/zk”>

P2i <10, “/c”>

P1 <01, “/zk”>

P2i <10, “/c”>

< t , v >

Zxid

事务epoch counter

高32位 低32位

XXX

Page 48: 图解分布式一致性协议Paxos 20150311

Zab一致性Leader Server1

Follower Server2

Leader Server3

P1 <01, “/zk”>

P2 <02, “/a”>P3 <03, “/a/b”>

P3

P1 <01, “/zk”>

P2i <10, “/c”>

P1 <01, “/zk”>

P2i <10, “/c”>

< t , v >

Zxid

事务epoch counter

高32位 低32位

X

Page 49: 图解分布式一致性协议Paxos 20150311

Leader 选举 - Basic Paxos

投票开始

N

Y

Y

N

投票结束

向集群(包括自己)发起询问

Y

N

第一次询问? 将自已(id, zxid)作为Leader推荐给集群

接收询问,验证是否自己发起?

获取对方id(myid),存入已询问列表,获取对方提议的Leader信息(id,zxid),存入当前投票记录表,统计选举结果,获取最大的zxid,并将zxid所示的Server作为下次推

荐的Leader

zxid是否有超过半数支持

将zxid所示的Server作为当前的Leader,并根据投票结果修改

自己状态

Page 50: 图解分布式一致性协议Paxos 20150311

投票开始

Y判断是否已经选出Leader

N

将自已epoch+1,推荐自己(zxid,id)作为

Leader发送给集群进入下一个周期

投票结束

N

Y

判断自己当前epoch是否合法

更新自己epoch为对方推荐的zxid,epoch,id。

向对方发送ACK

N

Y

一个周期内是否收到其它节点回复

Leader 选举 - Fast Paxos

Page 51: 图解分布式一致性协议Paxos 20150311

To Be Continued…

Thanks