Введение
Google File System (GFS или GoogleFS, не следует путать с файловой системой GFS Linux) — это запатентованная распределённая файловая система, разработанная Google для обеспечения эффективного и надёжного доступа к данным с использованием больших кластеров стандартного оборудования. В 2010 году файловая система Google была заменена Colossus.
Google File System (GFS or GoogleFS, not to be confused with the GFS Linux file system) is a proprietary distributed file system developed by Google to provide efficient, reliable access to data using large clusters of commodity hardware. Google file system was replaced by Colossus in 2010.
Дизайн
GFS разработан для основных задач Google по хранению и использованию данных (прежде всего, для поисковой системы), которая генерирует огромные объемы данных, подлежащих сохранению. Google File System берет свое начало из более ранней разработки Google под названием "BigFiles", созданной Ларри Пейджем и Сергеем Брином на заре существования Google, когда компания еще располагалась в Стэнфорде. Файлы разделяются на фрагменты фиксированного размера – 64 мегабайта, аналогичные кластерам или секторам в обычных файловых системах, которые крайне редко перезаписываются или уменьшаются в размере; файлы обычно дополняются или считываются. Система также разработана и оптимизирована для работы на вычислительных кластерах Google, состоящих из плотно упакованных узлов, использующих недорогие "стандартные" компьютеры, что требует принятия мер предосторожности против высокой вероятности отказа отдельных узлов и, как следствие, потери данных. Другие проектные решения направлены на обеспечение высокой пропускной способности, даже если это происходит за счет увеличения задержки. Кластер GFS состоит из нескольких узлов, разделенных на два типа: один мастер-узел и несколько чанксерверов. Каждый файл разделен на фрагменты фиксированного размера. Чанксерверы хранят эти фрагменты. Каждый фрагмент получает глобально уникальный 64-битный идентификатор от мастер-узла в момент создания, и поддерживаются логические соответствия между файлами и составляющими их фрагментами. Каждый фрагмент реплицируется несколько раз по сети. По умолчанию – три раза, но это настраиваемо. Файлы, пользующиеся высоким спросом, могут иметь более высокий коэффициент репликации, в то время как файлы, для которых клиентское приложение использует строгую оптимизацию хранения, могут реплицироваться менее трех раз для эффективной очистки неиспользуемых данных. Мастер-сервер обычно не хранит сами фрагменты, а хранит все метаданные, связанные с ними, такие как таблицы, сопоставляющие 64-битные идентификаторы с местоположением фрагментов и файлами, которые они составляют (отображение файлов на фрагменты), местоположение копий фрагментов, процессы, читающие или записывающие конкретный фрагмент, или создающие "снимок" фрагмента для его репликации (обычно по инициативе мастер-сервера, когда из-за сбоев узлов количество копий фрагмента падает ниже заданного значения). Все эти метаданные поддерживаются в актуальном состоянии благодаря периодическому получению обновлений от каждого чанксервера ("сигналы активности"). Разрешения на изменение обрабатываются системой временных, истекающих "аренд", когда мастер-сервер предоставляет процессу разрешение на определенный период времени, в течение которого мастер-сервер не предоставит разрешение другому процессу на изменение фрагмента. Чанксервер, выполняющий изменение (всегда основной владелец фрагмента), распространяет изменения на чанксерверы с резервными копиями. Изменения сохраняются только после подтверждения от всех чанксерверов, что гарантирует завершение и атомарность операции. Программы получают доступ к фрагментам, сначала запрашивая у мастер-сервера местоположение нужных фрагментов; если фрагменты не используются (т.е. нет активных аренд), мастер-сервер отвечает с указанием местоположений, после чего программа связывается с чанксервером и получает данные напрямую (аналогично Kazaa и его суперузлам). В отличие от большинства других файловых систем, GFS не реализована в ядре операционной системы, а предоставляется в виде библиотеки пользовательского пространства.
Интерфейс
Файловая система Google не предоставляет интерфейс POSIX. Файлы организованы иерархически в каталогах и идентифицируются по путям. Поддерживаются операции с файлами, такие как создание, удаление, открытие, закрытие, чтение и запись. Она поддерживает функцию Record Append, позволяющую нескольким клиентам одновременно добавлять данные в один и тот же файл, при этом гарантируется атомарность операции.
Выступление
Исходя из результатов тестирования, при использовании с относительно небольшим количеством серверов (15) файловая система демонстрирует скорость чтения, сопоставимую со скоростью одиночного диска (80–100 МБ/с), но имеет сниженную скорость записи (30 МБ/с) и относительно низкую скорость (5 МБ/с) при дописывании данных в существующие файлы. Авторы не приводят данных о времени случайного доступа. Поскольку мастер-узел не участвует непосредственно в чтении данных (данные передаются с сервера фрагментов непосредственно читающему клиенту), скорость чтения значительно возрастает с увеличением числа серверов фрагментов, достигая 583 МБ/с при 342 узлах. Объединение нескольких серверов также обеспечивает большую емкость, хотя она несколько уменьшается из-за хранения данных в трех независимых местах (для обеспечения резервирования).