The Google Filesystem

Sanjay Ghemawat, Howard Gobioff, Shun-Tak Leung

Перевод с английского: М. С. Филенко


Источник: SOSP’03, October 19–22, 2003, Bolton Landing, New York, USA.
http://labs.google.com/papers/gfs.html

§  Аннотация

Мы разработали и внедрили Google File System, масштабируемую распределенную файловую систему для больших распределенных ресурсоемких приложений. Она обеспечивает отказоустойчивость, работая на недорогом аппаратном обеспечении и обеспечивает высокие совокупные показатели для большого числа клиентов. Разделяя большинство целей, которые ставились при разработке имеющихся распределенных файловых систем, наша разработка также обусловлена собственными наблюдениями при загрузке наших приложений и нашей технической средой. Как и предполагалось, имеются заметные отличия от ранних предположений. Это заставило нас провести переоценку традиционных подходов и исследовать радикально отличающиеся идеи проектирования.
Файловая система успешно отвечает нашим потребностям в хранении. Она широко используется в Google в качестве платформы хранения и обработки данных, используемых нашими службами ровно так же, как и для научных исследований и разработок, которые требуют обработки больших объемов информации. Самый крупный кластер на сегодняшний день предоставляет хранилище в сотни терабайт и к нему постоянно обращаются сотни клиентов.
В этом документе мы представим расширения интерфейса файловой системы разработанные для поддержки распределенных приложений, обсудим многие аспекты нашей разработки и предоставим доклад проведенных измерений как при микротестах, так и при реальном использовании в мире.

§  Введение

Мы разработали и внедрили собственную файловую систему GFS чтобы быть готовым к стремительному росту потребностей Google в обработке данных. GFS разделяет общие цели и задачи других разработок предыдущих распределенных файловых систем такие, как масштабируемость, надежность и доступность. Тем не менее, наша разработка обусловлена собственными наблюдениями за поведением наших приложений под нагрузкой в нашем техническом окружении. Мы провели переоценку традиционных вариантов построения и исследовали принципиально другие цели в сфере разработки.
Во-первых, выход из строя компонент — это скорее нормальная ситуация, нежели исключение. Файловая система состоит из сотен или даже тысяч компьютеров, предназначенных для хранения информации, собранных из недорогих компонент, число которых соизмеримо с числом клиентов, имеющих доступ к хранилищу. Количество и качество компонент гарантирует, что некоторые могут не функционировать, а некоторые — вообще не подлежат восстановлению. Мы имели дело с проблемами, вызванными ошибками в программном обеспечении, брешами в операционных системах, человеческим фактором, а также отказами дисков, памяти, соединений, сети и электропитания. Следовательно, такие возможности, как постоянное наблюдение, обнаружение ошибок, устойчивость к сбоям и автоматическое самовосстановление, должны быть интегрированы непосредственно в систему.
Во-вторых, традиционно считаем файлы большими. Как правило, распространены многогигабайтные файлы. Обычно, каждый файл содержит много объектов приложения, таких как веб-документы. Когда мы постоянно работаем с быстрорастущими наборами данных, при которых приходится обрабатывать миллиарды терабайтных объектов, становится практически невозможным управлять таким количеством объектов, разбитых на килобайтные блоки, даже если их поддерживает система. В результате мы пересмотрели вопросы, касающиеся ввода/вывода и размера блоков.
В третьих, многие файлы изменяются чаще в результате дописывания данных в конец, чем перезаписывания существующих. Случайная запись внутрь файла практически исключена. Будучи однажды записанным, файл лишь читается и часто именно последовательно. Большой набор самой разной информации попадает под эти требования, в том числе, например, большие репозитории, которые сканируются программами; потоки данных, генерируемые приложениями; возможно, какая-то архивная информация. В результате, именно запись в конец становится во главе проблемы оптимизации производительности и гарантий автономности в то время, как кэширование блоков данных на стороне клиента уже не столь важно.
В четвертых, совместная разработка приложений и программного интерфейса файловой системы предоставляет общие преимущества системы, повышая гибкость.