Как RAID влияет на производительность чтения и записи и на каких нагрузках он эффективен?
Что проверяют
Понимаете ли вы, откуда у RAID с чётностью штраф на запись и почему уровень выбирают под профиль нагрузки. Python-разработчику это нужно, когда под сервисом своя база, очередь или хранилище датасетов. Следом часто спрашивают, что бы вы поставили под PostgreSQL.
Как отвечать
Пройдитесь по уровням, называя цену каждого:
- RAID 0: чередование блоков по дискам. Чтение и запись растут почти пропорционально числу дисков, но умер один диск, потерян весь массив;
- RAID 1: зеркало. Чтение можно раздавать на оба диска, запись идёт со скоростью самого медленного, полезный объём половина;
- RAID 5: распределённая чётность, переживает потерю одного диска. Чтение быстрое, а мелкая случайная запись стоит четыре операции: прочитать старые данные и чётность, записать новые. Запись полными страйпами почти не страдает;
- RAID 6: две чётности, переживает два диска, штраф на запись шесть операций;
- RAID 10: зеркала, объединённые чередованием. Штраф на запись всего два, случайный ввод-вывод держит хорошо, но отдаёт половину объёма.
Отсюда нагрузки. OLTP-база с множеством мелких записей, WAL и fsync живёт на RAID 10. Архив, медиатека, реплика для отчётов с преобладанием чтения обходятся RAID 6, он выгоднее по объёму. RAID 0 уместен для данных, которые легко восстановить: кеш для обучения модели, временный каталог. Систему ставят на RAID 1.
Две оговорки. Аппаратный контроллер с кешем записи и батареей заметно маскирует штраф чётности. В облаке сетевые диски уже реплицированы провайдером, и там RAID 0 из нескольких томов собирают ради суммарных IOPS. Реальные цифры снимайте fio и iostat -x под своей нагрузкой.
Где спотыкаются
Советуют RAID 5 под нагруженную базу. На случайной записи он проигрывает RAID 10, а пересборка большого диска идёт часами с просевшей скоростью.
Говорят, что зеркало ускоряет запись. Оно ускоряет только чтение, запись не быстрее одного диска.
Путают RAID с резервной копией. Удалённую строку или зашифрованный файл массив послушно отзеркалит, бэкап нужен отдельно.