一:GFS
Google需要一个支持海量存储的文件系统
方法一:购置昂贵的分布式文件系统与硬件?
方法二:是否可以在一堆廉价且不可靠的硬件上构建可靠的分布式文件系统?
问题:为什么不使用当时现存的文件系统?
Google所面临的问题与众不同 不同的工作负载,不同的设计优先级(廉价、不可靠的硬件)需要设计与Google应用和负载相符的文件系统
优点:在物理上分离,逻辑上统一,用数量上的多,来弥补单个机器的不足,三个臭皮匠赛过诸葛亮
1:GFS传输过程
解析:
Client(客户端):应用程序的访问接口
Master(主服务器):管理节点,在逻辑上只有一个,保存系统的元数据,负责整个文件系统的管理
Chunk Server(数据块服务器):负责具体的存储工作。数据以文件的形式存储在Chunk Server上
应用程序——GFS服务器:文件名
GFS服务器——GFS数据块服务器 搜索文件
GFS数据块服务器——GFS服务器 返回chunk句柄和chunk文职
应用程序——GFS数据块服务器 chunk句柄
GFS数据块服务器——应用程序 数据
典型的数据流和控制流分离
实现机制
1:客户端首先访问Master节点,获取交互的Chunk Server信息,然后访问这些Chunk Server,完成数据存取工作。这种设计方法实现了控制流和数据流的分离。
2:Client与Master之间只有控制流,而无数据流,极大地降低了Master的负载。
3:Client与Chunk Server之间直接传输数据流,同时由于文件被分成多个Chunk进行分布式存储,Client可以同时访问多个Chunk Server,从而使得整个系统的I/O高度并行,系统整体性能得到提高。
2:master容错机制:
GFS将服务器故障视为正常现象,并采用多种方法,从多个角度,使用不同的容错措施,确保数据存储的安全、保证提供不间断的数据存储服务
① Name Space,即文件系统的目录结构
② Chunk 与 文件名的映射 (因为一个文件会被划分成多个Chunk*,因此需要一个映射来告诉系统,这个文件对应哪几个chunk)
③ Chunk副本的位置信息 (一个chunk会存储三个副本*)
① 和 ② 的容错是通过“操作日志”来完成的。也就说存在operation log里。当系统发生故障时,通过分析log就可以知道当时存了哪些文件,这些文件又被分成了哪些个chunks
③是存储在Chunk Server上的,当发生故障时