Akka介绍

10-01-08 banq
                   

刚刚看完DCI架构,个人总结从事件模式角度可以很好实现DCI,结果从Akka上得到验证。

Akka有几个特性:

1.更加简单的并发策略Simpler Concurrency,通过Actors STM & Transactors能够简化编写可靠的并行计算。

2.EDA架构Event-driven Architecture,完美的异步事件驱动架构,不会堵塞。

3.真正的可伸缩性,使用异步消息在多核以及多个节点之间扩展。

4.容错性,重视失败。

5.远程透明性

Introducing Akka – Simpler Scalability, Fault-Tolerance, Concurrency & Remoting Through Actors一文对Akka进行了详细介绍。

Actor Model是用来编写并行计算或分布式系统的高层次抽象,让程序员不必为多线程模式下共享锁而烦恼,被用在Erlang 语言上,高可用性99.9999999 % 一年只有31 ms当机。

Actors将状态和行为封装在一个轻量的进程/线程中,但是不和其他Actors分享状态,每个Actors有自己的世界观,当需要和其他Actors交互时,通过发送事件和消息(看到Domain Events影子 呵呵),发送是异步的,非堵塞的(fire-and-forget),发送消息后不必等另外Actors回复,也不必暂停,每个Actors有自己的消息队列,进来的消息按先来后到排列,这就有很好的并发策略和可伸缩性,可以建立性能很好的事件驱动系统。

Akka有Scala API和Java API,Scala使用方式如下:

class MyActor extends Actor {
  def receive = {
    case "test" => println("received test")
    case _ =>      println("received unknown message")
  }
}

val myActor = new MyActor
myActor.start
myActor ! "test" //!表示发送消息
<p>

Actors非常轻量,大约600字节,这样4 G RAM可以容纳6.5 百万个Actors。

该文后面介绍了Akka的消息系统,个人感觉和JMS非常类似,如果你了解JMS,很容易理解,除此以外介绍了Scala的trait ,一种类似AOP的静态混合器Mixin。

[该贴被admin于2011-05-16 09:03修改过]

                   

5
banq
2010-01-08 15:36

继续大意翻译:

Akka的STM 和 Transactors模型

Actors 能够非常好解决性能问题,但是如果使用多线程状态共享机制去实现就非常糟糕,这就必须使用Software Transactional Memory 软件交易内存STM。

当你需要实现一个组合式的事务模型时,使用STM比较好,Akka的STM实现来自于 Clojure语言(把Scala和 Clojure结合起来了).

Akka允许你将Actors和STM结合起来,用Transactors 表达,你并不是一直都需要Transactors ,但是当你需要时,才使用它(和JTA类似),STM (组合式事务共享状态compositional transactional shared state) 提供事务性的, 组合的, 异步的, 基于事件的消息流程。

Akka提供三个事务抽象‘Map’, ‘Vector’ and ‘Ref’,你可以使用它们在Actors之间共享状态。当然,你不能在Transactors以外修改这些Actors,否则就报错(感觉是上了一把锁)

STM给你类似数据库ACID的ACI:‘Atomicity’, ‘Consistency’ and ‘Isolation’. 代表D的‘Durability’则因为是内存,无法实现,是持久化的事情。

Akka的持久化可以使用key-value存储,如Cassandra MongoDB Redis。

个人嘀咕:除了STM模型以外,Akka原理和我们倡导基于异步Domain Events + JMS架构差不多,当然Akka更简洁一些:

chinmole
2010-01-08 20:40

博主,能否介绍一下Akka与Scala有哪些具体的区别么?

banq
2010-01-08 21:10

2010年01月08日 20:40 "chinmole"的内容
Akka与Scala有哪些具体的区别么

基于Scala的API或者称为Scala框架。

当然,也提供Java框架,可以与Spring Guice整合。

nojava
2010-01-09 10:54

这才是scala嘛,lift web framework让我有点失望

3Go 1 2 3 下一页