阅读GFS论文时,可以尝试思考如下问题 来自《大规模分布式存储系统》 1)为什么存储三个副本?而不是两个或者四个? 2)Chunk的大小为何选择64MB?这个选择主要基于哪些考虑? 3)GFS主要支持追加(append)、改写(overwrite)操作比较少。为什么这样设计?如何基于一个仅支持追加操作的文件系统构建分布式表格系统Bigtable? 4)为什么要将数据流和控制流分开?如果不分开,如何实现追加流程? 5)GFS有时会出现重复记录或者补零记录(padding),为什么? 6)租约(Lease)是什么?在GFS起什么作用?它与心跳(heartbeat)有何区别? 7)GFS追加操作过程中如果备副本(Secondary)出现故障,如何处理?如果主副本(Primary)出现故障,如何处理? 8)GFS Master需要存储哪些信息?Master数据结构如何设计? 9)假设服务一千万个文件,每个文件1GB,Master中存储的元数据大概占用多少内存? 10)Master如何实现高可用性? 11)负载的影响因素有哪些?如何计算一台机器的负载值? 12)Master新建chunk时如何选择ChunkServer?如果新机器上线,负载值特别低,如何避免其他ChunkServer同时往这台机器迁移chunk? 13)如果某台ChunkServer报废,GFS如何处理? 14)如果ChunkServer下线后过一会重新上线,GFS如何处理? 15)如何实现分布式文件系统的快照操作? 16)ChunkServer数据结构如何设计? 17)磁盘可能出现“位翻转”错误,ChunkServer如何应对? 18)ChunkServer重启后可能有一些过期的chunk,Master如何能够发现?