Массив собирают ради одного: чтобы отказ накопителя не превращался в остановку сервиса. Но избыточность не берётся из воздуха — за неё платят ёмкостью, скоростью записи, временем восстановления или всем сразу в разных пропорциях. Разные уровни массива — это разные точки размена, и выбирают их по профилю нагрузки, а не по номеру.
Чередование без избыточности
Простейшая схема разбивает поток на блоки фиксированного размера и раскладывает их по дискам по кругу. Линейное чтение и запись идут параллельно на все шпиндели, пропускная способность складывается почти линейно, полезная ёмкость равна сумме дисков. Защиты нет вообще: отказ любого накопителя уничтожает массив целиком, потому что каждый файл размазан по всем устройствам. Более того, вероятность отказа растёт с числом дисков — набор из восьми накопителей выходит из строя заметно чаще одиночного.
Ключевой параметр здесь — размер блока чередования. Если он мал относительно типичного запроса, каждая операция задействует все диски: хорошо для крупных последовательных чтений, плохо для множества мелких параллельных запросов, потому что диски не могут обслуживать разные запросы одновременно. Крупный блок даёт обратную картину. Универсального значения нет, и подгонять его имеет смысл под реальный размер операций приложения.
Зеркало
Данные пишутся одновременно на два накопителя, каждый из которых содержит полную копию. Полезной остаётся половина ёмкости — самый дорогой вариант по железу. Взамен получаем поведение, которое проще всего предсказать. Чтение можно распределять между копиями, что заметно помогает при большом числе параллельных запросов. Запись идёт на оба диска, но без дополнительных вычислений и без чтения чего-либо перед записью — операция остаётся одной операцией.
Главное преимущество зеркала проявляется не в штатном режиме, а после отказа. Восстановление — это простое побайтовое копирование с уцелевшего диска на новый. Оставшийся накопитель читается последовательно, нагрузка на него предсказуема, а математики для реконструкции нет. Массив с чередованием поверх зеркал наследует это свойство и потому остаётся стандартным выбором под базы данных и виртуализацию.
Чётность и штраф на запись
Схемы с чётностью хранят избыточность в виде вычисленной суммы: для каждой полосы данных считается контрольный блок, позволяющий восстановить любой недостающий фрагмент. Одна чётность переживает отказ одного диска, двойная — двух. Ёмкости уходит немного: один или два диска из набора независимо от его размера. Именно поэтому такие массивы популярны на файловых хранилищах и архивах.
Расплата — механизм записи. Чтобы изменить один блок, контроллеру недостаточно его записать: нужно пересчитать чётность полосы. Если полоса целиком не переписывается, контроллер сначала читает старый блок данных и старую чётность, вычисляет новое значение и только затем выполняет две записи. Одна логическая операция превращается в четыре физические, а при двойной чётности — в шесть. На последовательной записи крупными кусками этого почти не видно: полоса заполняется целиком, читать нечего. На потоке мелких случайных записей падение кратное.
Второй эффект — деградированный режим. Пока диск отсутствует, каждое чтение блока с потерянного накопителя требует прочитать все остальные диски полосы и восстановить данные вычислением. Массив продолжает работать, но производительность чтения проседает тем сильнее, чем шире набор. Подробнее про аппаратную часть, которая всё это считает, — в разделе о RAID-контроллерах.
Чем шире массив, тем длиннее восстановление
Число дисков в наборе влияет не только на ёмкость. Восстановление схемы с чётностью требует прочитать целиком все оставшиеся накопители и записать реконструированные данные на новый. Время этого процесса определяется объёмом дисков и их скоростью, а не объёмом реальных данных, и на современных ёмкостях измеряется многими часами, а под нагрузкой — сутками. Всё это время массив остаётся без защиты или с одинарной вместо двойной.
Отсюда практическое правило: чем крупнее диски, тем весомее аргумент в пользу двойной чётности или зеркал. Широкие наборы из десятка и более накопителей с одинарной чётностью выглядят экономично на бумаге и плохо ведут себя в момент, когда защита действительно понадобилась.
Как выбирать
Разумный порядок такой. Сначала определяют характер нагрузки: преобладают последовательные потоки или мелкие случайные операции, читающая нагрузка или пишущая. Затем — допустимое окно недоступности и допустимую потерю производительности во время восстановления. И только потом считают ёмкость. Смешанная нагрузка баз данных почти всегда ложится на зеркала, крупные архивы и медиа — на чётность, временные данные, которые не жалко, — на чистое чередование.
Отдельно стоит помнить: тип накопителей меняет расклад. Механические диски и твердотельные ведут себя под штрафом на запись по-разному, а износ у последних зависит от объёма фактически записанного, который избыточность увеличивает. Особенности накопителей для круглосуточной нагрузки разобраны в разделе о серверных накопителях.