2013-08-01 7 views
3

Akka를 사용하여 현재 개발중인 데이터 마이닝 알고리즘의 경우 Akka가 전송되는 메시지의 성능 최적화를 구현하는지 궁금합니다. 저도 같은 다른 배우에 메시지의 매우 많은 수를 방출하는 배우가있는 경우Akka 메시지 전송 성능 : 많은 작은 메시지 또는 작은 메시지?

예를 들어, 그것은 또 다른 큰 메시지로 메시지 집합을 캡슐화하는 것이 좋다? 또는 Akka는 일종의 버퍼를 가지고있어서 하나의 메시지가 아니라 많은 메시지가 네트워크를 통해 동시에 전송됩니다. 알고리즘은 전송 성능이 중요한 클러스터에서 원격으로 실행하기로하고 나는 현재 자신을 벤치 마크 단지를 수행 할 수있는 옵션이 없기 때문에

나는이 질문을하고있다. 동일한 시스템에 Akka 전달 메시지, 내가 생각하지 않습니다를 들어

+2

나는 100 % 확신, 그래서 내가 여기 틀릴 수도 있지만'를 통해 원격 배우에게 메시지를 보내 Akka 원격,와!'나'?', 그 메시지는 거의 즉시 전송됩니다. 일괄 처리 및 배치 설정 크기 또는 시간 (둘 중 먼저 발생하는 것)이 지난 후에 만 ​​보내고 싶다면, 직접 롤백해야 할 것입니다. 나는이 동일한 기능이 필요하고 스스로 롤링 할 계획이므로 내가 틀렸는지를 확인하는 데 관심이 있습니다. – cmbaxter

+0

좋아요, 일괄 처리를 구현하고 클러스터에 액세스하자 마자 시도 할 것입니다. 나는 나의 결과를 여기에 게시 할 것이다. –

+3

Akka 메시지에는 약간의 오버 헤드 (예 : 대상 액터 경로)가 있으므로 더 큰 메시지를 보내는 것이 좋습니다. 그러나 나는 "더 큰"것이 몇 킬로 바이트 범위에 더 가깝다고 생각합니다. 거대한 메시지를 보내지는 않을 것입니다. 메시지가 통과하는 동안 가능한 모든 다른 메시지가 지연되기 때문입니다. –

답변

2

는 작은 메시지 또는 하나의 메시지로 메시지의 집계를 사용하는지 많은 문제. 집계를 처리하는 동안 루프를 반복하는 대신 많은 호출의 추가 오버 헤드는 최소한으로 생각합니다. 시스템을 더 간단하게 유지하기 때문에 작은 메시지를 사용하는 것이 좋습니다.

는 네트워크를 통해 메시지를 보낼 때, Akka는 HTTP 사용하고 있으므로 따라서 단일 메시지로 일부 메시지를 집계하려면 여기를 선택할 수 등의 연결을 설정하기위한 추가 HTTP 오버 헤드 비용이 있습니다. 그러나 이것은 또한 사용 사례에 따라 다릅니다. 버퍼링은 충분한 시간 (또는 시간 초과가 발생할 때까지)을 기다리는 것을 의미합니다. 기다릴 수없는 경우 빠른 응답이 필요하기 때문에 각 메시지를 개별적으로 보내야합니다.

나는 메시지의 집합을하는 표준 Akka 액터가 없다고 생각합니다. 아마 특별한 종류의 라우팅이 버퍼링을 적용 할 수 있습니다.

또는 Akka Stream을 살펴볼 수 있습니다. 그것은 메시지의 버퍼링을 지원합니다.