Akka or Reactor
我正在启动一个新项目(基于Java)。我需要把它构建成一个模块化、分布式和弹性的体系结构。
因此,我希望业务流程能够相互通信,可以互操作,而且是独立的。
我现在看的是两个框架,除了它们在年龄上的不同,还表达了两种不同的观点:
- 阿克卡(http://akka.io)
- 反应堆(https://github.com/reactor/reactor)
在选择上述框架时,我应该考虑什么?
据我所知,直到现在,阿卡仍然以某种方式结合在一起(在某种程度上,我必须"选择"我想传达信息的演员),但非常有弹性。反应堆松动时(根据事件发布)。
有人能帮助我理解如何做出正确的决定吗?
更新
在更好地回顾了阿克卡事件总线之后,我相信在某种程度上,反应堆所表达的特性已经包含在了阿克卡中。
例如,在https://github.com/reactor/reactor events selectors and consumers上记录的订阅和事件发布可以用akka表示,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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,更成熟,绑定到类型安全
- 反应堆,早期,绑定到弹簧
我的解释正确吗?但是在概念上,阿克卡的演员和反应堆的消费者有什么区别?
现在很难说,因为反应堆仍然是一个草图,我(Akka技术负责人)不知道它会去哪里。很有意思的是,看看反应堆是否会成为AKKA的竞争对手,我们期待着这一点。
据我所见,从您的需求列表中,反应器缺少弹性(即,在Akka中什么样的监督赋予您)和位置透明度(即,以一种允许您抽象本地或远程消息的方式引用活动实体;这就是您所说的"分布式"的含义)。对于"模块化",我对反应堆还不够了解,特别是如何查找和管理活动组件。
如果你现在开始一个真正的项目,并且需要满足你第一句话的东西,那么我认为在这一点上推荐Akka是没有争议的(Jon也指出)。您可以在So或Akka用户邮件列表中提出更多具体问题。
反应堆不与弹簧相连,它是一个可选模块。我们希望反应堆是便携式的,正如乔恩所概述的。
我对推动生产没有信心,因为我们甚至没有里程碑(1.0.0.Snapshot),在这方面,我会更深入地了解Akka,它是一个非常棒的异步框架imo。同时考虑Vert.x和finagle,如果您寻找一个平台(前者)或可组合的未来(后者),它可能会被调整。如果您关注广泛的异步模式,那么GPAR可能会为您提供一个更完整的解决方案。
最后,我们肯定会有重叠,事实上,我们倾向于一种混合的方法(灵活的可组合事件、分布式,并且不受任何调度策略的约束),在这种方法中,您可以很容易地从rxjava、vert.x、akka等中找到位。我们甚至对语言选择没有意见,即使我们强烈地致力于groovy,人们也会已经开始了Clojure和Kotlin港口。另外,一些需求是由SpringXD和Grails驱动的。
非常感谢您的关注,希望您在几个月内有更多的比较点:)
这是一个很好的问题,答案将在未来几周改变。我们不能仅仅因为现在还太早就对节点间通信做出任何承诺。在我们演示在反应堆中的聚集之前,我们还有一些片段要组合在一起。
尽管如此,仅仅因为reactor不做节点间通信OOTB并不意味着它不能。:)一个人只需要一个相当薄的网络层来协调使用诸如redis或amqp之类的东西的reactor,以使其具有集群智能。
我们肯定在讨论和规划反应堆中的分布式场景。现在说到底该如何运作还为时过早。
如果您现在需要集群的东西,那么选择Akka会更安全。