1.对比文件系统,GFS是什么?
GFS设计思路与Linux/Unix文件系统类似:
信息 | Linux/Unix | GFS |
---|---|---|
文件/目录信息(metadata) | 存放到文件系统固定的磁盘分区 | master server |
数据信息 | 按索引指定的磁盘块 | chunk server |
分块大小 | Block size,例如 4096Bytes | 64M |
读写 | 文件读写 (单机) | 分布式请求(RPC) |
错误 | 磁盘文件块损坏 | master 宕机,数据一致性问题 |
性能 | IO瓶颈 | 硬件(IO/网络等) |
2.设计问题的思考
2.1 master 单点
对于单点,通常的思路是主备切换,比如选举。同时,需要通过健康检测查看 master 状态。
2.2 master 性能
master 性能瓶颈主要是硬件(IO/网络等),解决IO问题可以把数据放在内存中,同时还需要提供一套机制,避免宕机重启造成的内存数据丢失,比如序列化机制。
网络问题,主要考虑带宽与网络吞吐。
2.3 数据一致性
GFS 通过3个副本(replica)在不同的 chunk server 上存储,类似 RAID 的机制保证数据的可靠性。
3. 小结
可以看到 GFS 在这个版本(2003年)更多的是从工程性的角度来考虑,解决“如何把互联网上的网页存储下来”这个问题。
背后的需求,网页存储丢失(最终输入到PageRank算法)是允许部分页面丢失的这种情况,所以从工程的角度并不需要做到非常高的可用性与一致性。相比现在的电商或者支付系统来说,不用很高。
另外,在当时的条件下,普通PC+Linux的吞吐能力比网络带宽要好一些。从工程角度,更多地考虑是突破网络的瓶颈,充分压榨服务器资源。