この記事では、nodejsツールによって作成された2つの抽象化クラスについて説明します。これらのクラスは、オープンチャネル(tcp-socket)を介してリクエストを配信する機能を提供します。 同時に、システムの全体的な負荷が考慮され、十分なチャネルがない場合は、新しいチャネルが開かれ、リクエストの総数が減少すると「余分な」チャネルが閉じられます。
このクライアントを使用して、本質的にnet.Socketであるチャネル間で要求を分散できます。 これを行うには、チャネルの開閉方法を変更して、チャネルにリクエストを追加する必要があります。
説明する例では、
pgライブラリが使用されます。これは、データベースを備えたサーバーへのソケットを開くための機能を提供します。 同時に、ライブラリによって提供されるデフォルトの接続プール管理は、いかなる方法でも使用されません。
最初に、1つのエンティティ(接続)を管理するConnectクラスを検討します。
クラス接続 function Connect(connString) {
接続を管理するBalancerクラスを直接:新しい接続を開き、冗長な接続を閉じ、接続をリクエストを分配し、サービスに単一の入力を提供します
クラスバランサー function Balancer(minCountConnect, maxCountConnect) {
これをすべて確認する方法は? テストでは、クエリ「select pg_sleep(1)」を使用します。これは1秒間実行され、データベースへのクエリをシミュレートします。
これらのリクエストのうち10,000件は、バランサによって処理され、最大101590ミリ秒で、接続リクエストの最大数は100で、チャネルの合計数の境界は10〜100のソケットです。
使用されたスクリプト:
var balancer = new Balancer(10,100); balancer.on('ready', function() { var y=0; var time = +new Date(); for(var i=0;i<10000; i++) { balancer.addQuery('gps', 'select pg_sleep(1)', [], function(err, result) { if(err) console.log(err); y++; if(y==10000) { console.log(balancer._connectArray.length); console.log(+new Date()-time); } }); } });
すべてのソースは
githubで入手できます。
クライアントは未だに未加工です。もちろん、多くの作業を完了/書き換える必要がありますので、あまりscらないでください。 必要に応じて、私はより緊密に行うことができます。