Распределенная файловая система Quantcast File System и ее небольшой обзор

в 14:22, , рубрики: dfs, Серверное администрирование, системное администрирование, метки:

С развитием информационных технологий растет потребность в хранении и обработки большого объема информации. Для хранения большого объема данных используются распределенные файловые системы. Об одной из таких файловых систем и пойдет речь в данной статье.
Работая над проектом, я столкнулся с потребностью в хранении большого объема данных. Одна из программ проекта, написанная на c++, генерирует большой объем статистики, которую необходимо где-то дальше хранить. Работая автономно на сервере, такая программа генерирует сотни гигабайт информации, а в дальнейшем прогнозируется только рост объема генерируемой информации.

Соответственно возникает вопрос – где хранить все эти данные? Если хранить данные на севере, на котором запущенна программа, то место на диске очень скоро исчерпается. Стало ясно, что для хранения данных необходимо использовать распределенную файловую систему, но только какую? Погуглив в Интернете находим различные распределенные файловые системы, но взгляд непроизвольно останавливается на новой распределенной файловой системе QFS (Quantcast File System). Давайте поймем почему. Не путайте с QFS (Quick File System) – файловой системе от Sun Microsystems.

Что такое QFS (Quantcast File System)

Quantcast File System (QFS) является высокопроизводительной, отказоустойчивой, распределенной файловой системой, разработанной для поддержки технологии MapReduce и других приложений, осуществляющих последовательное чтение и запись крупных файлов.

QFS – распределенная файловая система с открытым кодом, распространяемая по лицензии Apache 2.0, разрабатываемая компанией Quantcast и представляемая как альтернатива HDFS. Она образовалась из KFS (Kosmos File System), которую компания Quantcast стала использовать для вторичного хранилища. В 2011 году они перенесли основную обработку данных в QFS и перестали использовать HDFS. За следующий год они записали и прочли более 4 эксабайта информации, что стало гарантией готовности продукта к выходу в свет. В сентябре 2012 года вышла версия QFS 1.0. Код файловой системы стал доступен по адресу github.com/quantcast/qfs

Немного о компании Quantcast из Википедии:

Quantcast — компания, предоставляющая услуги веб-аналитики, выступающая в роли независимого измерителя аудиторий. Деятельность компании в основном заключается в том, чтобы помочь рекламодателям и рекламным площадкам найти друг друга, а затем выступить в роли нейтральной третьей стороны, проводящий измерения, в результате которых определяется объем продаваемой рекламы

Архитектура QFS

Распределенная файловая система Quantcast File System и ее небольшой обзор
QFS состоит из 3 компонентов

  • Metaserver
    Центральный сервер метаданных, который управляет структурой каталогов файловой системы и отображением файлов в физическое хранилище.
  • Chunk Server
    Сервер, который хранит данные.
  • Client Library
    Библиотека, которая предоставляет API файловой системы, чтобы позволить приложениям взаимодействовать с QFS

Возможности QFS

  • Масштабируемость
    Вы можете в любое время добавить в систему еще один Chunk Server. Когда он будет добавлен, Chunk Server установит соединение с Metaserver и станет частью системы. Вам не надо будет перезагружать Metaserver
  • Балансировка
    При размещении данных, Metaserver пытается сохранить данные сбалансированным во всех узлах системы
  • Перебалансирование
    Metaserver будет перебалансировать данные между узлами в системе, когда сервер обнаруживает, что некоторые узлы недостаточно используются (например, chunk server использует менее 20% пространства диска), а другие узлы перегружены (например, chunk server использует более 80% пространства диска).
  • Устойчивый к падениям
    Устойчивость к пропаданию данных это одно из важнейших свойств распределенной файловой системы. QFS поддерживает покусочную репликацию (т.е. хранение нескольких копий каждого куска) и кодирование Рида — Соломона 6+3, недвоичный циклический код, позволяющие исправлять ошибки в блоках данных — тем самым при такой же степени отказоустойчивости как при классической репликации, общий объем хранимой информации меньше! Пример, если в HDFS для хранения 100 терабайт данных с репликацией на 3-х серверах требуется 300 терабайт свободного места, то для хранения в QFS с обеспечением такой же отказоустойчивости требуется только 150 терабайт.
  • Ре-репликация
    Если степень репликации файла упадет ниже установленного значения (например, из-за продолжительного отключения chunk сервера), Metaserver автоматически выполняет репликацию недоступных кусков файла. Данная процедура выполняется в фоновом режиме, не перегружая систему.
  • Целостность данных
    Чтобы справиться с повреждением на дисках блоков данных рассчитывается контрольная сумма каждого блока. Каждый раз при чтении проверяется контрольная сумма блока и если блок поврежден, то используется механизм ре-репликации для его восстановления.
  • Кеширование метаинформации на стороне клиента
    Библиотека QFS клиент кэширует связанные с каталогом метаданные, чтобы избежать повторного поиска сервера при преобразовании путей. Данная информация очищается из кэша после 30 сек.
  • Запись в файл
    Клиентская библиотека QFS использует кэш с обратной записью. Как только кеш переполняется, данные отправляются chunk серверам. Приложение может вручную сбросить данные на chunk сервер, используя метод sync()
  • Управление версиями
    Куски данных имеют версию, чтобы можно было выявить устаревшие данные. Рассмотрим следующий сценарий:

    • Предположим, что chunk сервера s1, s2 и s3 хранят версию V куска C
    • Предположим, что сервер s1 упал и пока сервер s1 лежит клиент начал запись в C
    • Запись будет выполнена на сервера s2 и s3. Версия куска будет изменена на версию V2
    • Когда s1 запустится, он запросит у метасервера версии всех кусков, которые он хранит.
      Метасервер заметит, что сервер s1 хранит устаревшую версию куска C и сообщит об этом серверу s1
    • Сервер s1 удалит устаревший кусок C
  • Отказоустойчивость на стороне клиента
    Клиентская библиотека устойчива к сбоям chunk сервера. Во время чтения, если библиотека клиента определяет, что chunk сервер с которым происходил обмен информацией, стал недоступен, клиентская библиотека переключается на другой chunk сервер и продолжает чтение. Это свойство отказоустойчивости прозрачно для приложения.
  • Поддержка FUSE на Linux
  • Поддерживает права доступа в стиле Unix

Известные проблемы и ограничения

  • В системе существует только один Metaserver. Это единая точка отказа. Файлы Metaserver хранятся на локальном диске, чтобы предотвратить потерю содержимого файловой системы данная информация должна периодически копироваться на удаленный сервер.
  • Максимальное значение репликации 64
  • Отсутствие динамической балансировки. Metaserver на данный момент не поддерживает репликацию кусков файла, когда файл становится горячим. Система, однако, выполняет балансировку ограниченной формы всякий раз, когда она определяет, что диски, на некоторых узлах недостаточно используемые, а на других узлах перегружены информацией.
  • Нет поддержки создания снимкой файловой системы
  • Ограничение случайной записи в файлы кодированные алгоритмом Рида — Соломона. Иными словами, на практике, возможна только последовательная запись в файлы, кодированные алгоритмом Рида — Соломона.
  • Одновременное чтение и запись из/в кусок не поддерживается. Кусок файла не может быть прочитан, пока пишущая программа его не закроет.

Быстрый старт

Установка QFS в тестовой конфигурации довольно проста

  • Скачиваете исходный код проекта github.com/quantcast/qfs/wiki/Binary-Distributions
  • Распаковываете архив
  • Следуя инструкции github.com/quantcast/qfs/wiki/Developer-Documentation собираете проект
  • Далее выполняете ./examples/sampleservers/sample_setup.py -a install
    Если все прошло успешно будет выведена следующая информация:
    Binaries presence checking — OK.
    Setup directories — OK.
    Setup config files — OK.
    Started servers — OK.
  • Вам будет доступен веб-интерфейс по адресу localhost:22000

Пример C++ приложения, работающего с QFS, можете найти в архиве проекта по адресу /examples/cc/qfssample_main.cc

Известные грабли

В ходе экспериментов с данной файловой системой были выявлены некоторые проблемы

  • C++ Client Library работает не стабильно на 32-битном Debian. Потеря данных при записи, иногда происходит ошибка сегментации.
  • Если Meta сервер и Chunk сервер находятся на одном сервере, в настройках Chunk сервера указывайте IPv4 адрес Meta сервера, не указываете localhost, иначе библиотека клиента будет пытаться соединиться с сервером по адресу 127.0.0.1

Интересные ссылки (английский язык)

Заключение

Суть данного поста не в обзоре различных распределенных файловых систем, и не в сравнении возможностей QFS, например с HDFS Hadoop. Цель данного поста обратить внимание отечественного IT-сообщества на новую, интересную на фоне других, распределенную файловую систему QFS (Quancast File System). Пусть еще молодую и не лишенную некоторых недостатков, но, безусловно, готовую занять в скором будущем свое место в экосистеме DFS.

Насколько мне известно, это первая русскоязычная статья, посвященная данному проекту, поэтому я выбрал вводный стиль изложения, серьезно не углубляясь в архитектуру проекта, его установку и настройку.

Автор: waleks

Источник

Поделиться

* - обязательные к заполнению поля