17. ZooKeeper 에서 흔히 볼 수 있 는 분포 식 시스템 작업 - 장벽

4541 단어
앞으로 몇 절 에서 주로 다음 과 같은 내용 을 소개 한다.
  • 지도자 선 거 를 어떻게 집행 하 는 지, 팀 원 관리 와 2 단계 협의 제출 등 흔히 볼 수 있 는 분포 식 시스템 임무
  • 장벽 (barrier), 잠 금 (lock) 과 대기 열 (queue)
  • 과 같은 분포 식 데이터 구 조 를 어떻게 실현 합 니까?
    이 장 에서 개술 한 고 차원 구축 도 'ZooKeeper recipes' 라 고 불 린 다.이것 은 클 라 이언 트 가 ZooKeeper 의 프로 그래 밍 모델 을 사용 하여 이 루어 진 것 이 며 서버 에서 특별한 지원 을 받 을 필요 가 없습니다.ZooKeeper 와 그 API 가 없 는 상황 에서 이러한 recipes 의 실현 은 상당히 복잡 하고 어 려 울 것 이다.
    일부 제3자 와 지역사회 에서 개발 한 ZooKeeper 클 라 이언 트 연결 도 이러한 고급 분포 식 시스템 의 구축 을 클 라 이언 트 라 이브 러 리 의 일부분 으로 제공한다.예 를 들 어 넷 플 릭 스 큐 레이 터 는 ZooKeeper 의 기능 이 풍부 한 자바 클 라 이언 트 프레임 워 크 이다.
    ZooKeeper 발행 버 전 에는 선 거 를 이 끌 고 자물쇠 와 대기 열 을 나 누 어 주 는 recipes 가 첨부 되 어 있 으 며 분포 식 응용 프로그램 에서 사용 할 수 있 습 니 다.이 세 개의 recipes 의 자바 구현 은 발행 판 recipes 디 렉 터 리 에서 찾 을 수 있 습 니 다.
    ZooKeeper recipes
    이 절 에서 ZooKeeper 를 사용 하여 고급 분포 식 시스템 구축 과 데이터 구 조 를 개발 하 는 것 을 배 웁 니 다.앞에서 언급 한 바 와 같이 이러한 구축 과 방법 은 신축 가능 한 분포 식 체계 구 조 를 구축 하 는 데 매우 중요 하지만 처음부터 실현 하 는 것 은 상당히 복잡 하 다.개발 자 들 은 종종 이러한 응용 프로그램의 논 리 를 실현 하고 통합 할 때 곤경 에 빠진다.이 절 에 서 는 ZooKeeper 의 데이터 모델 과 원 어 를 사용 하여 고급 기능 을 구축 하 는 방법 을 배우 고 관리자 가 간단 하고 신축 가능 하 며 오류 가 없 으 며 코드 량 이 더욱 적 습 니 다.
    1. Barrier
    Barrier 는 분포 식 시스템 에서 사용 하 는 동기 화 방법 으로 조건 을 만족 시 킬 때 까지 노드 의 처 리 를 막 는 데 사용 된다.이것 은 모든 노드 가 이 Barrier 에 도착 할 때 까지 처 리 를 멈 춰 야 한 다 는 점 을 정의 했다.
    ZooKeeper 를 사용 하여 장벽 을 실현 하 는 Barrier 는 다음 과 같 습 니 다.
  • 우선, znode 를 장벽 znode 로 지정 합 니 다. 예 를 들 어 /zk_barrier.
  • 만약 에 이 장벽 이 존재 한다 면 장벽 은 시스템 에서 활발 하 다 고 말한다.
  • 모든 클 라 이언 트 는 장벽 znode 에 감시 사건 (감시 사건 은 true 로 설정) 을 등록 하고 /zk_barrier 에서 ZooKeeper API 를 사용 하 는 exists() 방법 을 상 향 조정 합 니 다.
  • 만약 exists() 방법 이 false 로 돌아 가면 장벽 이 더 이상 존재 하지 않 고 클 라 이언 트 가 계속 연산 한 다 는 것 을 의미한다.
  • 그렇지 않 으 면 exists 방법 이 true 로 돌아 가면 클 라 이언 트 가 감시 사건 을 기다 리 고 있 습 니 다.
  • 장벽 조건 이 탈퇴 를 만족 시 킬 때 장벽 을 담당 하 는 클 라 이언 트 는 삭 제 됩 니 다 /zk_barrier.
  • 트리거 감시 사건 을 삭제 하고 이 통 지 를 받 을 때 클 라 이언 트 가 다시 /zk_barrierexists() 방법 을 호출 합 니 다.
  • 절차 7 이 true 로 돌아 가면 클 라 이언 트 는 계속 진행 할 수 있 습 니 다.

  • Note 장벽 이 존재 하지 않 을 때 까지 계속 존재 합 니 다!
    이런 방식 을 통 해 우 리 는 ZooKeeper 를 힘 들 이지 않 고 사용 하여 장벽 을 실현 할 수 있다.
    지금까지 들 어 본 예 는 간단 한 장벽 으로 분포 식 프로 세 스 가 특정한 조건 에서 기다 리 는 것 을 막 고 조건 이 만족 할 때 처리 할 수 있다.또 다른 유형의 장 애 는 동기 화 컴 퓨 팅 의 시작 과 끝 에 도움 이 된다.이른바 이중 장벽 이다.이중 장벽 의 논 리 는 필요 한 프로 세 스 수가 장벽 에 들 어 갔 을 때 계산 이 시작 되 었 다 는 것 을 보 여 준다.계산 이 끝나 면 프로 세 스 가 떠 나 고 참여 장벽 의 프로 세 스 수가 0 으로 변 하면 계산 이 끝 납 니 다.
    이중 장벽 의 알고리즘 은 장벽 zno de 를 통 해 이 루어 진 것 으로 이 장벽 zno de 의 역할 은 계산 에 참여 하 는 개체 과정 zno de 의 부모 노드 이다.그 알고리즘 은 다음 과 같다.
    단계 1: 장벽 znode 를 넣 는 방식 은 다음 과 같다.
  • 가설 장벽 znode 는 znode/barrier 에 의 해 표시 된다.모든 클 라 이언 트 프로 세 스 는 /barrier 부모 노드 로 하 는 ephemeral znode 를 만들어 서 등록 합 니 다.실제 상황 에서 클 라 이언 트 는 호스트 이름 으로 등록 할 수 있 습 니 다.
  • 클 라 이언 트 프로 세 스 는 /barrier 노드 아래 에 존재 하 는 또 다른 'ready' 노드 에 감시 사건 을 설정 하고 노드 가 나타 나 기 를 기다린다.
  • 디지털 N 은 시스템 에서 미리 정 의 된 것 이다.계산 을 시작 하기 전에 장벽 에 가입 하 는 최소 수량 을 관리 하 는 클 라 이언 트 입 니 다.
  • 장벽 에 가입 할 때 모든 클 라 이언 트 프로 세 스 가 /barrier 의 하위 노드 수량 을 찾 습 니 다. M = getChildren(/barrier, watch=false)
  • M 이 N 보다 작 으 면 클 라 이언 트 대기 절차 3 에 등 록 된 감시 사건.
  • 그렇지 않 으 면 M 이 N 과 같 으 면 클 라 이언 트 프로 세 스 가 /barrier 에서 znode 를 만 듭 니 다.
  • 5 단계 에서 만 든 ready 노드 는 감시 사건 을 촉발 하고 모든 클 라 이언 트 는 지금까지 의 계산 을 시작 합 니 다.

  • 단계 2: 장벽 을 벗 어 나 는 방식 은 다음 과 같다.
  • 계산 을 완료 하 는 과정 에서 클 라 이언 트 프로 세 스 는 ready 에서 만 든 znode (1 단계 의 2 단계: 장벽 가입) 를 삭제 했다.
  • 고객 프로 세 스 가 이어서 /barrier 노드 의 하위 노드 수량 을 찾 습 니 다. /barrier
  • M 이 0 이 아니라면 이 클 라 이언 트 는 알림 을 기다 리 고 있 습 니 다 (주의, 앞의 호출 에서 감시 이 벤트 를 True 로 설정 하 였 습 니 다).M 이 0 이면 클 라 이언 트 가 장벽 znode 를 종료 합 니 다.
    앞의 프로그램 은 잠재 적 인 양 떼 효과 가 있 습 니 다. 알림 을 울 릴 때 모든 클 라 이언 트 프로 세 스 는 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 문서 에서 찾 았 습 니 다.

    좋은 웹페이지 즐겨찾기