web-dev-qa-db-ja.com

Java反応型フレームワークの比較

Akka、Vert.x、RxJava、Reactor、QBitなど、Javaのリアクティブアプリケーションの構築に役立つと主張する多くのフレームワーク/ライブラリがあります。

彼らは異なるアプローチ、機能、長所、短所などを持っているようです。詳細な比較を見つけることができませんでした。これらの各フレームワークに関するドキュメントがありますが、違いを理解するには十分ではありません。

メジャーJava反応型フレームワークの違いは何ですか?

また、Java反応型フレームワークの選択を促進できるアプリケーション要件は何ですか?

お時間をいただきありがとうございます。

28

私はRxJavaに取り組んでおり、最近Akka-StreamsとReactorで 評価 を行いました。

すべてのライブラリでわかる限り、それらは Reactive-Streams と呼ばれる単一の概念に収束するため、実装間を行き来できます。

RxJavaはすべての中で最も一般的であり、他のライブラリへの依存関係はゼロであり、並行性については意見がありません。 Androidで非常に人気があります。主に、Retrofitなどの他のライブラリ/フレームワークによるサポートのためです。1.xブランチはReactive-Streamsを実装していませんが、2.xはネイティブのReactive-Streams準拠(現在プレビューで利用可能)多くの一般的なJVMベースのプログラミング言語にはアダプター(Scala、Kotlin、Clojureなど)があります。

Reactorは、最新のライブラリであるため、Reactive-Streamsに準拠しています。他の多くのライブラリに対する依存性/サポートがあります。彼らは、ストリームの同時実行とキューイングに関して、異なるトレードオフのセットを選択しました(すなわち、LMAXディスラプタースタイル)。オペレーターに関しては、RxJavaとの間でいくつかのやり取りがあり、オペレーターの共有プールを持つことについて話し始めました。

Akkaは、Scalaのような概念に大きく支配されています。私はそれを機能させるのに少し苦労しました。その背後にあるチームは、Reactive-Streams仕様の開発に関与しており、Reactive-StreamsをサポートするためにアドバタイズされているAkka-Streamsライブラリがありますが、流なAPIがAkkaアクターモデルと大きく絡み合っているため、アクセスが面倒です。

サーバー/デスクトップ/ Androidサイドを使用している場合、RxJavaは一般的に適切な選択肢であり(他のドキュメントよりも優れていると思われます)、高スループットの非同期操作を目的としています。レイテンシーを重視する場合は、Reactorの方が適している可能性があります。 Akka-Streamsの使用法についてはあまり知りませんが、Akkaを中心に構築されたWebサーバーがTomcatとNetty + RxJavaを上回るベンチマークを1年前に見ました。

35
akarnokd