IT 论文精读 · PAPER 17

The Google File System(GFS)

Ghemawat, Gobioff & Leung · Google · SOSP 2003

EN →

这篇论文干了什么?

2003 年,Google 的三位工程师公开了他们自己造的一套存文件的系统——GFS。它要解决的事很实在:Google 的搜索、爬下来的整个网页库、日志……全都大得离谱,一台机器根本装不下,得摊到成千上万台便宜机器上一起存。GFS 就是把这几千台机器粘成「一块超级大硬盘」的那层软件。它后来成了 MapReduce、Bigtable 的地基,也直接催生了开源的 Hadoop。

先说个扎心的前提

他们造这套系统时认准一件事:机器坏,是常态,不是意外。几千台廉价机器摆在一起,每天都有硬盘冒烟、电源挂掉、网线松动——不是「会不会坏」,而是「此刻正有几台坏着」。传统存储系统把「硬件基本可靠」当默认前提,到这个规模就彻底不成立了。GFS 的全部设计,都是从「随时有东西在坏」这个假设倒推出来的。

它换了个思路

GFS 的安排出奇地简单,就两种角色:一个「总管」(master)和一大群「仓库工」(chunkserver)。

关键的取巧在于:总管只管账本,从不碰货。真正的文件数据被切成一个个大块,每块存三份、扔在三台不同的机器上;总管手里只有一本「账」——哪个文件由哪些块组成、每块的三份分别在谁那儿。你要读文件,先问总管「东西在哪」,总管报个地址,你就直接去那台仓库工机器搬货,不再经过总管。

它凭什么撑得住?

几个朴素但管用的决定。一、切成大块。文件按 64 MB 一大块来切(而不是按几 KB 的小格子),账本一下就小了很多——总管用一台机器的内存就能把整个系统的账记下。二、每块存三份。一台机器挂了,另两份还在;总管发现哪块少了一份,会悄悄再复制一份补齐,你几乎无感。三、总管不碰数据。所有搬货都是客户端和仓库工「点对点」直连,总管永远不会因为「所有流量都从我这过」而堵成瓶颈。四、为「往后追加」优化。Google 的活儿大多是「把新数据不断加到文件末尾」(比如源源不断的日志),GFS 专门把「很多人同时往一个文件末尾追加」这件事做得又快又安全。

它带来了什么

GFS 第一次让人相信:用一堆随时会坏的廉价机器,真能拼出一个又大、又扛造、还好用的存储系统——靠的不是让每台机器更可靠,而是让整套系统「容忍机器坏」。这套「便宜机器 + 多副本 + 软件兜底」的路子,成了此后十几年大数据基础设施的通用模板。

一句话记住

把几千台会坏的廉价机器粘成一块超级大硬盘:数据切成大块、每块存三份、机器坏了自动补;一个「总管」只记账不碰货,读写都由客户端和仓库工直连——于是系统又大、又扛坏、又不堵。这是大数据时代存储的第一块地基。

想看它的架构图、租约与追加写的机制、还有真实集群的数字? → 切到精读版