首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Cassandra如何选择要发送请求的节点?

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

Stack Overflow用户
提问于 2014-11-22 13:05:14
回答 1查看 3.6K关注 0票数 9

假设客户端应用程序需要访问Cassandra集群。在Java中,我们创建一个集群实例,并通过会话发送读或写请求。如果我们使用读/写一致性一,api如何选择实际节点(协调器节点)来转发请求。是随机选择吗?请帮忙弄清楚这件事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-22 15:05:32

Cassandra驱动程序使用“八卦”协议(以及一个称为节点发现的过程)来获取有关集群的信息。如果节点不可用,客户端驱动程序将自动尝试其他节点,并安排与死节点的重新连接时间。根据到DataStax文档

八卦是一种点对点的通信协议,在这种协议中,节点周期性地交换关于自己和他们所知道的其他节点的状态信息。流言过程每秒钟运行一次,并与集群中最多三个其他节点交换状态消息。这些节点交换关于自己的信息,以及它们讨论过的其他节点的信息,因此所有节点都能快速了解集群中的所有其他节点。

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

一旦您的驱动程序获得了集群上的流言信息,它就可以对在哪个节点上运行查询做出明智的决定。节点选择不是一个投票或随机选择的过程。根据返回的流言信息,客户端驱动程序应用其负载平衡策略。虽然它确实考虑了几个因素,但基本上它尝试从客户端选择网络“距离”最小的节点。

编辑20200322

让我就负载平衡策略的问题进行一些阐述。我鼓励高性能应用程序的开发人员使用TokenAwarePolicy.。此策略将分区键值散列为“令牌”,并使用此散列来确定哪个节点负责生成令牌范围。这将跳过选择“协调器”节点的中间步骤,并将查询直接发送到包含请求数据的节点。

但是,如果您使用的是非令牌感知的负载平衡策略,或者运行的查询不对分区键进行筛选,则应用上面描述的原始过程。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27077701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档