【发布时间】:2019-05-30 10:12:21
【问题描述】:
我不了解 cassandra 中的负载平衡算法。
似乎TokenAwarePolicy 可用于将我的请求路由到保存数据的协调节点。特别是,文档指出 (https://docs.datastax.com/en/developer/java-driver/3.6/manual/load_balancing/) 当驱动程序能够自动计算路由键时它可以工作。如果可以,我被路由到保存数据的协调节点,如果不是,我被路由到另一个节点。如果我真的想在没有任何额外跃点的情况下访问数据,我仍然可以自己指定路由密钥。
什么对我来说没有意义:
如果驱动程序不能自动计算路由键,那么协调器为什么可以这样做呢?它是否比客户端驱动程序具有更多信息?或者协调节点是否代表我询问集群中的每个其他节点?这样就无法扩展了,对吧?
我认为 gossip 协议用于在所有节点(以及客户端驱动程序)之间共享环的拓扑。客户端驱动程序具有完整的“环”结构,应该等于任何“跳”节点。
当客户端驱动程序确定保存数据的 N 个副本,然后对它们进行优先级排序(主机距离等)时,负载平衡对我来说很有意义,但是当我到达一个随机节点时,这对我来说没有意义不太可能有我的数据。
【问题讨论】:
-
我在问“如果驱动程序不能自动计算路由键,那么协调器为什么可以这样做?”。您链接的答案没有解释这一点。它对我来说仍然很神奇。示例:如果我正在查找 ID=42 的数据,但无法计算 routing-key,那么为什么协调器 Node 可以计算出数据应该在节点 123 上?我唯一知道的是 ID=42,这也是协调节点拥有的唯一信息。
标签: cassandra