2011-11-04 130 views
1

我最近一直在研究Akka,它看起來像是一個用於在JVM上構建可伸縮服務器的好框架。但是,JVM上的大多數庫都是阻塞的(例如JDBC),所以不要因爲使用基於事件的模型而損失性能優勢,因爲線程總是被阻塞? Akka會做些什麼來解決這個問題?或者只是在JVM上獲得更多非阻塞庫之前,您必須忍受這種情況?akka/actor模型中的同步呼叫

回答

2

看看CQRS,它通過將讀取與寫入分離來極大地提高可伸縮性。這意味着您可以將讀取與您的寫入分開進行擴展。

0

由於您提到的IO阻塞問題類型,Scala提供了一種完美匹配的語言嵌入式解決方案:Futures。例如:

def expensiveDBQuery(key : Key) = Future { 
    //...query the database 
} 

val dbResult : Future[Result] = 
    expensiveDBQuery(...) //non-blocking call 

dbResult立即從函數調用中返回。結果將在「Future」中提供。關於未來的很酷的部分是,你可以像任何舊系列一樣思考它們,除非你永遠不會在未來中致電.size。除此之外,所有集合功能(例如map,filter,foreach,...)都是公平的遊戲。簡單地將dbResult視爲結果列表。你會怎麼做這樣的名單:

dbResult.map(_.getValues) 
     .filter(values => someTestOnValues(values)) 
     ... 

調用該序列設置的運算流水線,只要結果實際上是從數據庫返回被調用。在數據到達之前,您可以給出一系列計算步驟。全部是異步的。