- 오픈소스로 만들어진 분산된 어플리케이션을 위한 분산 코디네이션 서비스를 제공한다.
- 즉, 주키퍼는 클라이언트가 서로 공유하는 데이터를 관리해주는 역할을 해준다.
분산 코디네이션 :
- 분산된 시스템 간에 동기화 서비스 제공, 공유자원의 관리를 수행하는 시스템
- 분산코디네이션 시스템을 갖추기가 매우 어렵다. 에러를 검출하거나, 레이스 컨디션 및 데드락 상황을 파악하는 기능과 같은 어려운 작업을 해준다.
zookeeper의 특징
1. Simple
공유된 네임스페이스를 통해서 분산 코디네이션을 실현한다. 이러한 네임스페이스는 일반적인 파일 시스템과 유사하게 동작하여 단순함을 제공한다.
name space는 znode라고 불리는 데이터 저장소로 구성되어 있다.
이러한 네임스페이스는 in-memory에 저장되며, 빠른 처리 속도를 제공한다.
2. replicated
ensemble라고 불리는 호스트 셋을 스스로 복제한다.
주키퍼 서비스는 각각에 대해서 서로 알수 있도록 구성된다.
이들은 상태값, 트랜잭션 로그, 저장소의 스냅샷 정보들을 상호 공유한다.
클라이언트는 서버에 접속해서 요청을 보내거나, 응답을 받고, 이벤트를 watch하거나 heat beats를 전송한다. 서버와의 커넥션이 끊어지면 클라이언트는 다른 살아있는 서버로 접속을 시도한다.
3. ordered
주키퍼 서버는 각각의 업데이트 결과를 모든 주키퍼 트랜잭션에 반영한다.
이러한 순차적인 작업은 고수준 추상화로 구현되어 있다.
4. fast
주키퍼는 읽기 성능이 매우 빠르다. 읽기와 쓰기의 비율은 10:1 의 수준이다.
zookeeper의 데이터 모델
네임스페이스는 일반적인 파일시스템과 매우 유사하다. 네임스페이스는 (/) 로 계층구조로 관리된다.
Node
주키퍼는 파일시스템처럼 보인다. 차이점이 있다면 각 노드는 데이터를 가지며, 이 노드는 역시 자식 노드들을 가질 수 있는 구조이다.
파일이 디렉토리도 될 수 있는 구조이다.
주키퍼는 이러한 노드에 다음과 같은 정보를 저장한다.
- 상태정보
- 설정정보
- 정보에 대한 위치정보
znode :
일반적으로 주키퍼에 네임스페이스에 저장되는 노드를 말한다.
주키퍼 데이터 노드라고도 한다.
데이터 변경 버젼관리, ACL변경, 타임스템프, 캐시 검증, 업데이트된 내용의 코디네팅등 대한 상태값을 저장한다.
클라이언트가 데이터를 참조할때 버젼 정보도 함께 내려주는 역할을 한다.
Ephermeral node :
세션이 유지되는 동안 존재하는 노드이다.
세션이 종료되면 이 znode는 제거된다.
Conditional updates and Watches
주키퍼는 watches에 대한 개념을 제공한다.
클라이언트는 watch를 znode에 설정할 수 있다.
watch는 znode의 변경에 대해서 트리거되거나, 제거될 수 있다.
watch가 트리거 되면 클라이언트는 znode의 변경사실에 대한 패킷을 수신받는다.
제공하는 기능 :
- Sequential Consistency : 클라이언트로 부터 없데이트가 발생하면, 순차적으로 전송한다.
- Atomicity : 성공 혹은 실패만 존재한다, 중간상태는 존재하지 않는다.
- Single System Image : 클라이언트는 서비스에 대한 동일한 뷰만 보게 된다.
- Reliability : 한번 업데이트가 되면클라이언트가 그 내용을 업데이트 하지 않는 이상 영원히 지속된다.
- Timeliness : 클라이언트는 시스템의 특정 업데이트된 시간에 대해서 뷰를 보장한다.
클라이언트 API :
주키퍼는 다음과 같은 매우 단순한 인터페이스를 제공한다.
- create : 트리내에 노드를 생성한다.
- delete : 노드를 삭제한다.
- exists : 노드가 존재하는지 검사한다.
- get data : 노드로 부터 데이터를 읽어들인다.
- set data : 노드에 데이터를 저장한다.
- get children : 노드의 자식 리스트를 조회한다.
- sync : 데이터가 전파 되기를 기다린다.
주키퍼는 뭐하는놈일까?
주키퍼 Stand alone 설치하기
주키퍼 단일머신 멀티 인스턴스 설치하기
from : https://zookeeper.apache.org/doc/trunk/zookeeperOver.html
EmoticonEmoticon