为什么使用Akka?


Akka平台提供哪些有竞争力的特性?

Akka提供可扩展的实时事务处理。

Akka为以下目标提供了一致的运行时与编程模型:

  • 垂直扩展(并发)
  • 水平扩展(远程调用)
  • 高容错

这个模型是唯一需要学习和掌握的,它具有高内聚和高一致的语义。

Akka是一种高度可扩展的软件,这不仅仅表现在性能方面,也表现在它所适用的应用的大小。Akka的核心——akka-actor是非常小的,可以方便地加入你的应用中,提供你所需要的异步无锁并行功能,不会有任何困扰。

什么场景下特别适合使用Akka?


Akka被成功运用在众多行业的众多企业中:

  • 投资业到商业银行
  • 零售业
  • 社会媒体
  • 仿真
  • 游戏和博彩
  • 汽车和交通系统
  • 卫生保健
  • 数据分析 等等等等。

任何需要高吞吐率和低延迟的系统都是使用Akka的候选。

下面的链接中有一些Akka用户关于他们如何使用Akka的描述: http://stackoverflow.com/questions/4493001/good-use-case-for-akka

集成Akka到现有应用?


如果已经有一个基于Servlet/SpringMvc的应用,好像没有好的理由切换到Actors/Akka,如果我们的应用如下:

  • 没有线程工作组,任务很快的在后端处理,没有耗时较长的计算;
  • 有频繁的方法调用,组件相互依赖比较多;
  • 没有足够的时间替换所有的Spring controller到Actor或者其他的Server(非tomcat)。

在一个简单的系统中,用Actor有什么坏处?

  • 有大量的消息在,组件传递,取代方法调用;
  • 把字符串作为消息,也不是很好的解决方法--很难调试;
  • 在一些系统中(比如MVC应用),并没有太多需要同步的地方,往往只有两三个组件需要共享可变对象。通过java的Atomic包装类处理起来并不麻烦。

什么时候应当集成到现有应用?

  • 如果有大量的计算,并发的场景,可以通过Map-reduce的方式方法工作,eg:计算PI;
  • 系统有大量的客户端,即使逻辑很简单,当考虑性能和扩展性;
    • actor容易拓展,可以分割Actor 从一个到N个;
    • actor更安全的使用线程(并不需要1000个线程处理1000个客户端,往往只需要4个线程(四核))