我无法理解 Cassandra 中 Snitch 和 Gossip 之间的区别,我什至找不到讨论过该主题的来源,更不用说提供一个好的答案了。在我看来,Snitch 和 Gossip 都是节点间通信协议(protocol);那么为什么我们需要其中的 2 个呢?
我知道 Gossip 帮助节点从引导节点获取信息,但这并不能真正解释差异,因为当节点启动时,它还需要了解数据中心和机架,这应该是告密者。
最佳答案
Gossip 是一个协议(protocol),Snitch 是一个使用它的组件。 Snitch 不仅仅是八卦,它至少有一些启发式方法,例如识别数据中心或机架,而八卦就像是获取此信息的便捷工具。几乎所有的八卦都在传播一些规则,以覆盖所有必要的节点并接收一些技术数据,如 ip、健康等。而 Snitch 利用这些信息来执行更多操作。它的功能之一是通过分析接收到的 ip 来识别不同的数据中心。然后这个信息被其他组件用于进一步的操作,比如副本位置等。所以他们决定给这个功能单独的名称来识别它,实际上这都是关于分层功能。
一些相关信息也可以在这里找到:https://books.google.ru/books?id=h36CCwAAQBAJ&pg=PT21&lpg=PT21&dq=snitch+gossip&source=bl&ots=fjxy_z78Gj&sig=KpqdkKaREIo2YAWyJj3yMZCyNn4&hl=ru&sa=X&ved=0ahUKEwiUktS8q8zWAhWIQZoKHTViD0U4ChDoAQhUMAc#v=onepage&q=snitch%20gossip&f=false
这是一个更详细的告密者定义(但在 scylla 中):https://github.com/scylladb/scylla/wiki/Snitches
关于Cassandra: Snitch vs. Gossip,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46498874/