現在、Spring webFlux のパフォーマンスの問題に直面しています。リアクティブ プログラミングの利点を確認するために、MongoDB からデータを取得し、REST API を介して消費者に返す Spring Boot サービスを実装しました。
このサービスには、次の 2 つのバリアントがあります。
- Spring Boot、MongoRepository による非反応性の実装。このサービスはデータを List として返します
- 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
設定で微調整する必要があるものはありますか?
誰かが同様の問題に直面しましたか?