我正在编写一个p2p实现,我想分散,但是我在掌握像bittorrent这样的协议中的DHT方面遇到了一些麻烦.如果没有跟踪器,客户如何知道同行在哪里?对等体是否存储在实际的torrent文件中?
如果我有一个没有任何跟踪器的洪流,我刚刚开始了一个比特的客户端,所以我还没有同行...我怎么知道谁在DHT中首先连接?好像我必须知道DHT中至少有一个节点才能开始....
我从来没有使用分布式缓存/ DHT,如memcached,jboss缓存,ehcache等.我想知道哪些,如果有的话,适合我的使用.
首先,我不是在做Web应用程序(因为大多数这些项目似乎都面向Web应用程序).我为金融交易公司编写服务器(实际上是订单管理系统).服务器本身并不复杂.他们需要接收信息(市场数据,订单,执行等)将它们发送到目的地,同时可能转换其中一些消息.
我正在研究这些产品以解决以下问题:
安全的服务器状态存储库.我宁愿将我的应用程序的逻辑构建为一堆变换器(类似于Apache Camel)并将状态存储在"安全"的位置
应该分发这个存储库:如果这些数据中的一个存储崩溃,那么应该有一个或两个存储崩溃,我应该能够无缝切换到它们
这个存储库应该很快.这里使用单位数毫秒,换句话说,使用/处理此数据的系统是自动化系统,而不是人类点击链接.该系统需要具有高吞吐量和低延迟.通过在进程外发送我的数据,我必然会降低性能,但我试图平衡绝对原始速度和绝对数据保护.
这个存储库应该是安全的.与几个在线备份相似,该系统需要将数据写入磁盘(可能多于一个磁盘).
我真的想停止编写自己的"交易服务器".我是否正确地研究诸如jboss cache,ehcache等项目?
谢谢
我一直试图了解洪流磁铁技术,但我似乎无法弄清楚在打开磁铁链接时你是如何与第一个同伴联系的.
当你得到如下所示的磁力链接时,它不包含初始对等 - 只有BitTorrent信息哈希(btih)和文件名.
magnet:?xt=urn:btih:bbb6db69965af769f664b6636e7914f8735141b3&dn=ubuntu-12.04-desktop-i386.iso
Run Code Online (Sandbox Code Playgroud)
根据BitTorrent和Magnets:他们如何运作?(MakeUseOf)
如果单击未指定跟踪器(
tr
)的磁力链接,将使用DHT找到第一个对等方.一旦你有了同伴,同伴交换也会开始.
维基百科上的DHT文章没有具体说明如何找到同伴,但在Kademlia文章中(BitTorrent DHT所基于的),它说
想要加入网络的节点必须首先完成引导过程.在此阶段,加入节点需要知道另一个节点的IP地址和端口 - 一个已经参与Kademlia网络的引导节点(从用户或从存储的列表中获得).
但它从哪里知道该节点?我没有在磁铁链接中看到地址或任何内容.由于它是分散的(无跟踪),我不希望它提前知道节点.或者DHT实际上不是分散的?
这个问题可以进入比特币论坛,但我试图从编程的角度来理解.
存在用于分布式存储的技术,例如分布式哈希表(例如kademlia或类似的).比特币区块链与分布式哈希表有何不同?或者是支持比特币区块链的分布式哈希表技术?或者为什么比特币区块链被称为与DHT相比这样的突破?
我试图理解磁链接如何工作,因为我读过它们使用DHT和PEX来获取对等体,但如果我是网络中的新节点,我怎么能找到只有哈希的哈希文件?!它不总是需要链接到已知主机吗?
谢谢
我对名为a 的Btdigg.org感兴趣"DHT search engine"
.根据这篇文章,它不存储任何内容,甚至没有数据库.那它是如何工作的?它是否需要收集元信息并将其存储在数据库中,就像其他普通搜索引擎一样?用户提交查询后,它会扫描DHT网络并"实时"返回结果?这可能吗?
我正在寻找一个经过合理测试的库+服务器来存储一个持久的分布式哈希表.
我非常喜欢使用基于SQL的解决方案,因为数据是高度面向文档的,由数百万~64KB的blob组成,只有一个索引(通过所述BLOB的哈希计算) - 并且需要能够分发以进行长期扩展前景.
由于费用和带宽的考虑,S3等外部解决方案不是一种选择.
像CouchDB或Project Voldemort这样的东西是理想的 - 但是两者都有明显缺乏.NET绑定(PV可以是来自Java的IKVMC-但是有"问题".).键和值都是字节数组(键为16字节,值最大为2048KB,平均为64KB)
到目前为止,我已经搜索了Dynamo,Chord和类似的某种.NET端口 - 但是大多数结果似乎都是纯粹的内存缓存,缺乏任何形式的持久性或复制.
有人有任何想法或建议吗?
我有一个相当奇怪的问题.对于分布式哈希表,我需要能够对MD5哈希进行一些简单的数学运算.这些包括总和(由散列表示的数字和)和模运算.现在我想知道实现这些操作的最佳方法是什么.我正在使用hashlib来计算哈希值,但是因为我得到的哈希值就是字符串,我该怎么用它们计算?