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