Cassandra - 客户端负载平衡

时间:2011-11-16 13:31:43

标签: cassandra

考虑遵循Cassandra设置:

  • 6个节点的环:A,B,D,E,F,G
  • 复制因子:3
  • partitioner:RandomPartitioner
  • 展示位置策略:SimpleStrategy

我的测试列存储在节点B上并复制到节点D和E。

现在我有多个java进程通过读取CL.ONE

读取我的Test-Column通过Hector API(Thrift)

有两种可能性:

  1. Hector会将所有呼叫转发到节点B,因为B是数据 大师
  2. Hector将通过节点B,D和E(主节点和重复节点)对读取呼叫进行负载平衡。在这种情况下,我的测试列将被加载到每个Cassandra实例的缓存中。
  3. 哪一个是1)或2)?

    谢谢和问候, 马切伊

2 个答案:

答案 0 :(得分:4)

我相信它是:3)Cassandra将所有调用转发到最近的活动节点,其中“closeness”由当前使用的Snitch确定(在cassandra.yaml中设置)。

  • SimpleSnitch选择令牌环上最近的节点。
  • AbstractNetworkTopologySnitch和派生的snitch首先尝试选择同一机架中的节点,然后选择同一数据中心的节点。

如果启用了DynamicSnitch,它会根据节点的最近性能动态调整底层小报返回的节点接近度。

有关详情,请参阅“阅读路径”下的Cassandra ArchitectureInternals

答案 1 :(得分:2)

(Upvoted Theodore的答案,因为它是核心)。 一些额外的细节:

我们在hector端没有做任何事情来根据密钥(尚)将流量路由到给定节点。这在Amazon Dynamo论文的第6.2节中被称为“客户调解选择”。该研究似乎表明,通过切断网络跃点,它确实只对非常大的集群有用。

缺点是客户端上的哈希计算和分区查找重复。