간단히 말해 ZooKeeper는 분산 응용 프로그램을 구축 할 수 있도록 도와줍니다.
작동 원리
ZooKeeper를 최종 일관성이있는 복제 된 동기화 서비스로 설명 할 수 있습니다. 지속 된 데이터가 여러 노드 (이 노드 집합을 "앙상블"이라고 함)간에 분산하고 한 클라이언트가 어떤 노드 (예 : 특정 "서버")에 연결하여 한 노드에 장애가 발생하면 마이그레이션하기 때문에 강력합니다. 대부분의 노드가 작동하는 한 ZooKeeper 노드의 앙상블이 살아 있습니다. 특히, 마스터 노드는 앙상블 내에서 합의에 의해 동적으로 선택됩니다. 마스터 노드가 실패하면 마스터 역할이 다른 노드로 마이그레이션됩니다.
쓰기 처리 방법
마스터는 쓰기 권한입니다. 이러한 방식으로 쓰기가 순서대로 유지되도록 보장 할 수 있습니다 (즉, 쓰기는 선형) . 클라이언트가 앙상블에 쓸 때마다 대부분의 노드가 정보를 유지합니다.이 노드에는 클라이언트 용 서버와 분명히 마스터가 포함됩니다. 이것은 각각의 쓰기가 마스터와 함께 서버를 최신 상태로 만든다는 것을 의미합니다. 그러나 동시에 쓰기를 할 수 없다는 것을 의미합니다.
선형 쓰기가 보장되는 이유는 ZooKeeper가 쓰기 주도적 워크로드에서 제대로 수행되지 않기 때문입니다. 특히 미디어와 같은 대용량 데이터를 교환하는 데 사용해서는 안됩니다. 통신에 공유 데이터가 포함되어있는 한 ZooKeeper가 도와드립니다. 데이터를 동시에 쓸 수있는 경우, ZooKeeper는 실제로 작가의 관점에서 꼭 필요한 것은 아니지만 엄격한 순서로 작업을 수행하기 때문에 실제로 방해가됩니다. 클라이언트간에 메시지가 교환되는 조정에 이상적입니다.
읽기 처리 방법
이것은 ZooKeeper가 탁월한 곳입니다. 읽기는 클라이언트가 연결하는 특정 서버에서 제공되기 때문에 동시입니다. 그러나 이는 최종 일관성의 이유이기도합니다. 마스터는 제한이 있지만 정의되지 않은 지연으로 해당 서버를 업데이트하므로 클라이언트의 "보기"가 오래되었을 수 있습니다.
상세히
ZooKeeper의 복제 된 데이터베이스는 znodes 트리로 구성되며 파일 노드를 대략적으로 나타내는 엔티티입니다 (디렉토리라고 생각). 각 znode는 데이터를 저장하는 바이트 배열로 보강 될 수 있습니다. 또한 각 znode에는 다른 znode가있을 수 있으며 실제로 내부 디렉토리 시스템을 형성합니다.
순차적 znode
흥미롭게도 znode의 이름은 순차적 일 수 있습니다 . 즉 znode를 작성할 때 클라이언트가 제공하는 이름은 접두사 일뿐입니다. 전체 이름은 앙상블이 선택한 순차적 번호로도 제공됩니다. 예를 들어, 동기화 목적에 유용합니다. 여러 클라이언트가 자원에 대한 잠금을 얻으려는 경우 각 위치에서 동시에 순차적 znode를 작성할 수 있습니다. 가장 적은 수의 사람은 잠금을받을 수 있습니다.
임시 znodes
또한 znode는 일시적 일 수 있습니다 . 즉 , znode 를 작성한 클라이언트가 연결을 끊 자마자 소멸됩니다. 이는 클라이언트가 실패한시기를 알기 위해 주로 유용하며, 이는 클라이언트 자신에게 새 클라이언트가 수행해야 할 책임이있을 때 관련 될 수 있습니다. 잠금의 예를 들어, 잠금을 해제 한 클라이언트가 연결을 끊 자마자 다른 클라이언트는 잠금을 사용할 수 있는지 여부를 확인할 수 있습니다.
시계
znode의 상태를 주기적으로 폴링해야하는 경우 클라이언트 연결 끊기와 관련된 예가 문제가 될 수 있습니다. 다행스럽게도 ZooKeeper는 znode에서 시계 를 설정할 수 있는 이벤트 시스템을 제공합니다 . 이 시계는 znode가 특별히 변경되거나 제거되거나 그 아래에 새로운 자식이 만들어지면 이벤트를 트리거하도록 설정 될 수 있습니다. 이것은 znode에 대한 순차 및 임시 옵션과 함께 유용합니다.
사용 장소 및 방법
Zookeeper 사용법의 일반적인 예는 분산 메모리 계산으로, 일부 데이터는 클라이언트 노드간에 공유되며 동기화를 고려하여 매우 신중하게 액세스 / 업데이트해야합니다.
ZooKeeper는 동기화 프리미티브를 구성 할 수있는 라이브러리를 제공하는 반면 분산 서버를 실행하면 중앙 집중식 (브로커와 유사한) 메시지 저장소를 사용할 때 발생하는 단일 장애 지점 문제를 피할 수 있습니다.
주 키퍼 (ZooKeeper)는 특징이 가벼워 리더 선출, 자물쇠, 장벽 등의 메커니즘이 아직 존재하지 않지만 ZooKeeper 프리미티브 위에 작성할 수 있습니다. C / Java API가 목적에 맞지 않는 경우 케이지 및 특히 큐레이터 와 같이 ZooKeeper에 빌드 된 라이브러리를 사용해야합니다 .
더 읽어야 할 곳
꽤 좋은 공식 문서를 제외하고는 ZooKeeper가 수행하는 작업을 본질적으로 설명하는 ~ 35 페이지가 있고 구성 서비스의 예가 나와 있는 Hadoop : The Definitive Guide의 14 장을 읽는 것이 좋습니다 .