Pull to refresh

Web – P2P — Web

Reading time6 min
Views14K
Доброе время суток, дорогой %username%.

Недавно прочитал хабрастатью посвящённую достаточно общей идее распределённого веба. Сам я уже некоторое время занят в практической реализации проекта, идеи которого поразительно похожи на идеи автора вышеупомянутой статьи.

Под катом общие размышления, обзор текущего состояния проекта, перспективы и, конечно, немного трафика.

Если интересно — welcome под кат.

Идея распределённого интернета давно уже бродит в головах разного рода технических и оклотехнических специалистов. Кто-то предлагает делать полностью распределённые торренты с блекджеком автообновлениями и без трекеров, кто-то сразу берётся за распределённые ОС (не очень хорошо представляю себе такую штуку, но звучит внушительно), кто-то берётся заменять DNS. Уже есть несколько проектов, которые подходят к реализации с разных сторон, но статья не о них.

Общие размышления


Каждый раз, когда речь заходит об использовании P2P технологий по отношению к отличным от торрента вещам, упоминаются следующие преимущества использования распределённых сетей — анонимность, отказоустойчивость и производительность.
Следовательно, разрабатываемая система должна:
  • предоставлять возможность полной анонимизации участника;
  • в идеале, не иметь единой точки отказа;
  • работать с той же скоростью или быстрее традиционных клиент-серверных систем;
Также, полезна возможность совместного использования не только каналов, но и других ресурсов, входящих в сеть (диск, оперативная память, процессор) — это уже относится к распределённым вычислениям.

Имея программную платформу, которая позволяет выполнять часть кода в однораноговой сети, мы можем создавать любые распределённые сервисы (сетевые приложения) для, например, обмена файлами, генерации веб-страниц и передачи сообщений. Такая распределённая программа-сервис, по сути, представляет из себя набор функций, выполнение каждой из которых может быть делегировано соседнему узлу, а также инициализационную функцию (точка входа, специализированная функция, которая следит за выполнением задачи).
Запуск приложений поверх сети даёт:
  • возможность использования ресурсов участников сети — повышение скорости обработки большого количества запросов;
  • отсутствие единой точки отказа в случае, когда инициализационная функция доступна на любом узле;
  • полную анонимность при использовании обязательного шифрования соединений между узлами;
  • полную обратную совместимость с существующими протоколами и стандартами, т.к. на выходе функции-инициализатора может быть обычный HTTP или другой протокол;

Социальная часть


Почему проект распределённого веба имеет будущее именно в таком виде?

Платформа, обладающая возможностями к масштабированию, в первую очередь, интересна веб-мастерам и системным администраторам — первыми пользователями станут именно они. Их привлечёт также высокая скорость вычислений и то, что пользователям не придётся ставить себе всякие «улучшаторы». Значит, проблем с контентом не возникнет. А значит, будут и пользователи. Таким образом мы исключаем основную проблему подобных распределённых сетей — непопулярность.

Отсутствие кода на стороне клиента обозначает, что клиент может пользоваться сервисами сети, но не входить в неё. Для предоставления ресурсов в распоряжение сети достаточно поставить отдельное приложение, но это дело добровольное — мы же не собираемся всех запихивать «железной рукой в светлое будущее». Стимулы войти в сеть найдутся. Хорошим примером являются торренты. Рейтинги и статусы, возможность использования расширенных функций и другие способы мотивации. Всё больше людей будут входить в сеть, обеспечивая её рост. При достаточном размере сети станет возможным создание действительно 100% автономных неубиваемых сервисов. А это уже будущее, господа.

Для тех, кто прочитав заголовок «социальная часть», подумал совсем о другом, отдельно сообщаю — таки да, там можно делать распределённую социальную сеть, читайте ниже.

Техника: с чем имеем дело и как это работает


При поступлении запроса (запрос включает в себя имя сети, имя вызываемой программы и начальные данные) на один из узлов сети, узел, принявший запрос смотрит, есть ли у него нужный код и имеет ли он право его выполнять. Если кода нет, узел запрашивает этот код у своих соседей и получает пакет с модулем, содержащим необходимую (инициализационную) функцию. Инициализационная функция, в свою очередь, производит вызов всех необходимых подпрограмм, используя внутреннее API. При этом подпрограммы, вызванные через API, в реальности могут быть запущены на других узлах, так же, как была запущена сама инициализационная функция. Определение наиболее подходящего узла и синхронизация необходимых данных при этом ложится на API. Конечные результаты возвращаются в родительскую функцию. При этом нет возможности определить адрес изначально запросившего устройства — узлы знают только адреса расположения родительских функций, а все соединения между пирами шифруются (кроме особо доверенных случаев — для повышения производительности).

Информация в сети представляются в виде источников данных. Если вам нужен какой-то файл, строка или число — вы можете запросить его в удобном вам виде у соответствующей функции.
Поверх такой платформы можно уже запускать инфраструктуру — аналог DNS в виде сетевого приложения, которое принимает на вход адрес, а отдаёт список IP (и/или особый адрес сети). Да и сами сайты становятся просто распределёнными приложениями генерации и компоновки HTML кода и могут быть выполнены независимо от какого-либо сервера.

Разработка


Основная часть проекта написана на могучем и великом языке Perl, но это не значит, что для профессионалов от других языков (и не профессионалов — мы рады каждому адекватному человеку) не найдётся места и дела.
Наш проект сейчас только начинает свою открытую жизнь — задачи есть и их много.

Что уже готово:
  • Функциональное ядро, занимающееся распараллеливанием подпрограмм;
  • ACL на уровне функций;
  • пулинг соединений;
  • синхронизация кода узлов;
  • синхронизация операционных данных;

Т.е., уже сейчас реально запустить сайт, который сможет быстро работать на нескольких узлах, и отдавать контент по HTTP.

Общие задачи, ожидающие решения:
  • распределённое хранилище данных;
  • система поиска нужных ресурсов в сети по их идентификатору;
  • аналог DNS и плагины для его поддержки браузерами;
  • встроенные обработчики протоколов;
  • многое другое;

Также можно почитать темы из обсуждения проекта в гуглогруппе (она достаточно общая — включает и не касающиеся проекта темы).

Если уже очень хочется покрутить в руках


Как я уже писал чуть выше, сайт, на котором будет вестись разработка и, соответственно, публиковаться код и документация готовится к запуску (UPD: сайт запущен). К запуску также готовится и сам код с документацией. Чтобы получился более-менее качественный старт, публиковаться всё это будет где-то через полторы-две недели (это как на IPO выходить, только сложнее). После публикации (и в случае инетреса хабрасообщества) готовится серия статей на тему использования платформы для программистов и администраторов.

Перспективы


Социальность

Создание и использование системы социального общения, где всё: мой профиль, интерфейс персональной странички и все личные данные хранятся на моём компьютере (с полным правом удаления, если вдруг вздумается) видится мне гораздо интереснее ситуации, когда вся личная информация доступна «чужому дяде», который на этом ещё и зарабатывает. Поэтому распределённой социальной сети, надеюсь, быть — её вполне реально создать на планируемой инфраструктуре. Запишем в перспективы — для последующей реализации.

Почта, телеграф, телефон

Туда же (в перспективы) стоит записать систему прямого общения — текстового, документного, голосового, видео и голографического (когда придумают). Можно попробовать построить защиту от спама на уровне архитектуры, но это так… Перспективы.

Монетизация

Я намеренно не стал касаться в статье чего-либо, связанного с деньгами и монетизацией проекта — это предмет для отдельного обсуждения (даже не статьи, а именно обсуждения). Поэтому монетизацию тоже запишем в перспективы.


Независимость


Интернет потерял независимость году этак в 2005. Распределённый интернет, часть которого мы собираемся здесь создать, конечно, не сделает вас независимыми от провайдеров (яркий пример зависимости), но, в перспективе, позволит избежать ига всяких RIAA и MPIA (я не сторонник повального пиратства, но подобным организациям я точно не друг — у меня на эту тему есть свои мысли объёмом примерно на такую же статью), в какой-то мере защитит от нападок на DNS (не смог найти ссылку на статью про массовое отключение доменов; если в коментариях кто-то найдёт — заменю), и поможет возникновению новых независимых источников информации, что сделает мир чуточку лучше что даст нам новые возможности её получения.
P.S. Спасибо всем, кто помог мне в публикации статьи — без вас её бы здесь не было.

Материалы:
http://groups.google.com/group/DarkMatterP2P/ — место, где в данный момент ведётся всё обсуждение по вопросам, связанным с темой в т.ч.не касающиеся проекта.
http://habrahabr.ru/blogs/p2p/112491/ — достаточно обширная статья с хорошей подборкой ссылок.
http://habrahabr.ru/blogs/infosecurity/112682/ — ещё одна статья на тему, с попыткой организовать людей и сделать что-то вменяемое.
Tags:
Hubs:
+56
Comments65

Articles