web-dev-qa-db-ja.com

NettyベースのノンブロッキングRESTフレームワーク

高いスケーラビリティを必要とするRESTfullアプリケーションに取り組んでいます。 RESTfullアプリケーション用のNettyベースのフレームワークを検討しています。利用可能なオプションのいくつかを試し、それらがノンブロッキング実装として提供できるものを取得しようとしました。私の発見は次のとおりです。

  1. rest.li-> NettyベースのNIO実装の実験段階です。そのため、生産準備はできていません。
  2. RESTEasy-> Netty 4.xをサポートする標準のJBossプロジェクト。ただし、フルスタックのNettyベースのNIO実装ではなく、RESTEasyはNettyとRESTEasyの間のバッファー交換です。 Nettyの利点を活用していません。したがって、スケーラビリティはNettyベースのフレームワークから予想されるほど高くありません。
  3. Netty-httpコンポーネント->別のオプションは、Beanから公開されたサービスにリクエストをルーティングするためのエンドポイントとしてNetty-httpコンポーネントを使用する際のApache Camel統合です。 RESTEasyと同じだと思います。Netty-httpコンポーネントのみがNettyベースのNIO機能を使用し、残りのシステムは古いIOを使用します。スケーラビリティを獲得するのにあまり役立つとは思いません。
  4. RESTExpress-> RESTFullアプリケーション用のNettyベースのフレームワークであると主張しています。しかし、高度なセキュリティを必要とするエンタープライズアプリケーションに対しては、まともなコミュニティがなく、信頼できるものでもありません(非常に新しいため)。

上記の結果を得る前に、すぐに使用できるフレームワークを使用して、作業をより早く完了させたいと思いました。

私はそれが意見に基づく質問であることを知っています。しかし、それでもアプリケーションに適切なフレームワークを選択するために真剣に助けが必要です。場合によっては、NettyベースのRESTフレームワークはありません:アプリケーションに低レベルのNettyベースのNIOコードを組み込むことをお勧めしますか?.

21
Vaibhav Raj

本当にノンブロッキングが必要な場合は、ゼロからノンブロッキングを実行し、 proper REST clients を持つ必要があります。それ以外の場合は my comment パフォーマンスの違いはごくわずかであり、多くの場合、NIO(スレッド共有を使用するNetty)の場合は悪化します。

私が知っているライブラリは、最初からノンブロッキングを行うライブラリが2つしかありません Vert.x とやや Finagle (ノンブロッキングデータアクセスのような他のものが欠落しています)。

また、TomcatおよびJAX-RSサポートNIOで動作可能なさまざまな他のサーブレットコンテナを知っている必要があります。問題は、NIOがサポートされていても、リクエストごとに1つのスレッドになることです。 Play、Finagle、Vert.x、および純粋なNetty(NIOに関係なく)のみが異なる共有スレッドモデルをサポートしているため、並行性を実行するための異なるメカニズムがあります。

12
Adam Gent

RESTアプリケーションについて私が知っているマイクロフレームワークのリストは次のとおりです。

回答に気軽にコメントしてください-回答を更新してさらに追加します。

6
trustin

Play をご覧になりましたか?

Nettyを使用する傾向があるように見えますが、非常に単純なものを見て回りたい場合は、 Grizzly + Jersey セットアップでおそらく十分に機能します。ヘック、シンプルなGlassfish 4.0 JAX-RSアプリもうまくいくかもしれません。

3
user2954240

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

0

ndertow 3.Netty(XNIOの代わりに) の上になります。 REST AP​​Iサーバーのようなアプリケーションを構築するための、完璧で非常に軽量でシンプルなAPI。私が持っているほぼすべてのJavaマイクロサービスに使用します。

0
user1079877

Spring Framework 4.2.5.RELEASEの AsyncRestTemplate をご覧ください。 Nettyの上で使用できます。

注:デフォルトでは、AsyncRestTemplateは標準のJDK機能に依存してHTTP接続を確立します。 AsyncClientHttpRequestFactoryを受け入れるコンストラクターを使用して、Apache HttpComponents、Netty、OkHttpなどの別のHTTPライブラリを使用するように切り替えることができます。

0
Jingguo Yao

NettyとRxJavaを使用するもう1つのフレームワークがあります。これは datamill と呼ばれます

機能的なリアクティブスタイルを使用してWebアプリケーションを構築することに関心がある場合は、検討する必要があります。

0