[译]Chubby — 用于松耦合分布式系统的锁服务
本文翻译自Google的[The Chubby lock service for loosely-coupled distributed systems]。翻译此文旨在传播更多信息。翻译水平有限,时间少且文章太长了,质量一般。完整版本请阅读原文。如果转载请完整转载,并包含本申明。
- 摘要
- 1 简介
- 2 设计
- 2.1 基础依据(Rationale)
- 2.2 系统结构
- 2.3 文件,目录和句柄
- 2.4 锁和序号
- 2.5 事件
- 2.7 缓存
- 2.8 会话 和 KeepAlives
- 2.9 故障切换
- 2.12 镜像 (mirroring)
- 3 扩展机制
- 4 实际应用,意外和设计错误
- 4.1 实际应用和表现
- 4.4 故障切换的问题
- 4.5 攻击性的客户端
- 4.6 Lessons learned
- 5 与相关工作的比较 (Comparison with related work)
- 6 总结
- 7 致谢
- 参考文献
=========================================================================
用于松耦合分布式系统的锁服务Chubby
摘要
我们描述了我们在Chubby锁服务方面的经历。Chubby的目标是为松散耦合的分布式系统,提供粗粒度的锁定、可靠的存储(尽管容量不大)。Chubby提供了一个很像带有意向锁的分布式文件系统的接口(interface),不过它的设计重点是可用性和可靠性,而不是高性能。许多Chubby服务实例已经使用了超过一年,其中的几个实例每个都同时处理着数万台客户端。本文描述了最初的设计和预期使用,将之与实际的使用相比较,并解释了设计是怎样修改以适应这些差别的。
1. 简介
本文介绍了一种锁服务: Chubby。它被计划用在由适度规模的大量小型计算机通过高速网络互联构成的的松散耦合的分布式系统中。例如,一个Chubby实例(也叫Chubby单元(Cell))可能服务于通过1Gbit/s网络互联的一万台4核计算机。大部分Chubby单元限于一个数据中心或者机房,不过我们运行着至少一个各个副本(replica)之间相隔数千公里的Chubby单元。
锁服务的目的是允许它的客户应用们(clients)同步它们的活动,并对它们所处环境的基本信息取得一致。主要的目标包括在适度大规模的客户应用群时的可靠性、可用性,以及易于理解的语义;吞吐量和存储容量被认为是次要的。Chubby的客户端接口很像这样一个简单的文件系统:能执行整文件的读和写,另外还有意向锁和和多种诸如文件改动等事件的通知。
我们预期Chubby帮助开发者处理他们的系统中的粗粒度同步,特别是处理从一组各方面相当的服务器中选举领导者。例如Google文件系统(Google File System)[7]使用一个Chubby锁来选择GFS Master 服务器,Bigtable[3]以数种方式使用Chbbuy:选择领导者;使得Master可以发现它控制的服务器;使得客户应用(client)可以找到Master。此外,GFS和Bigtable都用Chubby作为众所周知的、可访问的存储小部分元数据(meta-data)的位置;实际上它们用Chubby作为它们的分布式数据结构的根。一些服务使用锁在多个服务器间(在粗粒度级别上)拆分工作。
在Chubby发布之前,Google的大部分分布式系统使用必需的、未提前规划的(ad hoc)方法做主从选举(primary election)(在工作可能被重复但无害时),或者需要人工干预(在正确性至关重要时)。对于前一种情况,Chubby可以节省一些计算能力。对于后一种情况,它使得系统在失败时不再需要人工干预,显著改进了可用性。
熟悉分布式计算的读者会意识到在多个相同体(peer)间primay选举是分布式协同(distributed consensus)问题的一个特例,同时意识到我们需要一种异步(asynchronous)通信的解决方案。异步(asynchronous)这个术语描述了绝大多数真实网络(real networks)如以太网或因特网的行为:它们容许数据包丢失、延时和重排序。(专家们一般应该了解(真实网络的)协议集建立在对环境做了很强假设的模型之上。) 异步一致性由Paxos协议[12, 13]解决了。同样的协议被Oki和Liskov(见于他们有关Viewstamped replication的论文[19, $4])使用,其他人使用了等价的协议[14, $6]。实际上,迄今为止我们遇到的所有可用的异步协同协议的核心都有Paxos。Paxos不需要计时假设来维持安全性,但必须引入时钟来确保活跃度(liveness)。这克服了Fisher等人的不可能性结果(impossibility result of Fisher et al.)[5, $1]。
构建Chubby是一种满足上文提到的各种需求的工程上的工作,不是学术研究。我们声明没有提出新的算法和技术。本文的目的在于描述我们做了什么以及为什么这么做,而不是提出这些。在接下来的章节中,我们描述Chubby的设计和实现,以及在实际过程中它是怎么改变的。我们描述了预料之外的Chubby的使用方式,以及被证明是错误的特性。我们忽略了在其他文献中已经包括的细节,例如一致性协议或者RPC系统。
Read more…
Recent Comments