Google云计算有三大核心技术:分布式文件系统GFS、
分布式处理模型MapReduce、分布式结构化表Bigtable
后期可以通过Hadoop深入理解
Google File System(GFS)
存储海量数据的分布式文件系统
GFS是基于数据块存储的大型分布式文件存储系统
分布式存储系统,是将数据分散存储在多台独立的设备上
传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要
分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展(来自百度)
file1:将180M文件分为3个数据块-chunk1、chunk2、chunk3
GFS包括一个master结点(元数据服务器/主服务器),多 个chunkserver(数据块服务器)和多个client(运行各种应用的客户端)
GFS文件被划分为固定大小的数据块(Chunk),由Master在创建时分配一个64位全局唯一的Chunk句柄。Chunkserver以普通的Linux文件的形式将Chunk存储在磁盘中。为了保证可靠性,Chunk在不同的机器中复制多份,默认为三份
Master中维护了系统的元数据,包括文件及Chunk名字空间,GFS文件到Chunk之间的映射,Chunk位置信息。它也负责整个系统的全局控制,如Chunk租约管理,垃圾回收无用Chunk,Chunk复制,等等。Master会定期与Chunkserver通过心跳的方式交换信息。
Client是GFS提供给应用程序的访问接口,它是一组专用接口,不遵守POSIX规范,以库文件的形式提供。
Client访问GFS时,首先访问Master节点,获取与之进行交互的Chunkserver信息,然后直接访问这些Chunkserver,完成数据存取工作
访问Master节点,获取与之进行交互的Chunkserver信息,访问这些Chunkserver,完成数据存取工作
GFS的特点:
可以方便地增加Chunk Server
Master掌握系统内所有Chunk Server的情况,方便进行负载均衡
不存在元数据的一致性问题
文件操作大部分是流式读写,不存在大量重复读写,使用Cache对性能提高不大
Chunk Server上数据存取使用本地文件系统从可行性看,Cache与实际数据的一致性维护也极其复杂
利用POSIX编程接口存取数据降低了实现难度,提高通用性
POSIX接口提供功能更丰富
用户态下有多种调试工具
Master和Chunk Server都以进程方式运行,单个进程不影响整个操作系统
GFS和操作系统运行在不同的空间,两者耦合性降低
Master保存元数据:Name Space,即文件系统的目录结构
Chunk 与 文件名的映射 (因为一个文件会被划分成多个Chunk*,因此需要一个映射来告诉系统,这个文件对应哪几个chunk)的容错通过操作日志完成,当系统发生故障时,通过分析log就可以知道当时存了哪些文件,这些文件又被分成了哪些个chunks
Chunk副本的位置信息存储在Chunk Server上的,当发生故障时,进行磁盘恢复即可
GFS采用副本的方式实现Chunk Server的容错:
每一个Chunk有多个存储副本(默认为三个)
每个Chunk的默认大小是64MB。而每个Chunk又会被划分为多个block,每个block为64K。并且,每个Block都会对应32bit的校验码。当读取某个Chunk中的某个block时,如果与校验码产生出入,则表示此block存在错误,那么将抛弃这个Chunk,转而读取另一个Chunk副本
相关的副本出现丢失或不可恢复等情况,Master自动将该副本复制到其他Chunk Server
块的大小设置原则:最小化寻址开销
每一个Chunk有多个存储副本,默认大小是64MB
块大小分为64MB比传统文件系统块大:
将块分为64MB即最小化寻址开销