高階併發:Akka Actors和JavaEE7的EJB比較

banq發表於2014-03-01


隨著Facebook 190億美金收購WhatsApp,其背後的Erlang語言受到關注,本質上Erlang的新型物件訊息模型被抽象為Actors模型,作為Actors模型的Akka框架有Java和Scala兩個版本,最近,Dr Gerald Loeefler在2014年LSUG大會發表了從Java併發的高階層次將Actors模型與Java EE7的Enterprise JavaBeans,特別是無狀態的會話bean和JMS的訊息驅動bean進行比較,它們之間是有共性。

作為一個高階整合架構師,應該在程式正規化的高階層次定義併發,基於元件級別的併發,並且儘可能地避免涉及執行緒概念以及執行緒池等底層概念。

該談話圍繞了 Active Objects(活動物件)設計模式,從活動物件模式角度看,這兩種併發元件模型有如下特點:

1. Akka Actors :接收任意物件的訊息,透過郵箱排隊方式。這些訊息被一個公共介面被明確管理和定位

2.無態會話bean: 暴露非同步方法,在應用伺服器中執行,由容器管理其生命週期管理。

3.JMS訊息Bean: 接受處理來自JMS queue/topic的訊息. 這些訊息是容器管理的,類似會話Bean

這三者的共性都是來自一個執行緒池的執行緒非同步執行,能夠依次訪問同一個例項。

Gerald使用了三個模式總結這三個型別:
1.本地單向非同步請求Local One-Way Asynchronous Request:
從請求者傳送一個非同步請求到應答者,應答者不會回應。

2.超越上下文的非同步請求Request Asynchronous Out-of-Context Request ,請求者傳送一個訊息給響應者,響應者發回返回訊息,當請求者接受到響應以後必須重新建立上下文。

3.上下文內的非同步外請求Request Asynchronous In-Context Request 當返回訊息被請求者接受後,當時的上下文也被保留下來。

具體Actors模型講解:http://www.jdon.com/actors.html

點按標題檢視該英文PDF,文件中使用Scala程式碼演示了Actors和無態Bean以及MDB的三種模式實現。

總結:三種方法都使用執行緒池,並能夠垂直和水平縮放,重要的差異體現在:異常處理,主管策略和事務處理。

相關文章