17. ZooKeeper 에서 흔히 볼 수 있 는 분포 식 시스템 작업 - 장벽
이 장 에서 개술 한 고 차원 구축 도 'ZooKeeper recipes' 라 고 불 린 다.이것 은 클 라 이언 트 가 ZooKeeper 의 프로 그래 밍 모델 을 사용 하여 이 루어 진 것 이 며 서버 에서 특별한 지원 을 받 을 필요 가 없습니다.ZooKeeper 와 그 API 가 없 는 상황 에서 이러한 recipes 의 실현 은 상당히 복잡 하고 어 려 울 것 이다.
일부 제3자 와 지역사회 에서 개발 한 ZooKeeper 클 라 이언 트 연결 도 이러한 고급 분포 식 시스템 의 구축 을 클 라 이언 트 라 이브 러 리 의 일부분 으로 제공한다.예 를 들 어 넷 플 릭 스 큐 레이 터 는 ZooKeeper 의 기능 이 풍부 한 자바 클 라 이언 트 프레임 워 크 이다.
ZooKeeper 발행 버 전 에는 선 거 를 이 끌 고 자물쇠 와 대기 열 을 나 누 어 주 는 recipes 가 첨부 되 어 있 으 며 분포 식 응용 프로그램 에서 사용 할 수 있 습 니 다.이 세 개의 recipes 의 자바 구현 은 발행 판
recipes
디 렉 터 리 에서 찾 을 수 있 습 니 다.ZooKeeper recipes
이 절 에서 ZooKeeper 를 사용 하여 고급 분포 식 시스템 구축 과 데이터 구 조 를 개발 하 는 것 을 배 웁 니 다.앞에서 언급 한 바 와 같이 이러한 구축 과 방법 은 신축 가능 한 분포 식 체계 구 조 를 구축 하 는 데 매우 중요 하지만 처음부터 실현 하 는 것 은 상당히 복잡 하 다.개발 자 들 은 종종 이러한 응용 프로그램의 논 리 를 실현 하고 통합 할 때 곤경 에 빠진다.이 절 에 서 는 ZooKeeper 의 데이터 모델 과 원 어 를 사용 하여 고급 기능 을 구축 하 는 방법 을 배우 고 관리자 가 간단 하고 신축 가능 하 며 오류 가 없 으 며 코드 량 이 더욱 적 습 니 다.
1. Barrier
Barrier 는 분포 식 시스템 에서 사용 하 는 동기 화 방법 으로 조건 을 만족 시 킬 때 까지 노드 의 처 리 를 막 는 데 사용 된다.이것 은 모든 노드 가 이 Barrier 에 도착 할 때 까지 처 리 를 멈 춰 야 한 다 는 점 을 정의 했다.
ZooKeeper 를 사용 하여 장벽 을 실현 하 는 Barrier 는 다음 과 같 습 니 다.
/zk_barrier
./zk_barrier
에서 ZooKeeper API 를 사용 하 는 exists()
방법 을 상 향 조정 합 니 다.exists()
방법 이 false 로 돌아 가면 장벽 이 더 이상 존재 하지 않 고 클 라 이언 트 가 계속 연산 한 다 는 것 을 의미한다.exists
방법 이 true 로 돌아 가면 클 라 이언 트 가 감시 사건 을 기다 리 고 있 습 니 다./zk_barrier
./zk_barrier
의 exists()
방법 을 호출 합 니 다.Note 장벽 이 존재 하지 않 을 때 까지 계속 존재 합 니 다!
이런 방식 을 통 해 우 리 는 ZooKeeper 를 힘 들 이지 않 고 사용 하여 장벽 을 실현 할 수 있다.
지금까지 들 어 본 예 는 간단 한 장벽 으로 분포 식 프로 세 스 가 특정한 조건 에서 기다 리 는 것 을 막 고 조건 이 만족 할 때 처리 할 수 있다.또 다른 유형의 장 애 는 동기 화 컴 퓨 팅 의 시작 과 끝 에 도움 이 된다.이른바 이중 장벽 이다.이중 장벽 의 논 리 는 필요 한 프로 세 스 수가 장벽 에 들 어 갔 을 때 계산 이 시작 되 었 다 는 것 을 보 여 준다.계산 이 끝나 면 프로 세 스 가 떠 나 고 참여 장벽 의 프로 세 스 수가 0 으로 변 하면 계산 이 끝 납 니 다.
이중 장벽 의 알고리즘 은 장벽 zno de 를 통 해 이 루어 진 것 으로 이 장벽 zno de 의 역할 은 계산 에 참여 하 는 개체 과정 zno de 의 부모 노드 이다.그 알고리즘 은 다음 과 같다.
단계 1: 장벽 znode 를 넣 는 방식 은 다음 과 같다.
znode/barrier
에 의 해 표시 된다.모든 클 라 이언 트 프로 세 스 는 /barrier
부모 노드 로 하 는 ephemeral znode 를 만들어 서 등록 합 니 다.실제 상황 에서 클 라 이언 트 는 호스트 이름 으로 등록 할 수 있 습 니 다./barrier
노드 아래 에 존재 하 는 또 다른 'ready' 노드 에 감시 사건 을 설정 하고 노드 가 나타 나 기 를 기다린다./barrier
의 하위 노드 수량 을 찾 습 니 다. M = getChildren(/barrier, watch=false)
/barrier
에서 znode 를 만 듭 니 다.ready
노드 는 감시 사건 을 촉발 하고 모든 클 라 이언 트 는 지금까지 의 계산 을 시작 합 니 다.단계 2: 장벽 을 벗 어 나 는 방식 은 다음 과 같다.
ready
에서 만 든 znode (1 단계 의 2 단계: 장벽 가입) 를 삭제 했다./barrier
노드 의 하위 노드 수량 을 찾 습 니 다. /barrier
앞의 프로그램 은 잠재 적 인 양 떼 효과 가 있 습 니 다. 알림 을 울 릴 때 모든 클 라 이언 트 프로 세 스 는 barrier 에 남 겨 진 하위 노드 의 수량 을 검사 하기 위해 깨 어 납 니 다.이러한 상황 을 피하 기 위해 서 는 1 단계 2 단계 에서 만 든 sequential ephemeral znode 를 사용 하여 barrier 에 가입 할 수 있 습 니 다.모든 클 라 이언 트 프로 세 스 는 다음 가장 짧 은 sequential ephemeral 의 zno de 를 종료 기준 으로 주의해 야 합 니 다.이렇게 계산 을 마 친 모든 클 라 이언 트 에 게 하나의 이벤트 만 생 성 되 기 때문에 모든 클 라 이언 트 가 함께 깨 어 나 서 종료 조건 을 검사 해 야 하 는 것 은 아 닙 니 다.하나의 barrier 에 대량으로 참여 하 는 클 라 이언 트 프로 세 스에 대해 양 떼 효 과 는 ZooKeeper 서비스의 신축성 에 부정적인 영향 을 미 칠 수 있 으 므 로 개발 자 들 은 이런 상황 을 의식 해 야 한다.
Note 이중 장벽 의 자바 언어 구현 은http://zookeeper.apache.org/doc/r3.4.6/zookeeperTutorial.html의 ZooKeeper 문서 에서 찾 았 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.