26 ноября 2013

Google File System (GFS)

Google File System (GFS)

Статья из цикла «Google Platform»

Google File System (GFS) – распределенная файловая система (ФС) Google. Система является проприетарной, по некоторым сведениям работа над GFS была начата еще в 2000 году; общие принципы построения были довольно подробно описаны в документе [1], представленном на ACM SIGOPS Operating Systems Review в 2003 году.

Архитектура

GFS предназначена для хранения больших объемов данных (петабайты). Файлы в ФС поделены на куски фиксированного размера (в терминологии GFS – «chunk») по 64 Мб (в общем случае).

Файлы данных хранятся на Chunk-узлах (в терминологии GFS – «Chunkserver»). Chunkserver на аппаратном уровне представляет commodity-оборудование. Поэтому (и не только поэтому) для обеспечения надежного хранения данных данные в GFS автоматически реплицируются как минимум трижды.

Кроме Chunkserver'ов в GFS есть единственный Master-сервер. Master представляет собой вычислительный узел, ответственный за координацию и мониторинг Chunkserver'ов. По аналогии с NameNode в HDFS, Master в GFS отвечает за:

  • работу с метаданными – пространства имен, file-to-chunk маппинг, информация о доступе к данным;
  • операции над chunk'ами, в т.ч. сборка мусора («осиротевших» chunk’ов);
  • мониторинг Chunkserver'ов посредством hearbeat-сообщений.

Как и в случае с NameNode в HDFS, Master-узел в GFS является потенциальным «узким местом» системы, имеет избыточное число ответственностей и является единичной точкой отказа.

Архитектура GFS Иллюстрация 1. Архитектура GFS. Источник иллюстрации [1]

Базовые принципы

Описанная архитектура полностью удовлетворяет принципам, заложенным инженерами Google в GFS, а именно:

  1. Аппаратные неисправности в кластерных системах нужно рассматривать как норму, а не как исключение;
  2. Данные уже имеют огромный размер и их объем будет только расти. Система ввода-ввода должна быть спроектирована с расчетом на размер данных, которыми она будет оперировать;
  3. Файлы изменяются путем добавления новых данных в конец файла, а не путем переписывания существующих данных. Запись в произвольные места, как не непоследовательное чтение данных из файла гипернеэффективны. Эффективно использование подхода «write once, read many»;
  4. Дизайн распределенной ФС, не должен полагаться на дизайн приложений, его использующих. Т.о. файловая система должна знать минимальное количество сведений о клиентах и характере операций над данными, которые эти клиенты осуществляют.

Особенности GFS

GFS разделяет потоки данных и потоки команд. Так, как показано на иллюстрации 1, потоки команд проходят от Master к клиентам и от Master к Chunkserver’ам. В то время как потоки данных проходят от Chunkserver к клиентам напрямую, минуя Master. Это позволяет увеличить способность к масштабируемости всего GFS кластера в целом, т.к. Master не является «узким местом» при обмене данными с клиентами.

Кроме «стандартных» для ФС команд: create, delete, open, close, read, write – GFS также поддерживает операции snapshot и record append. Snapshot эффективно создает копию файла или директории, а record append позволяет добавлять данные в конец файла одновременно нескольким клиентам с гарантией атомарности изменений.

Выше я упоминал, что, как и во всех системах, построенных по архитектуре Master-Slave, Master сервер в GFS является единичной точкой отказа. Для того, чтобы максимально нивелировать влияние недоступности Master на общую доступность системы в GFS функционирует система логгирования операций и checkpoint'ов (при достижении лога определенных объемов).
Кроме того, есть:

  • система мониторинга за доступностью Master;
  • «Shadow» Master, которые позволяет минимизировать время «поднятия» нового Master;
  • каноническое имя Master, по которому обращаются к Master-серверу клиенты, позволяет с помощь DNS alias за максимально короткий срок переключить клиентов на новый Master.

Будущее и итоги

GFS – распределенная файловая система, оптимизированная для работы с большими наборами данных. Система рассчитана на многопоточное добавление данных и их последовательное чтение, а также поддерживает стандартные для файловых систем операции.

GFS является масштабируемой высокодоступный системой с надежным хранением данных.

Инновационные принципы и концепции, описанные в [1], легли в основу HDFS – open-source распределенной файловой системы, ключевой компоненты платформы Hadoop.

В то же время, GFS имела как ряд недостатком, которые в конечном итоге влияли на возможность масштабируемости и доступность системы, так и ряд принципиальных ограничений - неспособность к геораспределенности, невозможность работать в real-time и/или near-real-time режиме.

Хотя в 2013 GFS уже не выглядит системой без недостатков, но на момент описания ее в research paper [1] в 2003 году она шла на шаг вперед своего времени. Обновленная версия GFS имеет название Colossus [10]. О Colossus речь пойдет в одной из следующих статей из цикла.

Список источников*

  • [1] Sanjay Ghemawat, Howard Gobioff, Shun-Tak Leung. The Google File System. ACM SIGOPS Operating Systems Review, 2003.
  • [10] Andrew Fikes. Storage Architecture and Challenges. Google Faculty Summit, 2010.

* Полный список источников, используемый для подготовки цикла.

Автор статьи

,
DS/ML Preacher, Microsoft MVP && Coffee Addicted