【Akka】Akka应用调研报告

wyjqh 8年前

来自: http://jasonding1354.github.io/2016/02/01/Scala/【Akka】Akka应用调研报告/

Akka是什么

Akka由Scala语言编写的分布式应用框架,用于简化编写容错的、高可伸缩性的Java和Scala的Actor模型应用。它已经成功运用在电信行业。系统几乎不会宕机(高可用性 99.9999999 %,一年只有31 ms宕机)。

大多数流行的语言并发是基于多线程之间的共享内存,使用同步方法防止写争夺,Akka提供的并发模型基于Actors。这使得软件开发人员可以更轻松地开发正确的具有容错性、可扩展性和跨平台的并发程序。

Akka为什么如此重要,并且会有很好的发展前景?

第一,充分利用计算机多核的计算资源。由于计算机硬件技术的发展,计算机拥有越来越多的内核,但是CPU的主频已经达到极限,所以作为软件开发者要提高软件性能,就需要充分利用计算机多核的计算资源,使得编写高性能的软件程序。

第二,轻松实现分布式程序。分布式技术和集群技术的成熟使得一个应用程序可以被分块运行在多个独立的计算机上,Akka 为透明的分布式系统以及真正的可扩展高容错应用的基础进行了抽象,基于Akka的应用程序不需要关心操作系统层面的并发和通信细节,进而提高了开发分布式程序的效率。

第三,开源社区的大力支持。Akka现在是Typesafe Stack的一部分。Typesafe是一个让开发者更容易地构建可扩展软件应用的现代软件平台。它在一个简单的包里组合了Scala语言、Akka、Play Web框架和其它鲁棒的开发工具,能够与现有的Java基础设施无缝集成。

第四,开源项目的优秀实践有利于Akka的流行和推广。Apache Spark、Apache Flink都已经成为了Apache开源软件基金会的顶级项目,而它们都使用了Akka库,构造软件的高性能和分布式。

下面是Typesafe公司统计的开发者使用Akka作为工具库的主要考虑因素:

Akka的应用场景

Akka被成功运用在众多行业的众多大企业,从投资业到商业银行、从零售业到社会媒体、仿真、游戏、汽车和交通系统、数据分析等等。任何需要高吞吐率和低延迟的系统都是使用Akka的候选。

Akka的Actor模型使你能够进行服务失败管理(监管者),负载管理(缓和策略、超时和隔离),水平和垂直方向上的可扩展性(增加CPU核数和/或增加更多的机器)管理。

Akka的特点可以让它应用在以下领域:

(1)事务处理 (在线游戏,金融/银行业,贸易,统计,社会媒体,电信);

(2)服务后端 (任何行业,任何应用),提供REST、SOAP、Cometd、WebSockets 等服务,作为消息总线/集成层 垂直扩展,水平扩展,容错/高可用性;

(3)并发/并行 (任何应用),运行正确,方便使用,只需要将jar包添加到现有的JVM项目中;

(4)仿真,主/从,计算网格,MapReduce等等;

(5)通信Hub (电信、Web媒体、手机媒体);

(6)游戏 (MOM、在线游戏);

(7)商业智能/数据挖掘/通用数据处理;

(8)复杂事件流处理。

</div>

Akka在大数据开源项目中的应用

由于Akka由Scala编写,现已成为Scala标准库的一部分,所以广泛使用Akka的软件开源项目也主要集中在基于Scala的生态环境下,同时,也不乏Java开发的项目。在全球最火热的开源项目仓库GitHub中,有超过250个开源Akka的actor应用程序项目。

Apache Spark是一种与Hadoop相似的开源集群计算环境,Spark直接采用了Akka的Actor模型来实现多线程并行机制,性能非常高。Spark同节点上的任务以多线程的方式运行在一个JVM进程中,这样可以做到任务启动速度快、节省内存、减少申请系统资源带来的开销。Spark的内存计算的高性能都得益于Akka的使用。

Apache Flink是一个高效、分布式、基于Java实现的通用大数据分析引擎,它具有分布式 MapReduce一类平台的高效性、灵活性和扩展性以及并行数据库查询优化方案,它支持批量和基于流的数据分析。Flink的RPC系统就是利用Akka框架来实现的,Akka的故障检测机制提高了Flink的鲁棒性,使得当节点中断时能做出正确响应。

Akka在工业界的应用

Akka在国外的IT行业,尤其是互联网和通信行业都有广泛的应用,其中著名的企业如思科、ebay、亚马逊、Intel、惠普等都在广泛使用。可以在下面图中看到,有哪些企业在使用Akka。

国内的互联网行业相对应用少些,主要是因为国内的Scala人才还比较匮乏,Akka的资料和普及还不够,这使得企业在技术选型的时候会优先考虑比较传统和成熟的技术方案,以减小开发难度。但也不乏应用Scala和Akka的先行者,比如豌豆荚、挖财、雪球等一些创业型公司和一些投资银行的技术部门。在国内的企业中,主要使用Akka做一些ETL处理、业务的运算和响应式平台的应用。

</div>