私たちが構築しているアプリケーションには、多数の同時ユーザーがいることが予想されます。 APIレイヤを構築するためにSpring MVCを評価しようとしています。Spring MVCノンブロッキングとブロッキングのパフォーマンスの違い
以下の2件のハンドラが書かれていた - 1つのブロックと別の非ブロッキング:
@RequestMapping("/nblocking")
public DeferredResult<String> nonBlockingProcessing() {
DeferredResult<String> deferredResult = new DeferredResult<>();
executionService.execute(new Runnable() {
@Override
public void run() {
deferredResult.setResult(fetcher.load());
}
});
return deferredResult;
}
@RequestMapping("/blocking")
public String blockingProcessing() {
return fetcher.load();
}
私たちは、3500人の同時ユーザーと各エンドポイントを打つ、JMeterを経由してテストを実行しました。ブロッキング呼び出しで
、fetcher.loadコールが(最大接続はに設定MySQLへDBクエリを作っています200)と最大サイズ(50)の接続プールを使用します。
全体的にスループットと平均時間は、非ブロッキング呼び出しの方が優れています。スループットをさらに向上させるために、他に何か改善すべき点や考慮すべき要素がありますか?
「スループットをさらに向上させるために、他にどのような改善や要因があるのでしょうか?」 javaコードを最適化します。MySQLのクエリを最適化します。 MySQLの設定を最適化してください。 –
'fetcher.load()'命令はどのくらいの時間を使いますか?私はそれが読み込みの問題であるかどうかを確認します –