FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024) — различия между версиями
StasFomin (обсуждение | вклад) |
StasFomin (обсуждение | вклад) |
||
Ключевые особенности СХД: * Возможность роста сети до планетарного масштаба и десятков тысяч узлов; * Расчёт на работу в нестабильной недоверенной среде дикого интернета; * Гибкая система политик хранения, позволяющая пользователю полностью контролировать где и как хранятся его данные; * Поддержка разных протоколов (gRPC, S3, HTTP) доступа к объектам через протокольные шлюзы и работы Web3 приложений на традиционном Web2 стеке; * Работа с объектами в сетевой изоляции. </blockquote> {{VideoSection}} {{vimeoembed|1022635182|800|450}} {{youtubelink|}} {{SlidesSection}} [[File:FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf|left|page=-|300px]] {{----}} == Thesis == |
Текущая версия на 19:38, 23 октября 2024
- Докладчик
- Станислав Богатырев
FrostFS — это децентрализованная объектная система хранения данных, интегрированная с блокчейном Neo N3. Мы стремимся создать децентрализованную платформу, способную решать реальные, полезные на практике, задачи, которые сейчас решаются в централизованном варианте.
Ключевые особенности СХД:
- Возможность роста сети до планетарного масштаба и десятков тысяч узлов;
- Расчёт на работу в нестабильной недоверенной среде дикого интернета;
- Гибкая система политик хранения, позволяющая пользователю полностью контролировать где и как хранятся его данные;
- Поддержка разных протоколов (gRPC, S3, HTTP) доступа к объектам через протокольные шлюзы и работы Web3 приложений на традиционном Web2 стеке;
- Работа с объектами в сетевой изоляции.
Содержание
Видео
Презентация
Thesis
О проекте
FrostFS — Свободное ПО под лицензией GPLv3+ и SDK под лицензией Apache 2.0. Схемой лицензирования мы хотели предотвратить превращение основного кода проекта в проприетарное ПО и появление разных версий продукта с разной функциональностью, но обеспечить возможность использовать SDK где угодно. Комбинация пермиссивной лицензии для библиотечных компонентов и свободной лицензии для основного кода оправдала наши ожидания на практике.
Проект начался в 2018 году как заявка на грант Neo Foundation. В 2019 году мы начали разработку под именем NeoFS, а в 2022 нам пришлось сделать форк самих себя и продолжить разработку под именем FrostFS.
После проблем с GitHub мы перешли на self-hosted инфраструктуру на Forgejo. Сейчас все исходные коды и артефакты релизов доступны на [1].
В 2022 году вышел коммерческий продукт Yadro Tatlin.Object, базирующийся на FrostFS. В продукте используется свободный код с полным соблюдением лицензии, а все изменения происходят напрямую в основных репозиториях проекта.
Сейчас мы работаем над запуском и тестированием публичной сети. Помимо объектной СХД, мы позволяем использовать DNS с хранением данных в блокчейне и слой HTTP-шлюзов, позволяющих обеспечить доставку данных. Все элементы платформы являются СПО и могут быть развёрнуты на собственной инфраструктуре. Мы хотим прийти к набору децентрализованных сервисов для разработки и запуска приложений, способных заменить централизованные облачные решения для подавляющего большинства современных задач от хранения данных, до их обработки.
Модель данных
На уровне родного протокола FrostFS, данные представлены в виде неизменяемых объектов, т.е. совокупности данных и метаданных.
Объекты объединяются в контейнеры — структуры, состоящие из политики хранения и дополнительных атрибутов в формате Ключ-Значение.
Из хэша структуры контейнера и хэша заголовка объекта формируется адрес объекта. Таким образом, адрес зависит от содержимого (Content Addressed Storage) и подмена данных при передаче невозможна.
Сеть FrostFS поддерживает и постоянно обновляет список активных узлов хранения сети — карту сети. Узел хранения представлен идентификатором его ключа и набором атрибутов.
С помощью политики хранения пользователь может гибко настроить правила, по которым его данные будут располагаться в сети. Привила можно писать на SQL-подобном языке. Политика применяется к карте сети и на выходе детерминированно получается вектор узлов хранения, пригодных для размещения объекта, отсортированный в порядке уменьшения вероятности найти объект на узле.
Поиск и размещение объекта происходят по одному и тому же алгоритму, что позволяет без центрального индекса или метабазы находить сохранённые объекты, обладая адресом и актуальной или прошлой версией карты сети.
Архитектура
Во FrostFS используется блокчейн, как распределённая реплицированная база данных. Можно считать, что смарт-контракты в блокчейне это аналог таблиц, а методы контрактов — хранимые процедуры. Блокчейн используется как источник дискретного времени и хранилище небольшого объёма управляющей информации.
Управляющую функцию выполняет небольшое количество Узлов Внутреннего Кольца (Inner Ring Nodes). Опираясь на блокчейн, они подтверждают статусы узлов хранения, формируют карту сети, утверждают создание контейнеров и следят за соблюдением политик хранения другими узлами. Для возможности контролировать корректность хранения данных реализован алгоритм ZKP на гомоморфных хэшах, с оптимизацией на goasm, для достижения скоростей записи на HDD.
Непосредственно хранением данных занимаются Узлы Хранения (Storage Nodes). Они образуют p2p сеть и принимают запросы на размещение объектов и доступ к ним. Каждый узел обеспечивает соблюдение политики хранения, заданной пользователем. фоновый процесс опрашивает узлы, на которых должны храниться оставшиеся копии, проверяет и передаёт при необходимости копию объекта.
Родной протокол FrostFS строится на базе gRPC с сообщениями в формате protobuf. Все узлы и клиенты общаются по одному и тому же протоколу в p2p манере.
Для работы с уже существующими приложениями в FrostFS есть протокольные шлюзы s3 и HTTP. Проект стремится предоставлять доступ к одним и тем же объектам по разным протоколам одновременно, сохраняя контроль правил доступа. Гарантии по безопасности и контролю доступа проходят и через протокольные шлюзы. Можно даже на уровне HTTP BearerToken предать подписанные ключом владельца контейнера правила доступа и они будут переданы с запросом и исполнены на нижнем уровне родного протокола узлами хранения.
Кроме протокольной трансляции шлюзы добавляют специфичную для конкретной предметной области функциональность. Так HTTP шлюз может формировать списки объектов по определённым префиксам в виде HTML страницы, как это делают традиционные веб-серера или выгружать группы объектов в zip-архиве.
Такой подход позволяет применять при разработке децентрализованных приложений уже существующие приёмы и наборы инструментов.
Результаты
Сейчас проект разрабатывает Свободное ПО и коммерческий продукт на его базе, взаимодействует со студентами в рамках учебных курсов, практики и руководства ВКР. Мы продолжаем исследования проблем децентрализованных систем и публикуем результаты в научных статьях. Достигнут паритет по функциональности с другими решениями, при этом в децентрализованной и недоверенной среде.