Akka と Spray を使用して RESTful API を構築しています。Typesafe Akka Cluster Sample プロジェクトを使用しています...
( http://www.typesafe.com/activator/template/akka-sample-cluster-scala )
参考までに。ルートのプールとクラスター対応ルーティングを使用するクラスターがあります。API へのインターフェイスは、クラスターのフロントエンドとして機能し、クラスターのアクティビティ (新しいノード、ダウンしたノードなど) を監視するアクター (ClusterClient) を作成するスプレー フロントエンドを介して行われます。スプレー ルートにリクエストが届くと、クラスター対応ルーターを介してクラスター バックエンド ワーカーに作業を委任します。
ここでの私の希望/目標は、必要に応じてバックエンド ワーカー ノードとルートを追加することで、システムのパフォーマンスを向上できることです。また、ロード バランサー経由でアクセスされるフロントエンド (スプレー) ノードを追加することもできます。パフォーマンスとスケーラブルなものを構築しようとしています。
これはすべてうまくいきます。現時点では、ワーカー アクターはテスト用の文字列を返すだけです。
先に進む前に、アプリケーションのストレス テストを行って、現在のクラスターのパフォーマンスを把握したいと思いました。だから私はいくつかの簡単なテストを行うために apache ベンチを使用しています。
すべてのテストは、私のローカル開発マシン (16 GB RAM を搭載した QuadCore Macbook Pro) で行われています。アプリケーションはスプレー缶で実行されています。フロントエンド (スプレー) とバックエンド ノードは、異なるポートを使用して、同じマシン上の個別の JVM で開始されています。
奇妙なことに、クラスターにバックエンド ノードを追加すると、パフォーマンスが低下するように見えます。これが私のテストと結果です。より良い平均を得るために、各テストを約10回実行しました...
1 つのバックエンド ノード
ab -l -n 1000 -c 100 http://localhost:3050/api
Requests per second [#/sec] (mean): 4708.25, 5086.11, 4341.52, 5850.76, 4403.33, 5046.78, 4151.84, 5686.24, 3399.38, 4466.26, 3755.98, 5619.18, 5187.96
Average: 4745 requests per second
2 つのバックエンド ノード
ab -l -n 1000 -c 100 http://localhost:3050/api
Requests per second [#/sec] (mean): 3381.75, 4108.51, 2969.41, 3732.29, 3804.48, 3644.12, 2516.05, 2968.17, 3308.01, 3378.69, 4049.71, 3738.21, 4068.84
Average: 3512 requests per second
3 つのバックエンド ノード
ab -l -n 1000 -c 100 http://localhost:3050/api
Requests per second [#/sec] (mean): 2756.49, 2516.77, 2535.34, 2464.37, 2887.51, 2421.98, 2794.03, 2633.36, 2735.74, 3021.81, 2612.39, 3052.53, 3714.88
Average: 2780 requests per second
これは期待されていますか?つまり、バックエンド/ワーカー ノードを追加することでパフォーマンスを向上させるべきだと考えるのは間違っていますか? 上記の数値に基づくと、クラスターに追加するノードが増えるほど、パフォーマンスが低下します。これは、同じマシンでテストを実行する際の問題でしょうか?
ありがとう