从高层次并发角度比较 AkkaActor 和 JavaEJB

  • Jan Stenberg
  • 王振峰

2014 年 3 月 5 日

话题:语言 & 开发架构

从架构原理和编码风格方面比较Akka Actor 和Java EE 7 EJB,尤其是无状态会话 Bean 和 JMS 消息驱动 Bean,既有共同点,如三种类型都支持垂直和水平扩展。又有不同点,例如对异常和事务的处理方面。这是 Gerald Loeffler 博士在最近的一次介绍性讲座中,从高层次并发角度解释和比较这三种方式后作出的总结。

Gerald 是一名高级集成架构师,在此次讲座中,他将高层次并发定义为一种编程范式,在组件级别处理并发,并且要尽可能地向上抽象,使其与处理单个线程或任务以及向线程池提交等具体操作解除耦合。

他围绕着Active Object 设计模式思想展开演讲,该模式与传统设计模式相对独立,但是思想是相同的。演讲中的案例使用 Scala 语言,但是他认为所讲内容 Java 也适用。

对于 Gerald 来说,从 Active Object 角度,有一个简单的心智模型:

  • Akka Actor接收任意对象形式的消息,并以队列形式存储在邮箱中。通过统一的接口分别管理和定位这些消息。
  • 无状态会话 Bean暴露在应用服务器中执行的异步方法,由容器控制其生命周期。
  • JMS 消息驱动 Bean从 JMS 队列 / 主题中接收和处理预定义类型的消息。和会话 Bean 类似,该类型的 Bean 也由容器管理。

这三种类型的相同点是由线程异步执行,线程一般从线程池中获取,对同一个实例顺序访问。

Gerald 使用以下三种模式对这三种类型进行了比较,并配有相应的代码案例:

  • 本地单向异步请求,请求者向响应者发送异步请求,而响应者不会响应请求。
  • 请求异步上下文外请求,请求者向响应者发送消息,响应者响应请求并返回消息,请求者接收到消息后需要重建上下文。
  • 请求异步上下文内请求,当接收返回消息时,请求者通过某种方式已经保存了上下文。

最后,Gerald 简短地总结了这三种类型的相同点,如三种类型都使用线程池,支持垂直和水平扩展,以及不同点,如异常处理,监督策略和事务处理。

Akka是一款开源工具包和运行环境,用于在 JVM 中构建并发和事件驱动型应用。 企业 Java Bean,即 EJB,是 Java EE 标准的一部分,目前版本是Java EE 7

查看英文原文:Akka Actors vs. Java EJBs from a High-Level Concurrency Perspective


感谢邵思华对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

语言 & 开发架构