2011-11-30 4 views
5

Akka와 Scala를 사용하여 고성능 분산 시스템을 구축하려고합니다.중복 메시지를 찾는 Akka 프레임 워크 지원

값 비싼 (그리고 부작용이없는) 계산을 요청하는 메시지가 도착하고 정확히 동일한 계산이 이미 요청 된 경우 결과를 다시 계산하지 않으려합니다. 이전에 요청한 계산이 이미 완료되어 결과를 사용할 수 있다면 캐시하고 재사용 할 수 있습니다.

그러나 중복 계산을 요청할 수있는 시간대는 임의로 작을 수 있습니다. 예 : 나는 모든 실제적인 목적을 위해 똑같은 순간에 똑같은 값 비싼 계산을 요구하는 천만 개의 메시지를 얻을 수있다.

이 상황을 처리하는 것으로 추정되는 Gigaspaces라는 상용 제품이 있습니다.

그러나 현재 Akka에서 중복 작업 요청을 처리하기위한 프레임 워크 지원이없는 것으로 보입니다. Akka 프레임 워크가 이미 프레임 워크를 통해 라우팅되는 모든 메시지에 액세스 할 수 있다는 점을 감안할 때 프레임 워크 솔루션은 여기에서 많은 의미를 가질 수 있습니다.

Akka 프레임 워크가 수행 할 제안은 다음과 같습니다. 1. 다음 캐싱 접근법의 적용을받는 메시지 유형 (예 : "ExpensiveComputation"또는 유사 함)을 나타내는 특성을 만듭니다. 2. 사용자가 구성 할 수있는 시간 창 내에서 동일한 (또는 다른) 액터가받은 동일한 메시지를 똑똑하게 (해싱 등) 식별합니다. 다른 옵션 :이 목적을 위해 사용되는 메모리의 최대 버퍼 크기 (예 : LRU) 대체 등을 선택하십시오. Akka는 처리 비용이 높은 메시지의 결과 만 캐시하도록 선택할 수도 있습니다. 처리하는 데 약간의 시간이 걸린 메시지는 필요한 경우 다시 처리 할 수 ​​있습니다. 소중한 버퍼 공간을 낭비 할 필요가 없습니다. 3. 동일한 시간대에 수신 된 (동일한 시간에 수신 된) 동일한 메시지가 식별되면 불필요한 중복 계산을 피하십시오. 프레임 워크는이를 자동으로 수행 할 것이고, 본질적으로 중복 메시지는 처리를 위해 새로운 액터에 의해 수신되지 않을 것입니다. 그들은 자동으로 사라지고 한 번 처리 한 결과 (해당 계산이 이미 완료되었거나 진행 중인지 여부)가 모든 적절한 수신자에게 전송됩니다 (이미 사용 가능한 경우 즉시, 그렇지 않은 경우 계산 완료시). "응답"필드가 다른 경우에도 메시지는 동일하게 간주되어야합니다. 단, 메시지가 나타내는 의미/계산은 다른 모든 측면에서 동일해야합니다. 또한 작동을 제안하고 전혀 프로그램 의미를 변경하지 않는 캐싱 최적화를 위해서는 계산이 순수하게 기능적이어야합니다 (예 : 부작용이 없어야 함).

내가 제안하는 바가 Akka의 일을하는 방식과 호환되지 않는 경우, 또는 이것이 매우 나쁜 생각 인 이유에 대해 알고 싶다면 알려 주시기 바랍니다.

감사합니다, 가 Akka 프레임 워크에 의존하지 입니다 무엇을 요구하고, 스칼라

답변