>  기사  >  Java  >  ZooKeeper 데이터 모델

ZooKeeper 데이터 모델

巴扎黑
巴扎黑원래의
2017-06-26 11:12:581179검색

ZooKeeper에는 분산 파일 시스템과 유사한 계층적 네임스페이스가 있습니다. 이들 간의 유일한 차이점은 네임스페이스의 각 노드가 하위 노드로 데이터 연결을 가질 수 있다는 것입니다. 이는 파일이 파일의 디렉터리가 될 수도 있는 파일 시스템을 갖는 것과 같습니다. 노드 경로는 일반적으로 슬래시로 구분된 표준 절대 경로로 표현됩니다. 상대 경로가 없습니다. 경로에 포함된 모든 유니코드 문자는 다음 제약 조건을 준수해야 합니다.
1) Null 문자는 경로 이름으로 사용할 수 없습니다.
2) 다음 문자열은 상위 문자열로 사용할 수 없으며 충분히 표시되지 않거나 쉽게 혼동을 일으킬 수 있습니다. u0001 - u001F 및 u007F - u009F)
3) 다음 문자열은 허용되지 않습니다. (ud800 - uF8FF, uFFF0 - uFFFF)
4) "." 문자를 이름의 일부로 사용할 수 있지만 "." 및 ".."는 노드의 경로를 나타내기 위해 단독으로 존재할 수 없습니다. 상대 경로를 사용하십시오. 다음 예는 유효하지 않은 "/a/b/./c" 또는 "/a/b/../c"
5) ZooKeeper 트리 구조에서 "zookeeper" 키워드가 예약되어 있습니다

ZNodes

각각 노드는 znode라고 불릴 수 있습니다. Znode는 데이터 변경 버전 번호, ACL 변경 및 타임스탬프를 포함한 상태 데이터 구조를 유지합니다. 버전 번호와 타임스탬프를 통해 ZooKeeper는 캐시 교체를 수행하고 업데이트를 조정할 수 있습니다. znode의 데이터가 변경될 때마다 버전 번호가 증가합니다. 예를 들어 클라이언트가 데이터를 수신할 때마다 이 데이터의 버전도 수신합니다. 동시에 클라이언트가 업데이트 또는 삭제 작업을 수행할 때 변경되는 znode 노드의 데이터 버전을 제공해야 합니다. znode에서 제공한 버전 번호가 현재 데이터의 실제 버전 번호와 일치하지 않으면 업데이트가 실패합니다.

참고:

분산 애플리케이션 프로젝트에서 노드라는 단어는 단일 호스트, 서버, 전체 구성원, 클라이언트 프로세서 등으로 간주될 수 있습니다. ZooKeeper 문서에서 znode는 데이터 노드로 간주됩니다. 서버는 ZooKeeper 서비스를 구성하는 호스트로 간주됩니다. 쿼럼 피어는 전체를 구성하는 서버로 간주되고, 클라이언트는 ZooKeeper 서비스를 사용하는 호스트 또는 프로세스로 간주됩니다.

Znode는 프로그래머가 액세스하는 주요 엔터티입니다. 여기에는 알아야 할 많은 기능이 있습니다:

시계(청취자)

클라이언트는 znode에서 들을 수 있습니다. znode를 변경하면 이 리스너가 트리거된 다음 지워집니다. 리스너가 트리거되면 ZooKeeper는 클라이언트에 알림을 보냅니다.

데이터 액세스

네임스페이스의 znode에 저장된 데이터는 원자적으로 읽거나 씁니다. 읽기 작업은 znode와 관련된 모든 데이터 바이트를 읽고 쓰기 작업은 모든 데이터를 대체합니다. 각 노드에는 누가 무엇을 할 수 있는지를 제한하는 ACL(액세스 제어 목록) 데이터 액세스 목록이 있습니다.

ZooKeeper는 데이터베이스나 대용량 개체 저장소로 사용하도록 설계되지 않았습니다. 대신 데이터를 관리하고 조정하는 데 사용됩니다. 데이터의 소스 형태는 구성 정보, 상태 정보, 지역 정보 등이 될 수 있습니다. 다양한 형태의 조정 데이터의 공통 속성은 KB 바이트 범위에서 상대적으로 작다는 것입니다. ZooKeeper 클라이언트와 서버 모두 znode가 1M 데이터보다 작은지 확인하기 위해 온전성 검사를 수행하지만 데이터는 이 평균보다 훨씬 작을 수 있습니다. 상대적으로 큰 데이터를 작업할 경우 작업 시간이 길어져 다른 작업의 지연에 영향을 미치게 됩니다. 이 추가 시간에는 네트워크나 저장 매체를 통한 데이터 마이그레이션이 필요하기 때문입니다. 빅데이터의 저장이 필요한 경우, 이 데이터를 처리하는 일반적인 방법은 NFS 또는 HDFS와 같은 대규모 저장 시스템에 보관한 다음 ZooKeeper에 데이터 저장 위치에 대한 포인터를 저장하는 것입니다.

Ephemeral Nodes(임시 노드)

ZooKeeper에는 임시 노드라는 개념이 있습니다. 노드를 생성한 세션이 활성 상태인 한 이러한 노드는 계속 존재합니다. 세션이 닫히면 해당 노드도 삭제됩니다. 이 동작으로 인해 임시 노드는 하위 노드를 가질 수 없습니다.

Sequence Nodes - 고유한 이름 지정(Sequence Nodes - Unique Naming)

노드를 생성할 때 ZooKeeper에 경로 끝에 단조롭게 증가하는 카운터를 추가하도록 요청할 수 있습니다. 이 카운터는 이 상위 노드에 고유합니다. 카운터의 형식은 %010d(0으로 채워지는 소수)이며 간단한 정렬을 위해 형식이 지정되었습니다. 예를 들어 "<경로>0000000001"입니다. 이 기능을 사용하는 예는 대기열 레시피를 확인하세요. 참고: 다음 시퀀스 번호를 저장하는 데 사용되는 카운터는 상위 노드에서 유지 관리하는 서명된 int입니다. 이 카운터는 2147483647 이상으로 증가하면 오버플로됩니다(결과는 "-2147483647"이어야 함).

위 내용은 ZooKeeper 데이터 모델의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.