- 다양한 분산된 서버를 관리하는 기능수행.
하기 수행을 쉽게 구현할 수 있는 기능들을 제공한다.
- 네임 서비스, 환경설정, 그룹 멤버쉽
- Double Barriers
- 우선순위큐
- 공유 락 제어
- 두단계 커밋
- 리더 선출
위의 기능들을 쉽게 구현할수 있게 메커니즘을 제공하는것이다.
구글의 처비(Chubby)를 참고해 만들었다.
※ 주키퍼 시스템 구성
: 분산 환경을 쉽게 관리하는 기능을 제공하고 이 역시 여러대의 서버로 구성된 분산시스템이다.
N개의 서버와 클라이언트 API로 구성돼 있다.
- 파일 시스템과 비슷하게 계층적인 데이터를 저장하여 구성한다. 이 데이터들은 주키퍼 서버들
사이에 복제돼 일부 주키퍼 서버가 장애가 발생해도 서비스에 무리가 없도록 한다.
주키퍼 서버에 데이터의 추가, 삭제, 값 변동등의 상태가 변경이 되었을때 주키퍼 서버가 클라이언트로 변경사항을 전달하는 이벤트를 발생시킨다.
주키퍼 클라이언트는 라이브러리에서 단순한연산을 제공한다. 사용자 애플리케이션은 이라이브러리를 이용해 주키퍼 서버에 데이터를 저장, 삭제하는 연산을 수행하거나 이벤트를 등록한다.
분산시스템에서 가장고려해야할 SPOF(Single Point Of Failure)이다. SPOF는 분산시스템 구성에서 장애가 발생하면 전체 시스템에 장애가 발생할 수 있는 지점을 말한다. 이런 지점은 반드시 이중화 구성을 해서 SPOF를 제거해야 한다. 다음 예시를 보자.
예1) 특정 애플리케이션 서버는 장애가 발생하면 시스템 전체에 문제가 발생할 수 있는 서버로
마스터-스탠바이 형태로 이중화 구성을 했다.
예2) 모니터링 서버는 마스터 서버를 감시하고 있으며, 마스터 장애 발생 시 스탠바이 서버가
마스터 역할을 수행하게 명령을 내린다.
결국 마스터서버, 스탠바이 서버, 모니터링 서버 이렇게 3개가 구성되는데.. 모니터링 서버가 맛탱이가있을때 마스터도 맛탱이 가면 서버담당자는 잡코리아를 뒤져야 할까...??
이렇듯 위 와 구성에서 모니터링 서버가 SPOF가 된다는 것이다.
다른 예로 모든 서버가 공유해야할 중요한 데이터가 있고 이 데이터가 수시로 수정이된다. 그리고 이데이터에 접근할 수 없을 경우 시스템 전체에 문제가 발생한다고 하면 이데이터를 관리하는 서버가 SPOF가 된다. 결국 SPOF를 복제하여 분산 관리 되어야할 듯 하다.
주키퍼는 분산환경에서 절대 장애가 발생하지 않는 클러스터, 항상 접근 할 수있는 데이터를 보관할 수 있는 데이터 저장소의 역할을 수행함으로써 분산 아키텍처에서 SPOF를 쉽게 제거할 수 있는 방법을 제공한다. 위쪽의 그림에서와 같이 모든 데이터들은 주키퍼 서버사이에 동기화돼 관리되고 클러스터는 항상 3대 이상의 서버로 운영된다. 특정 주키퍼 서버에 장애가 발생하면 클라이언트 라이브러리에 의해 자동으로 다른 서버로 접속하며, 새로운 주키퍼 서버를 추가하면 데이터 동기화는 자동으로 맞춰진다. 이런 주키퍼의 특징으로 인해 분산환경의 가장 정점에서 분산 환경 전체를 관리하는 역할을 수행한다.