이번 포스팅에서는 작년 기상청 프로젝트에서 프로세서들을 관리하는 툴이 필요하여 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 내부 알고리즘에 의해 자동 선정된다
- Followers 서버들은 클라이언트로부터 받은 모든 업데이트 이벤트를 리더에게 전달한다.
- 클라이언트는 모든 주키퍼 서버에서 읽을 수 있으며, 리더를 통해 쓸 수 있고 과반수 서버의 승인(합의)가 필요하다.
- 주키퍼 서비스를 구성하는 서버는 서로 알아야 한다. 그들은 메모리에 상태 이미지를 유지하며, 트랜잭션 로그를 따라 퍼시스턴트 스토어에 스냅샷을 저장한다. 과반수의 서버가 유효하면 주키퍼 서비스는 유지된다.
- 클라이언트는 하나의 주키퍼 서버에 접속한다. 클라이언트는 TCP 연결을 유지하면서 요청을 전송하고 응답을 받고 watch event를 받고 heart beat를 전송한다. 만약 서버로의 TCP 연결이 끊기면 클라이언트는 다른 서버로 연결될 것이다
○ 순차적이다.
- 주키퍼는 모든 주키퍼 트랜잭션을 순차적으로 반영한다. 이러한 기능은 synchronization primitive와 같은 고수준의 추상화 구현을 위해 이용될 수 있다.
○ 빠르다.
- 특히 읽기에 특화된 부하에 빠르다. 주키퍼 어플리케이션은 수천대의 머신에서 수행되었을 때 read와 write의 비율이 10:1일 때 최대 성능을 낼 수 있다.
- 주키퍼는 분산 시스템을 위한 오픈소스 분산 코디네이션 서비스이다.
'개발관련 자료' 카테고리의 다른 글
인플럭스DB(InfluxDB) #3 - 용어 정리 (0) | 2020.06.11 |
---|---|
인플럭스DB(InfluxDB) #2 - 주요 개념 (0) | 2020.06.11 |
인플럭스DB(InfluxDB) #1 - 개요 및 특징 (0) | 2020.06.11 |
쥬피커(Zookeeper) #3 - 사용 (2) | 2020.06.11 |
쥬키퍼(ZooKeeper) #2 - 데이터모델 (0) | 2020.06.11 |
댓글