BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Werner Schuster 关注 7 他的粉丝 ,译者 侯伯薇 关注 0 他的粉丝 发布于 2011年5月23日. 估计阅读时间: 6 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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,

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

直接跟F#和Jscex一脉相承了…… by Jeffrey Zhao

用Monad解决异步编程问题会成为标准方案了……

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT