阿卡或反应堆

我正在开始一个新的项目(基于Java的)的过程。 我需要把它build设成一个模块化,分布式和弹性的架构。

因此,我希望业务stream程能够互相通信,互通,而且是独立的。

我现在看到的是两个框架,除了年龄的不同之外,还expression了两种不同的观点:

  • Akka( http://akka.io )
  • 反应堆( https://github.com/reactor/reactor )

select上述框架之一时我应该考虑什么?

据我了解,到现在为止,Akka仍然以某种方式耦合(我必须“select”我想发送消息的演员),但是非常有弹性。 虽然反应堆是松散的(根据事件发布)。

有人能帮我理解如何做出正确的决定吗?

UPDATE

在回顾了Akka的Event Bus之后,我相信在某些方面,反应堆所expression的特征已经包含在Akka中。

例如,在https://github.com/reactor/reactor#events-selectors-and-consumers上logging的订阅和事件发布可以在Akka中expression如下:

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"); 

因此,现在看来,两者的主要区别是:

  • 阿卡,更成熟,必然会出现Typesafe
  • 反应堆,早期,必然要到spring

我的解释是否正确? 但是阿卡的演员和反应堆中的消费者在概念上有什么不同呢?

现在很难说,因为反应堆仍然是一个素描,而我(阿卡技术领导者)并不知道它会去哪里。 看看反应堆是否成为Akka的竞争对手将是有趣的,我们期待着这一点。

据我所知,从你的需求清单反应堆是缺乏弹性(即什么监督给你在阿卡)和位置透明度(即指一个时尚的活动实体,让你抽象的本地或远程信息;这就是你暗示“分布式”)。 对于“模块化”,我不太了解Reactor,特别是如何查找活动组件并对其进行pipe理。

如果你现在开始一个真正的项目,需要一些能够满足你的第一句话的话,那么我认为在这一点上推荐Akka会是有争议的(正如Jon也指出的那样)。 随意在SO或akka用户邮件列表上提出更具体的问题。

反应堆不是绑定到Spring,它是一个可选模块。 我们希望反应堆是可移植的,乔恩概述的基础。

我不会有信心推进生产,因为我们甚至不是里程碑(1.0.0.SNAPSHOT),在这方面,我会深入了解Akka ,这是一个奇妙的asynchronous框架IMO。 同样考虑Vert.xFinagle ,如果你为平台(前者)或者可组合期货(后者)寻找Vert.xFinagle 。 如果您关注各种asynchronous模式, GPars可能会为您提供更完整的解决scheme。

最后,我们可能肯定有重叠,实际上我们倾向于混合的方法(灵活的可组合事件,分布式,而不是任何调度策略),你可以很容易地从RxJavaVert.xAkka等find位我们甚至没有select语言,即使我们坚定地致力于Groovy,人们已经开始了ClojureKotlin的港口。 再加上Spring XD和Grails驱动的一些需求。

非常感谢您目睹的兴趣,希望您能在几个月内有更多的比较点:)

这是一个很好的问题,答案将在未来几周内发生变化。 我们现在还不能做出什么节点间通信会是什么样的承诺,只是因为还为时过早。 在我们能够在反应堆中演示聚类之前,我们还有一些东西要放在一起。

这样说,只是因为反应堆不做节点间通信OOTB并不意味着它不能 。 :)人们只需要一个相当薄的networking层来协调使用Redis或AMQP之类的Reactors来给它一些聚集的智慧。

我们确实在讨论和计划反应堆中的分布式场景。 现在说出它到底如何工作还为时过早。

如果你现在需要一些集群,你会selectAkka更安全。

Interesting Posts