Кратко: что такое IPFS
IPFS — peer-to-peer протокол с контентно-адресуемым хранилищем данных. Он позволяет создать распределенную файловую систему, в которой нет централизованного сервера, но есть множество узлов, которые обеспечивают доступность контента. Принцип работы схож с BitTorrent, где несколько компьютеров (узлов) свободно обмениваются файлами и распространяют их по всей сети.
Проще говоря, если, посылая HTTP-запрос, мы говорим серверу «найди мне файл по такому-то адресу», то IPFS-запрос будет звучать как «найди мне файл с таким-то содержимым». Если такой файл существует и доступен (это определяется путем сравнение хэшей), пиринговая сеть вернет вам файл.
Как устроен обмен файлами между нодами в IPFS
При публикации файла в IPFS-сеть, он разбивается на блоки определенного размера. Для каждого блока создается уникальный криптографический хэш-идентификатор Content Identifier (CID), который позволяет размещать файл сразу на нескольких нодах вне зависимости от того, где он был изначально запущен.
Чтобы из разных блоков с хэшами собрать единый файл, используется направленный ациклический граф дерева Меркла (Merkle DAG). С помощью соединений блоков по хэшам, мы получаем тот самый блокчейн, то есть цепочку блоков, которая позволяет восстановить содержимое файла вне зависимости от того, как мы получили эти блоки.
Для понимания, где взять нужные блоки, в IPFS есть протоколы для обмена данными — как непосредственно самим контентом, так и метаданными, привязанными к файлу. И вот тут самое интересное. К примеру, централизованная система хранения точно знает, что на конкретном сервере есть нужный вам файл, а значит вы можете обратиться к нему по IP-адресу и получить доступ. А вот децентрализованная система состоит из неизвестного числа узлов. То есть в IPFS-сети мы никогда не будем знать количество узлов и определить, где именно расположен наш сайт.
Но эта проблема в IPFS решается с помощью библиотеки Lip P2P. Она поддерживает два режима передачи сообщений в сети:
Стандартная передача контента между двумя нодами. Работает, если файл уже размещен на одной ноде и она знает, что второй ноде нужен файл с определенным хэшем
Ситуация, когда у ноды и ее окружения нет нужного контента. Тогда работает вторая часть протокола, связанная с обменом метаданными. Тут включается gossips (сплетни). Ноды сети начинают опрашивать друг друга о конкретном файле. После запроса нода может либо отдать контент, либо сказать, что его нет, но предположить, что файл может быть на других нодах. И так до тех пор, пока вы не найдете нужный файл.
Преимущества и недостатки технологии IPFS
Преимущества IPFS:
- Бесплатность. Так как хранилищем выступают локальные машины других пользователей, технология не требует оплачивать услуги data-центров хостинг-провайдера.
- Защищенность. Доступ к сайтам, размещенным в пиринговой сети, нельзя заблокировать, ему не страшны санкции или DDoS-атаки. Также у IPFS есть встроенное шифрование при обмене контентом.
- «Вечное хранение». При идеальных условиях контент, загруженный в такую p2p-сеть, будет жить вечно. Но или почти — пока в сети остается хотя бы одна нода (все помним «дайте скорости», чего уж там).
- Скорость доступа к данным. Файл будет передан пользователю с того узла, который находится ближе всего к нему.
- Проверка подлинности данных. Если в классической клиент-серверной модели файл можно подменить, при это сохранив его адрес для пользователя, то p2p-сеть такое исключает — поиск идет не по адресу, а по хэшу.
- Версионность файлов на уровне самой сети. Можно как отслеживать изменения, так и откатываться к более ранним версиям.
- Крипто-домены. Их нужно регистрировать один раз и не нужно продлевать, как обычные. Это домены в зонах .crypto, .blockchain и подобных, они работают на базе блокчейна Ethereum.
Недостатки IPFS:
- Доступность данных никто не гарантирует, как в случае с хостингом. Не стало пиров — файлы перестали быть доступными. Но если среди IPFS нод есть несколько надежных, например у хостинг-провайдеров, проблем с доступностью быть не должно.
- Канонический URL в IPFS-сети имеет вид ipfs://QmQJXYB8LnxWBkx5XR2WRCJYKLZB2Xxy9LoPngw98eNk4r/ — такая ссылка не поддерживается большинством браузеров «из коробки», нужно устанавливать официальные плагины. В Opera и Brave реализована нативная поддержка технологии. Ситуацию спасают шлюзы, мы у себя открываем ссылку через ipfs.sweb.ru/ipfs/(адрес хэша)/(имя и расширение файла). Ниже расскажу про это подробнее.
- Общедоступность данных. Если контент хранится на незащищенных машинах пользователей, уровень безопасности будет невысокий. При выборе IPFS нужно ориентироваться на ваши цели — если нужно максимально широко распространить контент, это будет хороший вариант. Но для хранения чувствительных данных IPFS-сеть не подойдет.
- Низкая мотивация других пользователей становиться участниками сети. Эту проблему мы частично решаем с помощью Filecoin — криптовалюты, которая начисляется пользователям за хранение чужих данных.
Зачем классическому хостинг-провайдеру создавать публичный IPFS шлюз: как мы развивали проект
Как мы упоминали в начале, развитие IPFS для нас было экспериментом. Вот, почему мы все-таки решились на этот шаг:
У IPFS понятная ценность для хостинг-аудитории. Речь в первую очередь о подтверждении подлинности данных, надежности хранения, скорости доступа к данным, версионность.
Технология основана на принципах, которые уже доказали свою состоятельность — например, BitTorrent, аналогом которой является IPFS.
Есть потенциал коммерческого использования. В мире уже реализованы десятки успешных коммерческих сервисов, которые используют технологии IPFS. В основном они из Web3 мира: децентрализованные биржи и NFT-проекты.
На проработку идеи ушло 4 месяца, активная фаза реализации — 1 месяц.
В процессе реализации тоже возникли интересные нюансы.
Идея была в том, что мы, как надежный хостинг-провайдер, в рамках IPFS обеспечиваем стабильную ноду, которая всегда будет содержать контент.
В начале работы мы сделали тестовый стенд, подняли IPFS и попробовали открыть файл Opera, чтобы проверить доступность контента. Но он не открылся. Причина была простая — другие ноды не знали о его существовании.
Тогда мы начали изучать детальнее и нашли встроенную функцию publishing. Она позволяет прямо из коробки IPFS позволяет оповестить популярные ноды о файле, причем конфиги этих нод уже прописаны. После завершения процедуры publishing, ваш контент будет распространен через библиотеку LIP P2P и появится на популярных IPFS-нодах.
После того, как распространили контент, путь к контенту через IPFS-шлюз SpaceWeb или другой публичный IPFS шлюз стал выглядеть так:
https://{gateway URL}/ipfs/{content ID}/{optional path to resource}.
Например:
ipfs.sweb.ru/ipfs/QmQJXYB8LnxWBkx5XR2WRCJYKLZB2Xxy9LoPngw98eNk4r/
Клиентская сторона: кому подходит IPFS и как его используют уже сейчас
IPFS выбирают тогда, когда нужно максимально распространить контент и сделать его доступным 24/7 даже при отключении одной из нод. Например, если компании нужно опубликовать публичную информацию — о продуктах, команде и другом. IPFS-технология поможет поддерживать ее максимально стабильно.
Но если нужно хранить конфиденциальную информацию, например данные клиентов, лучше выбрать классического хостинг-провайдера. Обеспечить защищенное хранение на выделенных серверах будет гораздо проще.
Ничто не дает столько полезных знаний о востребованности вашей технологии, сколько тест на настоящих пользователях. Мы отследили поведение пользователей за год и вот какие данные получили:
839 клиентов подключили IPFS, из них воспользовались сетью 171 человек. Загрузили в сеть 1,7 ТБ данных. Мы бесплатно выделили каждому пользователю 30Гб для загрузки данных в IPFS, поэтому протестировать технологию может любой.
- 42,5% загрузили в IPFS разные файлы. Скорее всего, просто чтобы оценить работу сети.
- 14% хранят в IPFS бэкапы.
- 30% хранят медиаконтент.
- 11% используют сеть для хостинга статичных сайтов и их файлов.
- 2,5% хранят скрипты (JavaScript, Python и др).
Первые два кейса — пример целевого использования технологии, последний — нет. Хотя решение вполне ничего.
Вот парочка прикольных проектов, которые наши клиенты разместили в IPFS: первый и второй.
Какие выводы мы сделали
Технология перспективная, и на нее есть реальный спрос среди пользователей хостинга. При этом понятно, что IPFS не заменит HTTP. По крайней мере пока что. Использование IPFS по большей части целевое, что тоже радует. Мы понимаем, что для запуска IPFS и стабильной работы сети нужно присутствие большого числа ее активных пользователей — так что пока система живет в гибридном режиме. Мы с помощью собственных серверных мощностей гарантируем работоспособность сети даже в случае, если нод станет недостаточно. В будущем планируем реализовать поставку клиентам unstopable domains и их линковку к IPFS хэшу.