AkkaまたはReactor [終了]


94

私は新しいプロジェクト(javaベース)を始めようとしています。私はそれをモジュール式の分散型の弾力性のあるアーキテクチャとして構築する必要があります。

したがって、私は、ビジネスプロセスが相互に通信し、相互運用可能であると同時に独立していることを望んでいます。

私は現在、年齢の違いに加えて、2つの異なる見解を表現する2つのフレームワークを見ています。

上記のフレームワークのいずれかを選択するときに考慮すべきことは何ですか?

今まで私が理解している限り、Akkaは(メッセージを送信したいアクターを「選択」する必要がある方法で)何らかの形でまだ結合されていますが、非常に弾力性があります。Reactorが緩んでいる間(イベントの投稿に基づく)。

誰かが私が適切な決定をする方法を理解するのを助けることができますか?

更新

Akka のイベントバスをよりよく見直した後、Reactorによって表現され機能が何らかの方法でAkkaにすでに含まれていると思います。

たとえば、https://github.com/reactor/reactor#events-selectors-and-consumersに記載されているサブスクリプションとイベントの発行は、Akkaでは次のように表現できます。

final ActorSystem system = ActorSystem.create("system");
final ActorRef actor = system.actorOf(new Props(
    new UntypedActorFactory() {

        @Override
        public Actor create() throws Exception {

            return new UntypedActor() {
                final LoggingAdapter log = Logging.getLogger(
                        getContext().system(), this);

                @Override
                public void onReceive(Object message)
                        throws Exception {
                    if (message instanceof String)
                        log.info("Received String message: {}",
                                message);
                    else
                        unhandled(message);
                }
            };
        }
    }), "actor");

system.eventStream().subscribe(actor, String.class);
system.eventStream().publish("testing 1 2 3");

したがって、この2つの主な違いは次のとおりです。

  • Akka、より成熟した、Typesafeにバインド
  • 原子炉、初期段階、春にバインド

私の解釈は正しいですか?しかし、概念的にはAkkaのActorとReactorのConsumerの違いは何ですか?


8
AkkaはScalaでの使用に限定されていません。実際、大多数はJavaから使用しています。
Viktor Klang 2013年

1
David:次のようなもの:Akka Actorsと連携したAkka EventBus APIがReactorパターンを実装します
Viktor Klang

9
明確にするために:ReactorはSpringにまったく拘束されていません。基本的なフレームワークとして、その使用をSpringユーザーのみに制限するのは意味がないため、Springの依存関係は意図的に除外しています。アクターとコンシューマーの違いについては、リアクターに関する限り、コンシューマーはステートフルであってもなくてもかまいません。ステートレスの匿名クラスまたはJava 8ラムダを使用することを想定していますが、これは必須ではありません。そして、私の回答で述べたように、Reactorツールセットは、初期のイテレーションでは意図的に簡潔になっています。私たちは「次のアッカ」を作ろうとしているのではありません。
Jon Brisbin 2013年

8
ただの言及落下vertx.ioを、私はそれを研究している人のために同じような文脈で、いくつかの興味深い概念で同じイベント駆動型のフィールドであることを信じているよう...
Opentuned

1
数年後、私も同様の状況にあります。私のアプリケーションは主にスプリングベースであり、イベント駆動型機能を処理する必要があります。AkkaとSpring-reactorの明確な勝者はいますか?より複雑なシナリオが発生した場合に備えて、アクティブなユーザーコミュニティを備えたフレームワークを探しています。
タンタン2015

回答:


47

Reactorはまだスケッチであり、私(Akkaの技術リーダー)はそれがどこに行くのかについての洞察を持っていないので、現時点ではわかりにくいです。ReactorがAkkaのライバルになるかどうかは興味深いです。楽しみにしています。

私の知る限り、要件リストから、Reactorには弾力性(つまり、Akkaで提供される監視機能)と場所の透過性(つまり、ローカルまたはリモートのメッセージングを抽象化できる方法でアクティブなエンティティを参照する)がありません。 「分散」を意味します)。「モジュール式」の場合、特にアクティブなコンポーネントを検索して管理する方法について、Reactorについてはよくわかりません。

ここで実際のプロジェクトを開始し、最初の文を満たすものが必要な場合、この時点でAkkaを推奨することは論争の余地がないと思います(Jonも述べたように)。SOまたはakka-userメーリングリストで、より具体的な質問をしてください


ローランドに感謝します。両方のプロジェクトの人々が回答に貢献しているのを見るのが大好きです。私は現在アッカを試しています。予想通り、Reactorがまだ初期段階にあるため、比較にはまだ適していないことを除いて、質問に対する最終的な回答を提供するのはかなり時期尚早です。だから、待って、物事がどのように進化するか見てみましょう:-)ありがとう、David
David Riccitelli

7
答えてくれてありがとう、ローランド。ReactorがAkkaのライバルではないことを明確にしたかっただけです。非同期アプリケーションに関する懸念事項が重複しているため、類似点があります。しかし、Reactorは、他のシステムを構築できる基盤となるフレームワークであることを意図しています。これらの他のシステムは、Reactor自体よりもAkkaとオーバーラップする可能性があります。しかし、近い将来、Reactorは他のシステムを可能にするフレームワークのままであり、それ自体がフルスタックフレームワークになることはありません。Reactor / Akka銃撃戦の満足感を遅らせる必要があります。;)
ジョンブリスビン2013年

心配はいりません。大丈夫だと思います。このフィールドに入るライブラリーが増えるにつれて、他家受粉が起こると確信しています。
Roland Kuhn 2013年

37

ReactorはSpringにバインドされておらず、オプションのモジュールです。Jonが概説したように、Reactorはポータブルであり、基盤となるものであることが望まれます。

私たちはマイルストーン(1.0.0.SNAPSHOT)でさえないので、本番環境への移行に自信がありません。その点では、素晴らしい非同期フレームワークIMO であるAkkaをより深く見ていきます。また、Vert.xFinagleも検討してください。プラットフォーム(前者)または合成可能な先物(後者)のどちらかを探す場合は、これらを適応させることができます。広範囲の非同期パターンを検討する場合、GParsがより完全なソリューションを提供するでしょう。

最後に、確かに重複がある可能性があります。実際には、RxJavaVert.xAkkaなどからビットを簡単に見つけることができる混合アプローチ(柔軟なコンポーザブルイベント、分散、ディスパッチ戦略にバインドされていない)に傾いています。私たちは言語の選択にさえ意見を述べていません。たとえGroovyに強くコミットしていても、人々はすでにClojureKotlinの移植を始めています。このミックスに加えて、一部の要件はSpring XDGrailsによって駆動されるという事実を追加します。

あなたの目撃した関心に感謝します。うまくいけば、2、3か月でより多くの比較ポイントが得られるでしょう:)


ステファンに感謝します。あなたの回答(そしてジョンのコメント、stackoverflow.com / questions / 16595393 / akka-or-reactor /… )は、より明確な見方を与えると信じています。あなたが言ったように、質問に回答をマークする前に私はまだホールドします、近い将来に何が飛び出すか見てみましょう。繰り返しますが、両方のプロジェクトに関与した人々が有益な洞察を提供するのに時間を費やしたことを本当に感謝しています。
David Riccitelli 2013年

Vert.xに同意します。いくつかのプロジェクトの本番環境でVert.xを使用してコンポーネント間で通信し、シームレスに動作しました。
2017年

33

これは素晴らしい質問であり、答えは今後数週間で変わります。早すぎるからといって、ノード間通信が今どのように見えるかについては、何も約束できません。Reactorでクラスタリングをデモンストレーションする前に、いくつかのピースをまとめておきます。

そうは言っても、Reactorがノード間通信を実行しないからといって、OOTBが実行できないは限りません。:) RedisやAMQPなどを使用してReactor間を調整し、クラスター化されたスマートを実現するには、かなり薄いネットワークレイヤーだけが必要です。

私たちは間違いなく、Reactorでの分散シナリオについて話し、計画しています。それがどのように機能するかを正確に述べるのは時期尚早です。

今すぐクラスタリングを行う必要がある場合は、Akkaを選択する方が安全です。


Jonに感謝します。Reactorは非常に有望です。しかし、ReactorとAkkaの間に、Reactorに欠けている機能(もちろん、初期段階にある)以外に概念的な違いがあるかどうかを理解する必要があります。要約すると、AkkaのActorとReactorのConsumerの概念的な違いは何ですか?また、Reactor GitHubページでのイベントのサブスクリプション/ディスパッチに似ていると思うAkkaのサンプルイベントで質問を更新しました。ありがとう。
David Riccitelli 2013年

ジョン、私はここであなたの応答を読んでいました:blog.springsource.org/2013/05/13/…-したがって、長期的には、AkkaとReactorは似たフレームワークであり、ReactorパターンとActorモデルをサポートしていると思います。
David Riccitelli

:上記のコメントには、より正確な原因以下にされていないstackoverflow.com/questions/16595393/akka-or-reactor/...stackoverflow.com/a/16674388/565110
デイビット・リッチテリ

このコメントがどのように間違っているのか理解できませんか?ここでは、Reactorの戦略的方向性の説明と矛盾しません。
ジョン

1
ゴッチャ。はい、あなたは正しく理解しています。これらの質問をしてくれてありがとう!:)
ジョン・ブリスビン2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.