当前位置: 首页 > 面试题库 >

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

葛奇
2023-03-14
问题内容

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


问题答案:

Cassandra驱动程序使用“
gossip”协议(以及称为节点发现的过程)来获取有关群集的信息。如果某个节点不可用,则客户端驱动程序会自动尝试其他节点,并计划与失效节点的重新连接时间。根据DataStax
docs

八卦是一种点对点通信协议,其中节点定期交换有关自己以及他们所知道的其他节点的状态信息。闲话过程每秒运行一次,并与集群中的其他三个节点交换状态消息。节点交换有关其自身以及已闲聊的其他节点的信息,因此所有节点都可以快速了解群集中的所有其他节点。

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

一旦您的驱动程序在群集上有了八卦信息,它就可以对要在哪个节点上运行查询做出明智的决策。节点选择不是投票或随机选择的过程。基于返回的八卦信息,客户端驱动程序将应用其负载平衡策略。尽管确实考虑了多个因素,但基本上它会尝试选择与客户端的网络“距离”最低的节点。

编辑20200322

让我进一步谈谈负载平衡策略。我鼓励高性能应用程序的开发人员使用 TokenAwarePolicy
。此策略将分区键值散列为“令牌”,并使用此哈希值确定哪个节点负责结果令牌范围。这具有跳过选择“协调器”节点的中间步骤的效果,并将查询 直接
发送到包含所请求数据的节点。

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



 类似资料:
  • 我在网上找到了这个脚本: 但我不明白如何与PHP一起使用它,也不明白params变量内部的内容是什么,也不明白如何使用它。我能帮个忙吗?

  • 发送请求 发送同步请求 Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/ Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().send(); String clientVersion = web3Client

  • 问题内容: 我想将我的网址发送到(和)。 我当前的请求代码不起作用。 使用是 不是 一个容易回答。 问题答案: 在iOS中发送和请求非常容易。无需其他框架。 请求: 首先,将我们的(按需发送的内容)创建为,然后将其转换为。 目标 接下来,我们阅读的,因此我们可以将其传递给请求。 现在我们有了要发布的内容,我们可以创建一个,并包含我们的。 迅速 最后,我们可以发送请求,并通过创建新的请求来阅读回复:

  • 问题内容: 我打算将PHP用于一个简单的要求。我需要从URL下载XML内容,为此我需要向该URL发送HTTP GET请求。 如何在PHP中做到这一点? 问题答案: 除非只需要文件内容,否则可以使用。 对于更复杂的事情,我将使用cURL。

  • 我使用下面的代码来创建一个条目在strapi服务器,但不幸的是,我得到了"坏请求"错误。我想不出来。请指导我如何解决这个问题。 ApiSet。班 主要活动。班 我的身体。班 还有我的模型课 数据班 属性。班 最后,我得到了如下回应: 我只是想知道我在哪里犯了错误

  • 我正在使用谷歌云视觉检测图像上的文本。这种方法在80%的情况下有效。另外20%,我得到了这个错误: 当我在谷歌上搜索这个问题时,似乎我需要发送特定的标题和我的请求来解决这个问题,基本上就像这里指定的:https://cloud.google.com/vision/docs/ocr#specify_the_language_optional 但是,我不知道如何用我正在使用的Node.js代码发送这些