IPFS: космическая файловая система будущего?
IPFS (от англ. InterPlanetary File System) — межпланетная файловая система. Вот так, не больше и не меньше. Но если абстрагироваться от названия, то Википедия определяет IPFS как «контентно-адресуемый, одноранговый гипермедийный протокол связи». Он был разработан уже в далёком 2015 году неким Хуаном Бенетом (Juan Benet) с целью создать полностью распределённые приложения. Глобальная цель данного протокола – сделать интернет быстрее, безопаснее и более открытым, чем он есть сегодня.

Суть протокола
IPFS представляет собой распределённую одноранговую файловую систему, иными словами – является полностью децентрализованной сетью доставки и дистрибуции содержимого (CDN – Content Delivery Network). Эта сеть позволяет более гибко подойти к хранению и передаче данных.
Основной единицей сети является блок с размером меньше 262158 байт, который содержит как часть файла, так и ссылки на другие блоки. Недостатком сети IPFS раньше было то, что загружаемые в сеть данные копировались в хранилище блоков на вашем жестком диске, что приводило к двукратному увеличению занимаемого ими пространства. Однако же, в прошлом году появилась спасительная опция «--nocopy», которая избавила сеть от данного недостатка. При ее применении исходные файлы используются IPFS как источник блоков.
Что-то общее тут есть и с сетью BitTorrent: например, отсутствует поиск по имени файла или каталога. Кроме того, саму суть сети можно представить, опять-таки ссылаясь на Википедию, как «единый BitTorrent-рой, обменивающийся файлами единого Git-репозитория».
Всё это формирует так называемый направленный ациклический граф (ориентированный ациклический граф, DAG от англ. directed acyclic graph) — «орграф, в котором отсутствуют направленные циклы, но могут быть «параллельные» пути, выходящие из одного узла и разными путями приходящие в конечный узел» (цитируя Википедию).
Таким образом, ключевыми элементами сети являются распределённая хэш-таблица, децентрализованный обмен блоками и самосертифицирующееся пространство имен. Монтируется файловая система через FUSE.
IPFS нацелена на, не больше, не меньше, как на криптографическую замену протоколу HTTP: даже сам автор признаёт, что это звучит безумно, но тем не менее, так.

Практическая реализация
IPFS представляет собой проект с открытым исходным кодом, имеет сервис имён IPNS и глобальное пространство имён на основе открытых ключей.
Существует кроссплатформенный клиент, написанный GO. Его можно скачать или скомпилировать самостоятельно на своей машине. Запускается он простой командой ipfs daemon, а взаимодействие идет через обычный веб-интерфейс. После добавления файла или каталога система выдаст его мультихэш: это SHA128-идентификатор, который состоит из трех частей (хэш функции, его размер в байтах, сам хэш). Он также является заделом на будущее, чтобы сеть имела возможность перейти на более стойкие хэш-функции. Мультихэш входит в состав идентификатора контента.
Выход в обычную сеть осуществляется через сайт gateway.ipfs.io. Вам нужно знать мультихэш этого файла, в результате чего он становится доступен посредством URL http://gateway.ipfs.io/ipfs/[мультихэш].
Огромным преимуществом гипермедийного P2P-протокола IPFS является избавление сайтов от необходимости использовать центральный сервер, что в корне меняет структуру Интернета в принципе. Напомним, что по текущему протоколу HTTP файл скачивается только с одного компьютера – в отличие от IPFS, когда части файла клиент получает с разных компьютеров, что еще и ускоряет в разы саму процедуру получения.
Более того, получение файла по HTTP может легко прерваться в том случае, если хоть одно звено из цепочки передачи этого файла (а это любой провайдер-посредник) будет недоступно. А поскольку мы приближаемся к тому времени, когда стоимость доставки контента опередит его полезность, IPFS будет крайне выгодна всем звеньям сети.
Неочевидные преимущества
В силу защищенности протокола IPFS делает невозможным, к примеру, DDoS-атаки, которые являются одним из больных мест интернета в его нынешнем виде. Более того, децентрализация позволяет обращаться к контенту (блокам) даже в случае нерегулярного доступа к сети, и более того –брать блоки из оффлайнового кэша.
Еще одним неочевидным преимуществом сети IPFS можно назвать дружественность по отношению к интернету вещей (IoT). Ведь уже даже сейчас мультиварка с вайфаем или «простой» выключатель света, плотно общающийся с роутером, заполоняют собою сеть собственными запросами и ответами. А в будущем – когда число таких устройств будет только расти – сеть окажется фактически переполнена такими запросами. И здесь простота и распределённость IPFS выйдут на первый план, оставив позади медленный и громоздкий HTTP.
Наконец, тот факт, что крупнейший американский поставщик фильмов и сериалов через интернет Netflix приступил к плотному изучению технологии крупномасштабного потокового вещания в P2P, показывает, что большие компании из топ-100 начали свои поиски в области распределённого вещания. Это доказывает и востребованность проектов типа IPFS, и возможность взятия его на вооружение (вспомним про открытый исходный код) даже гиганту YouTube.
Одним словом, IPFS поможет интернету стать той самой системой, которую мы все стремимся видеть в наших мечтах и чаяниях, но которая невозможна в нынешнем своем виде. Ведь с этим протоколом становится возможным соединить друг с другом даже находящихся в какой-то момент времени в оффлайне людей – при этом с многократно меньшей стоимостью такого соединения и малым временем доставки контента.