Akka.NET 1.1近日发布,带来新特性和性能提升。InfoQ采访了Akka.net维护者Aaron Stannard,了解更多有关Akka.Streams和Akka.Cluster的信息。Aaron还阐述了与Akka for JVM实现有关的路线图计划。

InfoQ:这个版本有什么突出的特性?

Aaron Stannard:Akka.NET 1.1的主要目标是将Akka.Cluster由Beta测试版程序包变成最终版(RTM)程序包。该版本还提供了测试工具,对在生产环境里运行Akka.NET集群的过程中可能出现的大量各种不同的网络场景进行了测试。

不 要低估我们付出的巨大努力;Akka.Cluster Beta测试版最初发布于2014年8月。所以,我们大约花了两年的时间开发Akka.Cluster,收集生产用户的反馈。在1.1版本开发的最后阶 段,我们主要是提升可靠性和集群系统的速度,以便它可以用于高可用工作负载。已经有银行、医疗保健提供商、能源生产商、船队和车队管理企业、SaaS企业 及其他许多用户在生产环境中使用了Akka.NET。Akka.Cluster是他们最希望看到其发布的东西。

1.1版本的另外一个突出的 特性是Akka.Streams的第一个Beta版本;该模块引入了一种使用Akka.NET构建响应式应用程序的全新方法,允许开发人员将一系列的异步 操作表示成大量可以互联和重用的流处理图。你可以从我们的文档中看到Akka.Streams图可能的样子。

InfoQ:Akka.Net 1.1带来了什么性能提升?

Stannard:最显著的性能提升包括:

  • 将所有Actor的内存占用减少了34%;
  • 将每个Akka.Remote连接(支撑Akka.Cluster网络连接的子系统)的吞吐量提高了5倍;
  • 改正了多处内存过度使用的地方,最明显的是日志系统;

虽然我们一直在不断地度量、测试、提升Akka.NET的性能,但是性能不是这个版本的真正目的。性能的提升源于我们找到了更为健壮的方法实现Akka.NET使用的部分内部构件。

InfoQ:在这个版本中,您最喜欢的特性是什么?

Stannard:说来真奇怪,在1.1版本中,我最喜欢的部分是一个和我无关的部分:Akka.Streams。

关 于Akka.Streams,真正引人注目的是,它让用户仅仅使用几行代码就可以简洁地表达复杂的工作流,包括传统上非常困难的并发编程问题,比如退避和 节流。在没有经验的情况下,我昨天使用Akka.Streams在几个小时的时间里就重写了WebCrawler Akka.Cluster演示程序中处理繁重任务的部分。我还使用一些内置的缓冲流解决了那个代码库中存在多年的节流问题。和第一次使用Actor一样, 第一次使用Akka.Streams也让我很激动:我意识到,我使用了一种以前从未使用过的全新的编程方法。

InfoQ:你们是如何制定路线图的?

Stannard:Akka.NET当前的路线图是由多个因素促成的;与原先的Akka for JVM实现一致就是一个重要因素。我们受益于他们的经验和用户报告的Bug,因此,遵循他们的实现有巨大的好处。

InfoQ:遵循Akka for JVM的实现方式让你们获得了哪些好处?

Stannard: 开发人员永远不要忘记,“生产时间(time-in-production)”是度量代码库健康情况及其思想的最有价值的指标。和专有的单业务线应用程序 相比,一个有着几千名用户、在几千台服务器上7x24小时运行的大型开源项目,其在生产环境中累计运行的时间会更多。那意味着,更多的Bug、设计缺陷会 更快地被发现,生产力就可以获得更频繁地改进。这就可以解释,为什么在Daily WTF上有关可怕的代码炸弹的文章中,几乎所有多年未能发现的代码炸弹都是来自用途单一的专有代码或者应用不广泛的开源软件。这就是为什么我们要设法遵循 Akka for JVM的思路——他们的设计来源于在生产环境中长时间的运行。

InfoQ:你们的路线图和Akka for JVM有什么不同?

Stannard:Akka.NET 本身已经在生产环境中使用了很长时间了。我们已经从客户那里获得我们自己的生产力改进/Bug/不同的想法。.NET和JVM生态系统的巨大差别也是我们 制定路线图时必须考虑的。例如,.NET开发人员特别喜欢依赖注入框架,而那在Scala开发中往往并不多见。那种差别会对路线图的制定产生影响,将来, 我们可能会选择设计不同于JVM的东西,例如让DI支持成为一等特性,而不是一个插件。

也有一些Akka for JVM中有的模块,我们并没有多大的兴趣移植——比如Apache Camel集成。我还没有见过哪家.NET工场用它。还有Akka.HTTP,这是一个我们多年来一直在开发的怪物级模块。我们近期内不会移植,因为相对 于我们现在要提供给用户的一切,它的价值较低。

一般而言,我们的用户往往在服务器端应用程序中使用Akka.NET。他们真正想要的是我们 的高可用(HA)模块,像Akka.Cluster、Persistence、Streams和Sharding,全部运行在Linux上的.NET Core上。所以接下来,影响我们路线图的主要任务可能是,Akka.NET提供对.NET Core的初步支持。

InfoQ:Akka.NET主要是C#的,但也有F# API。您在实现中使用了F#?

Stannard: 就我个人而言,我并不怎么用F#,但我正要改变那种情况。我维护我们的构建系统。该系统用F#编写,使用了FAKE。我大部分的F#使用经验都来自那里。 我正计划在不久的将来构建一些供Petabridge内部使用的应用程序,我考虑在Windows Azure Service Fabric上使用Suave及Akka.Cluster来实现。无疑,Akka.NET让我爱上了函数式编程。许多FP的基础概念,如模式匹配和“流迭 代(stream iteration)”,是Actor系统的主要部分。在任何.NET开发人员的职业发展中,F#都会自然地成为Akka.NET的下一个步骤。

Akka.NET是一个托管在GitHub上的开源项目。Akka.NET网站提供了详细的文档

原文地址:http://www.infoq.com/cn/news/2016/07/akka-dotnet

Aaron Stannard谈Akka.NET 1.1的更多相关文章

  1. .NET Conf 2019日程(北京时间)

    一年一度的 .NET Conf马上就要开始了,我将日程简易的翻译了一下,并且时间全部转换为北京时间,以方便国内.NETer. 日程 第1天 (北京时间9月24日) .NET Conf 2019 基调 ...

  2. .NET Core 3.0即将发布!

    期待已久的.NET Core 3.0即将发布! .NET Core 3.0在.NET Conf上发布.大约还有9个多小时后,.NET Conf开始启动. 为期3天的大概日程安排如下: 第1天-9月23 ...

  3. 一起了解 .Net Foundation 项目 No.1

    .Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. Akka.NET Akka ...

  4. .NET周报【10月第3期 2022-10-25】

    国内文章 聊一聊被 .NET程序员 遗忘的 COM 组件 https://www.cnblogs.com/huangxincheng/p/16799234.html 将Windows编程中经典的COM ...

  5. 谈一下关于CQRS架构如何实现高性能

    CQRS架构简介 前不久,看到博客园一位园友写了一篇文章,其中的观点是,要想高性能,需要尽量:避开网络开销(IO),避开海量数据,避开资源争夺.对于这3点,我觉得很有道理.所以也想谈一下,CQRS架构 ...

  6. [翻译]AKKA笔记 - CHILD ACTORS与ACTORPATH -6

    原文:http://rerun.me/2014/10/21/akka-notes-child-actors-and-path/ Actor是完全的继承结构.你创建的任何Actor肯定都是一个其他Act ...

  7. 使用Akka.net开发第一个分布式应用

    系列主题:基于消息的软件架构模型演变 既然这个系列的主题是"基于消息的架构模型演变",少不了说说Actor模型.Akka.net是一个基于Actor模型的分布式框架.如果你对分布式 ...

  8. 翻译:AKKA笔记 - 介绍Actors

    任何以前做过多线程的人都不会否认管理多线程程序是困难并且痛苦的. 我说管理是因为它开始很容易而且当你看到性能提升时会很兴奋.但是,当你看到你没法从子线程的错误中恢复 或者 这些僵尸bug很难重现 或者 ...

  9. Akka.net开发第一个分布式应用

    Akka.net开发第一个分布式应用 系列主题:基于消息的软件架构模型演变 既然这个系列的主题是”基于消息的架构模型演变“,少不了说说Actor模型.Akka.net是一个基于Actor模型的分布式框 ...

随机推荐

  1. Linux中进行单文件内容的复制

    文件内容复制的常规方法: 开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长 一次性复制文件的内容,这种方法必须首先获取 ...

  2. 比Mysqli操作数据库更简便的方式 。PDO

    下面来说一下PDO 先画一张图来了解一下 mysqli是针对mysql这个数据库扩展的一个类 PDO是为了能访问更多数据库 如果出现程序需要访问其他数据库的话就可以用PDO来做 PDO数据访问抽象层1 ...

  3. Spring中Bean的实例化

                                    Spring中Bean的实例化 在介绍Bean的三种实例化的方式之前,我们首先需要介绍一下什么是Bean,以及Bean的配置方式. 如果 ...

  4. C#语法糖大汇总

    首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...

  5. animate.css(第三方动画使用方法)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Monaco; color: #a5b2b9 } animation 语法: animatio ...

  6. 深入理解css3中nth-child和 nth-of-type的区别

    在css3中有两个新的选择器可以选择父元素下对应的子元素,一个是:nth-child 另一个是:nth-of-type. 但是它们到底有什么区别呢? 其实区别很简单::nth-of-type为什么要叫 ...

  7. iOS 多线程之GCD的使用

    在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...

  8. ReactiveCocoa代码实践之-UI组件的RAC信号操作

    上一节是自己对网络层的一些重构,本节是自己一些代码小实践做出的一些demo程序,基本涵盖大多数UI控件操作. 一.用UISlider实现调色板 假设我们现在做一个demo,上面有一个View用来展示颜 ...

  9. webService

    什么是webService WebService,顾名思义就是基于Web的服务.它使用Web(HTTP)方式,接收和响应外部系统的某种请求.从而实现远程调用.  1:从WebService的工作模式上 ...

  10. CentOS上 Mono 3.2.8运行ASP.NET MVC4经验

    周一到周三,折腾了两天半的时间,经历几次周折,在小蝶惊鸿的鼎力帮助下,终于在Mono 3.2.8上运行成功MVC4.在此总结经验如下: 系统平台的版本: CentOS 6.5 Mono 3.2.8 J ...