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

2023-11-27

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


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

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

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

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

编辑20200322

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cassandra如何选择发送请求的节点? 的相关文章

随机推荐

  • 是否可以从 BIOS 中的程序调用硬盘上的 Windows 库?

    我正在尝试编写一个程序 该程序将成为 BIOS 选项 开机自检后 我希望应用程序有一个漂亮的 GUI 而不是基于文本 这有多种原因 本地化就是其中之一 我的问题是我们受到可以刷新到 BIOS 的应用程序大小的限制 是否可以使用MASM32
  • 在 Eclipse 中显示方法名称和参数值的模板

    有没有办法在 Eclipse 中拥有一个模板 Java gt 编辑器 gt 模板 来生成这样的东西 debug methodName arg1 arg1 arg2 arg2 arg3 arg3 当在方法中使用时 例如 public void
  • 尝试在空对象引用上调用虚拟方法“android.text.Editable android.widget.EditText.getText()”

    我已经尝试了所有可能的情况但没有解决 需要建议 public class WolfActivity extends ActionBarActivity EditText fname ele lname ele email ele phone
  • 定义接受 Spark DataFrame 中的对象数组的 UDF?

    使用 Spark 的 DataFrame 时 需要用户定义函数 UDF 来映射列中的数据 UDF 要求显式指定参数类型 就我而言 我需要操作由对象数组组成的列 但我不知道要使用什么类型 这是一个例子 import sqlContext im
  • Django 管理中的默认过滤器

    如何更改默认过滤器选择 全部 我有一个名为status它有三个值 activate pending and rejected 当我使用list filter在 Django 管理中 过滤器默认设置为 全部 但我想默认将其设置为待处理 为了实
  • 具有动态内容的 UIScrollView

    我正在尝试实现一个UIScrollView 但是每个教程都涉及预设数量的项目 我拥有的是多个UITextField的 但文本字段的数量有所不同 基本上只要一textField包含文本 其下方会出现另一个空文本字段 允许用户填写无限数量的文本
  • 如何在 Gnome 终端中处于不同模式时更改 VIM 光标形状

    我想更改 VIM 不是 gVIM 的 光标取决于我当前所处的模式 我想要 正常和可视模式 块光标 插入和命令模式 I 光束光标 我尝试添加以下代码 vimrc但它不起作用 if has autocmd au InsertEnter sile
  • 角色/权限逐项列出?

    我已经寻找了一段时间 并手动完成了许多角色和权限的部署 但是有没有办法在 Sitecore 中为角色 权限创建一个包 或等效的包 当您无法选择从一个环境到下一个环境进行完整部署时 手动部署具有权限的新角色是一项非常乏味的工作 只是好奇是否有
  • 如何从 android 中的 firebase 获取子值的子值?

    如何获取ZNAME值 最初我需要比较密钥 例如 这里 ZONE 1 然后需要获取 ZNAME 提前致谢 要访问数据库中的值 您需要创建一个DatabaseReference对于那个位置 以下是对数据库中位置的三个引用 DatabaseRef
  • BC30560:“ExtensionAttribute”在命名空间“System.Runtime.CompilerServices”中不明确

    我有 asp net 项目 在 net 2 0 中 并将项目转换为 net 4 0 成功构建项目后 我在浏览器上启动网站 它抛出如下错误 编译错误 资源编译期间发生错误 需要满足此请求 具体请查看以下内容 错误详细信息并适当修改您的源代码
  • 用于查找曲线段的霍夫变换

    霍夫变换可用于从图像中提取线条 它还可以用于提取曲线 但这有点困难 因为更高维的霍夫变换会消耗资源 我想知道如何将霍夫变换限制为 3 阶曲线的 2D 投票空间 即 x 3 ax 2 bx c 任何人都知道有什么好的网站可以解释这一点 似乎找
  • 对 python 数组中的日期进行排序

    如何在 python 2 4 上对以下日期数组进行排序 timestamps 2011 06 2 2011 08 05 2011 02 04 2010 1 14 2010 12 13 2010 1 12 2010 2 11 2010 2 0
  • Python中负股息的模[重复]

    这个问题在这里已经有答案了 一直在寻找其他答案 我仍然不明白 python 中负数的模数 例如 df 的回答 x x y y x y 所以 2 5 2 2 5 5 3 是有道理的 这不是 2 2 5 5 0 还是我疯了 具有负值的模运算 奇
  • AWS批处理-如何限制并发作业的数量

    我正在寻找一种方法 通过保留队列中的剩余作业来限制正在运行的批处理作业的数量 aws批处理可以吗 限制最大vcpu数量队列所绑定的托管计算环境的数量将有效限制在该队列上同时运行的批处理作业的数量 但是 需要注意的是 如果您有其他队列共享此计
  • 对象与 DesignData 中的目标类型不匹配

    我将把它扔掉 以防有人以前遇到过这种情况 创建在 WPF 设计器中使用的 DesignData 时 出现以下两个错误之一 对象与目标类型不匹配 在 System Reflection RuntimeMethodInfo CheckConsi
  • jQuery $.ajax,错误处理程序不起作用

    您好 我注意到这个简单的代码无法按预期的方式工作 function test ajax url test GameConfiguration json dataType json data a aaa cache false method
  • 在android中比较两个声音

    我正在开发一个语音消息应用程序 我需要比较两个语音 例如 通过录制您的声音注册应用程序 已发送语音消息至 另一个用户通过录制语音 但首先需要比较这个语音 到配置文件中录制的声音 出于安全目的 需要知道录制的消息是否来自特定用户 我试过 在
  • PHP_AUTH_USER 未设置?

    由于某种原因 其中没有任何代码 if isset SERVER PHP AUTH USER isset SERVER PHP AUTH PW When the above is set the code that is here will
  • 当域规则无效时,put 方法上的其余服务的 http 响应代码是什么

    当使用 PUT 方法更新资源 并且请求包含一些会使域规则无效的数据时 返回的最合适的响应代码是什么 例如 客户资源必须具有name指定的 如果代理尝试在不提供 PUT 的情况下发出 PUTname我不想更新资源 我想告诉调用者他们需要提供一
  • Cassandra如何选择发送请求的节点?

    想象一下 Cassandra 集群需要由客户端应用程序访问 在Java api中 我们创建一个集群实例并通过会话发送读取或写入请求 如果我们使用读 写一致性 ONE API 如何选择实际节点 协调节点 来转发请求 是随机选择的吗 请帮忙解决