Как DAOS выжимает максимум из NVMe и памяти SCM
Когда стандартная файловая система начинает задыхаться от миллионов мелких случайных операций ввода-вывода, разработчики обычно ищут обходные пути. Известная история: современные NVMe-накопители работают с бешеными скоростями, но стандартный стек ядра Linux съедает кучу времени на блокировках и переключениях контекста.
Специалисты из Linux Foundation развивают проект DAOS (Distributed Asynchronous Object Storage). Это распределённая объектная система хранения с открытым исходным кодом, написанная на Си. Ее спроектировали специально под энергонезависимую память (NVM), планки Storage Class Memory и накопители NVMe.
В чём идея
Традиционные хранилища пытаются натянуть старую POSIX-модель на быструю память. Из-за этого возникают узкие места. DAOS идет другим путем: проект полностью отказывается от традиционного ядрового стека I/O.
Вместо привычных файлов и папок система предлагает структуру на основе ключ-значение с асинхронным транзакционным вводом-выводом. Потоки данных не блокируют друг друга при записи, а обращения к железу идут напрямую через библиотеки SPDK и PMDK.
Какими функциями располагает проект
Разработчики заложили в архитектуру сразу несколько базовых возможностей для работы с большими объёмами данных.
- Асинхронные неблокирующие транзакции для параллельной записи
- Контроль целостности данных от клиента до накопителя
- Автоматическое восстановление при сбое отдельных узлов
- Эластичное масштабирование кластера без остановки обслуживания
Интересный момент касается интерфейсов. В отличие от узкоспециализированных KV-хранилищ, DAOS предлагает клиентам удобные обертки. Вы можете работать с ним через родной словарь Python, подключать к Spark, пробрасывать в TensorFlow-IO или использовать традиционные для научного софта библиотеки HDF5 и MPI-IO. Для совместимости со старым софтом есть эмуляция параллельной файловой системы.
Что под капотом и какие есть нюансы
Код написан на Си, а сам репозиторий существует с 2016 года. Проект уже набрал около тысячи звёзд на GitHub, но легкой прогулки при развёртывании ждать не стоит. Это не милая CLI-утилита, которую ставишь одной командой.
Для полноценной работы DAOS требует специализированного железа с поддержкой NVMe и желательно энергонезависимой памяти (SCM). На обычном бюджете из пары дешевых облачных серверов оценить задумку не получится. Настройка управляющей плоскости и клиентских библиотек требует хорошего понимания сетевых стеков и инфраструктуры.
Журнал ошибок и документация подробные, но объемные. Если что-то пойдет не так при сборке, придется копаться в логах или идти за помощью в Slack и форум сообщества.
Кому стоит попробовать
Проект создавался не для рядовых веб-сайтов или небольших PostgreSQL-баз. Его ниша — инфраструктура с колоссальными требованиями к пропускной способности.
- Командам, тренирующим гигантские нейросети на TensorFlow, где узким местом стала загрузка датасетов.
- Инженерам данных, работающим с распределенной аналитикой на Hadoop и Spark.
- Научным лабораториям и HPC-кластерам, где стандартный Lustre или GPFS перестали справляться.
- Разработчикам высоконагруженных систем, создающим собственное хранилище поверх сырых NVMe-дисков.
Что в итоге
DAOS представляет собой отличный пример того, как архитектура ПО адаптируется под новое железо. Проект сложный, узкоспециализированный и требовательный к инфраструктуре, но в своей области он решает реальную проблему системного оверхеда. Если вы строите хранилище под задачи машинного обучения или аналитики больших данных, заглянуть в документацию точно имеет смысл.