- 分布式锁服务Chubby
Chubby是Google设计的提供粗粒度锁服务的一个文件系统,它基于松耦合分布式系统,
解决了分布的一致性问题。通过使用Chubby的锁服务,用户可以确保数据操作过程中的一致性。不过值得注意的是,这种锁只是一种建议性的锁(Advisory Lock)而不是强制性的锁(Mandatory Lock),如此选择的目的是使系统具有更大的灵活性。
GFS使用Chubby来选取一个GFS主服务器,Bigtable使用Chubby指定一个主服务器并发现、控制与其相关的子表服务器。除了最常用的锁服务之外,Chubby还可以作为一个稳定的存储系统存储包括元数据在内的小数据。同时Google内部还是用Chubby进行名字服务器(Name Server)。本节首先简要介绍Paxos算法,因为Chubby内部一致性问题的实现用到了Paxos算法;然后围绕Chubby系统的设计和实现展开讲解。通过本节的学习读者应该对分布式系统中一致性问题的一般性算法有初步的了解,着重掌握Chubby系统设计和实现的精髓。
- Paxos算法
Paxos算法是由供职于微软的Leslie Lamport最先提出的一种基于消息传递(Message Passing)的一致性算法。在目前所有的一致性算法中,该算法最常用而且被认为是最有效的。要想了解Paxos算法,我们首先 要知道什么是分布式系统中的一致性问题,因为Paxos算法就是为了解决这个问题而提出的。简单的说分布式系统的一致性问题,就是如何保证系统中初始状态相同的各个节点在执行相同的操作序列时,看到的指令序列是完全一致的,并且最终得到完全一致的结果。在Lamport提出的Paxos算法中节点被分成了三种类型:proposers、acceptors和learners。其中proposers提出决议(Value),acceptors批准决议,learners获取并使用已经通过的决议。一个节点可以兼有多重类型。在这种情况下,满足以下三个条件就可以保证数据的一致性:
- 决议只有在被proposers提出后才能批准。
- 每次只批准一个决议。
- 只有决议确定被批准后learners才能获取这个决议。
Lamport通过约束条件的不断加强,最后得到了一个可以实际运用到算法中的完整约束条件:如果一个编号为n的提案具有值v,那么存在一个多数派,要么他们中没有人批准过编号小于n的任何提案,要么他们进行的最近一次批准具有值v。为了保证决议的唯一性,acceptors也要满足一个如下的约束条件:当且仅当acceptors没有收到编号大于n的请求时,acceptors才批准编号为n的提案。
点击加载更多评论>>