Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

draw.io Board Diagram
bordertrue
diagramNamecluster
simpleViewerfalse
width
linksauto
tbstyletop
lboxtrue
diagramWidth621
revision1

클러스터 내에서는 PubSub을 브로드캐스트 방식을 사용하지 않고도 , 정확하게 구독한 객체에게 전송이 가능하며

이것이 가능한 이유중에 하나는 클러스터내에서 P2P 전송을 지원하며 물리적 주소를 알 필요없이 Key와 같은

가장 작은단위의 메시지 전송방식은 보낼대상 지점을 통해 P2P 전송이 가능합니다.

실제 중간지점의 전송계층을 경유하지 않고 클러스터내 Node내 액터간 1:1 통신을 할수 있으며 물리적인 위치를 알필요없이 위치투명성을 이용합니다논리적으로 생성한 주소만으로 원격지의 객체에게 이벤트 전송을 할수있습니다.


클러스터 테스트 코드

Code Block
themeEmacs
// A와 B는 다른 포트로 구성된 Node입니다.
testKitA = ActorTestKit.create("ClusterSystem",cluster1)
testKitB = ActorTestKit.create("ClusterSystem",cluster2)

    @Test
    fun testClusterRouter(){
		//테스트를 위한 준비코드
        val probeA = testKitB.createTestProbe<Receptionist.Listing>()
        val probeB = testKitB.createTestProbe<HelloActorAResponse>()

        var list = testKitB.system().receptionist()
        list.tell(Receptionist.find(ClusterHelloActorA.ClusterHelloActorAKey, probeA.ref))
        val listing = probeA.receiveMessage() 
		

		//실제 활용되는 코드
        val router = listing.getServiceInstances(ClusterHelloActorA.ClusterHelloActorAKey)

        router.forEach {
            it.tell(HelloA("Hello", probeB.ref))
            probeB.expectMessage(HelloAResponse("Kotlin"))
        }
    }
  • val router : 위치 투명성이 있는 객체로 클러스터를 접근하는 논리적인 키만 알고 있으면 시스템내에 생성이 가능하며 논리적인 키를 보유한 원격지 액터에게 전송이 가능합니다.
    • ClusterHelloActorAKey 라는 논리적  키로
    • ClusterHelloActorA.ClusterHelloActorAKey 라는 논리적 주소만으로, B 시스템에서 A 시스템에 구성된 액터에게 이벤트를 보내고 응답을 받는 샘플입니다.

...

이를 바탕으로 단위별 비교 표를 작성하겠습니다.

이벤트 수상태없는 Pub/Sub 전송 수상태있는 액터 클러스터 전송 수Akka 분산 Pub/Sub 전송 수
110,0101,01051
10100,10010,100510
1001,001,000101,0005,100
1,00010,010,0001,010,00051,000
10,000100,100,00010,100,000510,000
100,0001,001,000,000101,000,0005,100,000

분석 및 결론

  • 상태없는 Pub/Sub는 여전히 모든 이벤트를 모든 사용자에게 브로드캐스트하기 때문에 네트워크 트래픽이 매우 높습니다. 중간 장치가 있더라도, 단순한 중계 역할만 하기 때문에 네트워크 전송 수에 큰 영향을 주지 않습니다.
  • 상태있는 액터 클러스터는 상태 기반 필터링을 통해 전체 이벤트의 약 10%만 최종 사용자에게 전달되므로, 상태없는 Pub/Sub에 비해 네트워크 전송 수가 크게 줄어듭니다.
  • Akka 분산 Pub/Sub는 필터링과 구독 그룹을 통해 추가적으로 10배의 네트워크 트래픽 절감 효과가 있으며, 중간 장치에서도 필터링이 적용되므로 네트워크 전송 수가 가장 낮습니다.

...