摘要: Google Chubby 锁服务
We describe our experiences with the Chubby lock ser- vice, which is intended to provide coarse-grained lock- ing as well as reliable (though low-volume) storage for a loosely-coupled distributed system
我们描述了Chubby锁服务的经验,该服务旨在为松耦合的分布式系统 提供粗粒度的锁 以及 可靠的(尽管容量较小)存储
这里粗粒度的锁指的是应用加锁的时间比较长,例如 leader election chubby 服务本质上不算新的研究成果,而是一种工程上的努力实现
Google 内部实际上也提供了一个独立于 Chubby 的一致性库(基于paxos),但考虑到锁服务有如下一些优点:
一个 chubby 单元由副本集合组成(通常是5个、放在不同的机柜),这些副本通过一次 paxos 选举出一个 master,同时要保证在 master 的租约有效期内不会再选举另一个 master,租约会周期性的更新。
master 负责读写,slave 只是复制 master。客户端通过请求 DNS 获取各副本列表,然后像这些副本发送 master 定位请求,非 master 副本返回 master标识,一旦定位到 master 则将请求全部切到 master (直到 master 失去响应或者 因为不再是 master 拒绝请求)。
对于 副本异常 且无法自动恢复的场景,一个替换系统会从空闲的机器池中选择一台新的机器并运行 chubby 服务,然后更新 DNS 表,将出错的改为新的。并且从文件系统的备份中选择一份最近的数据和接收最新的更新。 master 节点会定期检测 DNS 表,在发现该变化时会更新它所在的单元的副本列表
Chubby提供了一个类似于UNIX但是相对简单的文件系统接口。
/ls/foo/wombat/pouch
这样的设计可以降低使用的门槛,文件和目录统称为Node,和client同生命周期的临时节点可以用来实现节点存活监控。 Node 除了记录数据外还包括了一些元信息
这里的事件都是实际动作发生后才传递的。
Chubby 的 Cache 主要用来缓存文件数据、元信息。当文件发生改变时,修改的请求会被阻塞,直到 master 将失效通知发给所有的客户端。
Chubby 的 Session 是 Chubby Cell 和 Chubby 客户端的一种关系,通过周期性的 KeepAlive 握手维护。
每个 Session 都通过一个租约时间来保证 master 不单方面结束会话。
master 在下面的三个时机会选择续期租约:
我们重点关注在宽限期(grace period)内,新的 master 被选举出来后的恢复操作,如下步骤所示:
以论文中选主场景为例:
open()
同一个节点,然后用返回的 Handler 调用 Aquire()
SetContents()
写入自己的标识,client 和其他 Secondary 通过 GetContentsAndStat()
获取该信息,并注册监听内容变化的 Event,以便发现 Primary 的改变GetSequencer()
获取一个sequencer,发给它所通信的依赖锁的服务,该服务通过CheckSequencer()
来验证它是否仍然是 Primary可以发现,Chubby 是有很多的优化和稳定努力,例如通过增加租约时间来减少 rpc造成的负载、增加缓存提高读的性能、对于资源的全面监控可以更好的做降级、单元的不同副本不同机柜、每隔几个小时会把存储数据快照写入另一栋楼的 GFS 文件系统,避免了 GFS 和 Chubby 的循环依赖。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有