2016-07-11 4 views
0

우리는 Akka 샤딩을 사용하여 실행중인 액터를 여러 노드에 분산시킵니다. 이러한 액터는 지속적이며 데이터베이스의 내부 상태를 유지합니다.Akka 액터 클러스터 내에서 샤드 마이그레이션 중 내부 상태

이제 각 노드에서 실행중인 "메트릭 액터"에 ActorRef를 추가해야합니다. 샤드의 각 액터는 텔레 메트릭 데이터를 메트릭 액터로 보내야합니다. 바로 동일한 노드에서 로컬로 실행중인 올바른 메트릭 액터를 선택해야합니다. 이유는 Metric 액터가 데이터 피어 노드를 수집하기 때문입니다. 배우의 일부로 ClusterSharding의 inicialisation에 해당 참조를

val mvMetrics : ActorRef = system.actorOf(MetricsActor("mv"), "mvMetrics")

다음 통과 오브젝트 소품의 :

지금, 나는 단지 (각 노드에서 처음 실행) 주요 방법 미터 배우를 만들 생각 :

ClusterSharding(system).start(
     typeName = shardName, 
     entityProps = MyShardActor.props(mvMetrics), 
     settings = ClusterShardingSettings(system), 
     extractEntityId = idExtractor, 
     extractShardId = shardResolver) 

내 질문은 그러한 생성 된 액터가 노드간에 이동하는 경우 어떻게됩니까? 노드 A에서 B로? 노드 B의 마이그레이션 된 소품 객체가 노드 A와 동일하게 유지되므로 ActorRef가 동일하게 유지되므로 새로 생성 된 액터가 원래 노드 A로 메트릭 데이터를 전송할 것입니다.

감사합니다.

답변

1

ActorRef.path를 어떻게 활용합니까? 각 노드가 특정 방식으로 명명 된 액터를 가지고 있다고 가정하면 액터는 경로를 사용하여 관련 메트릭 액터를 동적으로 찾습니다.

+0

그래, 내 두 번째 아이디어, 모니터링 배우의 노드 종속적 인 이름을 가지고 Shard 액터에서 동적으로 평가. 나는 누군가가이 문제를 다르게 해결했다면 궁금하다. 클러스터에서 마이그레이션하는 동안 샤드 내에서 배우의 소품이 어떻게 처리되는지 정말로 관심이있다. :) –

관련 문제