Прежде чем начну, должен оставить ссылку на предыдущую статью, чтобы было понятно о чем именно речь. В этой статье хотел бы разобрать слой, который отвечает за хранение файлов, и как это может быть использовано любым человеком. Storacle — самостоятельная библиотека, никакой связи с музыкой напрямую нет. Можно организовать хранение любых файлов. В предыдущей статье я немного "накатил бочку" на ipfs, но это произошло именно в контексте решаемой мной задачи. В целом, я считаю этот проект крутым. Просто мне больше нравится возможность создавать разные сети под разные задачи. Это позволяет лучше организовывать структуру и снижать нагрузку на отдельные узлы и сеть в целом. Можно даже в рамках одного какого-то проекта, при необходимости, дробить сеть на куски по каким-то критериям, снижая общую нагрузку. Итак, storacle использует механизм spreadable для организации сети. Основные особенности: Простой пример, как это вообще работает из программы: Сервер: Клиент: Взгляд изнутри Под капотом ничего сверхъестественного. Информация о количестве файлов, совокупном их размере и прочие моменты хранятся в in-memory базе и обновляются при удалении и добавлении файлов, поэтому необходимости часто обращаться к файловой системе нет. Исключением является включение сборщика мусора, когда нужна циркуляция файлов при достижении каких-то размеров хранилища, а не запрет на добавление новых. В этом случае приходится обходить хранилище, и работа с большим количеством файлов(> миллиона скажем) может приводить к существенным нагрузкам. И лучше хранить поменьше файлов и запускать побольше узлов. Если "чистильщик" отключен, то такой проблемы нет. Хранилище файлов представляет собой 256 папок и 2 уровня вложенности. Файлы хранятся в папках второго уровня. То есть при наличии 1млн. файлов в каждой такой папке будет около 62500 штук (1000000 / sqrt(256)). Название папок формируются из хэша файла, чтобы можно было быстро получить доступ, зная хэш. Такая структура была выбрана исходя из большого числа различных требований к хранилищу: поддержка слабых файловых систем, где в одной папке не желательно иметь много файлов, быстрый обход всех папок при необходимости, и.т.д. Некая золотая середина. Кэширование При добавлении файлов, а также при их получении, в кэш записываются ссылки на файлы.
Благодаря этому очень часто нет необходимости обходить всю сеть в поисках файла. Это ускоряет получение ссылок и уменьшает нагрузку на сеть. Также кэширование происходит через http заголовки. Изоморфность Клиент написан на javascript и изоморфен, его можно использовать прямо из браузера. 
Можно загрузить файл https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js как скрипт и получить доступ к window.ClientStoracle либо импортить через систему сборки и.т.п. Отложенные ссылки Интересной фичей также является "отложенная ссылка". Это ссылка на файл, которую можно получить синхронно, здесь и сейчас, а файл подтянется когда уже будет найден в хранилище. Это очень удобно, когда, например, нужно показать на сайте какие-то картинки. Просто проставляем в src отложенную ссылку и все. Кейсов можно придумать много. Api клиента Экспорт файлов на другой сервер Для того, чтобы перенести файлы на другой узел можно: Основные настройки узла
Запуская узел хранилища, можно указать все необходимые настройки.
Опишу самые основные, остальное можно найти на гитхабе. Почти все параметры, связанные с размерами могут проставляться и в абсолютных и в относительных величинах. Работа через командную строку
Библиотеку можно использовать через командную строку. Для этого нужно установить ее глобально: npm i -g storacle. После этого можно запускать нужные экшены из директории с проектом, где узел. Например, storacle -a storeFile -f ./file.txt -c ./config.js, чтобы добавить файл. Все экшены можно найти в https://github.com/ortexx/storacle/blob/master/bin/actions.js Зачем тебе это может быть нужно Мои контакты: Full Stack Javascript Developer