我想要构建一个分散的、类似于Reddit的系统,使用P2P技术。我应该基于哪个现有的P2P库来构建它?

12

我希望构建一个使用P2P的去中心化Reddit系统。基本上,我想保留Reddit的基本功能,但将其去中心化,使其更加强大且免于审查。这也将使人们可以开发不同的客户端来适应他们想要浏览的方式。

你能推荐一些好的P2P库来作为我的工作基础吗?它们应该是开源的、跨平台的、强大且易于使用。对语言我不太在意,我可以适应。


1
你应该了解分布式哈希表,有几个生产质量的实现。可能你不需要更多了...另外:我非常喜欢你的想法 ;) - zerm
2
我要提醒你的是,历史上分布式解决方案的推广效果非常有限,而且市场上已经充斥着Reddit的克隆产品。因此,你必须非常努力地推广它,并注册足够多的初始用户来保持发展势头。祝你好运! - Marcin
1
我在研究同样的想法时发现了这个问题。你将面临的最大问题是人们试图操纵系统。由于Reddit是集中式的,它可以轻松确保每个评论和帖子只有一个用户投票,并且版主对子论坛拥有控制权。而去中心化的版本则没有任何人拥有权威。这并不意味着不可能,但这是你需要考虑的额外问题。 - Cerin
@Cerin:我同意!这就是为什么我想要基于个性化推荐而不是民主来构建我的链接选择系统。该系统将根据学习用户喜欢的内容以及他信任的用户来选择链接,而不是根据投票数。 - static_rtti
我目前正在精确地处理系统的这一部分,将其作为reddit的一层进行开发,当顶层准备好时,用P2P系统替换reddit的想法。 - static_rtti
显示剩余8条评论
3个回答

6

声明:警告,此处有自我推广!!!

您考虑过JXTA的最新发布吗?对于您想要做的事情来说,这可能已经足够了。否则,我们正在开发一个名为Chaupal的新的P2P框架,但它目前还没有运行。

编辑

还有我所谓的快速粗糙的UDP解决方案(其实并不那么粗糙,我应该称之为最小化解决方案)。

  1. 只需实现一个带有公共地址的服务器,并开始监听UPD。
  2. 位于NAT后面的节点联系服务器,服务器可以从接收到的数据报中读取它们的私有IP地址如何被转换为公共IP地址。
  3. 您将该信息发送回到节点,节点可以将其转发给其他节点。服务器还可以帮助节点之间交换此信息。
  4. 然后节点可以直接进行通信(一对一),通过向这些转换后的地址发送数据报。
简单易实现,但不涵盖丢失数据报、重放、乱序等问题...(即TCP在IP堆栈层面为您解决的典型问题)。

谢谢你的回答!我不会立即将其标记为已接受,因为我想为这个问题提供赏金,以便尽可能引起更多关注。顺便说一下,你有没有任何评论/建议,关于如何实现一个去中心化、基于P2P的Reddit系统? - static_rtti
你想要实现的目标类似于FreeNet,所以我建议你参考一下它来获得灵感。 - Jérôme Verstrynge
不,我的想法与freenet完全不同。Freenet基本上是Web的匿名版本。我并不太关心匿名性。我的目标是以分散的方式允许人们交换链接和对这些链接的评论。 - static_rtti
我的意思是,当涉及到底层架构时(而不是用户看到的或应用程序提供的功能),您应该将通信级别与应用程序级别分开,这就是Freenet所实现的。您可以跳过匿名部分。 - Jérôme Verstrynge
1
我自己使用过JXTA,可以推荐它 :) - Jan Zyka

4
我还没有机会使用它,但Telehash似乎是为这种应用程序而设计的。点对点应用程序在处理防火墙的限制时有特殊的挑战...由于Telehash基于UDP,因此非常适合通过防火墙进行穿透
编辑static_rtti的评论:
如果代码速度是一个要求,libjingle 已经付出了很多努力,但主要面向XMPP。你可以将ICE代码的部分移植出来,至少可以获得穿透效果。有关其实现细节,请参见libjingle架构概述

听起来不错,谢谢回答!我有时间的时候会再深入研究一下。 - static_rtti
1
@static_rtti,我在上面回答了。 - Mike Pennington

1

你可以试试CouchDB。它是一个分散式的Web应用平台,使用HTTP API。人们已经用它创建了“CouchApps”,这些是基于CouchDB的分散式应用程序,可以像病毒一样传播到其他CouchDB服务器。你只需要知道如何编写CouchApps的JavaScript和学习CouchDB API。你可以阅读这本免费在线书籍来了解更多:http://guide.couchdb.org

CouchDB的秘密武器是主对主复制协议,它让信息像病毒一样传播。当我参加第一届CouchConf时,他们演示了通过丢一个“Couch Party”(就是在一个房间里有很多人相互复制数据,模拟一个自组织网络)来展示这种效率。

此外,使CouchApp工作的所有代码默认都是公开的,存储在称为设计文档的特殊实体中。

P.S. 我一直在考虑做类似的项目,但目前没有太多时间投入。祝你好运!


谢谢,我一定会去看看。 - static_rtti
1
没问题!如果你有任何问题,随时问我。我真的认为这是一个分散式网站的理想解决方案。此外,还有可以嵌入到Android和iOS应用程序中的CouchDB移动版本,因此你实际上可以将网站随身携带。最后,我强烈推荐观看有关“Ground Computing”与CouchDB的Google Tech Talk:http://googlecode.blogspot.com/2009/09/chris-anderson-couchdb-relaxing-offline.html - pokstad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接