Akka.Cluster 란?
- C#/Akka(Actor)
- 2022. 1. 11. 18:11
참조
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
'C# > Akka(Actor)' 카테고리의 다른 글
[Akka.NET] 액터 메시지 보내기 - Tell (1) | 2022.01.12 |
---|---|
[Akka.NET] 액터 생성하기 (1) | 2022.01.11 |
[C# Akka] Akka 기초 1-6 | 액터 라이프사이클(The Actor Lifecycle) (0) | 2021.06.17 |
[C# Actor] Akka 기초 1-5 | ActorSelection과 함께 주소로 액터 찾기 (0) | 2021.06.16 |
[C# Actor] Akka 기초 1-4 | 자식 액터, 액터 계층 구조, 그리고 감시(Supervision) (0) | 2021.06.15 |
이 글을 공유하기