本文简单介绍什么是分布式系统,我们为什么需要分布式系统,分布式系统应该关注的特性有哪些,谷歌文件系统( GFS)的一些简单介绍
系列文章的内容整理自清华大学分布式课程主页,课程网站http://thu-cmu.cs.tsinghua.edu.cn/curriculum/dscourse/index.html
目录
什么是分布式系统
分布式系统是有一台你不知道的电脑的崩溃可能会导致你自己电脑的不可用——Leslie Lamport
分布式系统是由一些处理设备(计算或存储)或者计算机通过各式各样的网络协议链接在一起协同工作的系统。
我们为什么需要分布式系统
一方面是因为单个的计算机如果崩溃的话,这样我们的系统就不能够再提供服务或者很好的完成任务,另一个原因在于单个计算机的存储计算能力有限,在互联网时代,我们需要的内容数据量比较大,而且大型的服务器如(IBM大型机)价格昂贵,因此我们需要把廉价的PC机组织成分布式系统
分布式系统应该考虑的内容
一、可伸缩性(Scalability)
整个系统是否可以充分的利用所有的硬件资源,会不会存在只有分布式系统中的一台机器在做相应的工作,而其他的计算机设备只是wait and see
二、可用性(Availability)
系统的可用性是指如果存在系统中的一台设备由于各种原因崩溃,不能提供服务,整个系统是否还能提供服务,由于系统由各种设备组成,因此发生崩溃的可能性极大。
三、一致性(Consistency)
由于分布式系统中数据可能存在多个备份,如何保证一份数据的多个备份保持一致?
四、安全性(Security)
系统是否可以提供访问控制,系统是否可以抵御一些恶意的攻击等等
谷歌文件系统(GFS)
下图是谷歌文件系统的一个整体架构图
整个系统只存在一个master,多个chunkserver,每一个chunkserver保存着多个chunk(块),每个块的大小为64MB,每个chunk真正存储着真正的文件内容。同样的,为了保证系统的可用性,每个chunk都存在至少两个副本,即同一份数据会在整个系统中存在三份。
单Master
可以看到GFS中,整个系统只存在一个master,那么就可能存在这种情况,master崩溃之后,整个系统可能会不可用,因此GFS提出以下方法去优化
- shadow master
- 最小化master的参与度
不通过master操纵数据,master只负责操作元数据
增大单个chunk的大小
元数据(Metadata)
元数据主要包括:
文件和块的命名空间、文件到块的映射、块及其备份的的位置
数据变化(Mutation)
Mutation=write or append
数据的突变可能会导致文件的写或者追加,这样同样的这些改变的文件的副本块也要进行相应的修改和追加。因为前面提到过为了提高GFS的可用性,我们要尽量减少master的参与度,因此在这里提出了租借机制,即mater把一个副本作为自己的私有副本,然后“租借”给他一个权利,让他去负责剩余文件副本的更新操作。
弱一致性模型
GFS实现弱一致性的模型是通过在写或者追加之后,维护一个region的状态实现的
Master的职责
一、元数据的存储
二、名称空间的管理和锁定
三、周期性的跟chunkservers进行沟通
四、chunk块的创建、重备份与重新分配
五、垃圾回收