Состоялся релиз go-ipfs (эталонной реализации IPFS, написанной на языке Go) версии 0.4.18. Вероятно, это самый значительный релиз в недавней истории; на его подготовку ушло 3 месяца. Со времени предыдущей новости об IPFS на LOR прошло уже более четырёх лет.
IPFS (InterPlanetary File System) — это гипермедийный протокол и распределённая файловая система, созданная с использованием идей, реализованных в Git и BitTorrent, и нацеленная на то, чтобы заменить или дополнить существующий Web. IPFS похож на BitTorrent Swarm, ноды которого обмениваются объектами Git-репозитория. IPFS основан на идее адресации по содержимому — один и тот же блок данных всегда будет иметь один и тот же адрес, вне зависимости от его физического расположения. В отличие от BitTorrent, данные разбиваются на блоки по границе файла, таким образом один и тот же файл может быть переиспользован в разных каталогах без необходимости повторного выделения места на диске. В отличие от Freenet и Perfect Dark, ноды хранят только те данные, которые они явно запросили. IPFS способен интегрироваться с существующими системами разрешения имён — с классическим DNS в настоящее время, с Tor .onion, Namecoin .bit и возможно, некоторыми другими в будущем.
Особенности этого релиза:
Титульные особенности этого релиза — экспериментальная поддержка QUIC, новый алгоритм маршрутизации pubsub-сообщений, возможность подписывания pubsub-сообщений, а также переписанная команда ipfs p2p
. Однако всё это лишь вершина айсберга.
QUIC
Прежде всего, со стороны сетевой подсистемы, в этом релизе представлена экспериментальная поддержка протокола QUIC. QUIC — это новый сетевой транспорт, основанный на UDP, который решает много давних проблем, связанных с применением TCP.
Для IPFS это означает (наконец-то):
- Меньшее потребление системных ресурсов. TCP требует по файловому дескриптору на каждое соединение, в то время как QUIC (и большинство других основанных на UDP транспортов) могут разделять один файловый дескриптор между всеми соединениями. Это может позволить IPFS открывать соединения быстрее и поддерживать больше открытых соединений.
- Ускоренное установление соединения. Когда аутентификация клиента активирована, QUIC выполняет трёхсторонее согласование подобно TCP. Однако, в отличие от TCP, этот способ согласования с самого начала обеспечивает полностью зашифрованное, аутентифицированное и мультиплексированное соединение. В теории (пока что ещё не на практике), это должно значительно снизить задержки при DHT-запросах.
- Улучшенная работа на соединениях с потерями пакетов. При мультиплексировании некоторого числа запросов через единственное TCP-соединение, всего один потерянный пакет заставит всё соединение (и все передаваемые через него запросы) ожидать, пока этот пакет будет передан заново. Однако, в силу того, что QUIC осуществляет мультиплексирование внутри себя, потеря единичных пакетов затронет только соответствующий поток.
- Улучшенное прохождение NAT. В двух словах: пробивание NAT значительно более простое и, во многих случаях, более надёжное с использованием UDP, нежели с TCP.
Однако всё ещё есть к чему стремиться. Хоть разработчики IPFS и поощряют пользователей попробовать его уже сейчас, развиваемый IETF протокол QUIC всё ещё находится в стадии активной разработки и будет меняться. Вы можете найти инструкции по его активации в IPFS здесь.
Pubsub
С точки зрения модели «pubsub», go-ipfs теперь поддерживает алгоритм маршрутизации «gossipsub» и подписывание сообщений.
Алгоритм маршрутизации «gossipsub» значительно более эффективен, чем текущий алгоритм «floodsub». И более того, он полностью обратно совместим — таким образом, вы можете активировать его и по-прежему взаимодействовать с нодами, которые используют алготирм «floodsub». Вы можете найти инструкции по активации «gossipsub» в go-ipfs здесь.
Сообщения теперь подписываются их авторами. Подписывание сообщений по умолчанию активировано, но обязательная проверка подписей — нет, и она не будет активирована в течение по меньшей мере одного релиза (а может быть и нескольких), чтобы избежать поломки существующих приложений. Вы можете прочитать о настройке этой особенности здесь.
Команды
В части новых инструментов, в этом релизе представлены новая подкоманда ipfs cid
, предназначенная для обработки идентификаторов содержимого (Content ID, CID), полностью переписанная команда ipfs p2p
, потоковое разрешение имён, а также завершённая поддерджка inline-блоков.
Новая команда ipfs cid
позволяет пользователям изучать новые CID и конвертировать их в различные форматы разных версий. Например:
# Вывести метаданные CID (с префиксом)
$ ipfs cid format -f %P QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
cidv0-protobuf-sha2-256-32
# Получить хэш sha256 в шестнадцетиричном формате из CID
$ ipfs cid format -b base16 -f '0x%D' QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
0x46d44814b9c5af141c3aaab7c05dc5e844ead5f91f12858b021eba45768b4c0e
# Сконвертировать CID v0 формата base58 в CID v1 формата base32
$ ipfs cid base32 QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
bafybeicg2rebjoofv4kbyovkw7af3rpiitvnl6i7ckcywaq6xjcxnc2mby
Переработанная команда ipfs p2p
позволяет перенаправлять TCP-потоки через две IPFS-ноды от одного хоста к другому. Это такой ssh -L
, только для IPFS. Вы можете найти документацию здесь.
Она всё ещё носит экспериментальный статус, но разработчики не ожидают особенно многих несовместимых изменений на этой стадии (весьма вероятно, что она будет стабилизирована в следующем релизе). Краткий обзор внесённых несовместимых изменений:
- IPFS не прекращает прослушивание локальных (перенаправленных) соединений после открытия единичного соединения.
- Вывод команды
ipfs p2p stream ls
теперь содержит более полезную информацию. Первый выводимый адрес — это всегда адрес инициатора соединения. - Команда
ipfs p2p listener ls
переименована вipfs p2p ls
- Команда
ipfs p2p listener close
переименована вipfs p2p close
. - Имена протоколов предваряются префиксом
/x/
, и теперь просто передаются libp2p в качестве имени обработчика. Предыдущие версии делали это незаметно для пользователя и с префиксом/p2p/
. Теперь есть флаг--allow-custom-protocol
, который позволяет использовать любое имя обработчика из libp2p. - Команды
ipfs p2p listener open
иipfs p2p stream dial
переименованы:-
ipfs p2p listener open p2p-test /ip4/127.0.0.1/tcp/10101
теперь становитсяipfs p2p listen /x/p2p-test /ip4/127.0.0.1/tcp/10101
-
ipfs p2p stream dial $NODE_A_PEERID p2p-test /ip4/127.0.0.1/tcp/10102
теперьipfs p2p forward /x/p2p-test /ip4/127.0.0.1/tcp/10102 /ipfs/$NODE_A_PEERID
.
-
Текст новости слишком объёмный, продолжение в последующих сообщениях...
>>> Официальный сайт
>>> Каталог приложений, созданных на основе IPFS