2011-11-04 3 views
1

최근 Akka를 살펴 보았고 JVM에서 확장 가능한 서버를 구축하기위한 훌륭한 프레임 워크처럼 보입니다. 그러나 JVM에있는 대부분의 라이브러리가 블로킹 (예 : JDBC)하므로 스레드가 항상 차단되므로 이벤트 기반 모델을 사용하면 성능상의 이점을 잃지 않으십니까? 아카는이 문제를 해결하기 위해 어떤 일을합니까? 아니면 JVM에서 더 많은 non-blocking 라이브러리를 얻을 때까지 살아야만 할 것입니까?akka/actor 모델의 동기 호출

답변

2

CQRS를 보면 쓰기와 읽기를 분리하여 확장 성이 크게 향상됩니다. 즉, 쓰기 작업과 별도로 읽기 작업을 확장 할 수 있습니다.

0

당신이 언급 한 IO 블로킹 문제 유형으로 스칼라는 완벽하게 일치하는 언어 임베디드 솔루션을 제공합니다 : 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)) 
     ... 

호출의 순서는 결과가 실제로 데이터베이스에서 반환 될 때마다 호출되는 연산 파이프 라인을 설정합니다. 데이터가 도착하기 전에 일련의 계산 단계를 제공 할 수 있습니다. 모두 비동기식입니다.