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

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

(Новая страница: «;{{SpeakerInfo}}: {{Speaker|Станислав Богатырев}} <blockquote> </blockquote> {{VideoSection}} {{vimeoembed||800|450}} {{youtubelink|}} {{Slid…»)
 
;{{SpeakerInfo}}: {{Speaker|Станислав Богатырев}}
<blockquote>
FrostFS    это децентрализованная объектная система хранения данных,
интегрированная с блокчейном Neo N3. Мы стремимся создать децентрализованную
платформу, способную решать реальные, полезные на практике, задачи, которые
сейчас решаются в централизованном варианте.

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

{{VideoSection}}

{{vimeoembed||800|450}}
{{youtubelink|}}

{{SlidesSection}}
[[File:FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024).pdf|left|page=-|300px]]

{{----}}

== Thesis ==

=== О проекте ===

FrostFS    Свободное ПО под лицензией GPLv3+ и SDK под лицензией Apache 2.0.
Схемой лицензирования мы хотели предотвратить превращение основного кода проекта
в проприетарное ПО и появление разных версий продукта с разной функциональностью,
но обеспечить возможность использовать SDK где угодно. Комбинация пермиссивной
лицензии для библиотечных компонентов и свободной лицензии для основного кода
оправдала наши ожидания на практике.

Проект начался в 2018 году как заявка на грант Neo Foundation. В 2019 году мы
начали разработку под именем NeoFS, а в 2022 нам пришлось сделать форк самих
себя и продолжить разработку под именем FrostFS.

После проблем с GitHub мы перешли на self-hosted инфраструктуру на Forgejo.
Сейчас все исходные коды и артефакты релизов доступны на
[http://git.frostfs.info].

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

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

=== Результаты ===

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

* https://frostfs.info, 
* https://git.frostfs.info/


{{----}}
[[File:{{#setmainimage:FrostFS — СПО для децентрализованного объектного хранения данных (Станислав Богатырев, OSSDEVCONF-2024)!.jpg}}|center|640px]]
{{LinksSection}}
<!-- <blockquote>[©]</blockquote> -->

<references/>

[[Категория:OSSDEVCONF-2024]]
[[Категория:Open-source projects]]
[[Категория:Draft]]

Версия 03:32, 23 октября 2024

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

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

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