Zookeeper
쥬키퍼는 아파치 하둡의 서브 프로젝트였다. 하둡의 서브 프로젝트 이름들은 동물들의 이름을 딴 경우가 많은데 이런 Zookeeper(사육사)는 분산 시스템 간의 정보 공유, 구성 관리, 동기화, 상태 체크를 처리하는 서비스를 제공해 분산 어플리케이션이 안정적인 서비스를 할 수 있도록 돕는다. 이를 코디네이션 시스템이라 한다.
주키퍼는 Leader Follower로 구성되는 Master-Slave 아키텍처를 기반으로 구성된다. 리더는 쥬키퍼 내부 알고리즘에 의해 자동으로 선정된다. 쓰기 동작을 수행할 때 클라이언트는 특정 서버에 접속해 그 서버의 데이터를 업데이트한다. 업데이트된 서버는 클라이언트로부터 받은 업데이트 이벤트를 리더에게 전달한다. 리더는 정보를 업데이트하고 다른 Follower들에게 브로드캐스트 형식으로 알린다. 클라이언트는 모든 쥬키퍼 서버에서 데이터를 읽을 수 있고 리더를 통해 쓸 수 있다.
주키퍼는 신뢰성 있는 서비스 제공을 위해 앙상블(클러스터)라는 호스트 세트를 구성한다. 앙상블로 구성되어 있는 주키퍼는 과반수 방식에 따라 살아 있는 노드 수가 과반수 이상 유지되어야만 서비스가 가능하다.
Znode
주키퍼의 znode는 데이터를 저장하는 공간이다. 지노드에 데이터를 key-value 형태로 저장하고 이를 통해 데이터를 주고받는다. 주키퍼의 각 지노드는 데이터 변경 등에 대한 유효성 검사를 위해 버전 번호 관리를 한다. 또한 주키퍼에 저장되는 데이터는 모두 메모리에 저장되어 처리량이 빠르다. 지노드는 일반적인 디렉토리와 비슷한 형태의 계층형 구조이다.