[java] Akka 클러스터링에서의 노드 자동 탐색

Akka는 분산 시스템에서 확장 가능한 액터 모델을 제공하는 데 사용되는 자바 및 스칼라 언어로 작성된 라이브러리 입니다. Akka 클러스터링은 Akka 액터 시스템을 사용하여 여러 호스트에 걸쳐 프로세스 함께 작동하는 클러스터를 구성할 수 있게 해줍니다.

클러스터 내의 노드는 서로 통신하고, 작업을 분산하여 처리 할 수 있어야 합니다. 이를 위해서는 클러스터의 모든 노드가 서로를 자동으로 탐색할 수 있어야 합니다. Akka는 노드 자동 탐색을 위한 몇 가지 메커니즘을 제공합니다.

기본 통신 매체

Akka 클러스터에서는 기본 통신 매체로 TCP 또는 UDP를 사용할 수 있습니다. 통신 매체는 클러스터 설정 파일에서 지정할 수 있습니다.

akka {
  actor {
    provider = "cluster"
  }
  remote {
    enabled-transports = ["akka.remote.netty.tcp"]
    netty.tcp {
      hostname = "127.0.0.1"
      port = 2551
    }
  }
  cluster {
    seed-nodes = [
      "akka.tcp://MyCluster@127.0.0.1:2551",
      "akka.tcp://MyCluster@127.0.0.1:2552"
    ]
  }
}

위의 설정 파일에서 akka.remote.netty.tcp를 사용하여 TCP를 통한 통신을 활성화하고, hostnameport를 각각 노드의 IP 주소와 포트 번호로 설정합니다. cluster.seed-nodes에 클러스터의 시드 노드들을 지정합니다.

노드 자동 탐색

Akka는 클러스터에 자동으로 참여하고 탈퇴하는 기능을 제공합니다. 이는 노드가 실행될 때 자동으로 탐색되고 클러스터에 참여하게 합니다. 노드는 클러스터에 참여하기 위해 구성 파일에 설정된 시드 노드들과 통신을 수행합니다.

자동 탐색을 위해 노드는 다음과 같은 코드 스니펫을 사용할 수 있습니다.

import akka.actor.ActorSystem;
import akka.cluster.Cluster;

public class ClusterNode {
    public static void main(String[] args) {
        ActorSystem system = ActorSystem.create("MyCluster");
        Cluster.get(system).registerOnMemberUp(() -> {
            System.out.println("Cluster member is up!");
        });
    }
}

위의 예시에서 ActorSystem을 생성한 후, Cluster.get(system).registerOnMemberUp() 메서드를 사용하여 클러스터에 참여하게 됩니다. 클러스터 가입 후 실행되어야 하는 작업을 람다 표현식으로 지정할 수 있습니다. 예를 들어, “Cluster member is up!” 문구를 출력하는 작업을 수행하도록 설정했습니다.

결론

Akka 클러스터링은 분산 시스템의 개발을 간편하게 만들어주는 강력한 라이브러리 입니다. 노드 자동 탐색 기능을 사용하면 클러스터의 다른 노드들과 손쉽게 통신하여 작업을 분산 처리할 수 있습니다.

참고 자료