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 执行。除了其他变更,大量的工作都是为了提供 Future
s (据声明所说):
-Futures 的 Dataflow API 使用了限定的延续方式,从而你可以编写表面上看起来是阻塞的代码,而实际上不会阻塞运行时
-Futures 现在完全是一元的,这意味着它具备一种好处,就是能够很好地理解 for 循环
-Futures 现在拥有大量非阻塞型的方法,这让 Futures 可以组合在一起,而不会产生阻塞
- Futures 现在可以在所有调度程序的本地执行。
听到 Futures现在是一元的消息,函数式编程开发者会很高兴,并且还有 map
和flatMap
方法,让他们可以使用 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,
评论