我正在开始一个新项目(基于java) . 我需要将其构建为模块化,分布式和弹性架构 .
因此,我希望业务流程能够相互通信,具有互操作性,同时也是独立的 .
我现在正在寻找两个框架,除了它们的年龄差异外,还表达了两种不同的观点:
-
Akka(http://akka.io)
选择上述框架之一时我应该考虑什么?
据我所知,到目前为止,Akka仍然以某种方式耦合(在某种程度上我必须'选择'我要发送消息的演员),但非常有弹性 . 虽然Reactor是松散的(基于事件发布) .
有人可以帮我理解如何做出正确的决定吗?
UPDATE
在更好地回顾了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的约束
-
反应堆,早期阶段,必然是 Spring 天
我的解释是否正确?但 what is conceptually the difference between the Actor in Akka and the Consumer in Reactor ?
3 回答
在这一点上很难说,因为Reactor仍然是一个草图,而我(Akka tech lead)并没有深入了解它的发展方向 . 看看Reactor是否成为Akka的竞争者将会很有趣,我们期待着这一点 .
据我所知,从您的需求列表中,Reactor缺少弹性(即监控在Akka中为您提供的)和位置透明性(即以一种方式引用活动实体,使您可以通过本地或远程消息传递;这就是您暗示“分布式”) . 对于“模块化”,我对Reactor了解不多,特别是如何查找活动组件并对其进行管理 .
如果你现在开始一个真正的项目并需要满足你的第一句话的东西,那么我认为在这一点上推荐Akka并不会引起争议(正如Jon所说) . 随意在SO或akka-user mailing list上提出更具体的问题 .
Reactor不受Spring限制,它是一个可选模块 . 我们希望Reactor可以移植,这是Jon概述的基础 .
我不会对推动 生产环境 充满信心,因为我们甚至不是Milestone(1.0.0.SNAPSHOT),在这方面,我会更深入地了解Akka,这是一个非常棒的异步框架IMO . 还可以考虑Vert.x和Finagle,如果您寻找平台(前者)或可组合期货(后者),可能会对其进行调整 . 如果您管理各种异步模式,GPars可能会为您提供更完整的解决方案 .
最后,我们可能肯定会有重叠,事实上我们倾向于混合方法(灵活的可组合事件,分布式,并且不受任何调度策略约束),您可以轻松地从RxJava,Vert.x,Akka等中找到位 . 我们甚至对语言选择都没有意见,即使我们坚定地致力于Groovy,人们已经开始使用Clojure和Kotlin端口了 . 除此之外,还有一些需求由Spring XD和Grails驱动的事实 .
非常感谢您亲眼目睹的兴趣,希望您在几个月内获得更多的比较点:)
这是一个很好的问题,答案将在未来几周内发生变化 . 我们现在无法做出任何节点间通信的承诺,因为它太早了 . 在我们演示Reactor中的聚类之前,我们仍然需要将一些部分放在一起 .
话虽如此,只是因为Reactor并不意味着它不能 . :)人们只需要一个相当薄的网络层来协调Reactors之间使用像Redis或AMQP这样的东西给它一些集群智能 .
我们肯定在Reactor中讨论和规划分布式场景 . 要确切说明它是如何起作用还为时过早 .
如果你现在需要集群的东西,那么选择Akka会更安全 .