8

現在、Spring webFlux のパフォーマンスの問題に直面しています。リアクティブ プログラミングの利点を確認するために、MongoDB からデータを取得し、REST API を介して消費者に返す Spring Boot サービスを実装しました。

このサービスには、次の 2 つのバリアントがあります。

  1. Spring Boot、MongoRepository による非反応性の実装。このサービスはデータを List として返します
  2. Spring Boot、ReactiveMongoRepository、spring-boot-starter-webflux によるリアクティブ実装。このサービスはデータを Flux として返します。

どちらの実装でも、REST コントローラーはリポジトリからデータを直接フェッチし、それを List resp として返します。フラックスとして。それ以上のアプリケーション ロジックは実行されません。

100 人のユーザーがサービスを呼び出して小規模な負荷/パフォーマンス テストを実施したところ、非反応的な実装が反応的な実装よりもはるかに優れたパフォーマンスを発揮することがわかりました。

実際のところ、非リアクティブ実装は HTTP スループットが向上しただけでなく、おそらくもっと興味深いことに、リアクティブ実装よりも消費する CPU とスレッドが少なくなりました! https://spring.io/blog/2016/07/28/reactive-programming-with-spring-5-0で述べたように、リアクティブ バージョンは少数のスレッドでスケーリングすると予想していたため、これは特に期待に反するものでした。 -m1

設定で微調整する必要があるものはありますか?

誰かが同様の問題に直面しましたか?

4

2 に答える 2

1

この動作の考えられる理由を説明してみましょう。リアクティブ アプリケーションは、リアクティブ アプリケーションよりも速く動作しません。リアクティブ アプリケーションは、要求キューが空でない場合、システムがアイドル状態になることを許可しません。低負荷でテストしたので、リアクティブ アプリケーションの長所と短所はわかりませんでしたが、ダウングレード パフォーマンスはわかりました。リアクティブ実行のオーバーヘッドが小さいため、非アクティブなアプリケーションよりもパフォーマンスが低下します。

于 2019-07-19T10:44:35.747 に答える