Cassandra 中协调器节点和 C++ 驱动程序的联系点之间的区别?

Difference between coordinator node and the contact point of C++ driver in Cassandra?

当使用 C++ 驱动程序创建与 Cassandra 交互的 API 时,必须为 C++ 程序提供一个逗号分隔的列表,其中包含驱动程序可以用作联系点的节点的 IP 地址(cass_cluster_set_contact_points) 到数据库。我想了解这个接触点的作用,以及它是否扮演与协调器节点不同的角色,即接触点和协调器节点是一回事。

此外,当我们执行一个多线程程序时,为了执行多个查询,协调器 node/contact-point 是为每个查询选择的,还是只是在开始时选择,然后该节点被固定作为整个程序执行过程中的协调节点。

联系端点只是作为驱动程序发现集群的一种方式。你真的只需要提供两个或三个,驱动程序将通过八卦找出剩余的端点。

连接时,最好使用TokenAwareLoadBalancingPolicy。这将导致分区键上的任何查询过滤绕过对协调器节点的需要,并直接路由到负责所需数据的节点。

如果查询未过滤分区键,或者如果它是多键查询,则无法确定确切的节点。届时,您的备份负载平衡策略(TokenAwareLoadBalancingPolicy 将备份策略作为参数)将用于确定协调器节点。如果我没记错的话 DCAwareRoundRobinLoadBalancingPolicy 是默认值。

总而言之,连接端点仅用于集群发现。协调器节点是在查询时根据负载平衡策略中使用的算法选择的。

程序中提到的联系点被群集连接设置使用。八卦将根据这些 ip 地址获取整个集群连接设置。 gossip 会维护节点的 ip 地址和其他属性,它会一直查看设置是否有变化,如果配置发生变化,它会随时更新。

如果在 ip1 上发生写入或读取请求,并且群集作为 ip1、ip2 和 ip3 连接到主机,则 ip1 是此特定操作的协调器。它充当处理操作的代理,并将操作重定向到相应的节点,比如 ip4,它在集群中但不在联系人列表中,基于不同的属性、集群的设置方式和 TokenAwareLoadBalancingPolicy 等策略。你可以看看datastax的这篇文章:https://docs.datastax.com/en/archived/cassandra/1.2/cassandra/architecture/architectureClientRequestsAbout_c.html