Мало кто слышал об IPFS, и еще меньше дошли до ее детального изучения.
И вполне единицы глубже погрузился в проект.
Короче говоря, IPFS — это химера, созданная на основе технологий, лежащих в основе git и bittorrent, с одной особенностью — адресацией объектов по содержимому ( КАС ).
Любой объект, файл или пользовательские данные хешируются, и полученный хеш становится адресом этого файла в системе IPFS. Далее этот контент может быть запрошен другими узлами сети, и он распространится по планете, а в идеале никогда больше не исчезнет, будучи доступен по хешу.
Это свойство также подразумевает неизменность объектов в системе, поскольку любое изменение содержимого создает новый хеш-адрес в сети.
Типичная ссылка на объект: http://ipfs.io/ipfs/QmPQGujZ4K1xPNNcCjBWMoSuYrcJae43dukJP51mbfftDK Но у этого подхода есть недостаток: человек не запоминает хеши.
Обычному человеку привычнее иметь иерархическую файловую систему или облако тегов с возможностями фильтрации.
Файловая система
Для этого разработчики ipfs предусмотрели возможность сохранения графа объектов сети, который будет похож на файлы и каталоги; файлы и каталоги будут иметь человеческое имя и знакомый путь к файлу.Возможность хорошая, она породила следующую возможность - хостинг статических сайтов прямо в сети ipfs, вот так https://ipfs.io/ipns/i.ocsf.in/ .
При всем при этом из документации ipfs понятно, что максимум, что пользователь может сделать с этой виртуальной файловой системой, — это смонтировать содержимое объектной базы данных при запуске локального демона.
Возможно, этого достаточно для некоторых задач.
Но для более-менее полноценной работы с ФС нужно больше возможностей.
Конечно, для полной виртуализации файловой системы нам потребуется разработать собственный драйвер для фьюза или для докаНЫ в Windows, это увлекательный процесс, но сначала мы можем сделать что-то попроще, чтобы оценить возможности сети и API файловой системы IPFS. И какой механизм может работать примерно во всех экосистемах? Веб-протокол.
Например, ВебДАВ.
В Windows есть встроенный клиент, в Linux он есть в основных графических файловых менеджерах и в консоли через кадавер.
Мы построим зиккурат. На голанге.
А потом, возможно, на node.js.
Выполнение
Служба webdav с базовым функционалом и возможностью создания собственной реализации файловой системы доступна «из коробки» в golang. Интерфейс практически идентичен интерфейсу файловой системы в стандартной комплектации ОС.Но возникает проблема.
Неизменяемость объектов IPFS означает, что любое изменение файловой системы провоцирует полную перестройку всей иерархии объектов каталога.
Вместе с корневым.
К сожалению, для этого потребуется хранить хеш корневого каталога во внешнем по отношению к IPFS хранилище.
И на данный момент это единственный параметр конфигурации нашей виртуальной файловой системы.
WebDAV также поддерживает систему блокировки файлов.
Он используется для разделения доступа к ФС среди многих пользователей.
Проблема доступа к постоянно меняющемуся корневому каталогу, который меняется при каждом изменении файловой системы, остается нерешенной.
WebDAV-промежуточное программное обеспечение реализовано в виде демона, который работает рядом с демоном go-ipfs и взаимодействует с IPFS через http-api, что накладывает ограничения на производительность.
Поэтому в дальнейшем имеет смысл работать с сетью ipfs напрямую, скомпилировав свои модули в демон go-ipfs. Кроме того, в объектной структуре виртуальной файловой системы, встроенной в IPFS, отсутствует возможность хранения пользовательских атрибутов файлов и каталогов.
Всегда можно придумать костыль, но это не выход для продуктов, которые будут хоть немного круче этого исследовательского проекта.
выводы
В процессе разработки были выявлены некоторые недостатки поддержки WebDAV в некоторых операционных системах, например, такой .Также сам WebDAV работает не очень быстро при работе с большим количеством мелких файлов.
Но в сети IPFS есть проблемы с большими файлами; загрузка их в систему занимает сравнительно много времени.
Для более широкого использования системы IPFS вместе с WebDAV необходимы другие драйверы для доступа к файловой системе внутри IPFS. Более того, в последних версиях API добавлены функции изменяемой файловой системы, которые пока не документированы, но могут обеспечить необходимую производительность и простоту использования.
Ссылки
Теги: #Go #IPFS #WebDAV #P2P #Ненормальное программирование #Go #IPFS-
Аналог Битрикс 24
19 Oct, 24