我写了一个小应用程序来理解cassandra中的概念连接池。我正在使用Apache工具测试它。然而,应用程序有时会显示错误并关闭其间的连接。然后它会抛出错误,就像主机关闭一样。当我给出1,00,000个并发1000的查询请求时,它成功执行但是如果我尝试增加并发性,那么它最终关闭套接字并最终显示主机已关闭。那么我的问题是cassandra可以服务的并发请求有限制吗? limit是近似的32K请求,无需等待响应,因为我正在使用cassandra 3.0。
这是否意味着我可以运行那么多的并发请求?
了解这个错误背后的原因是什么?一些输入而不是所有输入。
这是我制作的测试文件。
var cassandra = require("cassandra-driver");
var express = require("express");
var distance = cassandra.types.distance;
var cassClient = new cassandra.Client({contactPoints: ['myhost'],pooling: {
coreConnectionsPerHost: {
[distance.local] : 2,
[distance.remote] : 1
}
}, keyspace: 'MY_DB'});
var app = express();
cassClient.connect(function( err ){
if( err ){
console.log("Error: Connection to cassandra server."+err);
} else {
console.log("Success !!!");
}
});
var i =0;
app.get("/",function(req,res){
cassClient.execute('SELECT * from mytable LIMIT 2', function(err, rows) {
//cassClient.shutdown();
if (!err){
// console.log('The solution is: ' +i);
return res.send();
}
else
{
i++;
console.log(err.message +" "+i);
return res.send();
}
});
// cassClient.nwd();
});
app.listen(3001);
我得到的错误是
为什么会这样?
答案 0 :(得分:1)
以下错误:
All host(s) tried for query failed. First host tried,
myhost:9042: OperationTimedOutError: The host myhost:9042 did not reply before
timeout 12000 ms. See innerErrors.
指客户端超时:发出请求但从服务器获取响应时间过长(请参阅socketOptions.readTimeout
)。
当有太多请求同时超时时,连接会被标记为已失效(请参阅socketOptions.defunctReadTimeoutThreshold
)并从池中删除。如果池为空,则节点标记为DOWN。
您可以在INFO或以上级别enable logging查看幕后发生的事情。