Akka 1.1 发布,对 Futures 和性能做出改进,降低了依赖性

  • Werner Schuster
  • 侯伯薇

2011 年 5 月 22 日

话题:JavaRubyScalaErlang架构语言 & 开发

Akka 1.1 是在 5 月 12 日发布的,它在Akka 1.0的基础上做出了一些改进。另外,Scala 2.9也在当天发布(Akka 1.1 需要 Scala 2.9);Scala 和 Akka 现在都是由 Martin Odersky 和 Jonas  Bonér 创建的新公司 Typesafe 来管理的,该公司提供针对 Akka、Scala 以及构建在这两种技术上的商业产品的培训和支持。Typesafe 还提供了一个完整的框架

Akka 1.1 (akka-actor) 现在只依赖于 Scala 2.9 执行。除了其他变更,大量的工作都是为了提供Futures(据声明所说):

-Futures 的 Dataflow API 使用了限定的延续方式,从而你可以编写表面上看起来是阻塞的代码,而实际上不会阻塞运行时

-Futures 现在完全是一元的,这意味着它具备一种好处,就是能够很好地理解 for 循环

-Futures 现在拥有大量非阻塞型的方法,这让 Futures 可以组合在一起,而不会产生阻塞

- Futures 现在可以在所有调度程序的本地执行。

听到 Futures现在是一元的消息,函数式编程开发者会很高兴,并且还有mapflatMap方法,让他们可以使用 Scala 的 for 语法(据文档所说):

val f = for {
  a <- Future(10 / 2) // 10 / 2 = 5
  b <- Future(a + 1)  //  5 + 1 = 6
  c <- Future(a - 1)  //  5 - 1 = 4
} yield b * c         //  6 * 4 = 24

val result = f.get()

对于一元代码,使用 Scala 的 for 语句的方式和 Haskell 的do标记是类似的。例如,它可以把计算结果有序地组合成字符串。(想要快速了解 Monads,你可以参见"Monads Made Easy")。

GotoCon Copenhagen 2011会议上,InfoQ 有幸对Jonas  Bonér进行了采访,向他询问了关于 Akka 1.1 的问题以及 Akka 将来的计划。

InfoQ: 现在 Akka 1.1 需要 Scala 2.9,这样做的原因何在? 你们已经使用了 Scala 2.9 中的新特性吗(如果是的话,有哪些呢)? 在从 Scala 2.8 迁移到 2.9 的过程中,你遇到过什么困难吗?

Scala 2.9.0 和 2.8.x 相比有很大的改进,我们利用了它所做出的 bug 修正、性能改善,还有一些新特性。在从 2.8 升级的过程中,我们还没有遇到什么重大问题,这个过程非常平滑。

InfoQ: 在Agent中的 await/future 方法指的是什么? 在当前的操作等待返回值的时候,它们会导致其终止并重新安排计划吗?

Agent.future 会向底层进行查询的操作发送消息,以得到 Agent 当前的值。它是通过使用!!! 方法完成的,那会立刻带 Future 返回。

Agent.await 是 Agent.future.await.result.get 的别名,所以它是阻塞型调用,而 Agent.future 让你可以选择使用针对非阻塞型 Future 组合的新 API。

InfoQ: Akka 1.1 的默认调度程序与 1.0 相比有哪些改善呢;HawtDispatch 在哪些地方更有用或者更快呢?

这很难用几句话说清楚。这段时间中我们对其进行了一系列细微的调整。HawtDispatch 并不会更快。我并不赞成把 Akka 中的 HawtDispatch 从 Akka 核心中转移出来。我唯一觉得有用的地方就在于你可以做低级的 NIO。以下是来自于最新评测的结果:

想要了解关于这些评测的更多细节,你可以参考 akka-user list 上的讨论。

InfoQ

: 你们已经计划在 Akka 2.0 中添加更多重大的新特性,或者做大的改变吗?

是的。我们现在正努力把商业 Akka 产品套件中对集群(cluster)的支持迁移到 Akka Open Source 中。我们会在初秋的时候随着 Akka 2.0 一起发布这个特性。集群操作(如果你喜欢,可以把它叫做 remoting 或者分布式)会完全被提取到配置任务中。这意味着你可以获得任何只能够在本地运行的 Akka 应用程序,然会对其进行配置(从外部),就可以让它可以进行集群、复制、路由等等。

以下是它所能够包含的新特性列表。

在 Akka 2.0 中:

  • 透明且自适应的负载平衡 / 路由
  • 透明且自适应的集群平衡
  • 自动复制,并且在节点崩溃的时候能够自动恢复
  • 持久的操作者邮箱
  • 基于订阅的集群成员服务(不停机进行增加 / 删除节点)
  • 基于高可用、可扩展的事务日志,提供 Event Sourcing
  • 高可用的中心化配置服务,Leader election
在 Akka 2.0 之后:
  • 计算网格 /MapReduce
  • 数据网格
  • 分布式 STM
云 Akka(例如,商业化的插件产品套件)中只会包含操作内容,像监控、管理、provisioning、dashboard、EC2 支持等等。

查看英文原文:Akka 1.1 Released, Brings Many Improvements to Futures and Performance, Reduces Dependencies,

JavaRubyScalaErlang架构语言 & 开发