[Akka.NET]Akka.Remote 란?

참조

 

목적

  • Akka.Cluster 를 학습하기에 앞서, Akka.Remote 개념을 선행으로 익혀야 한다고 판단이 들어 Akka.Remote 내용 학습 및 정리합니다.

 

Akka.Remote 개요

  • Akka.Remote 의 ActorSystem은 컴퓨터 네트워크를 통해 여러 프로세스에 걸쳐 구축할 수 있는 기능을 제공하기 때문에 이러한 모든 추가 패키지 중에서 가장 강력한 기능입니다.

 

Akka.Remote의 기능

  • Location transparency with RemoteActorRef : 로컬 액터와 통신하는 것처럼 보이는 코드를 작성하지만 몇가지 구성 설정만 있으면 액터가 코드에 완전히 위치 투명한 방식으로 원격 프로세스에서 호스티오디는 액터와 통신을 시작할 수 있습니다.
  • Remote addressing : Akka.Remote는 Akka.NET의 Address 및 ActorPath 구성 요소를 확장하여 원격 프로세스에 연결하는 방법에 대한 정보도 포함합니다.
  • Remote messageing : 네트워크의 다른 곳에서 원격으로 실행 중인 행위자에게 투명하게 메시지를 보냅니다.
  • Remote deployment : 액터를 네트워크 어느 곳에서나 원격 인스턴스에 원격으로 배포합니다. 네트워크에서 액터의 위치는 Akka.Remote에서 배포 세부 정보가 됩니다.
  • Multiple network transports : 즉시 사용 가능한 Akka.Remote는 TCP 지원과 함께 제공되지만 타사 전송을 플러그인하고 동시에 여러 전송을 활성화할 수 있습니다.

 

Peer-to-Peer vs Client-Server

  • Akka.Remoting은 액터 시스템을 P2P 방식으로 연결하기 위한 통신 모듈이며 Akka 클러스터링의 기반입니다.
  • 원격 설계는 두 가지 설계 결정에 따라 결정됩니다.
    • 관련된 시스템 간의 통신은 대칭입니다. 시스템 A가 시스템 B에 연결할 수 있으면 시스템 B도 시스템 A에 독립적으로 연결할 수 있어야 합니다.
    • 통신 시스템의 역할은 연결 패턴과 관련하여 대칭입니다. 연결만 수락하는 시스템도 없고 연결만 시작하는 시스템도 없습니다. 이러한 결정의 사전 정의된 역할과 네트워크 주소 변환 또는 로드 밸런서와 관련된 설정을 사용하여 순수한 클라이언트 - 서버 설정을 안전하게 생성할 수 없습니다.

 

Akka.Remote 활성화 방법

  • Akka.Remote 활성화 하는 방법은 다음과 같습니다.
    • Install Akka.Remote NuGet Package
    • Configure RemoteActorRef Provider
    • Enable at least 1 transport
    • Configure address for each transport
    • Start ActorSystem
  • 먼저 다음과 같이 Akka.Remote NuGet 패키지를 설치해야 합니다.
  • PS> Install-Package Akka.Remote
  • 다음으로 RemoteActorRefProvider 내부 HOCON 구성을 활성화 하고 전송을 액세스 가능한 IP 주소 및 포트 조합에 바인딩합니다.
  • 아래는 그 예입니다.
  • akka { actor { provider = remote } remote { dot-netty.tcp { port = 8080 hostname = localhost } } }

 

Address, Transports, Endpoints, and Associations

  • Akka.Remote를 사용하기 위해 익숙해져야 할 몇 가지 핵심 용어를 정의합니다.
    • Transports : 전송은 TCP 또는 UDP와 같은 실제 네트워크 전송을 나타냅니다. 기본적으로 Akka.Remote는 DotNetty TCP 전송을 사용하지만 다른 프로토콜도 사용할 수 있습니다.
    • Address : 다른 IP 지원 프로토콜과 마찬가지로 IP 주소와 포트 조합을 나타냅니다. IP 주소 대신 호스트 이름을 사용할 수도 있지만 먼저 호스트 이름을 IP 주소로 확인해야 합니다.
    • Endpoints : "끝점" 은 전송에 대한 특정 주소 바인딩입니다.
    • Associations : 서로 다른 두 끝점 간의 연결입니다.

 

원격 시스템 간의 연결 형성하는 방법

Clinet 구성 정보

akka {  
    actor {
        provider = remote
    }
    remote {
        dot-netty.tcp {
            port = 0 # bound to a dynamic port assigned by the OS
            hostname = localhost
        }
    }
}

 

Server 구성 정보

akka {  
    actor {
        provider = remote
    }
    remote {
        dot-netty.tcp {
            port = 8081 #bound to a specific port
            hostname = localhost
        }
    }
}

 

ActorSystem 원격 주소 지정

  • remote와 연관을 형성하려면 이에 맞는 ActorSystem이 있어야 합니다.
  • 로컬 ActorPath 모습은 다음과 같습니다.

  • ActorPath는 다음 네 부분으로 구성됩니다.
    • Protocol : 액터와 통신하는데 사용되는 프로토콜을 정의합니다. 기본 로컨 프로토콜은 메모리 내 메시지 전달입니다.
    • ActorSystem : ActorSystem이 액터가 속한 이름
    • Address : 프로토콜을 통해 이 액터와 통신하는데 사용할 수 있는 인바운드 끝점을 나타냅니다.
    • Path : 계층 구조에서 이 액터의 경로를 나타냅니다.
  • 원격에 연결하려는 ActorSystem 경우 주소데 두 가지 중요한 변경 사항이 발생합니다.
    • 프로토콜은 네트워크 전송 프로토콜로 확장됩니다. 여기서는 DotNetty TCP를 사용하므로 ActorSystem의 모든 원격 행위자와 통신하기 위한 프로토콜을 akka://에서 akka.tcp://로 변경합니다. 액터 선택을 통해 원격으로 액터를 배포하거나 원격 액터에게 메시지를 보낼 때 이 프로토콜을 지정하면 로컬 액터 시스템에 이 메시지를 원격 액터 시스템으로 전달하는 방법을 알 수 있습니다!
    • 이 경우 주소는 전송의 인바운드 끝점(localhost:9001)으로 채워집니다. 이를 통해 로컬 시스템에서 원격 동작에 대한 아웃바운드 엔드포인트 설정을 시도하는 방법을 알 수 있습니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY