分布式基础学习
所谓分布式,在这里,很狭义的指代以Google的三驾马车,GFS、Map/Reduce、BigTable 为框架核心的分布式存储和计算系统。通常如我一样初学的人,会以Google这几份经典的论 文作为开端的。它们勾勒出了分布式存储和计算的一个基本蓝图,已可窥见其几分风韵,但 终究还是由于缺少一些实现的代码和示例,色彩有些斑驳,缺少了点感性。幸好我们还有 Open Source,还有Hadoop。Hadoop是一个基于Java实现的,开源的,分布式存储和计算的项 目。作为这个领域最富盛名的开源项目之一,它的使用者也是大牌如云,包括了Yahoo, Amazon,Facebook等等(好吧,还可能有校内,不过这真的没啥分量...)。Hadoop本身,实 现的是分布式的文件系统HDFS,和分布式的计算(Map/Reduce)框架,此外,它还不是一个 人在战斗,Hadoop包含一系列扩展项目,包括了分布式文件数据库HBase(对应Google的 BigTable),分布式协同服务ZooKeeper(对应Google的Chubby),等等。。。
如此,一个看上去不错的黄金搭档浮出水面,Google的论文 + Hadoop的实现,顺着论文 的框架看具体的实现,用实现来进一步理解论文的逻辑,看上去至少很美。网上有很多前辈 们,做过Hadoop相关的源码剖析工作,我关注最多的是这里,目前博主已经完成了HDFS的剖 析工作,Map/Reduce的剖析正火热进行中,更新频率之高,剖析之详尽,都是难得一见的, 所以,走过路过一定不要错过了。此外,还有很多Hadoop的关注者和使用者贴过相关的文章 ,比如:这里,这里。也可以去Hadoop的中文站点(不知是民间还是官方...),搜罗一些学 习资料。。。
我个人从上述资料中受益匪浅,而我自己要做的整理,与原始的源码剖析有些不同,不是 依照实现的模块,而是基于论文的脉络和实现这样系统的基本脉络来进行的,也算,从另一 个角度给出一些东西吧。鉴于个人对于分布式系统的理解非常的浅薄,缺少足够的实践经验 ,深入的问题就不班门弄斧了,仅做梳理和解析,大牛至此,可绕路而行了。。。
一. 分布式文件系统
分布式文件系统,在整个分布式系统体系中处于最低层最基础的地位,存储嘛,没了数据 ,再好的计算平台,再完善的数据库系统,都成了无水之舟了。那么,什么是分布式文件系 统,顾名思义,就是分布式+文件系统。它包含这两个方面的内涵,从文件系统的客户使用的 角度来看,它就是一个标准的文件系统,提供了一系列API,由此进行文件或目录的创建、移 动、删除,以及对文件的读写等操作。从内部实现来看,分布式的系统则不再和普通文件系 统一样负责管理本地磁盘,它的文件内容和目录结构都不是存储在本地磁盘上,而是通过网 络传输到远端系统上。并且,同一个文件存储不只是在一台机器上,而是在一簇机器上分布 式存储,协同提供服务,正所谓分布式。。。
因此,考量一个分布式文件系统的实现,其实不妨可以从这两方面来分别剖析,而后合二 为一。首先,看它如何去实现文件系统所需的基本增删改查的功能。然后,看它如何考虑分 布式系统的特点,提供更好的容错性,负载平衡,等等之类的。这二者合二为一,就明白了 一个分布式文件系统,整体的实现模式。。。