0

我有一个需要同步池数据集的一系列主要连接的节点的情况。它们是 200-1500K 的文件,根据环境的不同,在 30 分钟到 6 小时之间不定期更新。现在节点的数量有数百个,但理想情况下,它会增长。

目前,我正在使用 libtorrent 在节点集群之间保持一系列文件同步。我每隔几个小时做一次转储,并根据之前的种子创建一个新的 torrent。然后我使用 BEP 38 的策略关联它。然后将 infohash 发布到 DHT 中的一个已知条目,其他节点轮询以获取它。

我想知道是否有更好的方法来做到这一点。我喜欢 BitTorrent 的原因最初是为了固件更新。我不需要担心连接性不够好的节点,并且使用 DHT,它可以很好地自组装。然后扩展以同步这些池文件。

我目前正在尝试查看是否可以进行扩展,以允许我让每个节点announce_peer为每个新记录执行一次。那么理论上相关方将能够倾听。这带来了两个大问题:

  1. 如何让感兴趣的节点知道有新数据?
  2. 如果我有 1000 个或更多节点每隔几分钟添加新的信息散列,这会对 DHT 造成什么影响?

我承认这感觉就像我试图将一个方形钉子打入一个圆孔,但我真的很想一次保持尽可能少的协议。

4

1 回答 1

0

如何让感兴趣的节点知道有新数据?

您可以使用BEP46通知客户端最新版本的 torrent。

如果我有 1000 个或更多节点每隔几分钟添加新的信息散列,这会对 DHT 造成什么影响?

在这里很难给出一个普遍的答案。每个节点是否添加了不同的数据集?还是这数千个节点将参与相同的池化数据,从而或多或少地共享一个 infohash?后者应该相当有效,因为并非所有人都需要宣布自己,他们可以只进行只读查找,尝试连接到 swarm 并且仅在没有足够的可到达对等点时才进行宣布。这类似于可变项的 put 优化

于 2019-12-20T01:36:17.220 回答