2011-11-04 133 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)) 
     ... 

调用该序列设置的运算流水线,只要结果实际上是从数据库返回被调用。在数据到达之前,您可以给出一系列计算步骤。全部是异步的。