본문 바로가기
개발관련 자료

쥬키퍼(ZooKeeper) #2 - 데이터모델

by jinu957 2020. 6. 11.
728x90

이번 포스팅에서는 작년 기상청 프로젝트에서 프로세서들을 관리하는 툴이 필요하여 ZooKeeper가 검토되었고 그때 자료조사를 한 내용를 올리도록 하겠습니다.

 

순서는 

 

2020/06/11 - [개발관련 자료] - ZooKeeper #1 - 개요 및 특징

2020/06/11 - [개발관련 자료] - ZooKeeper #2 - 데이터모델

2020/06/11 - [개발관련 자료] - Zookeeper #3 - 사용

 

으로 진행되며 도입 검토 차원에서 이루어진 조사라서 실무적용 보다는 ZooKeeper란 어떤 것인지 파악하는 정도로만 생각하시면 될듯합니다.

 


1.  znode

 

  • 절대 경로로 '/' 구분된다. 상대 참조가 없으며 명칭에 유니코드 문자가 포함될  있다.
  • 변경이 발생하면 버전 번호가 증가한다. 
  • 데이터는 항상 전체를 읽고 쓴다.  
  • znode 1M이하의 데이터를 가질  있으며, 자식 노드를 가질  있다.

 

  • 영속 종류에 따라 다음과 같이 구분된다.

        1) Persistent Nodes(영구 노드) : 명시적으로 삭제되기 전까지 존재함

        2) Ephemeral Nodes(임시 노드) : 세션이 유지되는 동안 활성(세션이 종료되면 삭제됨), 자식 노드를 가질  없음

        3) Sequence Nodes(순차 노드) : 경로의 끝에 일정하게 증가하는 카운터 추가됨, 영구  임시 노드 모두에 적용 가능

 

  • Sequence Node 경우 자식 노드가 생성한 순서에 따라 일렬번호를 가진다.   예를 들어 /svc노드의 자식 노드로 /nodes 시퀀스 노드로 생성하면 다음과 같은 순서로 노드를 생성한다.

         /svc/nodes0000000001

         /svc/nodes0000000002

 

  • Persistent Ephemeral 모두 적용 가능하며 시퀀스 번호는 4byte 정수이다.

 

2.  Operations

  • 주요 operation create, delete, exists, getChildren, getData, setData 등이 있다. 그리고 Java, C, Python, Ruby, Scala  언어별 바인딩을 제공한다.

 

 

3. Watch

  • Znode 변경  Noti 클라이언트로 trigger 해주어, 주키퍼의 znode 변화를 통지 받는다. 오퍼레이션 실행시 watcher 등록 (zk.getChildren("/mysvc/nodes",watcher)

        이벤트 종류는 다음과 같다

 

         - 노드의 자식이 변경된 경우(NodeChildrenChanged)

         - 노드가 생성된 경우 (NodeCreated)

         - 노드의 데이터가 변경된 경우 (NodeDataChanged)

         - 노드가 삭제된 경우(NodeDeleted)

 

 

  • Watch 일회성 이벤트 수신으로, 다시 Watch하고 싶으면 재등록해야 하며, 재등록 전에 발생한 변경은 수신하지 못한다.
  • 클라이언트는 이벤트 수신  새로운 감시 요청을 전송하는  발생할  있는 지연에 대비해야 한다.
  • 상태 변경 요청한 클라이언트가 성공 코드를 받은 이후에, watcher 등록한 클라이언트에 통지된다.
  • 주키퍼 변경 순서대로 Watch 이벤트를 수신한다.

 

4. 일관성 보장

  • Sequential Consistency: 변경 요청은 순서대로 적용
  • Atomicity : 변경은 확실히 성공 또는 실패
  • Single System Image : 클라이언트는 연결한 서버에 상관 없이 동일 서비스(View 조회) 사용
  • Reliability : 변경은 적용된 이후에 동일한 클라이언트에게 의해 덮어써지기 전까지는 지속() 된다. 클라이언트가 성공 코드를 받으면, 서버에 반영됨을 보장
  • Timeliness : 클라이언트는 일정 시간내에 최신 상태를 사용(Eventual Consistency)
728x90

댓글