分布式系统的 倚天剑和屠龙刀

19
分分分分 分分分分分分分 --Paxos 分 Consistent Hashing 分分

Upload: kendall-tran

Post on 02-Jan-2016

93 views

Category:

Documents


6 download

DESCRIPTION

分布式系统的 倚天剑和屠龙刀. -- Paxos 与 Consistent Hashing 简介. 云 计算的挑战. 尽管淘宝肯定对双十一的购物潮早有预料,但是淘宝支付宝业务在 11 号最初的几分钟还是出现了无法服务的现象。 不过从这个现象中我们可以看出来一些东西。 如何维护不同服务器上业务的一致性? 面对海量变化的负载,如何高效调度?. 大量负载的调度. 业务逻辑的维护. 一致性. 尽量 少的资源切换 (保持内部数据的一致). 不同设备上接收到的指令的顺序 (外部一致性). Paxos. 一致性哈希. 倚天剑: Paxos. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 分布式系统的 倚天剑和屠龙刀

分布式系统的倚天剑和屠龙刀

--Paxos 与 Consistent Hashing 简介

Page 2: 分布式系统的 倚天剑和屠龙刀

云计算的挑战

尽管淘宝肯定对双十一的购物潮早有预料,但是淘宝支付宝业务在 11 号最初的几分钟还是出现了无法服务的现象。不过从这个现象中我们可以看出来一些东西。

如何维护不同服务器上业务的一致性?面对海量变化的负载,如何高效调度?

Page 3: 分布式系统的 倚天剑和屠龙刀

一致性

业务逻辑的维护 大量负载的调度

不同设备上接收到的指令的顺序

(外部一致性)

尽量少的资源切换(保持内部数据的

一致)

Paxos 一致性哈希

Page 4: 分布式系统的 倚天剑和屠龙刀

倚天剑: Paxos “ 安得倚天剑,跨海斩长鲸” --- 《临江王节士歌》李白 一个典型的场景是,在一个分布式数据库系统中,

如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。

银行的存取业务 多个节点的操作

不仅只用在分布式系统,凡是多个过程需要达成某种一致性的都可以用到 Paxos 算法。

Page 5: 分布式系统的 倚天剑和屠龙刀

P:proposer, 也可以是客户端,提交议案。 C:coordinator, 协调者, A:acceptor, 选举者, L:learner, 学习者, A round include two phases: (i)phase 1 (ii)phase 2 crnd: 某 C 开始的 rounds 中的最高的 round

number cval: 某 C 在 round crnd 中提出的 value 。 rnd: 某 A 参加过的 rounds 中最高的 round

number vrnd: 某 A 批准过的 rounds 中最高的 round

number vval: 某 A 在 round vrnd 中批准的 value 。 Quorum:a majority of the acceptors 所有的消息可能丢失或者延时,但是不会出错。

Page 6: 分布式系统的 倚天剑和屠龙刀

message

Phase 1a:prepare Phase 1b:promise Phase 2a:accept Phase 2b:accepted

Page 7: 分布式系统的 倚天剑和屠龙刀

1 、 C 要提出一个 value 并获得批准的过程叫做一个 round,它两个阶段: phase1 和 phase2.

2 、 C 开始某个 round i, 发送 phase 1a[i] 给所有的 A, 如果收到某 A 的 reject[j](j>i), 重新发送 phase 1a[j+x] (为方便举例,令 x = 1 ) , 并设置 [crnd = j+1,cval = 0] 。

3 、 Pick a value: 收到来自某 quorum 的 phase 1b[j+1,vrnd,vval] 消息回复。

令 K 为来自该 quorum 消息中所有 vrnd 的最大值 ,V 为来自该 quorum 的消息中 vrnd = k 的消息对应的 vval 值的集合(当 k>0 时 ,fast paxos 在文中证明了这样的 vval 值只有一个)。If k = 0,C 可以任意挑选一个来自 P 的 value 作为 value_selse ,将 V 中的那个唯一的 value 作为我们的挑选 value_s

将 value_s 和 round number j+1 作为 phase 2a 的内容发送给所有的 A, 并设置 cval = value_s, 若收到某 A 的Nack[h],h>j ,设置 crnd = h+1 并重复上述 prepare 过程。否则,若收到来自某 quorum 的 phase2b 消息,则说明对该 value_s 的选举已经完成。

Page 8: 分布式系统的 倚天剑和屠龙刀

任何一个 A 必须批准它收到的第一个 value 。 A 在 round i 的 prepare 过程 (phase 1) 收到 phase1a:

(a) 如果 i<rnd, 且 round rnd 的 C(beginner) 不是 round i的 C’(beginner), 即 C!=C’ ,则通知 round i 的 C’ 拒绝(reject[rnd]) 它的 prepare 请求。如果 C = C’ ,则忽略这个 prepare 请求。 (important!)(b) 如果 i >= rnd, 令 rnd = i ,发送 phase 1b 消息。Phase 1b:[ rnd,vrnd,vval]

A 在 round i 的 phase 2 收到 phase 2a[i,vval_i]:(a) 如果 i<rnd, 即 C!=C’ ,则通知 round i 的 C’ 拒绝(Nack[rnd]) 它的 accept 请求。如果 C = C’ ,则忽略这个accept 请求。 (important!)(b) 如果 i>=rnd, 令 rnd = vrnd = i,vval = vval_i, 发送phase2b

故而在其它的 C 开始更高 round number 的过程时 ,Round有可能被中断 。

Page 9: 分布式系统的 倚天剑和屠龙刀

角色介绍

A(rnd,vrnd,vval)

A(rnd,vrnd,vval)

A(rnd,vrnd,vval)

A(rnd,vrnd,vval)

A(rnd,vrnd,vval)

P

P

P

P

L

L

L

L

C(crnd,cval)

C(crnd,cval)

C(crnd,cval)

Page 10: 分布式系统的 倚天剑和屠龙刀

C Receive phase1b from a quorum,pick any value proposed by p.

C(0,null)

初始化 (round 1)

A(0,0,null)

A(0,0,null)

A(0,0,null)

A(0,0,null)

A(0,0,null)

P

P

P

P

L

L

L

L

C(0,null)

C(0,null)

C(1,null)

Phase1a [ 1] because 1>0

A(1,0,null)

because 1>0

A(1,0,null)

because 1>0

A(1,0,null)

because 1>0

A(1,0,null)

Phase1b[1,0,null]C(1,value_s)

A(1,1,value_s)

A(1,1,value_s)

A(1,1,value_s)

A(1,1,value_s)

A(1,1,value_s)

Phase2b Phase2b L receive phase2b from a quorum,then learn value_s

L receive phase2b from a quorum,then learn value_s

L receive phase2b from a quorum,then learn value_s

L receive phase2b from a quorum,then learn value_s

because 1>0

A(1,0,null)

Phase2a[1,Value_s]

Page 11: 分布式系统的 倚天剑和屠龙刀

正常运行 (round 2 as an example)

A(1,1,value_s)

A(1,1,value_s)

A(1,1,value_s)

A(1,1,value_s)

A(1,1,value_s)

P

P

P

P

L

L

L

L

C(1,value_s)

C(0,null)

C(0,null)

Phase1a[1]

Reject [1] Phase 1a[2]Phase

1b[2,1,value_s]

C(1,null)

C(2,null)

Phase 2a[2,value_s]

Phase 2b Phase 2b

A(2,1,value_s)

A(2,1,value_s)

A(2,1,value_s)

A(2,1,value_s)

A(2,1,value_s)

A(2,2,value_s)

A(2,2,value_s)

A(2,2,value_s)

A(2,2,value_s)

A(2,2,value_s)

Page 12: 分布式系统的 倚天剑和屠龙刀

实用 微软对 Paxos拥有专利 Google 的实现: chubby (未开源)应用于

Spanner 的 TrueTime 系统中。 ZooKeeper ( 开源 ) 一个类 Paxos实现

Page 13: 分布式系统的 倚天剑和屠龙刀

屠龙刀:一致性哈希 武林至尊,宝刀屠龙,号令天下,莫敢不从! -- 《倚天屠龙记》 对多台服务器的调度 应用背景:有 N台服务器提供缓存服务,

需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责 1/N的服务。

需求:当系统增加一台或减少一台机器的时候,颠簸尽可能的少

Page 14: 分布式系统的 倚天剑和屠龙刀

HASH 算法单调性    Hash  算法的一个衡量指标是单调性

( Monotonicity  ),定义如下:   单调性是指如果已经有一些内容通过

哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。

Page 15: 分布式系统的 倚天剑和屠龙刀

传统的 HASH

1 , 4

3 , 6

2 , 5

1 , 2 , 3 , 4 , 5 , 6

2, 4, 6

1, 3, 5

3 , 6

不管是对于增加服务器,还是减少服务器,需要迁移的数据都是 4个,也就是有 (N-1)/N(减少 ) 和 N/(N+1)(增加 ) 的数据需要转移

Page 16: 分布式系统的 倚天剑和屠龙刀

一致性哈希

Page 17: 分布式系统的 倚天剑和屠龙刀

虚拟节点

Page 18: 分布式系统的 倚天剑和屠龙刀

创新的特点 一致性哈希相对于传统哈希来说,在思路

上有了很大的不同。 传统 HASH 是取一个较小的模数,从而将

数据映射到一个小范围内。 consistent hashing 的本质是将模数取的比较大,为 2 的 32次方减 1 ,即一个最大的 32 位整数。然后,就可以从容的安排数据导向。

Page 19: 分布式系统的 倚天剑和屠龙刀