(유데미) 자바 분산처리 및 클라우드 컴퓨팅

 
Jan 26, 2023

Contents


분산 시스템이란?

💡
분산 시스템은 네트워크를 통해 서로 통신하며, 서로 다른 컴퓨터에서 실행되는 프로세스들로 이루어져 이들 간에 상태를 공유하거나 공동의 목표를 위해 함께 작업하는 시스템을 의미한다.

프로세스란?

  • 실행 가능한 파일을 메인 메모리에 적재함으로써 생성되는 인스턴스로, 프로세스마다 독립적인 메모리 영역을 가진다. 프로세스는 다른 프로세스의 메모리 영역에 접근할 수 없다.
    • 파일 시스템을 통해 간접적으로 프로세스 간 통신이 가능하다.
  • 그럼에도, 프로세스들은 여전히 같은 컴퓨터 내에서 실행되고 있기 때문에 분산 시스템이라고 부를 수 없다. 상태를 공유하는 프로세스들이 각각 다른 컴퓨터에서 돌아가고 있을 때, 이를 분산 시스템이라고 한다.
    • 이때 일부 컴퓨터가 작동 불능이 되어도 다른 컴퓨터들은 여전히 잘 동작하기 때문에, 연결된 네트워크가 원활하다면 평상시대로 분산 작업이 가능하다.

클러스터 코디네이션과 리더 선출 알고리즘

용어 정리

  • 노드 : 동작하는 시스템에서 실행하는 프로세스 (from 그래프 이론)
    • 네트워크 내부의 두 개 이상의 프로세스가 통신선을 매개로 통신함
  • 클러스터 : 서로 연결된 노드의 모음
    • 한 클러스터 내부의 노드들은 동일한 작업을 수행

애플리케이션 인스턴스의 분산 클러스터를 운용할 때 어려운 점

  • 클러스터 내부의 노드들은 자기 자신만을 인지할 수 있어, 다른 노드들의 상태를 인지하지 못하며 어떻게 통신하는지 모른다.
  • 각각의 노드는 다른 노드와 동일하므로, 대칭을 깨거나 클러스터 범위의 의사 결정이나 합의에 도달하기 어려울 수 있다. → 노드는 완전 동일해서 이들 간 합의가 제대로 이루어지지 않을 수 있다.
  • 클러스터를 이루는 노드는 언제 뻗을지 예측할 수 없어, 노드들에 각자 따로 작업을 부여하거나 자동으로 업무를 분산하기 어렵다.

클러스터 코디네이션

  • 왜 쓰는가?
    • 클러스터 코디네이션이 없다면, 클러스터 간 동기화를 위해 복잡한 로우레벨 알고리즘을 구현하고 적용해야 하므로 이 과정에서 오류가 발생할 수 있다.
    • 코디네이션을 적용하면 클러스터 내부의 노드들이 데이터를 주고받을 수 있고, 복잡한 알고리즘을 노드들이 분담하여 수행할 수 있다.
    • 클러스터는 작업을 병렬화하고, 각 노드가 공동의 목표를 위해 독립적으로 동작할 수 있게 하는 역할인데 이를 실현하게 하는 것이 바로 코디네이션이다.
  • 작업을 어떻게 노드들에 분배할 수 있는가?
    • 자동으로 하는데, 분배를 담당하는 마스터 노드를 둔다.
    • 마스터 노드는 클러스터에 참여하는 노드들이 스스로 선출한다.
    • 마스터 노드로 선출된 노드에 장애가 발생하거나, 연산을 제대로 수행하지 못할 경우 노드들은 새로운 노드를 선출한다. 이전에 마스터 노드로 선출되었던 노드는 일반 노드로써 역할을 계속하여 수행한다.
  • 아파치 주키퍼는 분산 코디네이터로, 클러스터를 관리하는 역할을 한다.

아파지 주키퍼의 이점

분산 시스템, 호환성 높음, 높은 가용성과 신뢰성
3개 이상의 노드로 이루어진 클러스터로 운용
시스템이 온전히 가동될 수 있도록 함
노드들이 주키퍼 서버와 직접적으로 통신
소프트웨어 추상화 구조와 데이터 모델 제공
트리 구조, Z노드
Z노드는 파일과 디렉토리 두 가지 성격을 띤다.
영구 Z노드 → 연결 끊어져도 유지되며 하위 데이터도 유지
임시 Z노드 → 연결 끊어지면 모든 데이터 사라짐

리더 선출 알고리즘

  1. 주키퍼와 연결된 모든 노드가 리더 후보에 자원
  1. 각 노드는 선거에 출마하게 위해 자신을 나타내는 Z노드들을 특정 노드의 하위 노드에 추가
  1. 할당된 각 Z노드들에게 할당된 하위 노드들의 수를 물어봄
  1. 할당된 하위 노드의 숫자가 가장 작으면 그 노드가 리더 노드로 선출됨