gpt4 book ai didi

java - Astyanax 客户端每个节点的最大连接数?

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:58 26 4
gpt4 key购买 nike

我正在使用 Astyanax 客户端从 Cassandra 数据库读取数据。

我在 Cassandra 数据库中有大约一百万行。我有一个十字colocation centre具有四个节点的集群。

这是我的四个节点:

  node1:9160
node2:9160
node3:9160
node4:9160

我启用了 KeyCaching 并且也启用了 SizeTieredCompaction 策略。

我有一个多线程的客户端程序,它将使用 Astyanax 客户端从 Cassandra 数据库中读取数据,我正在运行 20 个线程。如果我用 20 个线程运行我的客户端程序,那么从 Cassandra 数据库读取数据的性能会下降。

所以我首先想到的是,可能存在与 Cassandra 的连接争用(他们是否使用池,如果是的话,有多少连接被维护)?我正在使用以下代码通过 Astyanax 客户端建立连接。

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(1)
.setSeeds("nod1: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());
}

我是否需要对上述代码进行任何类型的更改以提高性能?

这个方法有什么作用?

   setMaxConnsPerHost(1)

我需要增加它来提高性能吗?我有四个节点,所以我应该将其更改为 4?

setMaxConns(20) 方法会调用吗?我是否还需要添加它以提高性能?因为我将使用多个线程运行我的程序。

最佳答案

有关 maxConnsPerHost/maxConns 的详细信息,您可以查看此答案:setMaxConns and setMaxConnsPerHost in Astyanax client

是的,应该增加 maxConnsPerHost 以获得良好的性能。最佳值取决于网络拓扑、请求复制因子、存储配置、缓存、读写比等。

我认为如果不进行实验和模拟,就不可能为重负载集群实现最佳性能。

对于 Cassandra 上的中等负载任务,我通常使用经验法则:

maxConnsPerHost ~= <Number of cores per host>/<Replication factor> + 1

也就是说,对于复制因子为 3 的 8 核盒子集群,maxConnsPerHost 应该在 4 左右。这个值对于重负载场景下的实验也是一个很好的起点。

动机:一个由 N 个节点组成的集群,每个节点都有 C 个核心,总​​共有 N * C 个核心。要处理具有复制因子 R 的请求,需要(不同节点的)R 核心。因此,在每个给定时刻,集群最多可以处理 N * C/R 请求。将并发连接数保持在这个数字附近是个好主意。将它除以 N 以计算每个主机的连接数。为每个主机添加 1 个备用连接以应对网络延迟等问题。就是这样。

更新:简单的客户端性能调整:

  • 从一些 maxConnsPerHost 值开始
  • 模拟负载并观察 CPU 使用率和 org.apache.cassandra.request->***Stage->pendingTasks JXM 属性
  • 增加 maxConnsPerHost 直到 pendingTasks 开始快速增加。这可能是最优值。
  • 集群节点上的 CPU 负载应该在 50-70% 左右。如果少得多 - 服务器配置可能有问题。

关于java - Astyanax 客户端每个节点的最大连接数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com