[018] zookeeper 가 뭘 할 수 있 을 까
zookeeper 는 클 러 스 터 의 데이터 관 리 를 실현 하 는 데 사 용 됩 니 다. 예 를 들 어 hadop 의 leader 선거, 상태 동기 화 등 입 니 다.근 데 이 걸 어떻게 이 루 는 거 죠?그럼 오늘 은 zookeepr 뒤의 데이터 구조 와 프로 세 스 간 동기 화 를 어떻게 실현 하 는 지 살 펴 보 겠 습 니 다.
이 글 을 쓰 는 돈 은 먼저 역사적 원천 과 배경 지식 을 소개 한 다음 에 zookeeper 의 중요 한 특성, 예 를 들 어 통지 체제, lead 선 거 를 묘사 하 는 순 서 를 논술 할 계획 이다.이러한 특성 을 바탕 으로 그 가 어떤 기능 을 제공 할 수 있 는 지 알 수 있다.
자 료 를 찾 으 면서 (자신의 논 리 를 가지 고) 실제 글 의 논술 순 서 는 조 화 롭 고 추상 적 인 개념 (같은 프로 세 스 와 비교) 을 먼저 말 한 다음 에 zookeeper 데이터 구 조 를 논술 한 다음 에 이런 데이터 구조 에서 zookeeper 가 어떤 기능 을 제공 할 수 있 는 지 논술 하 는 것 이다.마지막 으로 실제 응용 측면 에서 zookeeper 가 동기 화 대기 열과 FIFO 대기 열 을 어떻게 실현 하 는 지 예 를 들 어 보 자.
zookeeper 의 출처
zookeeper is a service for coordinating process of distributed applications, 즉 분포 식 조정 서비스 입 니 다.어떻게 조 화 를 이 룰 까요?분포 식 환경 에서 잠 금 체 제 를 통 해
조화 에 관 한 개념
동시 읽 기와 쓰기 데이터베이스, 다 중 스 레 드 환경 (같은 프로 세 스) 은 공유 데이터 에 대해 읽 기와 쓰 기 를 하 는데 이런 상황 에서 우 리 는 잠 금 메커니즘 을 통 해 조율 한다.
예 를 들 어 자바 에 synchronize 대상 에 자 물 쇠 를 설치 하여 대상 자원 의 접근 을 조율 할 수 있 습 니 다.
public synchronized void doSomething()
{
System.out.println("father do something");
}
서로 다른 장면 에 따라 예 를 들 어 성능 을 향상 시 키 기 위해 우 리 는 읽 기와 쓰기 자 물 쇠 를 사용 하여 읽 기와 쓰기 가 적은 장면 의 조 화 를 해결 할 것 이다. 이런 장면 에서 자 물 쇠 를 사용 하면 성능 에 심각 한 영향 을 줄 수 있다.
위 에서 말 한 것 은 모두 같은 프로 세 스에 서 의 조율 메커니즘 이다. 만약 에 A 호출 B 가 실패 하면 반드시 실패 하고 이상 을 던 지 는 것 은 호출 실패 이다.그러나 분산 환경 에 서 는 네트워크 의 불확실 성 A 호출 B 로 B 가 실 행 됐 으 나 A 에 게 계속 답장 을 하지 않 았 을 수 있다.메시지 미들웨어 비동기 처 리 를 한 적 이 있다 면 메시지 가 송신 단 에서 늦게 실 행 될 수도 있 고 수신 단 에서 실 행 될 수도 있다 는 것 을 알 수 있 습 니 다.
분포 식 환경 에서 우 리 는 여러 개의 서 비 스 를 배치 하여 균형 을 이 루 고 신뢰성 을 높 인 다. 그러나 이 여러 개의 서비스 간 의 조 화 는 프로 세 스 간 의 병발 자물쇠 로 이 루어 져 야 한다. 이것 이 바로 zookeeper 가 제공 하 는 핵심 기능 이다.
zookeeper 데이터 구조
프로 세 스 간 의 병렬 자 물 쇠 를 어떻게 제공 하 는 지 알 고 싶 으 면 먼저 zookeeper 의 데이터 구 조 를 알 아야 합 니 다.zookeeper = zookeeper 의 데이터 모델 + 알림 메커니즘
zookeeper 의 모든 노드 를 Znode 라 고 합 니 다.zookeeper 의 데이터 모델
zookeeper 는 지속 / 임시 질서 / 무질서 에 따라 4 가지 유형의 노드 로 조합 할 수 있 습 니 다: a). 지속 노드 (persistent) 의 지속 노드 는 클 라 이언 트 연결 이 끊 어 지면 서 사라 지지 않 고 주동 적 인 delete 를 통 해 만 작 동 합 니 다.b). 지속 적 인 순서 노드 (persistent sequential) 는 지속 적 인 노드 와 유사 합 니 다. 추가 적 인 특성 은 첫 번 째 하위 노드 에서 시 서 를 유지 하고 하위 노드 를 만 드 는 과정 에서 기본적으로 뒤에 디지털 접 두 사 를 노드 이름 으로 합 니 다. 노드 접두사 의 최대 치 는 정수 최대 치 입 니 다.c). 임시 노드 (ephemeral) 임시 노드 는 데 이 터 를 저장 할 수 없고 수명 주기 와 세 션 이 연결 되 어 있 습 니 다.클 라 이언 트 세 션 이 효력 을 잃 으 면 이 노드 가 사라 집 니 다. 연결 이 끊 어 지 는 것 이 아 닙 니 다.d). 임시 질서 (ephemeral sequential) 이 노드 는 분포 식 잠 금 과 lead 선 거 를 실현 할 수 있 습 니 다.
분포 식 자물쇠 의 실현 절 차 는 다음 과 같다. 클 라 이언 트 create 경 로 는 'locknode / guid - lock -' (유형 은 ephemeral sequential 노드) 이다.클 라 이언 트 는 getChildren ("locknode") 방법 을 통 해 만 든 모든 하위 노드 를 가 져 옵 니 다. -watch 하위 노드 클 라 이언 트 가 모든 하위 노드 의 경 로 를 옮 겨 다 니 지 않 습 니 다. 자신 이 만 든 노드 번호 의 최소 설명 을 발견 하면 자 물 쇠 를 가 져 옵 니 다.클 라 이언 트 가 직접 만 든 번호 가 가장 작은 것 이 아니라면 번호 가 가장 작은 노드 를 찾 은 후에 exist () 방법 을 호출 하여 감청 을 동시에 등록 합 니 다.최소 번호 노드 가 제거 되면 감청 하 는 클 라 이언 트 가 통 지 를 받 고 다시 선 거 를 실시 합 니 다 (모든 하위 노드 를 옮 겨 다 니 며 - > 최소 - > 감청 등록).
이 유형 에서 클 라 이언 트 가 감청 하 는 것 은 최소 번호 노드 임 을 알 수 있다.
zookeeper 노드 는 다음 과 같은 특징 이 있 습 니 다. 각 zno de 노드 에 저 장 된 데 이 터 는 버 전 번호 가 있 습 니 다. 즉, 같은 저장 경 로 는 여러 개의 데 이 터 를 저장 할 수 있 습 니 다.(이 기능 은 잠 금 추가 에 사용 할 수 있 습 니 다) znode 아래 에 하위 노드 가 있 을 수 있 습 니 다. ephemeral 노드 에 하위 디 렉 터 리 가 있 으 면 안 됩 니 다 (예 를 들 어 lead 서버 의 ip 등).zookeeper 클 라 이언 트 와 서버 는 긴 연결 을 통 해 연 결 됩 니 다.zno de 노드 는 자동 번호 와 sequential 노드 의 특성 을 나 타 낼 수 있 습 니 다.
zookeeper 는 어떤 서 비 스 를 제공 할 수 있 습 니까?
1. 명명 서비스 NameService 제공: 통 일 된 명명 서 비 스 를 제공 합 니 다. 분포 식 응용 에서 완전한 명명 규칙 이 필요 합 니 다. 유일한 이름 을 만 들 수 있 고 식별 하기 쉬 워 야 합 니 다. 이런 것 은 트 리 구 조 를 통 해 이 루어 지 는 것 이 가장 좋 습 니 다.이름 서비스 가 zookeeper 에 내 장 된 기능, 예 를 들 어
/NameService/
/name1 -- name1
/name2 -- name2
2. 설정 관리 Configuration 제공: 현재 서버 실행 프로그램 은 기본적으로 = 코드 + 설정 파일 입 니 다. 분포 식 환경 에서 모든 기계 가 같은 설정 을 해 야 한다 면 모든 것 을 수정 하 는 것 이 불편 하기 때문에 설정 파일 을 zookeeper 에 통일 적 으로 놓 으 면 수정 하고 관리 할 수 있 습 니 다.
3. 클 러 스 터 관리 zookeeper 를 제공 하면 클 러 스 터 관리 기능 을 쉽게 실현 할 수 있 습 니 다. 여러 대의 server 로 구 성 된 클 러 스 터 는 서버 의 상 태 를 관리 하 는 '총괄' 이 필요 합 니 다. 서버 가 끊 기거 나 가입 하면 다른 형제 서버 에 알려 야 합 니 다. 마찬가지 로 이런 일 을 '총괄' 에 게 알려 야 합 니 다.
형제 서버 에 어떻게 알려 드릴 까요? zookeeper 에서 어떻게 이 루어 졌 나 요?예 를 들 어 다음 노드 디 렉 터 리 는 groupMembers 에 감청 (client 1, client 2, client 3 은 모두 ephemeral 노드) 을 등록 합 니 다. client 1 세 션 이 닫 히 면 client 1 노드 가 사라 지면 GroupMembers 에서 getChildren () 을 호출 하여 모든 watcher (client 1, client 2, client 는 GroupMembers) /. / GroupMembers / client 1 / client 2 / client 3 를 감청 합 니 다.
어떻게 리더 선 거 를 실현 합 니까?leader 는 분포 식 잠 금 기능 으로 'zookeeper 데이터 구조' - > '분포 식 잠 금 실현' 절 을 참고 합 니 다.
zookeeper 모니터링
zookeeper 모니터링 은 다음 과 같은 두 가지 특성 에 의존 합 니 다. 1. 노드 X 에 watcher 를 등록 하면 노드 X 의 하위 노드 에 변화 가 있 으 면 이 watcher 에 게 알려 줍 니 다.2. EPHEMERAL 형식의 노드 를 만 듭 니 다. 클 라 이언 트 와 서버 의 세 션 이 끝나 거나 만 료 되면 이 노드 는 사라 집 니 다.
zookeeper 의 분포 식 동기 화 잠 금 관리
분포 식 동기 화 잠 금 실현 원 리 를 어떻게 만 드 는 지 는 'zookeeper 데이터 구조' - > '분포 식 잠 금 실현' 을 참고 하 십시오.자 물 쇠 를 풀 필요 가 있다 면 직접 만 든 디 렉 터 리 노드 를 삭제 하면 됩 니 다.
분산 식 잠 금 은 두 가지 목표 가 있다. 1. 독점 2. 제어 순서 유지.이 두 가지 목 표 는 모두 디지털 번 호 를 통 해 이 루어 지고 가장 아래 의 번 호 를 통 해 독점 을 실현 하 며 디지털 크기 순 서 를 통 해 시 서 를 제어 하 는 것 이다.
zookeerper 는 어떻게 통지 합 니까?
클 라 이언 트 가 관심 있 는 디 렉 터 리 노드 를 감청 하고 디 렉 터 리 노드 가 변화 (데이터 변경, 삭제, 하위 디 렉 터 리 노드 추가 삭제) 할 때 zookeeper 는 클 라 이언 트 에 게 알 립 니 다.
zookeeper 장면 구체 적 응용
자주 사용 하 는 SOA 프레임 워 크 는 dubbo + zookeeper 를 통 해 이 루어 집 니 다.여기 서 zookeeper 는 생산자 - > 소비자 모델 에 사용 되 는 대열 을 실현 했다.
1). 동기 화 대기 열 (barrier) 동기 화 대기 열 은 모든 구성원 이 이 대기 열 에 도착 해 야 사용 할 수 있 습 니 다. 예 를 들 어 클 러 스 터 의 모든 서버 가 일어나 야 이 클 러 스 터 가 외부 에서 사용 할 수 있 습 니 다.대기 열 수가 N 이면 동기 화 대기 열 은 다음 과 같 습 니 다: a). 우선 부모 디 렉 터 리 / quue /, 모든 구성원 이 quue / start 디 렉 터 리 가 존재 하 는 지 모니터링 합 니 다.b). 멤버 가 대기 열 에 가입 할 때 / quue / member 생 성i 임시 디 렉 터 리 노드 를 호출 하고 / quue / 이전 getchidren () 을 호출 하여 구성원 수가 요구 N 에 도 달 했 는 지 판단 합 니 다. i = N 이면 quue / start 디 렉 터 리 를 만 듭 니 다.
2) FIFO 대기 열 FIFO 대기 열 은 선진 적 인 선발 대기 열 입 니 다. 우 리 는 ephemeral 을 쉽게 생각 할 수 있 습 니 다.sequential 노드.멤버 가 입대 할 때 / quue / 아래 에 노드 를 만 들 고 숫자 번 호 를 가 집 니 다. 그러면 먼저 온 멤버 의 대형 숫자 번 호 는 가장 작고 팀 을 나 갈 때 매번 최소 번호 에 대응 하 는 멤버 를 방문 하면 됩 니 다.
쓴 소감.
공 부 는 반드시 추상 에 능 해 야 한다. 즉, zookeeper 를 통 해 조화 로 운 개념 을 생각해 야 한다.프로 세 스 내의 조 화 를 조율 합 니 다.이렇게 하면 너의 지식 체 계 를 구축 하 는 데 매우 도움 이 된다.
참고:
http://blog.sina.com.cn/s/blog_6fb7db430102vbid.html
http://blog.csdn.net/yin380697242/article/details/52293761
http://www.open-open.com/lib/view/open1415453633887.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.