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


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

Aaron Stannard谈Akka.NET 1.1相关推荐

  1. Orleans解决并发之痛(五):Web API

    通过前面几篇文章的介绍,可能会疑问怎么在实际开发中调用Grain,之前Demo的Client都是基于控制台应用程序,实际开发下可能是基于Web Form.Web API.MVC......,由于一时短 ...

  2. Orleans解决并发之痛(四):Streams

    Orleans 提供了 Stream扩展编程模型.此模型提供了一套API,使处理流更简单和更健壮.Stream默认提供了两种Provider,不同的流类型可能使用不同的Provider来处理,Simp ...

  3. Orleans解决并发之痛(三):集群

    Orleans本身的设计是一个分布式的框架,多个Silo构成集群,Grains分布在多个Silo中.一旦一个Silo挂了,原来归属这个Silo的Grains会自动在其他Silo中激活.生产环境下还是需 ...

  4. Orleans解决并发之痛(二):Grain状态

    Grains是Orleans应用程序的构建块,它们是彼此孤立的原子单位,分布的,持久的, 一个典型的Grain是有状态和行为的一个单实例,每个Grain实例的在单线程内执行,Grain之间共享数据通过 ...

  5. Orleans解决并发之痛(一):单线程

    程序在运行过程中有时会莫名其妙出现代码的某些约束或者执行结果和理想状况不一样,正常逻辑怎么会出现这样的情况?到底发生了什么?好像见了鬼!瞬间好无助. 谁来救救我 大多数出现正常逻辑很难解释的时候,我们 ...

  6. Oleans集群之Consul再解释

    由于上周发文章的时候,我正要打算出门,所以就把写好的全部发出去了,有点仓促,虽然写了主线,但是这里还是需要再次解释一下. 我看到Orleans已经升级到了1.5.1了,(nuget上的官方发布),于是 ...

  7. Orleans的集群构建

    听闻一周前,微软公布了.net core2.0,以及各种各样的其他core2.0.大家都很兴奋.微妈的诚意真是满满的.这次开源势头让我感觉到了微妈的技术实力之雄厚.我在这里祝福C#越来越好.细心的人似 ...

  8. Orleans—一些概念

    这个文章聊一聊Orleans的概念.以下文章大部分翻译自官方教程,还有一些结合实际的应用经验,并对以前文章留下的坑进行填平.如果有哪个坑没有填,还请告诉我. Grain的生命周期: 一个Grain在逻 ...

  9. Orleans配置---持久化

    Grain理想的生命周期应该如下图所示: 这就如美国电影中的大反派一样,死了再复活,死了再复活.当然如果复活的反派没有记忆,这个电影就真没劲.现在我要求Grain的复活是有记忆的复活.看我怎么办到. ...

最新文章

  1. 用 Python 爬虫框架 Scrapy 爬取心目中的女神
  2. excel中线性函数_Excel中特别有用的不常用函数之Indirect函数
  3. 8软件遇到的问题及解决方法_Excel工作表中的8个常见问题,你一定遇到过,附解决方法...
  4. jsx怎么往js里传参数_给js文件传参数(详解)
  5. 分解得到的时频域特征_AI大语音(四)| MFCC特征提取(深度解析)
  6. 有趣的人工智能项目合集,如老婆生成器
  7. wow修改人物模型_人物修改教程更仔细
  8. C++获取NTP服务器上的网络时间
  9. 体验数学之美——泛函
  10. Android中EditText去掉下划线的方法
  11. ubuntu16.04搭建samba服务器
  12. 日期格式化跨年bug,是否与你不期而遇?
  13. APP安全性检查报告整改
  14. Cisco wlc change the time
  15. YOLO多线程多模型运行模式的实施
  16. 电脑重装系统如何在 Win11查看显卡型号信息
  17. 2020年11月4日
  18. 计算机界五位巾帼英雄
  19. 大数据掀人类文明革命 探索更多未知
  20. Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。

热门文章

  1. 思科路由PPPOE基本配置
  2. 过Div将页面分三块(上,中,下),然后通过Ext来改变Content的内容(三)--终结版
  3. asp.net 得到上一页地址
  4. Visual Studio怎么使用中文帮助文档
  5. 【翻译】C#表达式中的动态查询
  6. ASP.NET Core Web API使用静态swagger.json文件
  7. 路遥工具箱全面迁移至 .NET 6.0 并发布 3.0 版本及迁移记录详解
  8. .net core ——微服务内通信Thrift和Http客户端响应比较
  9. 实际体验SpanT 的惊人表现
  10. 移除 ZooKeeper 的 kafka 2.8 ,更快了