Astyanax Cassandra客户端中的连接池类型

时间:2013-05-04 01:05:28

标签: java cassandra astyanax netflix

从过去几周开始,我们一直在尝试评估不同的Cassandra clients,所以现在看来​​我们将推进Netflix/Astyanax client

我们主要针对Cassandra database优化read performance。目前,我正在创建这样的Astyanax connection -

/**
 * Creating Cassandra connection using Astyanax client
 *
 */
private CassandraAstyanaxConnection() {

    context = new AstyanaxContext.Builder()
    .forCluster(ModelConstants.CLUSTER)
    .forKeyspace(ModelConstants.KEYSPACE)
    .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()      
        .setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE)
    )
    .withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool")
        .setPort(9160)
        .setMaxConnsPerHost(40)
        .setSeeds("node1:9160,node2:9160,node3:9160,node4:9160")
    )
    .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()      
        .setCqlVersion("3.0.0")
        .setTargetCassandraVersion("1.2"))
    .withConnectionPoolMonitor(new CountingConnectionPoolMonitor())
    .buildKeyspace(ThriftFamilyFactory.getInstance());

    context.start();
    keyspace = context.getEntity();

    emp_cf = ColumnFamily.newColumnFamily(
        ModelConstants.COLUMN_FAMILY, 
        StringSerializer.get(), 
        StringSerializer.get());
}

问题陈述: -

因此,默认情况下,我相信Astyanax client将使用ConnectionPoolType as ROUND_ROBIN

现在我试图从read performance的角度理解哪个会从下面的选项中变得更好?

TOKEN_AWARE or ROUND_ROBIN or BAG

这三者有什么区别?我们如何决定从三个以上使用其中一个?

关于我们群集的一些背景知识。我们将使用cross colo cluster24 nodes。含义12 nodes in SLC colo12 nodes in PHX colo

我们将NetworkTopologyStrategyreplication factor of 4一起使用,这意味着2 in each colo。我们将使用LeveledCompactionStrategy

对我上述问题的任何解释都会有很大帮助。将有很多人在生产环境中使用Astyanax客户端。任何反馈都会有很大的帮助。

感谢您的帮助。

更新: -

仍然在寻找一个答案,可以解释我这三个人之间的主要区别是什么,以便我能更好地理解。我知道这些意味着什么,但不能理解形成一个例子的观点,它将如何运作。

1 个答案:

答案 0 :(得分:2)

<强> ROUND_ROBIN

在这种类型的ConnectionPoolType中,您的连接将以循环方式实例化,具体取决于主机集。

<强> TOKEN_RANGE

它有点类似于ROUND_ROBIN类型,设置了一个基本的令牌识别池,它将循环一个令牌范围内的所有主机

<强> BAG

对这种类型不太了解,但我猜它会是这样的,你的连接将随机地从主机的BAG实例化,独立于令牌范围或循环模式。