云计算(1.1)Google云计算三大核心技术 - 分布式文件系统GFS
前言Google云计算有三大核心技术:分布式文件系统GFS、分布式处理模型MapReduce、分布式结构化表BigtableGFSGoogle File System(GFS)存储海量数据的分布式文件系统GFS是基于数据块存储的大型分布式文件存储系统分布式存储系统分布式存储系统,是将数据分散存储在多台独立的设备上传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系...
前言
Google云计算有三大核心技术:分布式文件系统GFS、
分布式处理模型MapReduce、分布式结构化表Bigtable
后期可以通过Hadoop深入理解
GFS
Google File System(GFS)
存储海量数据的分布式文件系统
GFS是基于数据块存储的大型分布式文件存储系统
分布式存储系统
分布式存储系统,是将数据分散存储在多台独立的设备上
传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要
分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展(来自百度)
基于数据块
file1:将180M文件分为3个数据块-chunk1、chunk2、chunk3
GFS结构
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,完成数据存取工作
GFS存取数据
- 写入数据
- 读取数据
- 实际过程
访问Master节点,获取与之进行交互的Chunkserver信息,访问这些Chunkserver,完成数据存取工作
GFS的特点
GFS的特点:
- 采用中心服务器模式
可以方便地增加Chunk Server
Master掌握系统内所有Chunk Server的情况,方便进行负载均衡
不存在元数据的一致性问题
- 不缓存数据
文件操作大部分是流式读写,不存在大量重复读写,使用Cache对性能提高不大
Chunk Server上数据存取使用本地文件系统从可行性看,Cache与实际数据的一致性维护也极其复杂
- 在用户态下实现
利用POSIX编程接口存取数据降低了实现难度,提高通用性
POSIX接口提供功能更丰富
用户态下有多种调试工具
Master和Chunk Server都以进程方式运行,单个进程不影响整个操作系统
GFS和操作系统运行在不同的空间,两者耦合性降低
GFS容错机制
- Master的容错机制
Master保存元数据:Name Space,即文件系统的目录结构
Chunk 与 文件名的映射 (因为一个文件会被划分成多个Chunk*,因此需要一个映射来告诉系统,这个文件对应哪几个chunk)的容错通过操作日志完成,当系统发生故障时,通过分析log就可以知道当时存了哪些文件,这些文件又被分成了哪些个chunks
Chunk副本的位置信息存储在Chunk Server上的,当发生故障时,进行磁盘恢复即可
- ChunkServer容错机制
GFS采用副本的方式实现Chunk Server的容错:
每一个Chunk有多个存储副本(默认为三个)
每个Chunk的默认大小是64MB。而每个Chunk又会被划分为多个block,每个block为64K。并且,每个Block都会对应32bit的校验码。当读取某个Chunk中的某个block时,如果与校验码产生出入,则表示此block存在错误,那么将抛弃这个Chunk,转而读取另一个Chunk副本
相关的副本出现丢失或不可恢复等情况,Master自动将该副本复制到其他Chunk Server
Chunk分布
块的大小设置原则:最小化寻址开销
每一个Chunk有多个存储副本,默认大小是64MB
块大小分为64MB比传统文件系统块大:
- 减少了客户端和master的交互,因为对同一块的读写只需要发送一次初始化请求给master以获取块所在的地址信息。
- 如果块值大,那么客户端更倾向于只和一个chunkserver建立tcp长连接,而避免和好几个chunkserver建立连接带来网络开销。
- 块值大就会减少文件分块的数目,文件的元信息也就不需要包括更多的块信息,master就可以把文件的元信息放到内存中提高访问效率
- 块过大,文件的访问几乎都会集中在某一个chunkserver上,这就容易造成热点问题
- master存储的元数据信息,元数据要放到内存以提供快速访问,快太小会造成元数据太多,访问速度慢
将块分为64MB即最小化寻址开销
更多推荐
所有评论(0)