Как внедрить децентрализованное хранилище в ваш рабочий процесс

Новые технологии, такие как InterPlanetary FileSystem (IPFS), могут внести свой вклад в экосистему, которая станет более проверяемой и открытой. Поскольку IPFS использует идентификаторы контента (CID), которые представляют собой хэш контента, вы можете быть уверены, что возвращаемые данные верны. Кроме того, IPFS является открытой и общедоступной сетью. Таким образом, любой может получить доступ к контенту в сети, если у него есть правильный CID.

Один из проектов, которым я особенно доволен, — это web3.storage, бесплатный сервис, который упрощает использование децентрализованного хранилища.

В этом посте я…

  • Расскажите о web3.storage и о том, как его настроить.
  • Приведите примеры основных операций CRUD с IPFS в Python.
  • Опишите мое текущее решение по созданию децентрализованного хранилища данных

Введение в web3.storage

Наша цель сегодня — предоставить удобный интерфейс, который значительно снижает нагрузку на адаптацию новых вариантов использования в экосистеме web3 сегодня — и в то же время обеспечивает возможность обновления в будущем. — Веб3.Хранилище

Web3.Storage позволяет пользователям и разработчикам использовать децентрализованное хранилище, предоставляемое IPFS и сетью Filecoin. Все загружаемые данные дублируются между географически распределенными поставщиками хранилищ, что обеспечивает отказоустойчивость сети. Служба также выполняет работу по закреплению вашего контента на нескольких серверах.

Помните о том, что вы загружаете, так как любой может получить доступ к контенту в сети. Однако вы можете зашифровать контент перед загрузкой. Мое эмпирическое правило: загружайте только тот контент, который вам удобно сделать общедоступным на постоянной основе.

Постоянная часть важна. В отличие от адресации на основе местоположения (например, URL-адреса), адресация на основе контента (например, CID) затрудняет удаление данных из сети после их загрузки, поскольку они могут быть закреплены на нескольких серверах.

Ваша квота изначально ограничена 1 ТБ, но ее можно увеличить бесплатно, отправив запрос. Накладные расходы в настоящее время субсидируются Protocol Labs, и в ближайшем будущем они, скорее всего, перейдут на какую-либо форму криптографической платежной модели (например, стекинг Filecoin для увеличения лимитов хранилища).

Основой, которая скрепляет все вместе, является IPFS, гипермедиа-протокол, разработанный для повышения отказоустойчивости Интернета за счет адресации данных по их содержимому, а не по ихместоположению. Для этого IPFS использует CID вместо URL-адресов, которые указывают на сервер, на котором размещены данные.

В web3.storage есть намного больше, и я рекомендую вам изучить документацию, если вы также заинтересованы в этом проекте, особенно если вы разработчик.

Настройка web3.storage

Перейдите на https://web3.storage, чтобы создать учетную запись.

Подробные инструкции смотрите в документации.

Создать токен API

Токен API необходим для использования web3.storage из командной строки

  1. Войдите в свою учетную запись web3.storage
  2. Нажмите Аккаунт вверху, а затем Создать токен API.
  3. Введите описательное имя для вашего токена и нажмите Создать.
  4. Вы можете нажать Копировать, чтобы скопировать новый токен API в буфер обмена.

Не сообщайте никому свой ключ API, он предназначен только для вашего аккаунта. Вам также следует где-нибудь записать поле Token и надежно сохранить его.

Установите интерфейс командной строки w3

w3 интерфейс командной строки (CLI) — это инструмент на основе узла для использования web3.storage из терминала.

На Mac вы можете легко установить node через homebrew, это также установка менеджера пакетов узла (npm).

brew install node

Используйте npm для установки интерфейса командной строки w3.

npm install -g @web3-storage/w3

Выполните следующую команду, чтобы подключить w3 к web3.storage.

w3 token

Вам будет предложено ввести ранее созданный токен API.

Ниже отображается информация о каждой из доступных команд.

w3 --help

Команды загрузки и загрузки

  • w3 put /path/to/file(так мы загружаем контент в web3.storage)
  • w3 get CID(так мы скачиваем контент с определенного CID)

Разместите свои файлы в web3.storage

w3 list

Пример использования put

Сначала создайте текстовый файл с сообщением.

echo "Hello web3.storage" > hello.txt

Теперь давайте воспользуемся командой put, чтобы отправить файл в IPFS.

w3 put hello.txt --name hello

hello будет именем, которое появится в web3.storage, используйте w3 list для проверки

Выводятся CID и ссылка на общедоступный шлюз.

Если вы точно выполнили описанные выше шаги, то ваш CID должен быть идентичен моему. CID — это хэш, который однозначно идентифицирует содержимое.

Используйте ссылку ниже, чтобы просмотреть сообщение через общедоступный шлюз.

https://dweb.link/ipfs/bafybeifzoby6p5khannw2wmdn3sbi3626zxatkzjhvqvp26bg7uo6gxxc4

Примечание. ссылка будет другой, если ваше сообщение отличается

Получить контент с помощью Python

Мы надеемся, что в будущем web3.storage будет совместим с S3, а это означает, что мы сможем получать доступ к хранящимся там данным аналогично тому, как мы получаем доступ к данным в корзинах S3.

На данный момент мы можем использовать HTTP-запросы для чтения данных в Python. Однако такие библиотеки, как pandas, позволяют нам напрямую читать CSV-файлы с URL-адреса шлюза. Кроме того, ipfsspec позволяет нам читать zarr хранилищ данных из IPFS с помощью xarray.

Я продемонстрирую чтение каждого из них в следующих разделах.

Чтение JSON

Вот пример чтения файла .json, хранящегося в IPFS.

Чтение CSV-файлов

Если у вас есть файл CSV, вы можете прочитать его непосредственно в pandas DataFrame.

Зарр и IPFS

Формат Zarr — это новый формат хранения, который делает большие наборы данных легко доступными для распределенных вычислений, что делает его улучшением по сравнению с широко используемым NetCDF — форматом для хранения многомерных данных.

Если вы начинаете переходить на формат zarr, я рекомендую вам ознакомиться с Руководством по подготовке данных, оптимизированных для облака от Pangeo.

Файлы NetCDF по-прежнему очень распространены, а функции xarray упрощают преобразование этих файлов NetCDF в хранилища данных zarr.

import xarray as xr
ds = xr.open_dataset('/path/to/file.nc')
ds.to_zarr("./file.nc", consolidated=True)

consolidated=True создает «скрытый» точечный файл вместе с хранилищем данных, что ускоряет чтение из zarr с помощью xarray. В простом тесте я обнаружил, что чтение консолидированных хранилищ данных выполняется в 5 раз быстрее, чем неконсолидированных.

zarr (объединенный):635 мс

зарр (неконсолидированный):3,19 с.

Если вы хотите протестировать приведенный выше код, я загрузил Набор данных NOAA Optimum Interpolation SST V2 в консолидированном и неконсолидированном формате zarr в IPFS. Этот набор данных содержит среднее значение температуры поверхности океана (SST) за неделю с 1990 г. по настоящее время с пространственным разрешением в 1 градус.

URL-адрес шлюза для этих данных показан ниже.

https://dweb.link/ipfs/bafybeicocwmfbct57lt62klus2adkoq5rlpb6dfpjt7en66vo6s2lf3qmq

Загрузить хранилища данных Zarr в IPFS

При загрузке zarr файлов в IPFS вы должны обязательно загрузить «скрытые» файлы точек. С w3 это влечет за собой добавление флага --hidden:

w3 put ./* --hidden --name filename.zarr

Чтение хранилищ данных Zarr из IPFS

Для чтения хранилищ данных zarr из IPFS с xarray вам понадобится пакет ipfsspec (а также xarray и zarr)

conda install -c conda-forge xarray zarr
pip install ipfsspec

ipfsspec гарантирует, что xarray может интерпретировать протокол IPFS.

Обратите внимание, что в приведенном ниже примере я использую протокол IPFS вместо URL-адреса шлюза с HTTPS. Однако за кулисами код на самом деле считывается из шлюза.

Децентрализованное хранилище данных

IPFS можно использовать как хранилище данных. Однако вам необходимо связать CID с чем-то, что удобочитаемо для человека, чтобы это было жизнеспособным решением. Мне неизвестны какие-либо передовые методы управления CID. Однако, взяв некоторые подсказки из лучших практик для данных NFT, мой текущий подход заключается в том, чтобы хранить CID и связанное с ними имя файла в виде пары key:value в JSON, а затем использовать базу данных NoSQL, такую ​​​​как MongoDB, для запросов.

После загрузки содержимого в web3.storage вы добавляете в файл новую запись, которая определяет набор данных и CID содержимого. Это минимально необходимый объем информации.

Вот пример CID, хранящихся в виде массива JSON.

Пакет pymongo упрощает работу с MongoDB в Python.

Вот пример вставки записей в коллекцию и последующего запроса базы данных для определенного CID.

Альтернативный подход

Альтернативный подход, который я рассматривал, но еще не реализовал, заключается в использовании вывода w3 list.

Здесь отображаются CID и имя, которые вы указали при загрузке контента.

Идея состоит в том, чтобы написать awkscript для создания файла JSON из вывода.

Некоторые недостатки или подводные камни этого включают:

  • Обработка CID, указывающих на каталоги, а не на чистые файлы
  • Игнорирование CID, которые не имеют отношения к вашей базе данных

Самым большим препятствием, которое я вижу, является работа с каталогами. Только по этой причине я придерживаюсь ручного обновления моей базы данных, тем более что она небольшая и простая в управлении — по крайней мере, на данный момент.

Последние мысли

IPFS может быть местом для долгосрочного хранения с CID, функционирующими как встроенный контроль версий.

Интерфейс командной строки w3 упрощает передачу данных в IPFS, и любой распространенный формат (JSON, CSV, Zarr) может быть прочитан из IPFS в Python.

Однако одной из проблем при использовании IPFS является управление CID. Мое текущее решение по созданию децентрализованного репозитория данных состоит в том, чтобы хранить CID и связанные с ними имена файлов в виде пар ключ-значение в MongoDB. Решение немного неуклюжее, и я открыт для предложений о том, как улучшить эту настройку.

Использование IPFS для веб-хостинга

Еще одно отличное применение IPFS — размещение веб-сайта. Моя личная веб-страница размещена на IPFS. Я думаю, что придумал элегантное решение для управления децентрализованным веб-сайтом, вы можете прочитать о моем решении в статье ниже.



Storj: еще один вариант децентрализованного хранилища

Наконец, IPFS — не единственный вариант. Если вам нужно хранилище объектов, совместимое с S3, я рекомендую вам проверить Storj. Решение Storj основано на хранении фрагментов зашифрованных данных в децентрализованной сети, а не на дублировании ваших данных. Это платная услуга, но она очень доступна, особенно если вы в настоящее время используете AWS. Я лично использую Storj для своей повседневной работы. Ознакомьтесь со статьей ниже, если вам интересно узнать, как я использую Storj.