본문 바로가기
개발관련 자료

쥬키퍼(ZooKeeper) #1 - 개요 및 특징

by jinu957 2020. 6. 11.
728x90

이번 포스팅에서는 작년 기상청 프로젝트에서 프로세서들을 관리하는 툴이 필요하여 ZooKeeper가 검토되었고 그때 자료조사를 한 내용를 올리도록 하겠습니다.

 

순서는 

 

2020/06/11 - [개발관련 자료] - ZooKeeper #1 - 개요 및 특징

2020/06/11 - [개발관련 자료] - ZooKeeper #2 - 데이터모델

2020/06/11 - [개발관련 자료] - Zookeeper #3 - 사용

 

으로 진행되며 도입 검토 차원에서 이루어진 조사라서 실무적용 보다는 ZooKeeper란 어떤 것인지 파악하는 정도로만 생각하시면 될듯합니다.

 


1.  배경

 

  • 본래 hadoop의 서브 프로젝트였던 ZooKeeper는 hadoop의 분산 어플리케이션을 관리하는 코디네이션 어플리케이션으로 사용되었다. (hadoop 생태계의 프로젝트들이 대부분 동물의 이름으로 네이밍 되어 있어서 동물을 관리하는 사육사로 ZooKeeper라는 네이밍 되었다는 이야기가 있음)
  • 분산처리 환경에서는 기본적으로 서버가 몇 대에서 수십 대, 수백 대까지도 갈 수 있다.
  • 이런 분산처리 환경에서는 예상치 못하는 예외적인 부분이 많이 발생하게 되는데 주로 네트워크장애, 일부 서비스/기능이 예상치 못한 처리로 중지나 장애, 서비스 업그레이드, 서버 확장 등에 문제가 발생할 수 있다.
  • 이러한 문제를 해결하는 시스템을 코디네이션 서비스 (cordination service)라고 하는데, Apach Zookeeper가 대표적이다.

 

 

2.  ZooKeeper란?

 

  • 주키퍼는 분산 시스템을 위한 오픈소스 분산 코디네이션 서비스이다.
  • "분산 시스템"이란 복수의 컴퓨터가 네트워크를 통해 통신하며 하나의 목적을 위해 서로 간에 상호작용하는 것이다. 다수의 컴퓨터가 마치 하나인 것처럼 동작하는 시스템인 것이다.
  • 분산 시스템을 구성할때 고려해야 할 사항들은 네트워크의 신뢰성, 지연, 대역폭, 안전성, 토폴로지에 대한 고려, 전송 비용, 네트워크 유형 등 고려해야 할 사항이 많다. 분산 서버들 간의 정보 공유, 동기화 분산 서버들의 상태 확인 등이 필요하다.
  • 분산 컴퓨팅에서 코디네이션의 예는 그룹 멤버십(Group Membership), 잠금제어(Locking), 공급/구독 (Publisher/ Subscriber), 리더선정(Leader Election), 동기화(Synchronization)등이 될 수 있다.
  • 주키퍼는 클러스터 구성원 간의 데이터 공유를 위한 데이터 스토리지(영속 데이터/임시 데이터), 클러스터 멤버십 관리를 통한 데이터 변경 통지(Watch), 마스터 및 분산 Lock 등에 활용되는 시퀀스 노드 등을 제공한다. 이를 통해서 다음에 활용할 수 있다.

              1) 설정 관리 (Configuration Management)

              2) 분산 클러스터 관리 (Distributed Cluster Management)

              3) 명명 서비스 (Naming Service: e.g. DNS)

              4) 분산 동기화 (Distributed Synchronization : locks, barriers, queues)

              5) 분산 시스템에서 리더 선출 (Leader election in a distributed system)

              6) 중앙집중형 신뢰성 있는 데이터 저장소 (Centralized and highly reliable data registry)

   

        주키퍼는 중앙화된 분산 코디네이터 클러스터라고 볼 수 있다.

 

 

  • 주키퍼는 프로그래밍하기 쉽게 설계되었으며, 데이터 모델은 file system의 디렉토리 트리구조와 유사해서 친숙하다. 또한 Java나 C 모두 바인딩이 쉽다.
  • Apacche Zookeeper는 디렉토리 구조기반으로 znode라는 데이터 저장객체를 제공하고, (key-value식) 이 객체에 데이터를 넣고 빼는 기능만을 제공한다. 일단 디렉토리 형식을 사용하기 때문에 데이터를 계층화된 구조로 저장하기 용이하다.

 

 

3.  ZooKeeper 특징

단순하다.

  • 주키퍼는 분산 프로세스들의 코디네이션을 허용한다. 공유되는 계층 네임스페이스는 단순 파일시스템처럼 구성한다. 네임스페이스는 znode라고 불리는 data 등록자들로 구성된다.
  • 주키퍼의 용어는 파일과 디렉토리와 비슷하다. 일반적인 파일시스템과 다르게 Zookeeper 데이터는 메모리에 유지되어 고성능에 대기시간의 거의 없는 서비스가 가능하다.
  • 주키퍼는 고성능, 신뢰성, 정확한 순서 처리에 장점이 있다. 주키퍼의 성능은 대용량 분산 시스템에서도 사용할  있다는 것을 의미한다. Single point of failure에도 신뢰성을 보장하며 엄격한 순서처리는 정교한 동기화처리 구현에 사용될  있다는 것을 의미한다.

 

복제한다.

  • 코디네이션을 원하는 분산 프로세스처럼 주키퍼는 앙상블이라고 불리우는 호스트의 집합에 자기 자신을 복제하려고 한다.

ZooKeeper 아키텍쳐

              - zookeeper 서비스는 복수의 서버에 복제되며, 모든 서버는 데이터 카피본을 저장하고 있다

              - 리더는 구동  zookeeper 내부 알고리즘에 의해 자동 선정된다

              - Followers 서버들은 클라이언트로부터 받은 모든 업데이트 이벤트를 리더에게 전달한다.

              - 클라이언트는 모든 주키퍼 서버에서 읽을  있으며, 리더를 통해   있고 과반수 서버의 승인(합의) 필요하다.

 

  • 주키퍼 서비스를 구성하는 서버는 서로 알아야 한다. 그들은 메모리에 상태 이미지를 유지하며, 트랜잭션 로그를 따라 퍼시스턴트 스토어에 스냅샷을 저장한다. 과반수의 서버가 유효하면 주키퍼 서비스는 유지된다.
  • 클라이언트는 하나의 주키퍼 서버에 접속한다. 클라이언트는 TCP 연결을 유지하면서 요청을 전송하고 응답을 받고 watch event 받고 heart beat 전송한다. 만약 서버로의 TCP 연결이 끊기면 클라이언트는 다른 서버로 연결될 것이다

 

순차적이다.

  • 주키퍼는 모든 주키퍼 트랜잭션을 순차적으로 반영한다. 이러한 기능은 synchronization primitive 같은 고수준의 추상화 구현을 위해 이용될  있다.

 

빠르다.

  • 특히 읽기에 특화된 부하에 빠르다. 주키퍼 어플리케이션은 수천대의 머신에서 수행되었을  read write 비율이 10:1  최대 성능을   있다.
  • 주키퍼는 분산 시스템을 위한 오픈소스 분산 코디네이션 서비스이다.
728x90

댓글