【问题标题】:Akka or Reactor [closed]Akka 或 Reactor [关闭]
【发布时间】:2013-05-16 19:02:44
【问题描述】:

我正在启动一个新项目(基于 Java)。我需要将其构建为模块化、分布式和弹性架构。

因此,我希望业务流程能够在它们之间进行通信,可以互操作,但也可以独立。

我现在正在研究两个框架,它们除了年龄差异外,还表达了两种不同的观点:

在选择上述框架之一时我应该考虑什么?

据我目前所知,Akka 仍然以某种方式耦合(在某种程度上,我必须“选择”我想向其发送消息的演员),但非常有弹性。虽然 Reactor 是松散的(基于事件发布)。

有人可以帮助我了解如何做出正确的决定吗?

更新

在更好地审查了 Akka 的 Event Bus 之后,我相信在某种程度上 features expressed by 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");

因此,在我看来,两者之间的主要区别是:

  • Akka,更成熟,绑定 Typesafe
  • Reactor,早期,绑定到 Spring

我的解释正确吗?但是Akka 中的 Actor 和 Reactor 中的 Consumer 在概念上有何区别

【问题讨论】:

  • Akka 不一定会被 Scala 使用,事实上,大多数使用它来自 Java。
  • David:类似于:Akka EventBus API 与 Akka Actors 一起实现反应堆模式
  • 澄清一下:Reactor 根本不绑定到 Spring。我们有意排除任何 Spring 依赖项,因为作为一个基础框架,将其仅限于 Spring 用户使用是没有意义的。至于 Actor 和 Consumer 之间的区别:就 Reactor 而言,您的 Consumer 可以是有状态的,也可以是无状态的。假设您希望使用无状态匿名类或 Java 8 lambda,但这不是必需的。就像我在回答中提到的那样,对于早期迭代,Reactor 工具集是有意简洁的。我们并不是要创造“下一个 Akka”。
  • 只提到vertx.io,因为我相信它属于同一个事件驱动领域,对于那些正在研究的人来说,它具有一些类似的有趣概念。..
  • 几年后,我也处于类似情况,我的应用程序主要是基于弹簧的,我现在需要处理事件驱动的功能。是否有明显的赢家 b/w Akka 和 Spring-reactor?我正在寻找一个具有活跃用户社区的框架,以防遇到更复杂的场景。

标签: java spring akka reactor project-reactor


【解决方案1】:

目前很难说,因为 Reactor 仍然是一个草图,我(Akka 技术负责人)不知道它会去哪里。看看 Reactor 是否会成为 Akka 的竞争对手将会很有趣,我们很期待。

据我所知,从您的需求列表中,Reactor 缺少弹性(即在 Akka 中为您提供的监督)和位置透明性(即以允许您抽象本地或远程消息传递的方式引用活动实体;哪个就是你所说的“分布式”)。对于“模块化”,我对 Reactor 知之甚少,尤其是如何查找活动组件并对其进行管理。

如果您现在开始一个真正的项目并且需要满足您的第一句话的东西,那么我认为此时推荐 Akka 不会有争议(正如 Jon 也指出的那样)。请随时在 SO 或akka-user mailing list 上提出更具体的问题。

【讨论】:

  • 感谢 Roland,我很高兴看到这两个项目的人都在为答案做出贡献。我目前正在尝试 Akka。正如您所料,现在提供这个问题的最终答案还为时过早,除了 Reactor 仍处于早期阶段,因此尚不适合进行比较。所以,让我们拭目以待,看看事情会如何发展 :-) 谢谢,大卫
  • 感谢您的回答,罗兰。我只是想澄清一下,Reactor 不是 Akka 的竞争对手。由于有关异步应用程序的关注领域重叠,因此存在相似之处。但是 Reactor 旨在成为可以构建其他系统的基础框架。与 Reactor 本身相比,这些其他系统与 Akka 的重叠可能更多。但在可预见的未来,Reactor 仍将是一个支持其他系统的框架,并且本身不会是一个全栈框架。您将不得不延迟对 Reactor/Akka 枪战的满足。 ;)
  • 别担心,我想你会做的很好,而且我很确定随着更多图书馆进入这个领域,我们会看到异花授粉。
【解决方案2】:

Reactor 没有绑​​定到 Spring,它是一个可选模块。我们希望 Reactor 是可移植的,这是 Jon 概述的基础。

我对推动生产没有信心,因为我们甚至还不是 Milestone (1.0.0.SNAPSHOT),在这方面,我会更深入地了解 Akka,这太棒了异步框架 IMO。还要考虑 Vert.xFinagle 如果您寻找平台(前者)或可组合的期货(后者),它们可能会被调整。如果您关注范围广泛的异步模式,也许 GPars 会为您提供更完整的解决方案。

最后,我们肯定会有重叠,事实上我们倾向于一种混合方法(灵活的可组合事件,分布式,不受任何调度策略的约束),您可以轻松地从 RxJava、Vert.xAkka 等。我们甚至对语言选择都没有意见,即使我们坚定地致力于 Groovy,人们已经开始了 ClojureKotlin 端口。除此之外,还有一些需求是由Spring XDGrails 驱动的。

非常感谢您的见证,希望您在几个月内获得更多比较点 :)

【讨论】:

  • 感谢 Stephane,我相信您的回答(以及 Jon 的评论,stackoverflow.com/questions/16595393/akka-or-reactor/…)给出了更清晰的视角。正如你所说,在标记问题已回答之前,我仍然会坚持,让我们看看在不久的将来会出现什么。再次感谢参与这两个项目的人们花时间提供有用的见解。
  • 我同意 Vert.x。我曾在几个项目的生产环境中使用 Vert.x 来在组件之间进行通信,并且它可以无缝工作。
【解决方案3】:

这是一个很好的问题,答案将在未来几周内发生变化。我们现在不能对节点间通信的样子做出任何承诺,因为现在还为时过早。在我们展示 Reactor 中的集群之前,我们还有一些工作要做。

话虽如此,仅仅因为 Reactor 不进行节点间通信 OOTB 并不意味着它不能。 :) 只需要一个相当薄的网络层来在使用 Redis 或 AMQP 之类的 Redis 或 AMQP 之类的 Reactor 之间进行协调,从而为其提供一些集群智能。

我们肯定是在讨论和规划 Reactor 中的分布式场景。现在说具体如何运作还为时过早。

如果你现在需要做集群的东西,选择 Akka 会更安全。

【讨论】:

  • 感谢 Jon,我发现 Reactor 很有前途。然而,我需要了解 Reactor 和 Akka 之间是否存在概念上的差异,除了 Reactor 缺少的功能(当然,还处于早期阶段)。总之,Akka 中的 Actor 和 Reactor 中的 Consumer 之间的概念区别是什么?我还用 Akka 中的示例事件更新了我的问题,我认为它类似于 Reactor GitHub 页面上的事件订阅/调度。谢谢。
  • Jon,我在这里看到了你的回复:blog.springsource.org/2013/05/13/… - 所以我们可以假设从长远来看,Akka 和 Reactor 将是相似的框架,都支持 Reactor 模式和 Actor 模型。跨度>
  • 我不明白这个评论现在怎么不正确了?这里没有任何与 Reactor 战略方向的解释相矛盾的地方。
  • 明白了。是的,你理解正确。感谢您提出这些问题! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
相关资源
最近更新 更多