2022-11-03-TIL

Today I Learned

Zookeeper

Zookeeper는 계층적인 네임 스페이스를 가지는데, 이는 분산 파일 시스템과 유사하다. 네임 스페이스에 있는 각 노드는 데이터 연관 자식과 마찬가지로 연관될 수 있다는 점만 다르다. 이는 마치 파일 시스템에서 파일이 또한 디렉터리가 될 수 있도록 허용하는 것과 같다. 노드에 대한 경로는 항상 정석의 ,절대적인, 슬래시로 구분되어지는 표현식을 쓰며, 상대경로는 없다. 경로 이름에 사용되는 유니코드 문자는 다음의 제약을 가진다.

  • "zookeeper"는 예약어다.
  • 널 문자(\n0000)는 경로 이름에 포함될 수 없다.
  • "." 문자는 이름의 일부로 사용될 수 있지만, 단독으로는 사용할 수 없다. 상대경로가 지원되지 않기 때문

ZNodes

Zookeeper 트리의 각 노드는 znode라고 불린다. znode는 데이터 변경, ACL 변경에 대한 버전을 포함하는 stat 구조를 유지한다. 통계 구조에는 타임스탬프도 있다. 버전 번호와 타임스탬프를 통해 Zookeeper는 캐시를 확인하고 업데이트를 조정할 수 있다. znode의 데이터가 변경될 때마다 버전번호가 증가한다.

Watch

클라이언트는 znode에서 Watch를 설정할 수 있다. 해당 znode에 대한 변경을 watch를 트리거한 다음 watch를 지우면된다. Watcher가 트리거되면 Zookeeper는 클라이언트에게 알림을 보낸다.

Data Accessg

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

ZooKeeper는 일반 데이터베이스나 대형 개체 저장소로 설계되지 않았습니다. 대신 조정 데이터를 관리합니다. 이 데이터는 구성, 상태 정보, 랑데뷰 등의 형태로 제공될 수 있습니다. 다양한 형태의 조정 데이터의 공통 속성은 킬로바이트 단위로 측정되는 상대적으로 작다는 것입니다. ZooKeeper 클라이언트 및 서버 구현에는 znode에 1M 미만의 데이터가 있는지 확인하기 위한 온전성 검사가 있지만 데이터는 평균보다 훨씬 적어야 합니다. 비교적 큰 데이터 크기에서 작업하면 일부 작업은 다른 작업보다 훨씬 더 많은 시간이 걸리고 네트워크를 통해 더 많은 데이터를 저장 매체로 이동하는 데 추가 시간이 필요하기 때문에 일부 작업의 대기 시간에 영향을 미칩니다. 대용량 데이터 저장이 필요한 경우,

임시 노드 ZooKeeper에는 임시 노드 개념도 있습니다. 이러한 znode는 znode를 생성한 세션이 활성 상태인 한 존재합니다. 세션이 종료되면 znode가 삭제됩니다. 이 동작 때문에 임시 znode는 자식을 가질 수 없습니다.

시퀀스 노드 – 고유한 이름 지정 znode를 생성할 때 ZooKeeper가 경로 끝에 단조 증가하는 카운터를 추가하도록 요청할 수도 있습니다. 이 카운터는 상위 znode에 고유합니다. 카운터의 형식은 %010d입니다. 즉, 0(영) 패딩이 있는 10자리입니다(카운터는 정렬을 단순화하기 위해 이러한 방식으로 형식 지정됨), 즉 "<경로>0000000001"입니다. 이 기능의 사용 예는 대기열 레시피 를 참조하십시오 . 참고: 다음 시퀀스 번호를 저장하는 데 사용되는 카운터는 부모 노드에서 유지 관리하는 부호 있는 정수(4바이트)이며, 카운터는 2147483647을 초과하여 증가하면 오버플로됩니다(이름 "<경로>-2147483647"이 됨).경로>경로>

ZooKeeper 세션 ZooKeeper 클라이언트는 언어 바인딩을 사용하여 서비스에 대한 핸들을 만들어 ZooKeeper 서비스와 세션을 설정합니다. 핸들이 생성되면 CONNECTING 상태에서 시작되고 클라이언트 라이브러리는 ZooKeeper 서비스를 구성하는 서버 중 하나에 연결을 시도하는 시점에서 CONNECTED 상태로 전환됩니다. 정상 작동 중에는 이 두 가지 상태 중 하나가 됩니다. 세션 만료 또는 인증 실패와 같은 복구할 수 없는 오류가 발생하거나 응용 프로그램이 핸들을 명시적으로 닫으면 핸들이 CLOSED 상태로 이동합니다. 다음 그림은 ZooKeeper 클라이언트의 가능한 상태 전환을 보여줍니다.

@Value

  • https://www.baeldung.com/spring-value-annotation