高いスケーラビリティを必要とするRESTfullアプリケーションに取り組んでいます。 RESTfullアプリケーション用のNettyベースのフレームワークを検討しています。利用可能なオプションのいくつかを試し、それらがノンブロッキング実装として提供できるものを取得しようとしました。私の発見は次のとおりです。
上記の結果を得る前に、すぐに使用できるフレームワークを使用して、作業をより早く完了させたいと思いました。
私はそれが意見に基づく質問であることを知っています。しかし、それでもアプリケーションに適切なフレームワークを選択するために真剣に助けが必要です。場合によっては、NettyベースのRESTフレームワークはありません:アプリケーションに低レベルのNettyベースのNIOコードを組み込むことをお勧めしますか?.
本当にノンブロッキングが必要な場合は、ゼロからノンブロッキングを実行し、 proper REST clients を持つ必要があります。それ以外の場合は my comment パフォーマンスの違いはごくわずかであり、多くの場合、NIO(スレッド共有を使用するNetty)の場合は悪化します。
私が知っているライブラリは、最初からノンブロッキングを行うライブラリが2つしかありません Vert.x とやや Finagle (ノンブロッキングデータアクセスのような他のものが欠落しています)。
また、TomcatおよびJAX-RSサポートNIOで動作可能なさまざまな他のサーブレットコンテナを知っている必要があります。問題は、NIOがサポートされていても、リクエストごとに1つのスレッドになることです。 Play、Finagle、Vert.x、および純粋なNetty(NIOに関係なく)のみが異なる共有スレッドモデルをサポートしているため、並行性を実行するための異なるメカニズムがあります。
RESTアプリケーションについて私が知っているマイクロフレームワークのリストは次のとおりです。
回答に気軽にコメントしてください-回答を更新してさらに追加します。
Play をご覧になりましたか?
Nettyを使用する傾向があるように見えますが、非常に単純なものを見て回りたい場合は、 Grizzly + Jersey セットアップでおそらく十分に機能します。ヘック、シンプルなGlassfish 4.0 JAX-RSアプリもうまくいくかもしれません。
Spring 5には、WebFluxと呼ばれるリアクティブWebフレームワークが付属しています。 NettyやUndertowなどの複数のサーバーから選択できます。また、Reactive Non-Blocking WebClientがSpringに追加され、Reactive Mongo、Redis、およびCassandra(近々追加される予定です)もサポートしています。
「Springの意見表明」であるSpring Bootも、Spring 5に基づいた新しいバージョン(2.0)を取得します。執筆時点では、2月にリリースされる expected です。
Springのリアクティブスタックの詳細: https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html
ndertow 3. は Netty(XNIOの代わりに) の上になります。 REST APIサーバーのようなアプリケーションを構築するための、完璧で非常に軽量でシンプルなAPI。私が持っているほぼすべてのJavaマイクロサービスに使用します。
Spring Framework 4.2.5.RELEASEの AsyncRestTemplate をご覧ください。 Nettyの上で使用できます。
注:デフォルトでは、AsyncRestTemplateは標準のJDK機能に依存してHTTP接続を確立します。 AsyncClientHttpRequestFactoryを受け入れるコンストラクターを使用して、Apache HttpComponents、Netty、OkHttpなどの別のHTTPライブラリを使用するように切り替えることができます。
NettyとRxJavaを使用するもう1つのフレームワークがあります。これは datamill と呼ばれます
機能的なリアクティブスタイルを使用してWebアプリケーションを構築することに関心がある場合は、検討する必要があります。