Google Chubby([ˈtʃʌbi])是一个面向松耦合分布式系统的锁服务,被GFS、Big Table等系统用于解决分布式同步、元数据存储和Master选举等一系列与分布式锁相关的问题。
Chubby底层一致性实现是以Paxos算法为基础的。
概述
一个分布式锁的目的是使得各个客户端进程同步彼此的操作,对当前系统的基本状态信息达成一致。为此,Chubby提供了粗粒度的分布式锁服务(coarse-grained locking)。
Chubby的客户端接口设计非常类似于UNIX文件系统,应用不仅能对Chubby服务器上的整个文件进行读写,还可以添加对文件节点的锁控制,并能订阅Chubby服务端发出的一些文件变动的事件。
设计目标
Chubby最初的设计者并没有将它实现为一个包含Paxos算法的协议库,而是将Chubby设计成一个需要访问中心节点(Master)的分布式锁服务,是因为锁服务具有以下四个传统的算法库所没有的优点:
- 对上层应用程序的改动、影响更小
- 便于提供数据的发布与订阅
- 开发者对基于锁的接口更加熟悉
- 可以更便捷地构建更可靠的服务
因此Chubby被设计成一个需要访问中心化节点的分布式锁服务。同时提出了一下几个设计目标:
- 提供一个完整的、独立的分布式锁服务,而非仅仅是一个一致性协议的客户端
- 提供粗粒度的锁服务
- 同时提供对小文件的读写功能
- 高可用+高可靠
- 提供事件通知机制
Chubby技术架构
系统架构

图1: Chubby服务端与客户端架构
一个典型的Chubby集群(Chubby Cell)通常由5台服务器组成,这些副本服务器采用Paxos一致性协议,通过投票的方式选举产生一个获得过半投票的服务器作为Master。
一旦某个服务器成为Master,Chubby就会保证这一段时间内不会再有其他服务器成为Master,这段时期称为Master租期(Master lease)。
在正常运行的情况下,Master服务器会通过不断续租的方式延长租期,直到Master出现故障,会进行新一轮的选举,循环往复。
集群中每个服务器都维护一份服务端数据库的副本,但只有Master服务器能对该数据库进行写操作,其他服务器只能使用Paxos协议从Master上同步数据库的更新。