이번 포스팅에서는 작년 기상청 프로젝트에서 프로세서들을 관리하는 툴이 필요하여 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)
'개발관련 자료' 카테고리의 다른 글
인플럭스DB(InfluxDB) #3 - 용어 정리 (0) | 2020.06.11 |
---|---|
인플럭스DB(InfluxDB) #2 - 주요 개념 (0) | 2020.06.11 |
인플럭스DB(InfluxDB) #1 - 개요 및 특징 (0) | 2020.06.11 |
쥬피커(Zookeeper) #3 - 사용 (2) | 2020.06.11 |
쥬키퍼(ZooKeeper) #1 - 개요 및 특징 (0) | 2020.06.11 |
댓글