기술나눔

Zookeeper의 기본 원리

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

ZooKeeper는 분산 시스템의 일관성 문제를 해결하기 위해 분산 시스템에서 널리 사용되는 고가용성 분산 조정 서비스입니다. 다음은 아키텍처, 데이터 모델, 핵심 메커니즘 및 일관성 프로토콜을 포함하여 ZooKeeper의 기본 원칙을 자세히 소개합니다.

1. 건축

ZooKeeper는 일반적으로 리더와 여러 팔로워로 구성된 마스터-슬레이브 아키텍처를 채택하며 읽기 요청의 압력을 공유하기 위해 비투표 노드인 관찰자 노드도 있습니다.

  • 지도자: 모든 쓰기 요청(트랜잭션 요청)을 처리하고 일관성 프로토콜을 조정하는 역할을 담당합니다.
  • 수행원: 투표에 참여하고 리더 상태를 동기화하며 읽기 요청을 처리합니다.
  • 관찰자: 투표에 참여하지 않고 읽기 요청만 처리하고 클라이언트의 쓰기 요청을 전달합니다.

2. 데이터 모델

ZooKeeper는 파일 시스템과 유사한 트리 구조로 데이터를 저장하며 각 노드를 znode라고 합니다.

  • 지노드: 경로, 데이터, 상태 정보가 포함된 데이터 노드입니다.
  • 영구 znode: 노드는 명시적으로 삭제되지 않는 한 클라이언트 연결 끊김 후에도 유지됩니다.
  • 임시 znode: 클라이언트 연결이 끊어지면 노드가 자동으로 삭제됩니다.
  • 순차 znode: 노드가 생성되면 자동으로 증가하는 시퀀스 번호가 추가됩니다.

3. 핵심 메커니즘

3.1. 세션 관리

각 클라이언트와 ZooKeeper 클러스터 사이에 세션이 설정되어 연결 상태를 유지하고 임시 노드를 관리합니다. ZooKeeper는 하트비트 메커니즘을 통해 클라이언트의 연결 상태를 감지합니다. 일정 시간 동안 하트비트가 수신되지 않으면 세션 연결이 끊어진 것으로 간주됩니다.

3.2. 데이터 동기화

각 노드의 데이터 일관성을 보장하기 위해 ZooKeeper는 데이터 동기화 메커니즘을 채택합니다. Leader 노드가 쓰기 요청을 처리하면 모든 Follower 노드에 변경 작업을 보냅니다. Follower 노드는 변경 작업을 수락한 후 확인하고 최종적으로 Leader 노드는 변경 작업의 성공 여부를 결정합니다.

3.3. 알림 메커니즘

ZooKeeper는 Watch 메커니즘을 지원합니다. 클라이언트는 지정된 znode에 Watch를 등록할 수 있습니다. znode의 데이터 또는 하위 노드가 변경되면 ZooKeeper가 클라이언트에 알립니다.

4. 일관성 프로토콜

ZooKeeper는 ZAB(Zookeeper Atomic Broadcast)라는 일관성 프로토콜을 사용하여 데이터 일관성을 보장합니다. ZAB는 선거 단계와 방송 단계의 두 단계로 구성됩니다.

4.1. 선거 단계

ZooKeeper 클러스터가 시작되거나 리더 노드가 실패하면 새 리더를 결정하기 위해 선택이 필요합니다. 선거단계는 크게 다음과 같은 단계로 나누어집니다.

  1. 투표: 모든 노드는 자신에게 투표하고 다른 노드에 투표를 보냅니다.
  2. 표를 받다: 각 노드는 다른 노드로부터 투표를 받고 투표 결과를 계산합니다.
  3. 설문조사 업데이트: 받은 표 중 자신보다 높은 표를 얻은 후보가 있는 경우 해당 후보에 대한 투표를 업데이트합니다.
  4. 리더 결정: 후보자가 과반수 이상의 표를 얻으면 새로운 리더가 됩니다.
4.2. 방송 단계

리더가 결정되면 브로드캐스트 단계가 시작됩니다. 리더는 클라이언트의 쓰기 요청을 처리하고 변경 작업을 모든 팔로어 노드에 브로드캐스팅하는 역할을 담당합니다. 구체적인 단계는 다음과 같습니다:

  1. 제안: 쓰기 요청을 받은 후 리더는 제안을 생성하고 모든 팔로어 노드에 제안을 보냅니다.
  2. 확인하다: Follower 노드는 제안을 받은 후 로깅을 수행하고 Leader에게 확인 메시지를 보냅니다.
  3. 제출하다: Leader 노드는 확인 메시지의 절반 이상을 받은 후 제안서를 제출하고 모든 Follower 노드에게 제출 결과를 알립니다.
  4. 변경 승인: Follower 노드는 커밋 알림을 받은 후 변경 작업을 적용합니다.

5. 샘플 코드

다음은 ZooKeeper를 사용하는 간단한 예로서 노드 생성, 노드 데이터 읽기 및 Watch 등록 방법을 보여줍니다.

5.1. 종속성 소개

존재하다 pom.xml ZooKeeper 클라이언트 종속성을 도입합니다.

 

xml코드 복사