Chubby论文学习笔记

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上同步数据库的更新。

目录与文件

锁与锁序列器

事件通知机制

缓存

会话和会话激活(KeepAlive)

KeepAlive请求

会话超时

Chubby Master 故障恢复


个人思考