FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024)

Материал из 0x1.tv

Докладчик
Станислав Богатырев

FrostFS — это децентрализованная объектная система хранения данных, интегрированная с блокчейном Neo N3. Мы стремимся создать децентрализованную платформу, способную решать реальные, полезные на практике, задачи, которые сейчас решаются в централизованном варианте.

Ключевые особенности СХД:

  • Возможность роста сети до планетарного масштаба и десятков тысяч узлов;
  • Расчёт на работу в нестабильной недоверенной среде дикого интернета;
  • Гибкая система политик хранения, позволяющая пользователю полностью контролировать где и как хранятся его данные;
  • Поддержка разных протоколов (gRPC, S3, HTTP) доступа к объектам через протокольные шлюзы и работы Web3 приложений на традиционном Web2 стеке;
  • Работа с объектами в сетевой изоляции.

Видео

Презентация

FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf

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-архиве.

Такой подход позволяет применять при разработке децентрализованных приложений уже существующие приёмы и наборы инструментов.

Результаты

Сейчас проект разрабатывает Свободное ПО и коммерческий продукт на его базе, взаимодействует со студентами в рамках учебных курсов, практики и руководства ВКР. Мы продолжаем исследования проблем децентрализованных систем и публикуем результаты в научных статьях. Достигнут паритет по функциональности с другими решениями, при этом в децентрализованной и недоверенной среде.


FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024)!.jpg

Примечания и ссылки