[英]setMaxConns and setMaxConnsPerHost in Astyanax client
[英]Astyanax client maximum connections per node?
我正在使用Astyanax客戶端從Cassandra數據庫中讀取數據。
我在Cassandra數據庫中有大約一百萬個唯一行。 我有一個包含四個節點的交叉主機托管集群。
這些是我的四個節點:
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
詳細信息您可以在Astyanax客戶端中查看以下答案: setMaxConns和setMaxConnsPerHost
是的,應該增加maxConnsPerHost
以獲得良好的性能。 最佳值取決於網絡拓撲,請求復制因子,存儲配置,緩存,讀/寫比率等。
如果沒有實驗和模擬,我認為沒有可能為重載集群實現最佳性能。
對於Cassandra中等負荷的任務,我通常使用經驗法則:
maxConnsPerHost ~= <Number of cores per host>/<Replication factor> + 1
也就是說,對於具有復制因子3的8核盒的集群, maxConnsPerHost
應該在4左右。該值也是重載場景中的實驗的良好起點。
動機:每個具有C
核的N
節點的集群總共具有N * C
核。 要處理具有復制因子R
請求,需要R
核心(不同節點)。 因此,在每個給定時刻,集群都可以處理多達N * C / R
請求。 保持此數字周圍的並發連接數是個好主意。 將其除以N
以計算每個主機的連接數。 為每個主機添加1個備用連接以用於網絡延遲等。就是這樣。
更新:簡單的客戶端性能調整:
maxConnsPerHost
值開始 org.apache.cassandra.request->***Stage->pendingTasks
屬性 maxConnsPerHost
直到pendingTasks
開始快速增加。 這可能是最佳值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.