RemoteActor와 Router을 통해서 노드수가 고정된 분산 어플리케이션을 만드는 방법을 알게되었습니다.

하지만 이것만으로 충분하지 못합니다. 운영중 노드개수를 유연하게 조정하거나

부분장애발생시 전체시스템에 영향이 없는 시스템이 필요로하게되며

감시하고 제어할수 있는 그러한 환경이필요하게됩니다. 그것이 Cluster이며

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가 어떻게 서로 알게되는지를 중요하게 생각해야 합니다.

위 과정에서 반대의 과정, 즉 C가 해당 노드에서 의도적이든 아니든(장애) 해당노드에서 사라지게 되면 

'C가 퇴근을 했대' 란  잡담과정을 거치면서 , 모든 노드가 C가 사라짐을 알게되며

남은 노드끼리 자신들에게 주어진 역할을 수행하게 됩니다.


 역활에 지정된 라우터가 라운드 로빈이면, C를 제외하고 순차 작동이되고  브로드 캐스팅이라고 하면 C를 제외하고

전체 메시지를 보내게 될것입니다.


Seed Node

새로운 노드가 클러스터에 합류하고, 다른 모든노드도 공유가 필요할시

시드노드가 필요하며 주소처를 알아야합니다. 시드노드는 모든 노드의 연락처가 담겨있으며

공유(Gossip)를 시도합니다.

업데이트 시나리오에서 모든 SeedNode가 교체되어 Down이 되어야하는경우 위에서 설명한

Gossip(잡담)이 멈출수 어서, 이후에 가입한 새로운 노드가 인식이 안될수도 있습니다.

즉 업데이트 순서를 고려하여, 노드를 내리고 올려야되는 단점이 있으며

이럴경우 기능이 없고 등대역활만 하는 시드노드를 사용하여 시드노드 Downd없이

업데이트 상황에 대처할수 있습니다. 추가로 시드노드는 다수개 설정이 가능합니다.

현재는 이러한게 있다라고만 인지하고 넘어가겠습니다.


등대역활을 하는 Seed설계방법 : LightHouse

Kafka를 사용해보셨다면, 등대는 Zookeeper가 가진 기능중 하나의 역활을 합니다.

동물사육사(zooKeeper)는 모든 동물들의 상태를 관리합니다. 아파치의 분산메시지

시스템및 저장시스템이이 모두 동물이름이란것입니다.

  • No labels
Write a comment…