Спустя три года с момента первого релиза сетевой распределённой файловой системы POHMELFS в списке рассылки разработчиков ядра Linux представлен полностью переработанный вариант данной ФС, в котором реализовано большинство из всех запланированных ранее возможностей. Код проекта распространяется под лицензией GPLv2.
Новая реализация POHMELFS базируется на распределённом хранилище Elliptics, представляющем собой распределённую хэш таблицу. Изначально Elliptics развивался как часть POHMELFS, но два года назад был выделен в отдельный проект, который успешно используется в промышленной эксплуатации. Например, Elliptics используется для организации хранения около петабайта контента в сервисах компании Yandex (карты, фотографии, музыка). Хранилище рассчитано на организацию надёжного хранения большого объема данных в формате ключ/значение с резервированием информации за счет дублирования данных на разных узлах сети (ситуация выхода узла из строя обрабатывается автоматически). Хранилище обеспечивает горизонтальное масштабирование - можно на лету удалять и добавлять новые узлы, при этом данные будут перераспределены автоматически.
Среди возможностей Elliptics: отсутствие единой точки отказа (отсутствует сервер мета-данных), поддержка репликации, автоматическое восстановление сбоев, поддержка поколоночного хранения, проверка целостности, хранение данных в сжатом виде (используется метод Snappy), атомарные транзакции, выборка группы ключей, поддержка привязки генерации уведомлений к операциям над заданными объектами, модульная архитектура, допускающая подключение различных бэкендов для хранения данных.
Отдельно можно отметить поддержку выполнения скриптов обработки данных на стороне сервера, что позволяет выполнять любые манипуляции с данными без их загрузки по сети. Например, функции работы с директориями в POHMELFS базируются на использовании данной возможности. Целью развития Elliptics является поддержка развёртывания хранилищ, работающих на базе нескольких территориально разделённых дата-центров. Вместо оптимизации на обеспечение высокой пропускной способности (Мб в секунду), основной упор делается на обеспечении высокой интенсивности выполнения операций (число операций ввода/вывода в секунду). В настоящее время POHMELFS обеспечивает производительность, достаточную для полной утилизации пропускной способности сетевых устройств. Например, при выполнении на 1 GigE сетевом интерфейсе синхронизации нескольких терабайт данных с локального RAID на сетевое хранилище POHMELFS с использованием утилиты rsync, узким местом стала пропускная способность сетевого интерфейса.
Если раньше дизайн POHMELFS напоминал параллельный NFS, то теперь POHMELFS выступает в роли фронтэнда с реализацией POSIX ФС, работающего поверх независимого хранилища Elliptics. Для оптимизации производительности POHMELFS поддерживает специальный режим синхронизации данных с подсоединёнными узлами, при котором данные вначале читаются/записываются в кэш локальной системы и не синхронизируются с внешним хранилищем до момента наступления таймаута. Таким образом запись данных видна сразу только текущему пользователю и становится доступной для разделов смонтированных на других машинах только после сброса кэша. В случае экстренного отключения питания, если не используется режим writeback, данные которые не успели покинуть кэш будут потеряны (как и для любых других ФС), при этом общая целостность не будет нарушена. Для увеличения скорости чтения директорий, их содержимое целиком напрямую записывается в dentry/inode кэш, а не читается последовательно элемент за элементом. Структура проекта стала заметно проще, что положительно сказалось на надёжности. Кроме того, удалось избавиться от ранее наблюдаемых узких мест, связанных с масштабированием и быстродействием (например, реализована возможность параллельного чтения/записи данных одновременно на несколько узлов).
Среди планов по развитию POHMELFS:
- Поддержка кворума для обеспечения непротиворечивости чтения реплицированных на несколько узлов данных. Для гарантии, что часть распределённых по разным узлам данных не будет переписана в процессе чтения, как минимум две копии данных должны совпадать. Запись осуществляется параллельно с созданием трёх резервных блоков на разных узлах, для успешного завершения операции должно быть записано как минимум два блока с продублированными данным;
- Режим совместимости с HTTP-приложениями. Для чтения и записи данных в POHMELFS можно дополнительно использовать специальный HTTP API, работающий напрямую с хранилищем Elliptics по идентификатору объекта. Можно создавать такие схемы при которых данные читаются из web-приложения через HTTP API, а записываются через штатный интерфейс файловой системы и наоборот;
- Поддержка случайного чтения разных реплик с целью балансировки нагрузки;
- Возможность чтения/записи целиком столбцов или в представлении "файл как директория" (чтение/запись директории за один раз);
- Дополнительное тестирование;
- Замена старой реализации POHMELFS, входящей в состав ядра (drivers/staging/pohmelfs) на новый код.