Datastax java-driver LoadBalancingPolicy

时间:2015-03-21 18:39:56

标签: cassandra datastax datastax-java-driver

我想了解如何使用datastax java驱动程序为cassandra中的繁重批处理工作负载确定负载平衡策略。我有两个数据中心,我希望尽可能快地写入具有一致性ONE的集群。

如何选择负载均衡选项,我看到了TokenAwarePolicy,LatencyAware,DCAware。我可以使用所有这些吗?

由于 Srivatsan

2 个答案:

答案 0 :(得分:3)

java-driver中的默认LoadBalancingPolicy应该适合这种情况。默认的LoadBalancingPolicy定义为(来自Policies):

public static LoadBalancingPolicy defaultLoadBalancingPolicy() {
    return new TokenAwarePolicy(new DCAwareRoundRobinPolicy());
}

这将保留您提供的联系点所在的数据中心本地的所有请求,并将您的请求定向到具有您正在读取/插入的数据的副本(使用循环平衡)。

您可以嵌套LoadBalancingPolicies,因此如果您想要使用所有这三个策略,您可以执行以下操作:

LoadBalancingPolicy policy = LatencyAwarePolicy
  .builder(new TokenAwarePolicy(new DCAwareRoundRobinPolicy()))
  .build();

答案 1 :(得分:1)

如果您愿意使用一致性级别ONE,则无需关心使用哪个数据中心,因此无需使用DCAwareRoundRobinPolicy。如果您希望写入尽可能快,您希望最小化延迟,因此您应该使用LatencyAwarePolicy;实际上,这通常会选择本地数据中心的节点,但如果可能提供更好的性能,则会使用远程节点,例如当本地节点过载时。您还希望最小化网络跃点的数量,因此您希望使用其中一个存储节点作为写入的协调器,因此您应该使用TokenAwarePolicy。您可以通过将一个策略传递给另一个的构造函数调用来链接策略。

很遗憾,Cassandra驱动程序不提供任何直接有用的基本策略供您用作LatencyAwarePolicyTokenAwarePolicy的子策略;选项包括DCAwareRoundRobinPolicyRoundRobinPolicyWhiteListPolicy。但是,如果您使用RoundRobinPolicy作为子策略,LatencyAwarePolicy应在前几次查询后获取所需的延迟信息。