Cluster를 소개하는 가장 좋은 방법은 Cluster가 해야할 역할에대해 간략하게
소개하는것입니다.
Cluster의 역할
- 구성 변경없이 새노드를 자동으로 검색하고 추가하며, 죽은 노드를 자동으로 제거함
- 클러스터의 노드 가용성 변화에 대한 알림을 구독할수 있게함
- 다양한 라우터를 지원하는 '역할' 할당으로 성능 분산에 대비하며 각각은 다른 성능 전략을 세울수 있습니다.
Cluster 에 사용되는 용어
- Node : 클러스터의 논리 구성원 입니다.
- Cluster : 멤버쉽 서비스를 통해 조인된 노드의 집합입니다.
- Gossip : 클러스터를 유지할수 있는 , 자동적으로 발생하는 메시들(잡담) 입니다.
- Leader : 멤버의 추가/삭제의 책임을 맞는 클러스터내의 단일노드입니다.
- Role : 클러스터 내의 명명된 책임으로 어플리케이션마다의 고유한 역활 정의
- Convergence : 클러스터 멤버의 상태변화 결정을 위한 수렴 메시지(잡담을 통한 단순 다수결)
Akka Cluster의 이점
- Fault-tolerant(결함허용) : 클러스터는 장애를 우아하게 복구합니다.
- Elastic(탄력성) : 클러스터는 본질적으로 필요에따라 확장/축소 할수 있습니다.
- Decentralized(분산형) : 동시에 실행되는 마이크로서비스 또는 여러개의 프로그램상태에대해 복제본을 가질수 있습니다.
- Peer-To-Peer : 새로운 노드는 구성 변경없이 네트워크에 완전히 통합될수 있습니다.
- 단일지점 실패/단일 병목 없음 : 여러 노드가 요청을 처리하여 병목현상이 없으며 특정 지점의 실패에대해 다른 노드를 통해 대비할수 있습니다.
Cluster Gossip(잡담) 살펴보기
새로운 노드가 추가되고, 삭제되고 이러한 과정이 어떻게 구성변경없이 처리가 되는지 이해하려면
클러스터내의 노드끼리 Gossip(잡담)을 한다는것에 주목을 해야합니다. 유동적인 클러스터를 유지하기위해서
각 노드들은 알아서 구성원 변경에대한 메시지를 자동으로 주고 받습니다. 이것에대한 설명을 쉽게 하기위해
Gossip(잡담) 이라고 합니다.
- 0: 우선 Seed를 가지고 있는 A-Leader가 있다고 합시다. ( Seed역시 자동으로 변경이 가능하나, 여기서는 고정하겠습니다.)
- 1: B노드가 A에 가입을 합니다.
- 2: 가입완료시 A노드는 이미 가입된 다른 노드를 알려주려고 합니다. ( 아직은 없으나)
- 3: C노드가 A에 가입을 합니다.
- 4,5 : 역시 다른 노드를 알려주고, B-C 너희둘이 같은멤버이며 소개를 시켜줍니다.
- 6 : B,C의 자동 연결이 성립됩니다.
위와같은 과정을 거치며 우리는 6번에서 중요한 포인트를 짚어내어야 합니다. B-C간 연결 설정을 전혀 하지 않았지만
클러스터의 잡담 과정을 거치면서 서로를 알게되고 연결이 된다는것입니다. A,B,C가 동일한 역활을 하는 것이라고 하면
C가 갑자기 퇴근을 하더래도, 'C가 칼퇴했어~ 나쁜놈' 이란 잡담과정을 거치면서 A또는 B가 역활을 수행할수 있는것입니다.