Три, принцип работы FastDFS

задняя часть сервер Nginx балансировки нагрузки

1.1. Загрузка файла

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

1528448985(1)

Выберите сервер трекера

当集群中不止一个tracker server时,由于tracker之间是完全对等的关系,客户端在upload文件时可以任意选择一个trakcer。

Выберите сохраненную группу

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

  1. Круговая система, всеgroupголосование
  2. Specified group, указав определенныйgroup
  3. Баланс нагрузки, много свободного места для храненияgroupприоритет

выбрать сервер хранения

при выбореgroupПосле этого трекер будет вgroupВыберите сервер хранения для клиента и поддерживайте следующие правила выбора хранилища:

  1. Круговая система, вgroupОпрос между всеми хранилищами внутри
  2. First server ordered byip, сортировать по ip
  3. First server ordered byприоритет, отсортировано по приоритету (приоритет настраивается на хранилище)

Выберите путь хранения

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

  1. Циклический опрос, опрос между несколькими каталогами хранения
  2. Сначала тот, у кого осталось больше всего места для хранения

Создать идентификатор файла

После выбора каталога хранилища хранилище сгенерирует Fileid для файла, который объединяется с IP-адресом сервера хранилища, временем создания файла, размером файла, CRC32 файла и случайным числом, а затем base64 кодирует двоичную строку и преобразует ее в печатную форму. нить.

Выберите двухуровневый каталог

Когда каталог хранилища выбран, хранилище назначит файлу идентификатор файла. В каждом каталоге хранилища есть два уровня подкаталогов 256 * 256. Хранилище будет дважды хешировать (угадывать) в соответствии с идентификатором файла и направлять в один из подкаталогов. Затем сохраните файл в подкаталоге с идентификатором файла в качестве имени файла.

Создать имя файла

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

1528449161(1)

Существует 3 типа загрузки файлов:

1) загрузить: загрузить обычные файлы, включая основной файл

2) upload_appender: загрузить файл приложения, который можно добавить позже [также используется в качестве точки останова для возобновления загрузки]

3) upload_slave: загружать подчиненные файлы.

1.2 Загрузка файла

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

downs

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

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

1 Исходное хранилище, в которое загружается файл - пока существует исходное хранилище, оно должно содержать этот файл, а исходный адрес закодирован в имени файла.

2 Временная метка создания файла == временная метка, с которой синхронизируется хранилище и (текущее время - временная метка создания файла) > максимальное время синхронизации файла (например, 5 минут) - после создания файла считается, что после того, как максимальное время синхронизации истекло прошло, оно должно быть синхронизировано и с другим хранилищем.

3 метка времени создания файла

4 (текущее время - отметка времени создания файла) > порог задержки синхронизации (например, один день). - По истечении порогового времени задержки синхронизации файл считается точно синхронизированным.

Модуль Nginx в хранилище сначала проверит, есть ли на локальном компьютере запрошенный файл. Если нет, он извлечет IP-адрес исходного хранилища из FileId, а затем получит к нему доступ. Если исходное хранилище в это время не работает , то эта загрузка. Запрос не выполнен (модуль Nginx не удерживает имя группы запрошенного файла от начала до конца, чтобы запросить у трекера, какое живое хранилище может ответить на запрос)

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

1.3. Удаление файла

Поток обработки удаления и класс загрузки файла:

  1. Клиент запрашивает у Трекер-сервера сервер Хранилища, который может загрузить указанный файл, и параметром является идентификатор файла (включая имя группы и имя файла);
  2. Сервер трекера возвращает доступный сервер хранилища;
  3. Клиент напрямую устанавливает соединение с сервером хранения для завершения удаления файла.

1.4 Синхронизация файлов

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

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

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

Например, в группе есть три сервера хранения A, B и C. A синхронизируется с C с прогрессом T1 (файлы, записанные до T1, были синхронизированы с B), а B синхронизируется с C с отметкой времени T2. (T2 > T1), когда трекер получает эту информацию о ходе синхронизации, он сортирует ее и использует наименьшую из них в качестве метки времени синхронизации C. В этом примере T1 — это метка времени синхронизации C, то есть T1 (это то есть все данные, записанные до T1), были синхронизированы с C), точно так же, согласно приведенным выше правилам, трекер сгенерирует временную метку синхронизации для A и B.

1.5 Возобновление с точки останова

Обеспечивает поддержку файла приложения, который сохраняется через интерфейс upload_appender_file.Файл приложения позволяет добавить файл после его создания. На самом деле файлы-дополнения хранятся так же, как и обычные файлы, с той лишь разницей, что файлы-дополнения не могут быть объединены с транковыми файлами. Размер файла MD5, участвующего в докачке, не изменится. Процесс возобновления загрузки и класс загрузки файлов: сначала найдите исходное хранилище, выполните полную или частичную загрузку, а затем синхронизируйте файлы с сервером в группе через binlog.

1.6 Свойства файла

FastDFS предоставляет интерфейс для установки/получения расширенных атрибутов файлов (setmeta/getmeta).Расширенные атрибуты хранятся в виде пар ключ-значение в одноименных файлах (со специальными префиксами или суффиксами) на хранилище, например /group/M00/ 00/01/some_file — исходный файл, то расширенные атрибуты файла сохраняются в файле /group/M00/00/01/.some_file.meta (не обязательно так, но механизм аналогичен), так что можно найти имя файла. Файл, в котором хранятся расширенные атрибуты.

Авторы двух вышеуказанных интерфейсов не рекомендуют их использовать, так как лишний метафайл еще больше «усилит» проблему хранения массивных мелких файлов, в то же время из-за того, что мета очень мала, использование его дискового пространства невелико. Например, метафайл размером 100 байт также должен занимать 4 КБ (block_size) дискового пространства.

1.7. Поддержка HTTP-доступа

И трекер, и хранилище FastDFS имеют встроенную поддержку http протокола, клиент может скачивать файлы по http протоколу, когда трекер получает запрос, он перенаправляет запрос в хранилище, где находится файл через http перенаправление механизма; за исключением встроенного http Кроме протокола, FastDFS также предоставляетмодуль расширения apache или nginxЗагрузка файла поддержки.

nginx