Akka.Cluster 란?

참조


Cluster 란?

  • 클러스터는 단일 실패 지점이나 병목현상이 없는 Akka.NET 애플리케이션의 내결함성, 탄력적, 분산형, peer to peer 네트워크를 나타냅니다.
  • Akka.Cluster 는 애플리케이션을 생성할 수 있는 기능을 제공하는 모듈입니다.

Akka.Cluster 하는 역할

  • Akka.NET 애플리케이션의 P2P 네트워크를 쉽게 만들 수 있습니다.
  • 피어가 구성 변경없이 자동으로 새 노드를 검색하고 죽은 노드를 자동으로 제거할 수 있습니다.
  • 사용자 정의 클래스가 클러스터의 노드 가용성 변경에 대한 알림을 구독할 수 있습니다.
  • 클러스터 내에서 서로 다른 Akka.NET 애플리케이션을 구별하기 위한 역할 개념 도입
  • 클러스터형 라우터가 노드 가용성에 따라 경로 목록을 자동으로 조정한다는 점을 제외하고 기본 제공 Akka.NET 라우터의 확장인 클러스터형 라우터를 생성할 수 있습니다.

Akka.Cluster의 장점

  • 내결함성 : 클러스터는 장애에서 우아하게 복구됩니다.
  • 탄력적 : 클러스터는 본질적으로 탄력적이며 필요에 따라 확장/축소 할 수 있습니다.
  • 분산화 : 클러스터 전체에서 동시에 실행되는 특정 마이크로서비스 또는 애플리케이션 상태의 동일한 복제본을 여러 개 가질 수 있습니다.
  • 피어 투 피어 : 새 노드는 기존 피어에 연결하고 다른 피어에 대해 알림을 받고 구성 변경 없이 네트워크에 완전히 통합될 수 있습니다.
  • 단일 장애 지점/병목 현상 없음 : 여러 노드가 요청을 처리할 수 있어 처리량과 내결함성이 향상됩니다.

Akka.Cluster 과 Akka.Remote의 차이점

  • Akka.Cluster는 Akka.Remote 위에 있는 추상화 계층으로, Remoting이 특정 구조에 사용되도록 합니다.
  • 내부적으로 Akka.Remote는 Akka.Cluster에 전원을 공급하므로 Akka.Remote로 할 수 있는 모든 작업은 Akka.Cluster에서도 지원합니다.

핵심 용어

  • Node : 클러스터의 논리적 구성원입니다.
  • Cluster : 멤버십 서비스를 통해 가입된 노드의 집합입니다. 여러 Akka.NET 애플리케이션이 단일 클러스터의 일부가 될 수 있습니다.
  • Gossip : 클러스터 자체를 강화하는 기본 메시지
  • Leader : 클러스터에서 노드를 추가/제거하는 클러스터 내의 단일 노드입니다.
  • Role : 클러스터 내의 명명된 책임 또는 응용프로그램입니다. 클러스터에는 각각 고유한 역할이 있는 여러 Akka.NET 애플리케이션이 있을 수 있습니다. 노드는 동시에 0개 이상의 역할에 존재할 수 있습니다.
  • Convergence : 가십 메시지의 정족수가 클러스터 구성원의 상태 변경에 동의하는 경우

Cluster Gossip 이란

  • Cluster Gossip 개념은 노드가 구성 변경 없이 클러스터에 가입하고 탈퇴 할 수 있는 방법입니다.
  • Gossip은 클러스터의 노드 간에 전달되는 메시지의 지속적인 흐름으로, 클러스터의 각 구성원 상태의 클러스터 구성원을 업데이트 합니다.
  • 노드가 클러스터에 참여하려면 먼저 구성된 시드 노드 중 하나에 연결해야 합니다.
  • 하나의 시드 노드에 연결할 수 있게 되면 클러스터의 다른 구성원에 대한 정보가 포함된 Gossip 메시지를 수신하기 시작합니다.

  • B는 구성된 시드 노드 A에 접속하여 클러스터 가입을 요청합니다.
  • A는 B를 업으로 표시하고 클러스터의 다른 노드에 대한 가십 정보를 B와 공유하기 시작하지만 현재 연결된 다른 노드는 없습니다.
  • C는 A에게 연락하여 클러스터 가입을 요청합니다.
  • A는 C를 클러스터에 초대하고 노드 C와 가십 정보를 공유하기 시작합니다.
  • B와 C는 모두 노드 A에 의해 서로에 대해 알림을 받습니다.
  • B와 C는 서로 연결되어 통신을 설정합니다.
    • Gossip 메시지는 노드가 클러스터에 가입하거나 클러스터를 떠나거나 다른 노드에서 열결할 수 없는 경우와 같이 클러스터 구성원의 상태가 변경될 때마다 시간이 지남에 따라 정기적으로 발생합니다.

Cluster 형성 방법

  • 클러스터는 처음에 두 개의 별개 부분으로 구성됩니다.
    • 시드 노드 - 네트워크의 잘 알려진 위치에 있는 노드
    • 시드 노드가 아닌 노드 - 초기 위치를 알 수 없는 노드이며 이러한 노드는 클러스터를 형성하기 위해 시드 노드와 접촉합니다.

초기 클러스터 상태

  • A와 B는 모두 시드 노드이며, C,D,E 구성으로 주어진 IP 주소/포트 조합에서 수신 대기합니다.
  • A와 B는 또한 서로의 위치를 알고 있으므로 초기에도 서로 통신할 수 있습니다.

상태 1 - 클러스터 가입

  • 모든 노드는 초기에 시드 노드에 연결을 시도합니다. 이 경우 노드는 다음과 같이 구성됩니다.
    • E는 B에게 연락하는 방법을 알고 있습니다.
    • C와 D는 A에게 연락하는 방법을 알고 있습니다.
    • 그리고 A와 B는 서로 연락하는 방법을 알고 있습니다.

상태2 - 리더 선택, 노드 표시

  • 클러스터 내에서 초기 접촉 과정에서 리더가 선출됩니다. 이 경우 노드 A는 클러스터의 리더로 선택됩니다.
  • A는 A, B, C 및 D에 대해 알고 있는 노드부터 노드를 Up으로 표시하기 시작합니다.
  • A는 아직도 노드 E에 대해 모르기 때문에 Up으로 표시하지 않습니다.
  • 클러스터 구성원 자격에 대한 Gossip 정보가 모든 노드로 퍼지기 시작하고, 모든 노드가 서로 연결하여 메쉬 네트워크를 형성하기 시작합니다.

상태3 - Gossip 퍼지고, Ring 형성

  • Gossip이 모든 노드에 전파되고 지시선이 모든 노드를 Up으로 표시한 후, 모든 노드가 다른 모든 노드에 연결되고 클러스터가 형성됩니다.

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY