Классическое распределенное чтение бумаги: GFS

распределенный

Эта статьяБумага СГФучебные заметки. GFS (Google File System) — это крупномасштабная распределенная файловая система, разработанная Google для распределенной обработки больших данных. При проектировании GFS в основном учитываются следующие характеристики сценария применения:

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

Системный Обзор

В соответствии с особенностями сценария приложения в работе выполняются следующие настройки файловой системы:

  • Система сделана из дешевого железа, так что сбои тоже в прошлом
  • В системе должно храниться много больших файлов
  • Задания на чтение в основном включаютБольшое количество считывателя потока данныхиСлучайное чтение небольших объемов данных
  • Задача записи в основном состоит в том, чтобы записать большой объем данных в конец файла
  • В системе должны быть реализованы соответствующие функции, чтобы разные клиенты могли эффективно писать в один и тот же файл параллельно.
  • Высокая пропускная способность важнее низкой задержки

GFS организует файлы в виде дерева каталогов, но не обеспечивает операции с файловой системой, подобные POSIX. Действие содержит толькоСоздайте,Удалить,Открытым,закрытие,читать,написать,снимокизапись добавитьЕсли операции снимков используются для быстрого копирования файла или каталога, и дополнительная функция позволяет нескольким клиентам добавлять данные в файл параллельно.

GFS кластер состоит изглавный сервер(мастер) и несколькоблочный сервер(chunkserver) состав. Каждый файл состоит изфайловый блокФайловый блок однозначно идентифицируется 64-битным дескриптором блока Размер файлового блока в исходном тексте составляет 64 МБ, но это система 16-летней давности, и 64 МБ сейчас слишком мало.

  • главный сервер: сохраняет всю файловую системуметаданные, метаданные, включая пространства имен, информацию об управлении доступом, сопоставления файлов и блоков и расположение каждого блока файлов, которые также отвечают заУправление арендой файловых блоков,вывоз мусора,перенос файловых блоков, во время работыпакет сердцебиенияОбмен информацией с блочным сервером.
  • блочный сервер: сохранять блоки файлов и сообщать о состоянии мастеру.
  • клиент: Получите метаданные с главного сервера, а затем прочитайте и записывайте данные файла с сервера блока.

размер блока файла

В статье говорится, что использование больших файловых блоков дает много преимуществ:

  • Это может уменьшить количество запросов клиента к основному серверу для определения местоположения блоков, уменьшая нагрузку на основной сервер.
  • Больше операций в одном файловом блоке, что снижает нагрузку на сеть
  • Уменьшает количество метаданных, которые должен хранить главный сервер.

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

метаданные

Метаданные, хранящиеся на главном сервере, в основном:пространство имен файлов,файл для сопоставления блоковиРасположение блока данных.文件命名空间和文件到数据块的映射的数据需要持久化地写入到一个Журнал операций, а местоположение блока данных получается путем связи с сервером блоков.

Эти метаданные необходимо хранить в памяти основного сервера для ускорения доступа. Главный сервер будет периодически сканировать во время работы, чтобы завершить блоки данных.вывоз мусора, ошибочные данные блочного сервераповторное резервное копированиеИ миграция блока данныхбалансировки нагрузки.

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

Модель согласованности

В распределенной файловой системе после модификации файла появятся следующие состояния

написать Дополнительный
Последовательность успешно выполнена Конечно нормально + непоследовательно
Выполнить успешно параллельно последовательный + неопределенный нормально + непоследовательно
Потерпеть поражение непоследовательный непоследовательный
  • последовательный: все клиенты видят один и тот же блок данных
  • Конечно: файл соответствует согласованности, и каждая модификация может знать конкретное содержимое модификации.

Данные записываются в успешную независимую непротиворечивую информацию после успешной одновременной записи того же самого, но неизвестно конкретное содержание каждой модификации. Операции записи и модификации, включая дополнительную запись, определяют, что дополнительная запись должна быть хотя бы одна (см. последующее подробное объяснение).

Файловый детерминизм и производительность в реальном времени в GFS определяются следующими двумя стратегиями:

  1. Изменения в том же порядке на всех репликах
  2. Используйте версии блоков, чтобы определить, устарел ли блок

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

системное взаимодействие

Заказ на аренду и модификацию

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

  1. Клиент запрашивает у мастера, какие блочные серверы держат текущую аренду блоков и другие местоположения реплик. Если текущей аренды нет, выберите реплику для авторизации аренды.
  2. Первичный сервер отвечает со всеми местоположениями реплик и идентификаторами первичных реплик.
  3. Клиенты передают данные на все реплики.
  4. После того, как все реплики подтвердят получение данных, клиент отправляет запрос на запись первичной реплике. Затем первичная реплика предписывает порядок выполнения операций модификации.
  5. Главная реплика отправляет запросы на запись всем остальным подчиненным репликам. Каждая подчиненная реплика выполняет операции модификации в одном и том же порядке.
  6. Ведомый сообщает мастеру, что операция завершена.
  7. Первичная реплика отвечает клиенту

поток данных

Чтобы повысить эффективность сети,поток данныхипоток управленияотделены друг от друга. Поток управления начинается от клиента к мастеру и к подчиненному, а данные передаются линейно по цепочке блочных серверов. Строка серверов фрагментов начинается с клиента и каждый раз выбирает ближайший сервер фрагментов в качестве следующего узла.

Добавление атомарной записи

GFS предоставляет функцию добавления атомарной записи, которая добавляет данные в конец файла и возвращает клиенту начальную позицию новых данных. Перед записью операции добавления первичная реплика проверяет, не превысят ли данные добавления размер последнего блока. Если он превышает, то заполните оставшееся пространство, добавьте данные в новый блок и сообщите клиенту о местоположении. В противном случае добавьте данные непосредственно в последний блок.

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

снимок

Снимки могут быстро скопировать дерево файла или папки и скопировать его при записи.

Работа мастер-узла

Управление пространством имен и блокировка

GFS поддерживает операции блокировки пространств имен, чтобы гарантировать сериализацию. GFS поддерживает сопоставление путей к файлам с метаданными, хранящимися в форме со сжатием префиксов. Каждая папка или файл является узлом в дереве пространства имен, и каждый узел имеет блокировку чтения-записи.

Перед каждой операцией необходимо получить серию замков. Если операция включает/d1/d2/.../dn/leaf, сначала нужно получить папку/d1,/d1/d2,...,/d1/d2/.../dnблокировка чтения файла, но получение блокировки чтения или записи файла/d1/d2/.../dn. Например, мы будем/home/userкопия моментального снимка в/save/user, то можно дать/home/userДобавление блокировки записи не позволяет другим программам/home/userСоздайте новый файл ниже. Очевидно, что блокировки должны устанавливаться последовательно, чтобы избежать взаимоблокировок.

Хранилище копий

Стратегия копирования должна достигать двух целей:

  • Максимальная надежность и доступность данных
  • Максимальное использование пропускной способности сети

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

Создавайте, копируйте и балансируйте

Быстрые реплики создаются в трех случаях: создание блока, повторное копирование и ребалансировка.

Когда блок создается, правила выбора блочного сервера следующие:

  1. Выберите серверы с использованием диска ниже среднего
  2. Ограничьте количество недавно созданных блоков
  3. Распределяйте блоки по разным стойкам

Повторная репликация происходит, когда: сервер фрагментов теряет соединение, реплика повреждается, диск повреждается, а количество резервных копий увеличивается. Блоки реплицируются с приоритетом, как правило, расстоянием от целевого номера резервного копирования, и блок, который блокирует программу, имеет приоритет.

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

вывоз мусора

Когда приложение запрашивает удаление файла, главный узел переименовывает файл в скрытое имя и записывает время, прежде чем физически удалить его через три дня. Также возможно читать и отменять удаления, используя скрытые имена файлов перед физическим удалением. Во время выполнения главный узел сканирует недоступные блоки и удаляет метаданные, а сервер блоков сообщает о блоках, которые больше не нужны. Короче говоря, все реплики, о которых мастер не знает, — это «мусор».

Сборка мусора имеет следующие преимущества перед немедленным удалением:

  1. Коллекция мусора более надежна в распределенных системах с ежедневными сбоями компонентов
  2. Поместите высвобождение пространства в фоновую активность главного узла.
  3. Отложенный сбор дает возможность случайного удаления

Недостатком сборки мусора является то, что он не может быстро освободить место, когда места мало, но его можно решить, изменив копию и стратегию утилизации.

Обнаружение устаревших копий

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

Отказоустойчивость и диагностика

Высокая доступность

Высокая доступность в основном достигается за счетбыстрое восстановлениеикопироватьреализовать.

  • быстрое восстановление: И главный узел, и блочный сервер могут быстро восстанавливаться и запускаться.
  • блочная копия: Каждый блок реплицируется на разные блочные серверы на разных стойках, и, конечно же, есть и другие способы создания копий, например что-то вроде четности в RAID3.
  • реплика главного узла: Журнал операций и контрольная точка главного узла будут сохранены на нескольких машинах.Журнал включает в себя операции модификации и фоновые задачи. После сбоя главного узла GFS запускает новый главный узел, используя контрольные точки и журналы операций. Кроме того, некоторые теневые главные узлы можно настроить так, чтобы уменьшить нагрузку на главный узел, и срок действия метаданных файла на теневом главном узле истечет в течение короткого времени.

целостность данных

Каждый блочный сервер использует контрольную сумму для определения целостности данных, каждый сервер отвечает за обнаружение блока данных и их обслуживание. При чтении данных сервер сначала проверяет блок целостности данных, при проверке ошибки возвращается ошибка. При записи данных необходимо вычислить и обновить контрольную сумму. Во время простоя серверные блоки необходимо сканировать и проверять блоки данных, которые не активны.

Диагностические инструменты

GFS в основном использует журналы диагностики для устранения неполадок, отладки и анализа производительности.

использованная литература

  1. Ghemawat, Sanjay, Howard Gobioff, and Shun-Tak Leung. "The Google file system." (2003).