我无法理解Cassandra中Snitch和Gossip之间的区别,我甚至找不到一个讨论过这个主题的来源,更不用说提供一个好的答案了。在我看来,Snitch和Gossip都是节点间通信协议;那么为什么我们需要其中的两个?
我知道Gossip帮助节点从引导程序节点获取信息,但这并没有真正解释差异,因为当节点启动时,它需要了解数据中心和机架,这应该是金色飞贼的领域。
答案 0 :(得分:4)
Gossip是一种协议,Snitch是一个利用它的组件。 Snitch比八卦有点多,它至少有一些启发式方法,比如识别数据中心或机架,而八卦就像是获取这些信息的便捷工具。几乎所有八卦都在做的是通过一些规则来扩展所有必要的节点并接收一些技术数据,如ip,health等。而Snitch利用这些信息来执行更多的操作。其功能之一是通过分析收到的ips来识别不同的数据中心。然后,此信息被其他组件用于进一步的操作,例如副本位置等。因此,他们决定将此功能分别命名以识别它,实际上它是关于分层功能的。
这里有一个更详细的小报定义(但在scylla中):https://github.com/scylladb/scylla/wiki/Snitches
答案 1 :(得分:2)
Gossip用于识别机器的状态(它们是在集群中,上/下/加入/离开)。
snitch帮助将所有权映射到实际的机器,并路由查询(在集群中给出这10个节点,10个节点中的哪个拥有给定密钥的数据)。
不同的小部件可以帮助以不同的方式分配数据 - 简单的小部件只是将所有实例放入datacenter1 / rack1,并使用简单的分布式散列表/天真分区器放置。属性文件snitch允许您创建包含所有实例的文件,并将实例映射到数据中心/机架,确保副本始终存在于不同的机架(以及复制策略定义的数据中心)上。
gossiping-property-file-snitch和ec2 snitch有点像属性文件snitch,因为它们可以识别机架/拓扑,但是它们读取本地实例拓扑信息(来自文件或来自ec2 apis)然后将它闲聊给其他人,因此每个节点负责广播自己的拓扑信息(通过八卦)。
答案 2 :(得分:1)
Gossip是一种通过群集传播的流行病协议。它传输集群元数据,即集群的状态。 以下是作为Gossip的一部分共享的信息:
申请状态:
Snitch有助于将IP映射到机架和数据中心,换句话说。它通过对节点进行分组来创建拓扑,以帮助确定从哪里读取数据。当读取请求进入时,它到达协调器节点,读取请求的一致性级别和该列族的read_repair_chance决定了告密者如何进入。只有一个节点将发送回请求的数据,这取决于告密者确定。