Server, ZooKeeper
코디네이션 시스템
- 분산 시스템 설계의 문제점을 해결하는 서비스 시스템
- 1.분산된 시스템간 정보를 어떻게 공유할것이고
- 2.클러스터에 있는 server들의 상태를 확인할 필요가 있고
- 3.분산된 server간 동기화를 위한 lock을 처리하는 것
-
분산 시스템은 각각의 어플리케이션이 돌아가는 환경, N/W가 달라 장애 발생시 정확한 진단을 내리기 어렵다
- 분산 시스템 내에서 중요한 상태 정보나 설정 정보 등을 유지한다.
- 고가용성을 제공
- 코디네이션 서비스의 장애는 전체 시스템의 장애를 유발할수 있으므로, 이중화등을 통해 고가용성을 제공
- 종류
- ZooKeeper가 있고 ( NoSQL의 한종류인 Apache, 대용량 분산 큐 시스템 Kafka ) 에 사용된다
주키퍼(Zookeeper)
- 오픈소스
목적
- __분산 처리 시스템을 이루는 수많은 프로세스들이 안전하고 원활하게 서비스 할 수 있도록 도와준다__
- 정보를 중앙에 집중하고 구성관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공.
- 개발자가 분산 코디네이션 로직보다 __비즈니스 핵심 로직에__ 집중 하게끔 지원하는 역할을 한다
- ### 특징
- _znode에 상태정보를 key-value형태로_ 저장.
- data를 _memory에 저장해서 처리량, 속도 좋다_
- 신뢰성 있는 서비스
- cluster 라는 호스트 세트를 구성한다.
- cluster 안의 과반수 이상의 노드가 장애발생하면 서비스가 중지된다. -> 장애가 발생해도 끊김없는 서비스 제공가능.
- 주키퍼는 직접 어플리케이션의 작업을 조율하지 않는다. 구성 요소들을 조율하는건 서버 개발자의 책임, 주키퍼는 이를 쉽개 개발 할수 있도록 도와줌
주키퍼가 다루는 정보
- 서버들의 설정 정보, 클러스터 구성시 마스터 서버
- 각각의 작업에 할당되어 있는 서버가 무엇인지 등의 정보
주키퍼가 사용되는 서비스
- Apache HBase
- Hadoop에서 사용되는 HBase는 cluster master를 선출하기 위해 주키퍼를 사용
- 현재 이용 가능한 서버가 어떤 것들이 있는지 정보 저장, cluster의 메타 데이터 보관에 쓰인다
- Apache Kafka
- kafka server 크래시를 감시하기 위해 사용된다
- 새로운 토픽생성시 , 토픽의 생성과 소비 상태를 저장하기 위해 주키퍼 도입
구성
- Leader Follower로 구성되는 Master-Slave 아키텍처
- 디렉토리 형태의 data 저장소
- znode라는 data 저장 객체(key,value)식.
- 이 객체에 data를 넣고 빼는 기능만 제공
- watcher
- 특정 znode에 watch걸어놓으면, 해당 znode가 변경시 client에게 callback호출날린다
- client가 해당 znode가 변경된걸 알게도고, watcher 삭제된다
ZooKeeper 활용 시나리오
- 큐
- watcher와 sequence node를 이용하면 큐 생성가능
- queue라는 node를 만들고, 이 노드의 chide node를 sequence node로 구성하면, 새롭게 생성되는 메시지 들은 sequence node로 순차적으로 생성
- 이 큐를 읽는 client가 큐node를 watch하도록 설정하면,
- 메시지가 들어올 때 마다 call back을 받아서, 마치 메시지 queue의 pub/sub 형태
- 대용량 메시지&애플리케이션은 MQ(Rabbit MQ등)을 활용하고
- ZooKeeper는 클러스터간 통신용 큐로 활용하는것 고려