HEROJOON 블로그(히로블)

Zookeeper란 본문

Backend

Zookeeper란

herojoon 2024. 5. 30. 17:29
반응형

Zookeeper란

: Zookeeper는 Apache 재단에서 만든 분산 애플리케이션을 위한 중앙 집중식 고성능 조정 서비스입니다.
 

Zookeeper 특징

Zookeeper 공식 문서에 나와있는 Zookeeper의 특징은 아래와 같습니다.


1. ZooKeeper is simple.  Zookeeper는 단순하다.

  • 주키퍼는 표준 파일시스템 기반과 유사한 트리 구조의 공유 계층적 데이터 모델을 제공합니다.
    • 이 구조는 데이터 저장과 접근방식에 대해 직관적으로 이해 가능하게 합니다.

2. ZooKeeper is replicated.  Zookeeper는 복제된다.

  • 주키퍼는 서비스 일관성과 안정성, 높은 가용성을 위해 리더 서버가 나머지 서버에 데이터와 상태 정보를 복제합니다.

3. ZooKeeper is ordered.  Zookeeper는 순서가 있다.

  • 주키퍼의 클라이언트 요청 작업은 순서대로 처리됩니다.

4. ZooKeeper is fast.  Zookeeper는 빠르다.

  • 주키퍼의 데이터는 메모리에 저장되기 때문에 디스크에서 읽는 것보다 높은 처리량과 낮은 대기 시간을 제공합니다.
  • 주키퍼의 리더-팔로워 아키텍처(Leader-Follower Architecture) 구조는 리더 서버에서만 읽기 처리를 하는 것이 아니라 리더 서버와 다른 서버에서도 읽기 처리를 가능하게 하기 때문에 읽기 속도가 빠릅니다.

 

Zookeeper 데이터 모델

트리 구조의 공유 계층적 네임스페이스 구조를 제공합니다.

zookeeper 데이터 모델

 

  • Znode(노드)
    • 주키퍼의 데이터 단위는 노드입니다. 데이터가 저장되는 단위입니다.
    • 주키퍼(Zookeeper) z + Node 해서 주키퍼는 데이터 단위를 znode로 부릅니다. 
  • Path(경로)
    • 주키퍼의 데이터 모델은 단순합니다. /으로 데이터가 저장된 경로(위치)를 구분합니다.
    • /(루트 경로) 아래로 파일 시스템의 디렉토리와 파일 구조와 유사하게 사용하면 됩니다.
    • ex) /app/data

 

Zookeeper znode 모드


<다양한 모드 지원>
znode는 영구적이거나 임시적으로 저장할 수 있습니다.
즉, znode는 영구적 저장, 임시적 저장의 모드를 지원합니다.
 

  • 영구적으로 저장일 경우
    • znode는 영구적으로 저장되며 삭제를 원할 시 delete API를 호출하여 삭제할 수 있습니다.

 

  • 임시적 저장일 경우
    • znode는 임시적 성격으로 저장되며 znode를 생성한 클라이언트 연결이 끊어지거나 클라이언트에 장애가 발생할 경우 삭제됩니다.

 
주키퍼는 znode의 저장 방식 외에 순차적 znode를 제공합니다.
순차 znode는 유니크한 값을 갖는 순차적 정수가 할당되어 생성됩니다.
 
<요약>
znode는 저장 방식과 순차 여부의 옵션을 제공하여
영구 znode, 임시 znode, 영구 순차 znode, 임시 순차 znode 모드를 지원합니다.


 

Zookeeper 아키텍처

주키퍼의 서버 구성은 단독 모드쿼럼 모드를 지원합니다.


  • 단독 모드
    • 하나의 서버로 구성됩니다.
    • 주키퍼의 데이터와 상태가 복제되지 않습니다.

zookeeper_단일모드

  • 쿼럼 모드
    • 여러 서버로 구성됩니다.
    • 앙상블이라고 부르는 서버 호스트그룹에서 서버의 데이터와 상태가 복제됩니다.

zookeeper_쿼럼모드

 


 

Zookeeper 사용은 어디에?

주키퍼는 코디네이션 서비스(coordination service)입니다.
코디네이션 서비스는 분산 서비스들이 중요한 구성 정보나 상태, 설정 정보를 저장하고 관리하는 용도로 사용되는 서비스를 뜻합니다. 주키퍼도 이러한 용도로 사용됩니다.
주키퍼는 주요 정보들을 일관성 있게 제공하기 위해 리소스를 동기화하는데 이를 위해 분산락의 개념을 제공합니다.
다수의 클라이언트 접근 시 클라이언트가 락의 순번을 획득하여 리소스 접근 후 락을 해제합니다.
그리고 다른 클라이언트가 다음 락을 획득하여 리소스에 접근 후 락을 해제합니다.
이런 방식으로 주키퍼는 리소스에 대한 다중 접근을 제거하여 리소스의 혼란을 방지합니다.
 
ex) 다른 언어의 서비스들이 공용적으로 사용하는 상태 데이터를 저장하는 용도로 사용됩니다.
ex) 주키퍼는 kafka의 브로커를 조정하고 관리하는 용도로도 사용됩니다.
 

Zookeeper API

주키퍼의 디자인 목표는 쉬운 인터페이스를 제공하는 것도 있습니다.
그래서 Zookeeper의 API는 단순한 형태로 지원됩니다.
 

  • create : 트리의 특정 위치에 노드를 생성합니다.
  • delete : 노드를 삭제합니다.
  • exists : 노드가 특정 위치에 존재하는지 확인합니다.
  • get data : 노드의 데이터를 읽습니다.
  • set data : 노드에 데이터를 씁니다.
  • get children : 노드의 하위 목록을 검색합니다.
  • sync : 데이터가 전파되기를 기다립니다.

 
 
 
참고 링크: https://zookeeper.apache.org/doc/r3.9.2/zookeeperOver.html

반응형
Comments