GFS/HDFS的设计理念——Simple is beauty!

By | 2019年2月24日
阅读《RDBMS架构:写前日志(Write-Ahead Logging)保证ACID性质》文章可以大致明白实现本机的ACID性质的艰巨性,那么分布式系统亦改如何?本文从熟知的Linux ext4、Windows ntfs、Mac OS hfs….开始讲起,将你带入一个分布式文件系统的世界!


请先容我介绍另外两个前辈,


NFSv2——Sun公司1985发布了NFSv2,定义了开放的client/server之间的通信协议标准。

  • Stateless(无状态)——NFS Server不保持任何状态,每个操作都是无状态的。(Read: file handle, offset, count; Write: file handle, offset, count, data)。
  • Idempotent(幂等性:重复多次结果不变)——READ操作是Idempotent,在没有其它操作前提下,重复多次结果是一样的;WRITE操作是Idempotent,在没有其它操作前提下,重复多次结果是一样的(在相同位置offset写相同的数据)。
  • 针对内存缓存数据不一致的解决办法:用GETATTR请求去poll(轮询),获得最新的文件属性,比较文件修改时间。


AFS——解决NFS polling状态的问题。

  • Client 获得一个文件时,在server上登记;
  • 当server发现文件修改时,向已登记的client发一个callback;
  • Client收到callback,则删除缓存的文件。


小结:对于以上两种文件系统。如果服务器发生异常了,你只需要重启服务器就可以了,其他什么额外的操作都不用(因为Stateless);如果客户端一个请求没有响应,那么就不断重试(因为Idempotent)。


GFS/HDFS——不支持并行的写操作,不需要distributed transaction。

  • 优化了对大块数据的顺序读,并行追加(append);
  • 不支持文件修改(overwrite)操作。所以,consistency的实现可以大大简化!


架构比较:对于NFSv2/AFS系列,所有程序不改变就可以用;GFS/HDFS系列,必须链接GFS/HDFS Client库才能用。从下图中可以看的很明显,一个在用户态自由选择安装,一个在内核态由操作系统承担。


References:

[1] 陈世敏老师的《大数据管理系统与大规模数据分析》课程讲义

©qingdujun

2018-5-1 于北京 怀柔

发表评论