解决的特点
1.对于组件无法工作可以当作常态,因为机器数量以及廉价等原因,会频频出现机器组件失效问题
2.对于处理的数据非常巨大
3.对于数据大部分是追加,而不是覆盖
4.能够提供API,来随时调整系统
处理大规模顺序读,小规模随机读,能够处理大规模数据,通常被用于 生产者-消费者 模式
一个GFS集群包含一个master和多个chunk服务器,可以同时被多个客户端访问
ChunkServer:数据存储节点,包含多个固定大小的Chunk
Chunk:每个文件至少一个Chunk,并存在唯一标示,默认一共3个副本
master保存了元数据(描述数据的数据),chunk的管理等等
Chunk的大小设置为较大的优缺点
优点:对同一个Chunk进行多次读写操作,可以减少负载,保持长时间连接可以增强读的性能,可以减少master的内存
缺点:会让Chunk成为热点,也就是说一直操作这个文件
客户端 -(文件名,chunk索引)-> master
GFS系统存储的3种主要类型的元数据:文件和chunk的命名空间,文件和chunk的对应关系,每个chunk副本的存放地点
元数据
元数据都保存在内存中(master),因此chunk的数量以及整个系统的承载能力都取决于master服务器所拥有的内存大小,但其实元数据所占用的内存并不大
对于chunk的位置信息,master会轮询chunk服务器来获取
对于某个操作,必须保证操作日志更新以后,才会去相应客户端查询日志文件
租约
客户端向master查询准备写入的chunk的信息
master会返回第一个主副本为当前租约的副本
客户端会向多个副本推送数据
主副本在将数据写入本地的同时,通知其他副本讲数据写入各自节点
Master节点
通过锁,使得命名空间的修改为原子性的
副本的存放,不能都放在同一磁盘或者物理机上,最大化网络带宽
当创建一个chunk的时候要找一个空间利用率低的节点和磁盘,最近一段时间新建chunk较少的节点,并把副本放到不同的机架上
垃圾回收
GFS采取延时回收策略。当要删除文件时,会将其更改一个隐藏名字,并且增加一个删除时间,master会定期检查,一旦超时就会将其删除
对于master不能识别的副本都是垃圾,但不会立即回收,会在周期性的常规垃圾扫描才回收,并在master相对空闲时完成
快照
对当前系统进行拍照,用户可以在任意时刻回滚到快照的状态
当master收到快照请求时,并不会立即对chunk进行拷贝,只会保存其元数据,等到client需要修改指定chunk时,才会进行本地复制(本地复制可以节省带宽)
容错
Master和ChunkSever,都被设计成数秒内可以恢复并且重启,Client和其他服务器发现请求超时,会重连重启的Server
ChunkServer关闭或者校验出损坏副本时,Master会通过已有的副本来保障副本个数
CheckPoint文件+操作日志可以完成Master的恢复