2016-10-20 32 views
-1

私はcassandraの概念接続プーリングを理解するための小さなアプリケーションを書いています。私はApacheベンチツールを使ってテストしています。しかし、アプリケーションは時々エラーを表示し、間に接続を閉じます。ホストがダウンしているようなエラーがスローされます。私は1000の同時性1000クエリを要求します。それは正常に実行されますが、私は同時実行性を高めるためにしようとすると、それはソケットを閉じて終了し、最終的にホストがダウンしていることを示します。だから私の質問は、カサンドラが提供できる同時リクエストには限界があるのだろうか? limitは、私がcassandra 3.0を使用しているので、応答を待たずにおおよそ32Kリクエストです。nodejsのcassandra-driverとの接続プール

  1. これは、私はその多くの同時リクエストを実行できますか?

  2. このエラーが発生する原因は何ですか?いくつかの入力に対してであり、すべてではない。

  3. 私たちは のように、接続プールがどのようにcassandraで動作するのかホストごとの数だけ設定し、接続あたりの要求数は ではありませんか?

ここにテストファイルがあります。私は取得しています

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); 

エラーがすべてのホスト(s)は、クエリのために試してみました

  • が失敗しています。最初のホストは試しましたが、myhost:9042:ホストはDOWNとみなされました。 innerErrorsを参照してください。
  • クエリに失敗したすべてのホストが失敗しました。最初のホストが試した、myhost:9042:エラー:ソケットが閉じられました。 innerErrorsを参照してください。
  • クエリに失敗したすべてのホストが失敗しました。最初のホストは試しましたが、myhost:9042:OperationTimedOutError:ホストmyhost:9042がタイムアウト12000ミリ秒前に応答しませんでした。 innerErrorsを参照してください。

なぜそれが起こっていますか?

答えて

0

次のエラー:

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を入力すると、フードの状況を確認できます。

+0

私も同じことを読んでいます。データベースが小さく、クエリが読み取りタイムアウトよりも時間がかかりすぎてもエラーが表示されても、私の懸念事項です。私は同時に複数の要求を発しているからですか? –

+0

ドライバは高レベルの並行処理をサポートしています。ドライバのログに何か関連性がありますか? – jorgebg

+0

ログには、私があなたに示した3つのエラーしか表示されません –