卡桑德拉:贪吃vs八卦

use*_*243 3 cassandra

我无法理解Cassandra中Snitch和Gossip之间的区别,甚至找不到讨​​论这一主题的资料,更不用说提供一个很好的答案了。在我看来,Snitch和Gossip都是节点间通信协议。那么为什么我们需要2个呢?

我知道Gossip可以帮助节点从引导节点中获取信息,但这并不能真正解释其中的区别,因为当节点启动时,它还需要了解数据中心和机架,而这应该是节点的领域。告密者。

Ste*_*yan 5

闲话是一种协议,嗅探是一种利用它的组件。Snitch比八卦要多一点,它至少具有一些启发式功能,例如识别数据中心或机架,而八卦则像是获取此信息的便捷工具。八卦几乎所有正在做的事情是散布一些规则,以覆盖所有必要的节点并接收一些技术数据,如ip,health等。而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


Jef*_*rsa 5

Gossip 用于识别机器的状态(它们是否在集群中,向上/向下/加入/离开)。

告密者有助于将所有权映射到实际机器,并路由查询(给定集群中的这 10 个节点,这 10 个节点中哪一个拥有给定键的数据)。

不同的告密者可以帮助以不同的方式分配数据 - 简单的告密者只是将所有实例放入 datacenter1/rack1,并使用简单的分布式哈希表/朴素分区器放置。属性文件告密允许您创建一个包含所有实例的文件,并将实例映射到数据中心/机架,确保副本始终存在于不同的机架(和数据中心,如复制策略所定义)上。

gossiping-property-file-snitch 和 ec2 告密者有点像属性文件告密者,因为它们具有机架/拓扑感知能力,但它们读取本地实例拓扑信息(从文件或从 ec2 api),然后gossip 给其他节点,因此每个节点负责广播自己的拓扑信息(通过 gossip)。