akka与Erlang相比如何?

我最近一直在看阿卡,这是非常令人印象深刻的。 它看起来像erlang的大部分杀手function – 位置透明度,监督层次等等。 erlang有哪些function不是吗?

免责声明:我是Akka的采购订单

  • Erlang在发送时复制 – Akka使用共享内存(不可变对象)进行虚拟机内发送
  • Erlang可以执行每个进程的GC – Akka使用JVM GC
  • Erlang有OTP – Akka整合了Java生态系统(Apache Camel,JAX-RS等)
  • Erlang为您进行进程调度 – Akka允许您使用许多不同的调度程序,并拥有无限的configuration机会
  • Erlang会执行热代码重新加载 – Akka可以支持它,但是由于JVM类加载而不太灵活

那些是我头顶的那些。

另一方面,使用Akka意味着您可以使用Scala,Java,Groovy或JRuby编写您的应用程序。

在Erlang过程中保证大约每1000次切换。 在Scala / Akka代理拥有一个调度程序这样一个天真的框架,直到它完成接收工作。 将军。 游戏结束。 Hasta la vista :)人们,不要浪费你的时间在伪科技上。 我震惊的是,这里的人比较了Scala和Erlang。

还有很多其他所谓的“杀手function”,但这里是我的build议,不要用特征来思考,要考虑使用特定语言的成语。 Scala窃取“最好的function”,Erlang使用正确的习惯用法,以可靠的方式构build系统,并以这些正确的习惯用法驱动高级语言。 当你学习Erlang时,你正在重新思考分布式可靠系统的思维方式,Erlang会教你并升级你。 斯卡拉是另一个迫切需要(哦,对不起,多平行,有趣的话)语言,试图从其他语言窃取好的function。

几乎没有人提到过程隔离。 没有“你的线程不能混淆我的垃圾”的保证,分布式系统更难以推理。 (Erlang的stream程已经足够困难了。)

AFAIK(这是不远的,鉴于我有限的直接经验与JVM),只有Erlang实际上在JVM上获得进程隔离“正确”。 Google先生可以提供一些关于Fox和Candea(?)在使用“微型重启”技术(“恢复导向计算”)的研究系统上进行研究的提示。 一位Erlang开发人员读到这项研究,并说了几件事情:

  1. 欢迎来到俱乐部,你过了多久?
  2. JVM使得它非常难以join。 🙂

对我来说,在整个Erlang集群中热切换的代码没有停机时间(例如: make:all([netload] )是Erlang杀手function之一。

但是让我们来回过头来看看:爱尔兰人没有什么爱尔兰人呢? 当然,你可以添加数十个扩展和库(scala,akka,spring,osgi,…)到Java来尝试接近Erlang。 但是重点在哪里呢? 总而言之,所有这些扩展比学习现在已经certificate超过二十年的简单的Erlang语言要复杂得多,它可以提供最高的可扩展性和零宕机时间。

也许Erlang对更大的分布式系统来说更好(vjache的答案之后),但是对于一个普通的服务器来说,当你只是想要使用多个CPU的全部function时,Akka是不错的select – 提供良好的抽象,性能和与Java生态系统的集成。