web-dev-qa-db-ja.com

AkkaまたはReactor

私は新しいプロジェクト(Javaベース)を開始しています。モジュール化された分散型の復元力のあるアーキテクチャとして構築する必要があります。

したがって、相互に通信し、相互運用可能であるだけでなく、独立したビジネスプロセスが必要です。

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

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

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

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

[〜#〜] update [〜#〜]

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の概念上の違いは何ですか

87

Reactorはまだスケッチであり、私(Akkaの技術リーダー)はそれがどこに行くのか見当がつかないため、この時点で伝えるのは困難です。 ReactorがAkkaのライバルになるかどうかを見るのは面白いでしょう、それを楽しみにしています。

私が見る限り、あなたの要件リストから、Reactorは回復力(すなわち、Akkaで監督が与えるもの)と場所の透明性(すなわち、ローカルまたはリモートメッセージングを抽象化できる方法でアクティブなエンティティを参照しています); 「分散」によって暗示されます)。 「モジュラー」については、Reactorについて、特にアクティブなコンポーネントを検索して管理する方法については十分に知りません。

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

45
Roland Kuhn

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

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

最終的に、確かに重複する可能性があります。実際には、RxJavaから簡単にビットを見つけることができる混合アプローチ(柔軟で構成可能なイベント、分散、ディスパッチ戦略に縛られない)に傾いていますVert.xAkkaなど。言語を選択しても、 Groovyに強くコミットしており、人々はすでにClojureおよびKotlinポートを開始しています。このミックスに、一部の要件が Spring XD および Grails によって駆動されるという事実を追加します。

あなたの目撃された関心に感謝します。2、3ヶ月でもっと多くの比較ポイントがあることを願っています:)

36

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

とは言っても、Reactorがノード間通信を行わないという理由だけでOOTBはそれを意味するものではありませんできない。:)ネットワーク層は、RedisやAMQPなどを使用してReactor間を調整し、クラスター化されたスマートを提供します。

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

現在クラスタリングを行うものが必要な場合は、Akkaを選択する方が安全です。

31
Jon Brisbin