Cassandra如何选择发送请求的节点?

时间:2014-11-22 13:05:15

标签: java cassandra cassandra-2.0

想象一下,客户端应用程序需要访问Cassandra集群。在Java api中,我们创建一个集群实例并通过Session发送读取或写入请求。如果我们使用读/写一致性ONE,api如何选择实际节点(协调器节点)以转发请求。这是随机选择吗?请帮忙解决这个问题。

1 个答案:

答案 0 :(得分:9)

Cassandra驱动程序使用“八卦”协议(以及称为节点发现的过程)来获取有关群集的信息。如果节点变得不可用,则客户端驱动程序会自动尝试其他节点并安排与死亡节点重新连接的时间。根据{{​​3}}:

  

Gossip是节点中的点对点通信协议   定期交换有关自己和关于的状态信息   他们知道的其他节点。八卦过程每秒都会运行一次   与群集中最多三个其他节点交换状态消息。   节点交换关于他们自己和关于另一个的信息   他们已经闲谈过的节点,所以所有节点都能快速了解   集群中的所有其他节点。

实际上,您为客户端提供连接的节点列表是获取整个群集信息的初始联系点。这就是为什么您的客户端可以与群集中的所有节点(如果需要)进行通信,即使您可能只在连接字符串中提供一小部分节点。

一旦您的驱动程序在群集上获得了八卦信息,它就可以明智地决定运行查询的节点。节点选择不是投票或随机选择的过程。根据返回的八卦信息,客户端驱动程序应用其to the DataStax docs。虽然它确实需要考虑几个因素,但基本上它会尝试选择与客户端网络距离最短的节点。