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

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

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


person static_rtti    schedule 10.04.2011    source источник
comment
Вы должны проверить Distributed Hash Tables, существует несколько реализаций качества продукции. Возможно, вам больше и не понадобится... Также: Мне очень нравится ваша идея ;)   -  person zerm    schedule 10.04.2011
comment
Спасибо! Мне тоже нравится эта идея, но это кажется очень сложной задачей... Если вы хотите помочь мне, вы можете подписаться на reddit/r/decentralized. Я постараюсь набрать больше людей, когда идея прояснится.   -  person static_rtti    schedule 10.04.2011
comment
Я предупреждаю вас, что исторически распределенные решения получили очень мало поддержки, а также рынок насыщен клонами Reddit. Таким образом, вам придется чертовски сильно постараться, чтобы продвигать его и зарегистрировать достаточное количество первоначальных пользователей, чтобы сохранить импульс. Удачи!   -  person Marcin    schedule 13.04.2011
comment
Я должен добавить, что ваши пользователи, вероятно, не будут использовать какой-либо латинский шрифт, поэтому, что бы вы ни делали, убедитесь, что unicode работает правильно; может быть, также предоставить людям возможность фильтровать то, что они видят, и искать по используемому набору символов?   -  person Marcin    schedule 13.04.2011
comment
Как вы думаете, почему децентрализованное решение не имело успеха? Есть ли в них что-то принципиально неправильное или их просто сложнее создать, чем централизованные решения?   -  person static_rtti    schedule 13.04.2011
comment
Я нашел этот вопрос, исследуя ту же идею. Самая большая проблема, с которой вы столкнетесь, — это люди, пытающиеся обмануть систему. Будучи централизованным, Reddit может легко гарантировать, что один пользователь получит один голос за комментарий и публикацию, а модераторы контролируют сабреддиты. В децентрализованной версии по определению не будет никого с полномочиями. Это не значит, что это невозможно, но это дополнительная проблема, которую вам придется учитывать.   -  person Cerin    schedule 02.01.2012
comment
@Cerin: я согласен! Вот почему я хочу, чтобы моя система выбора ссылок основывалась на персональных рекомендациях, а не на демократии. Система будет выбирать ссылки на основе изучения того, что нравится пользователю и каким пользователям он доверяет, а не на основании подсчета голосов.   -  person static_rtti    schedule 03.01.2012
comment
В данный момент я как раз работаю над этой частью системы, разрабатывая ее как слой поверх Reddit, с идеей заменить Reddit системой p2p, когда верхний слой будет готов.   -  person static_rtti    schedule 03.01.2012
comment
@static_rtti, Интересная идея. Сосредоточьтесь на алгоритмах онлайн-обучения. Vowpal Wabbit может быть хорошим местом для начала.   -  person Cerin    schedule 03.01.2012
comment
Одно из возможных решений для ограничения спама голосов — сделать голосование дорогостоящим в вычислительном отношении. Если для голосования требуется 1 секунда вместо 1 миллисекунды, это в 1000 раз меньше спам-голосов, о которых нужно беспокоиться;)   -  person Martin    schedule 25.10.2012
comment
@Мартин: это неплохая идея. Как бы вы это реализовали?   -  person static_rtti    schedule 25.10.2012
comment
HashCash en.wikipedia.org/wiki/Hashcash — именно такая система для электронной почты, я d реализовать это именно так.   -  person Martin    schedule 25.10.2012
comment
это полезно читать в децентрализованных социальных сетях 8bitmen. ком/   -  person underdog    schedule 14.05.2019


Ответы (3)


Дисклеймер: предупреждение, здесь самореклама!!!

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

ИЗМЕНИТЬ

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

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

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

person Jérôme Verstrynge    schedule 11.04.2011
comment
Спасибо за Ваш ответ! Я не буду сразу отмечать его как принятый, потому что хочу предложить награду за вопрос, чтобы привлечь к нему как можно больше внимания. Кстати, есть ли у вас какие-либо комментарии/предложения относительно того, как можно реализовать децентрализованную систему на основе p2p, подобную Reddit? - person static_rtti; 12.04.2011
comment
То, чего вы хотите достичь, похоже на FreeNet, поэтому я бы взглянул на него для вдохновения. - person Jérôme Verstrynge; 12.04.2011
comment
Нет, то, что я хочу сделать, сильно отличается от freenet. Freenet — это, по сути, анонимная версия сети. Меня мало волнует анонимность. Моя цель — позволить людям обмениваться ссылками и комментировать эти ссылки децентрализованным образом. - person static_rtti; 12.04.2011
comment
Я имел в виду, что когда речь идет о базовой архитектуре (а не о том, что видит пользователь, или о функциях, предлагаемых вашим приложением), вы должны отделить уровень связи от уровня приложения, чего и добивается Freenet. Вы можете пропустить анонимную часть. - person Jérôme Verstrynge; 12.04.2011
comment
Сам использовал JXTA и могу рекомендовать :) - person Jan Zyka; 19.04.2011

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

ИЗМЕНИТЬ комментарий static_rtti:

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

person This    schedule 18.04.2011
comment
Вроде неплохо, спасибо за ответ! Я буду исследовать немного больше, когда у меня будет время. - person static_rtti; 18.04.2011
comment
@static_rtti, я ответил выше. - person This; 19.04.2011

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

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

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

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

person pokstad    schedule 23.10.2012
comment
Спасибо, обязательно посмотрю. - person static_rtti; 25.10.2012
comment
Без проблем! Если у вас есть вопросы, не стесняйтесь спросить. Я действительно думаю, что это идеальное решение для децентрализованного веб-сайта. Кроме того, существуют мобильные версии CouchDB, которые можно встроить в приложения для Android и iOS, чтобы вы могли брать веб-сайты с собой куда угодно. И последнее, я очень рекомендую этот Google Tech Talk о наземных вычислениях с CouchDB: googlecode.blogspot.com/2009/09/ - person pokstad; 25.10.2012