该提案提出了一种名为“主题观察”的机制,允许节点在不实际接收消息内容的情况下,仅通过接收通知来了解特定主题中是否有新消息,从而减少GossipSub协议中因消息重复转发导致的网络带宽浪费。节点可以通过OBSERVE和UNOBSERVE消息来订阅或取消订阅主题的通知,订阅节点的对观察节点发送IHAVE消息作为通知。
作者: pop
概要: topic observation(主题观察)使节点能够在某个主题出现新消息时得到通知,而无需实际接收该消息。
此提案使你可以告知你的对等节点,当某个主题出现新消息时通知你,而无需消耗带宽来下载实际消息。当你这样做时,你被称为该主题中的观察节点。
Topic observation 的动机是由于 GossipSub 的网格度数而导致的带宽消耗的放大效应。当你订阅一个主题时,你需要下载或转发与网格度数一样多的消息副本。例如,如果网格度数为 8,你将大致下载或转发 8 个副本。
我们在 GossipSub 1.2 中实现了 IDONTWANT
,这将减少你将下载或转发的副本数量,但它不能保证确切的数量。
当你观察一个主题时,你不会收到任何消息。你只会收到新消息的通知。如果你想要实际消息,你可以从首先通知你的对等节点请求消息,这样你将只下载一个副本。但是,消息请求部分不在此提案的范围内。此提案仅处理通知。
当你想要观察一个主题时,你需要找到该主题中的订阅节点,并告诉他们你想观察该主题。稍后,当有新消息时,这些订阅节点将通知你。
让我们看看图中的例子,节点 11 正在观察该主题。当有新消息时,节点 1、9 和 10 将通知节点 11。类似地,节点 4 和 5 将通知节点 12。
请注意,这种关系是单向的,而不是像网格连接那样的双向关系。
你也可以告诉你的订阅节点,你何时不想再观察该主题。这就是你想要取消观察的时候。
请注意,观察节点仅接收通知。他们既不发送通知也不转发消息。换句话说,他们只消费,不贡献。因此,他们只在网络的边界上(如图所示),并且不为网络提供任何稳定性。这意味着网络中必须有足够的订阅节点来提供稳定性。
然而,这样做的好处是观察节点的流失率根本无关紧要。节点可以根据需要经常观察和取消观察。
目前,当你的对等节点想要观察该主题并告诉你通知时,你有义务通知他们,而没有拒绝的选项。这样做有一个缺点是,如果你的太多对等节点想要观察,你将有过多的开销来完成这项工作。
但是,通知仅包含消息 ID,我们现在假设这些 ID 可以忽略不计。你可能会争辩说,如果观察对等节点的数量足够高,则通知的总大小将非常大。这是真的,但是对于设计的第一个迭代,我们应该做出这个假设以简化协议。
有两个新的控制消息:OBSERVE
和 UNOBSERVE
。
当你想要观察某个主题并让该对等节点通知你时,你可以将 OBSERVE
发送给你的对等节点。
你可以将 UNOBSERVE
发送给你的对等节点,以告知你不再观察该主题。
在将 OBSERVE
发送到你的对等节点后,当该主题中有新消息时,该对等节点将向你发送 IHAVE
作为通知。
但是,此提案中的 IHAVE
与以前的 GossipSub 版本不同。在以前的版本中,IHAVE
仅在心跳时发送,而在本版本中,它也可以在对等节点收到消息后立即发送。以前,你可以在收到 IHAVE
后发送 IWANT
,但在 topic observation 中,你不应发送 IWANT
,因为 IHAVE
仅作为通知。
- 原文链接: ethresear.ch/t/gossipsub...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!