Я хочу построить децентрализованную систему, подобную reddit, используя P2P. На какой существующей библиотеке p2p я должен ее основывать?

#networking #language-agnostic #social-networking #p2p #nat-traversal

#сеть #не зависит от языка #социальные сети #p2p #nat-traversal

Вопрос:

Я хочу построить децентрализованную систему, подобную reddit, используя P2P. В принципе, я хочу сохранить базовые возможности reddit, но сделать его децентрализованным, чтобы сделать его более надежным и невосприимчивым к цензуре. Это также позволит людям разрабатывать разные клиенты, соответствующие способу их просмотра.

Не могли бы вы порекомендовать хорошие библиотеки p2p для моей работы? Они должны быть с открытым исходным кодом, кроссплатформенными, надежными и простыми в использовании. Меня не сильно волнует язык, я могу адаптироваться.

Комментарии:

1. Вам следует ознакомиться с распределенными хэш-таблицами, существует несколько реализаций производственного качества. Возможно, вам не понадобится намного больше … Также: мне очень нравится ваша идея 😉

2. Спасибо! Мне тоже нравится идея, но это кажется очень сложной задачей… Если вы заинтересованы в том, чтобы помочь мне, вы можете подписаться на reddit / r / decentralized. Я попытаюсь привлечь больше людей, когда идея станет яснее.

3. Я предупреждаю вас, что исторически распределенные решения получили очень мало популярности, а также рынок перенасыщен клонами reddit. Итак, вам придется чертовски постараться, чтобы продвигать ее и зарегистрировать достаточное количество начальных пользователей, чтобы поддерживать динамику. Удачи!

4. Я должен добавить, что ваши пользователи, вероятно, не будут использовать какой-либо вид латиницы, поэтому, что бы вы ни делали, убедитесь, что unicode работает должным образом повсюду; может быть, также предоставить людям функцию фильтрации того, что они видят, и поиска по используемому набору символов?

5. Я нашел этот вопрос, исследующий ту же идею. Самая большая проблема, с которой вы столкнетесь, — это люди, пытающиеся играть в систему. Будучи централизованным, Reddit может легко гарантировать, что один пользователь получит один голос за комментарий и публикацию, и что модераторы будут контролировать субредакты. Децентрализованная версия, по определению, не имела бы ни у кого полномочий. Это не значит, что это невозможно, но это дополнительная проблема, которую вам придется рассмотреть.

Ответ №1:

Отказ от ответственности: предупреждение, самореклама здесь!!!

Рассматривали ли вы последнюю версию JXTA? Вероятно, этого достаточно для того, что вы хотите сделать. Кроме того, мы работаем над новым P2P-фреймворком под названием Chaupal, но он еще не запущен.

Редактировать

Существует также то, что я называю быстрым и грязным решением UDP (которое, в конце концов, не такое уж грязное, я бы назвал его минимальным).

  1. Просто внедрите один сервер с общедоступным адресом и начните прослушивать UPD.
  2. Одноранговые узлы, расположенные за NAT, связываются с сервером, который может прочитать, как их частный IP-адрес был преобразован в общедоступный IP-адрес из полученных дейтаграмм.
  3. Вы отправляете эту информацию обратно одноранговому узлу, который может переслать ее другим одноранговым узлам. Сервер также может помочь в обмене этой информацией между одноранговыми узлами.
  4. Тогда одноранговые узлы могут взаимодействовать напрямую (один к одному), отправляя дейтаграммы на эти переведенные адреса.

Простая, легкая в реализации, но не покрывающая потерянные дейтаграммы, повторы, выход из строя и т.д. … (Т. Е. типичные проблемы, которые TCP решает за вас на уровне стека IP).

Комментарии:

1. Спасибо за ваш ответ! Я не буду отмечать это как принятое немедленно, потому что я хочу предложить вознаграждение за вопрос, чтобы привлечь к нему как можно больше внимания. Кстати, есть ли у вас какие-либо комментарии / предложения относительно того, как можно реализовать децентрализованную систему, подобную reddit, основанную на p2p?

2. То, чего вы хотите достичь, похоже на FreeNet, поэтому я бы взглянул на это для вдохновения.

3. Нет, то, что я хочу сделать, сильно отличается от freenet. Freenet — это, по сути, анонимная версия Интернета. Меня не очень волнует анонимность. Моя цель — позволить людям обмениваться ссылками и комментариями к этим ссылкам децентрализованным образом.

4. Я имел в виду, что когда речь заходит о базовой архитектуре (не о том, что видит пользователь, или о функциональных возможностях, предлагаемых вашим приложением), вы должны отделять уровень связи от уровня приложения, чего и добивается Freenet. Вы можете пропустить анонимную часть.

5. Сам использовал JXTA и могу порекомендовать ее 🙂

Ответ №2:

У меня не было возможности использовать ее, но Telehash, похоже, был создан для такого рода приложений. Приложения Peer2Peer сталкиваются с особой проблемой, связанной с ограничениями брандмауэров … поскольку Telehash основан на UDP, он хорошо подходит для пробивания отверстий в брандмауэрах.

ОТРЕДАКТИРУЙТЕ комментарий static_rtti:

Если требуется скорость кода, libjingle прилагает к этому много усилий, но в первую очередь ориентирован на XMPP . Вы можете перенести части кода ICE и, по крайней мере, получить возможность пробивать отверстия. Смотрите Обзор архитектуры libjingle для получения подробной информации об их реализации.

Комментарии:

1. Кажется, неплохо, спасибо за ответ! Я изучу немного больше, когда у меня будет время.

2. @static_rtti, я ответил выше.

Ответ №3:

Проверьте CouchDB. Это децентрализованная платформа веб-приложений, которая использует HTTP API. Люди использовали ее для создания «CouchApps», децентрализованных приложений на основе CouchDB, которые могут вирусно распространяться на другие серверы CouchDB. Все, что вам нужно знать для написания CouchApps, — это Javascript и изучить CouchDB API. Вы можете прочитать эту бесплатную онлайн-книгу, чтобы узнать больше: http://guide.couchdb.org

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

Кроме того, весь код, который обеспечивает работу CouchApp, по умолчанию является общедоступным в специальных объектах, известных как Проектные документы.

P.S. Я думал о создании аналогичного проекта, но у меня не так много времени, чтобы посвятить этому в данный момент. БОЖЕ, ПОМОГИ МОЕМУ МАЛЬЧИКУ!

Комментарии:

1. Спасибо, я обязательно изучу это.

2. Нет проблем! Если у вас есть какие-либо вопросы, не стесняйтесь задавать. Я действительно думаю, что это идеальное решение для децентрализованного веб-сайта. Кроме того, существуют мобильные версии CouchDB, которые могут быть встроены в приложения для Android и iOS, чтобы вы действительно могли брать веб-сайты с собой, куда бы вы ни отправились. И последнее, я настоятельно рекомендую этот технический доклад Google о «наземных вычислениях» с CouchDB: googlecode.blogspot.com/2009/09 / …