[ZooKeeper] (0) zookeepr는 무엇인가?
보통 분산 시스템을 구현할 때, 모든 시스템이 완전히 독립적으로 돌아가는 시스템이 아니라면, 시스템 간의 락, 설정 공유, 리더 선출, atomic 한 연산 등을 구현하는 것이 필요하지만, 분산환경에서 이를 구현하는 것은 매우 어려운 일이다. 위의 기능들을 구현하기 어렵기 때문에 보통은 apache에서 제작한 zookeeper라는 시스템을 이용하여 분산 시스템 간의 동기화된 작업을 구현한다. zookeeper는 위의 기능들을 직접적으로 제공하지는 않지만 이런 일들을 하기 쉽게 해주는 환경을 제공한다.
zookeepr가 제공해주는 환경이라는 것은 일종의 공유 가능한 file system을 제공해준다. 그러면 사용자가 file을 이용해서 semaphore나 mutex를 구현하듯이 zookeeper를 이용해서 semaphore나 mutex등을 구현하여 사용하면 된다.
zookeeper는 분산환경에서의 다음과 같은 특징을 보장해준다.
ZooKeeper의 특징
Atomicity
zookeeper에서 data의 저장은 원자성을 가진다. 즉, node를 만들건 node에 data를 update하든 해당 request는 완벽하게 처리되거나 처리되지 않거나 하지 그 중간의 어중간한 상태는 존재하지 않는다.
Consistency
분산환경에서, 특히나 data를 copy하여 여러 서버에 저장하면서 strong consistency를 보장하는 것은 매우 어려운 일다. 그래서 zookeeper에서는 아래의 2가지 consistency를 보장한다.
첫 번째는 sequential consistency다. 즉, 모든 요청은 들어온 순서대로 처리되고, 모든 서버가 요청을 같은 순서로 처리하는 것을 보장하는 것이다.
두 번째는 eventual consistency다. strong consistency와 달리, 모든 요청에 대해 모든 서버가 완벽히 같은 순간에 같은 값을 갖지는 않지만 결국에는 같은 값을 가질 것을 보장하는 것이다. 즉, 어떤 서버에서는 특정 request가 실행됐지만 다른 서버에서는 실행되지 않는 일은 없다는 것이다.
Durability
zookeeper는 강한 durability를 보장한다. zookeeper에서 data 그 자체는 언제나 메모리에만 존재한다. 하지만 서버의 로컬디스크에 트랜잭션 로그와 스냅 샷을 저장하기 때문에 메모리가 날아가도 트랜잭션 로그와 스냅 샷을 이용하여 data를 복구할 수 있다.
zookeeper가 어떻게 구현되어서 위의 특징들을 만족시키는지는 다음 기회에 설명하도록 하겠다
댓글
댓글 쓰기