从架构原理和编码风格方面比较 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 )关注我们,并与我们的编辑和其他读者朋友交流。
评论