Chubby 分布式协调系统

程序名称:Chubby

授权协议: 未知

操作系统: 未知

开发语言:

Chubby 介绍

MapReduce 很多人已经知道了,但关于Chubyy似乎熟悉它的就非常有限,这倒是不奇怪,因为MapReduce是一个针对开发人员的
ProgrammingModel,自然会有很多人去学习它,而Chubby更多的是一种为了实现MapReduce或者Bigtable而构建的内部的
工具,对于开发人员来说基本上是透明的。文献[1]我反复读了至少有两三天,但感觉也只是一个囫囵吞枣的结果,里面有很多工程实现上的细节,如果不是自己
亲自去设计或者实现,很难体会到其中的道理和奥妙。但是,对于这样一个分布式service的研究,还是让我对一个分布式系统的结构和设计思想有了更加直 观的感觉。

**从distributed consensus problem说起

** distributed consensus
problem(分布的一致性问题)是分布式算法中的一个经典问题。它的问题描述大概是这样的:在一个分布式系统中,有一组的Process,它们需要确
定一个Value。于是每个Process都提出了一个Value,consensus就是指只有其中的一个Value能够被选中作为最后确定的值,并且
当这个值被选出来以后,所有的Process都需要被通知到。
表面上看,这个问题很容易解决。比如设置一个server,所有的process都
向这个server提交一个Value,这个server可以通过一个简单的规则来挑选出一个Value(例如最先到达的Value被选中),然后由这个
server通知所有的Process。但是在分布式系统中,就会有各种的问题发生,例如,这个server崩溃了怎么办,所以我们可能需要有几台
server共同决定。还有,Process提交Value的时间都不一样,网络传输过程中由于延迟这些Value到达server的顺序也都没有保证。
为 了解决这个问题,有很多人提出了各种各样的Protocol,这些Protocol可以看做是一组需要遵循的规则,按照这些规则,这些Process就能
够选举出一个唯一的Value。其中,最有名的一个Protocol就是Paxos算法。(八卦一下,Paxos的提出者叫做Lamport,有很多分布
式的算法都是他提出的,他还是Latex的作者,大牛啊…)。想更加了解Paxos算法可以参考文献[2],很漂亮的一篇文章。

那么 这些和Chubby有什么关系呢?其实Chubby就是为了这个问题而构建出来的。只是它并不是一个Protocol或者是一个算法,而是google精
心设计的一个service。这个service不仅能够解决一致性问题,还有其它的一些很实用的好处,会在下文慢慢介绍。

**一个实例

在Google File System(GFS)中,有很多的server,这些server需要选举其中的一台作为master
server。这其实是一个很典型的consensus问题,Value就是master
server的地址。GFS就是用Chubby来解决的这个问题,所有的server通过Chubby提供的通信协议到Chubby
server上创建同一个文件,当然,最终只有一个server能够获准创建这个文件,这个server就成为了master,它会在这个文件中写入自己
的地址,这样其它的server通过读取这个文件就能知道被选出的master的地址。

Chubby是什么**

从 上面的这个实例可以看出,Chubby首先是一个分布式的文件系统。Chubby能够提供机制使得client可以在Chubby
service上创建文件和执行一些文件的基本操作。说它是分布式的文件系统,是因为一个Chubby
cell是一个分布式的系统,一般包含了5台机器,整个文件系统是部署在这5台机器上的。
但是,从更高一点的语义层面上,Chubby是一个 lock service,一个针对松耦合的分布式系统的lock service。所谓lock
service,就是这个service能够提供开发人员经常用的“锁”,“解锁”功能。通过Chubby,一个分布式系统中的上千个client都能够
对于某项资源进行“加锁”,“解锁”。
那么,Chubby是怎样实现这样的“锁”功能的?就是通过文件。Chubby中的“锁”就是文件,在上例
中,创建文件其实就是进行“加锁”操作,创建文件成功的那个server其实就是抢占到了“锁”。用户通过打开、关闭和读取文件,获取共享锁或者独占锁;
并且通过通信机制,向用户发送更新信息。

综上所述,Chubby是一个lock service,通过这个lock service可以解决分布式中的一致性问题,而这个lock
service的实现是一个分布式的文件系统。

可能会有人问,为什么不是直接实现一个类似于Paxos算法这样的Protocol来解决一致性问题,而是要通过一个lock
service来解决?文献[1]中提到,用lock service这种方式有几个好处:
1. 大部分开发人员在开始开发service的时候都不会考虑到这种一致性的问题,所以一开始都不会使用consensus
protocol。只有当service慢慢成熟以后,才开始认真对待这个问题。采用lock
service可以使得在保持原有的程序架构和通信机制的情况下,通过添加简单的语句就可以解决一致性问题;
2. 正如上文实例中所展现,很多时候并不仅仅是选举出一个master,还需要将这个master的地址告诉其它人或者保存某个信息,这种时候,使用
Chubby中的文件,不仅仅是提供锁功能,还能在文件中记录下有用的信息(比如master的地址)。所以,很多的开发人员通过使用Chubby来保存
metadata和configuration。
3. 一个基于锁的开发接口更容易被开发人员所熟悉。并不是所有的开发人员都了解consensus protocol的,但大部分人应该都用过锁。
4. 一个consensus
protocol一般来说需要使用到好几台副本来保证HA(详见Paxos算法),而使用Chubby,就算只有一个client也能用。
可以看出,之所以用lock
service这样的形式,是因为Chubby不仅仅想解决一致性问题,还可以提供更多更有用的功能。事实上,Google有很多开发人员将Chubby当做name
service使用,效果非常好。

Chubby 官网

http://research.google.com/archive/chubby.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


memcached-session-manager 将session存储到memchached实现方案时。他主要功能是修改tomcat的session存储机制,使之能够把session序列化存放到memcached中。
Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。
EasyTomcat 是一个用来帮助简化 Tomcat 和MySQL 管理的系统,你可以启动、停止和配置 Tomcat和MySQL
riak-session-manager 是使用 Riak 来存储Tomcat session 信息的项目。 配置方法:
tomcat-redis-session-manager 是一个用来将 Tomcat 的 Session 数据存储在 Redis 库中的项目。
这是一款在 Oracle 的 JDeveloper 开发环境下管理Tomcat 的插件,如下图所示:
扩展Tomcat 6.x,使用redis存放session信息!是一个Eclipse项目,最好用EGit来Clone(因为里面有个中文文件名的说明文件).
dhcpcd 是一个兼容 RFC2131的DHCP客户端程序,支持DHCP的全部功能并且体积非常小,只有差不多 46k。
phpDHCPAdmin 是一个基于 Web 的动态主机配置协议(DHCP Daemon)的管理工具,可单独设置组、用户级别;PXE、多子网;空间租赁管理功能。可对数据进行可视化展示、分类。适合大规模的 dhcpd 环境管理。
JDHCP 项目的目的是为 Java 应用增加简单操作 DHCP 协议的方法,DHCP是动态主机配置协议的简称。使用这个API可以轻松的发送、接收和解析DHCP消息,可用于编写DHCP的客户端、服务器端应用。
DHCP服务器为客户端计算机分配IP地址,通常应用在企业网络中以减小配置成本,所有客户端的IP地址都保存在服务器端。
dhcp4java是一个用于操作DHCP信息包的纯Java类库。适用于DHCP服务器, DHCP客户端或DHCP转发。
dhcp-forwarder 是一个 DHCP 中继代理,它将在不同的子网广播域中转发 DHCP 广播信息。
不用看都知道是一个开源的 DHCP 服务器。 Open DHCP Server is a multi-subnet DHCP server. It supports both dynamic and
GAdmin-ProFTPD是一个基于GTK的可视化DHCP服务端管理工具。 更多的屏幕截图请看:http://mange.dynalias.org/linux/gadmin-dhcpd/screenshots/
Dual DHCP DNS Server 是一个提供 DHCP 和 DNS 服务的服务器软件,每一个功能都可以单独启用或者关闭。
Dhcpy6d 是一个开源的 DHCPv6 的服务器软件,相当于为 IPv6 客户端提供 DHCP 协议。
DHCP as a filesystem,要求 FUSE 的支持,使用 Go 语言开发。 安装: GOFUSE=github.com/hanwen/go-fuse
简易图床支持 HDFS 本地存储远端存储等。 Status Esay Graph bed Use HDFS Use Qiniu Use upyun Use Local
一个使用python开发的简单好用的 PXE (DHCP/TFTP/HTTP) 服务器,同时支持netboot、dhcp-