Рекомендации к подбору схемы Erasure Coding

Общие термины

Стирающее кодирование (англ. erasure coding, EC) - в теории кодирования помехоустойчивый код, способный восстанавливать части данных в случае их потери. Бит чётности, код Хэмминга, код Рида-Соломона - это всё представители данного класса кода. Каждый из них характеризуется алгоритмической сложностью и избыточностью данных, т.е. количеством частей, которые можно потерять, но суметь восстановить изначальное сообщение. В продукте Закрома.Хранение в сервисе ZDS используется код Рида-Соломона для организации отказоустойчивого хранения файлов.

Общую схему EC можно представить в виде D+N, где D - кол-во частей данных, N - избыточное кол-во частей. Перед записью файла на диски, он разбивается на D частей (data part). Затем по алгоритму создаются дополнительные N частей чётности (parity part). Далее D+N частей будут равномерно распределены между дисками кластера.

Схему кодирования EC (далее в тексте будет использоваться именно она) также указывают следующим образом - EC K:N, где K - общее кол-во частей, N - избыточное кол-во частей. Кол-во частей данных в таком случае равно K-N.

image

Основываясь на алгоритме, для успешного чтения файла в схеме EC K:N необходимо, чтобы были доступны любые K-N частей. Или с другой стороны - мы не должны терять более N частей от общего кол-ва.

Соотношение частей

Существует несколько простых ограничений на K и N из схемы EC:

  • K должно быть кратно (делиться без остатка) кол-ву узлов (серверов).
  • Кол-во всех дисков должно быть кратно K.
  • N должно быть меньше или равно чем K/2

Коэффициент хранения (КХ) - это отношение полезного объёма к общему объёму хранения. Для схемы EC K:N он равен (K-N)/K или 1-(N/K). Чем больше избыточность, тем меньше полезного объёма у нас остаётся.

Базовые рекомендации

Точки отказа существующие в рамках EC - это диск и сервер. Требования к отказоустойчивости, которые часто предъявляют к системе хранения данных:

  • Потеря одного диска не должна приводить к отказу системы
  • Потеря/выключение одного сервера (например для целей обновления ОС) не должно приводить к отказу системы

EC имеет одно существенное ограничение не позволяет изменять соотношение частей данных и частей избыточности (data/parity) после начала использования.

На примере этих требований рассмотрим, как это влияет на схему EC. Допустим у нас 4 сервера по 4 диска в каждом. Исходя из ограничений схемы K может принимать следующие значения - 4,8,16. Рассмотрим несколько вариантов для N:

Схема ECКоэффициент храненияОтказоустойчивость
EC 4:10.75можем потерять один диск на любом сервере или один сервер
EC 8:20.75можем потерять два диска на любых серверах или один сервер
EC 8:30.625можем потерять три диска на любых серверах или один сервер + один диск на любом сервере
EC 16:40.75можем потерять четыре диска на любых серверах или один сервер
EC 16:50.6875можем потерять пять дисков на любых серверах или один сервер + один диск на любом сервере
EC 16:60.625можем потерять шесть дисков на любых серверах или один сервер + два диска на любых серверах

Видно, что EC 16:6 сопоставим с EC 8:3 по коэффициенту хранения, но превосходит его по отказоустойчивости. Но негативным моментом увеличения количества частей является:

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

Так же нужно принимать во внимание профиль среднестатистического файла. Если мы понимаем, что будем хранить небольшие файлы, менее 1 MB, то разбивать их 16 частей невыгодно, как минимум с точки зрения последовательного чтения/записи с диска.

Общие рекомендации можно свести к следующим моментам:

  • Минимально возможная конфигурация - 3 сервера. Не стоит ожидать хорошего КХ и отказоустойчивости от такой конфигурации.
  • Если мы считаем, что сервера достаточно отказоустойчивые (или используем виртуальные машины), то можем закладывать возможность одновременного отказа только одного сервера из кластера.
  • Желательно закладывать возможность отказа диска на любом работающем сервере в момент отказа/недоступности другого сервера (т.е. не использовать конфигурации вида EC X:1 без RAID / отказоустойчивого СХД).
  • Между конфигурациями с одинаковыми параметрами выбирать те, у которых кол-во частей K меньше: EC 8:3 предпочтительнее чем EC 16:6
  • Максимально рекомендуемое кол-во серверов в одном кластере - 9. Лучше организовать 2 кластера меньшего размера, чем один большой. Кластера ZDS можно “объединить” уже на уровне Закрома.Хранения.

Типовые схемы

Схема ECКоличество серверовКратность кол-ва дисков на одном сервереКоэффициент храненияОтказоустойчивость
EC 9:4330.554 диска или 1 сервер + 1 диск
EC 12:4430.664 диска или 1 сервер + 1 диск
EC 16:5440.68755 дисков или 1 сервер + 2 диска
EC 15:4530.734 диска или 1 сервер + 1 диск
EC 10:4520.64 диска или 1 сервер + 1 диск или 2 сервера
EC 14:4720.714 диска или 1 сервер + 1 диск или 2 сервера

EC и RAID

EC и RAID не противоречат друг другу и могут использоваться в Закрома.Хранения совместно. Если их использовать совместно, то для EC каждый RAID массив будет являться просто отдельным диском. Приведём сравнительный анализ на примере 4 серверов с 4 дисками.

EC 16:4EC 16:5EC 4:1 + RAID5
Коэффициент хранения0.750.68750.5625
Отказоустойчивость4 диска или 1 сервер5 дисков или 1 сервер + 1 диск4 диска на разных серверах или 1 сервер + 1 диск
Нагрузка инфраструктуру в момент восстановления дискана сеть и диски на разных серверахна сеть и диски на разных серверахна локальные диски в рамках RAID массива
Возможность расширения хранилищатолько кратное увеличение дисков, от 16 штук суммарно.только кратное увеличение дисков, от 16 штук суммарно.от 1 диска на RAID массив - от 4 дисков суммарно.

Для такого количества дисков RAID5 будет проигрывать по коэффициенту хранения и даже отказоустойчивости. Но если кол-во дисков будет значительно больше, картина не будет столь однозначной. Возьмём те же 4 сервера , но уже 8 дисков.

EC 16:4EC 16:5EC 4:1 + RAID5
Коэффициент хранения0.750.68750.656
Отказоустойчивость4 диска или 1 сервер5 дисков или 1 сервер + 1 диск4 диска или 1 сервер + 1 диск
Возможность расширения хранилищатолько кратное увеличение дисков, от 16 штук суммарно.только кратное увеличение дисков, от 16 штук суммарно.от 1 диска на RAID массив - от 4 дисков суммарно.

EC и СХД

Так же возможно использование мощностей уже существующих СХД. Обычно оно уже предоставляет отказоустойчивую конфигурацию дисковой подсистемы. В таком случае предлагается использовать минимально избыточную конфигурацию вида EC X:1, где X - количество серверов выделенных под хранение. Чем больше X, тем выше коэффициент хранения, но и тем большее кол-во серверов вам понадобится. Мы рекомендуем остановиться на EC 4:1 (КХ - 0,75) или EC 5:1 (КХ - 0,8)

Смотрите также
Отказоустойчивость