Top

주키퍼 ZooKeeper [고가용성 서버를 위한 분산 프로세스 코디네이션]

  • 원서명ZooKeeper: Distributed Process Coordination (ISBN 9781449361303)
  • 지은이플라이보 융케이라, 벤자민 리드
  • 옮긴이한연수, 박용준
  • ISBN : 9788960775978
  • 28,000원
  • 2014년 08월 29일 펴냄
  • 페이퍼백 | 316쪽 | 188*245mm
  • 시리즈 : 데이터 과학, 클라우드 컴퓨팅

책 소개

요약

우리가 매일 이용하는 수많은 응용프로그램은 대부분 분산 시스템하에서 운영되고 있다. 아파치 주키퍼(Apache ZooKeeper)는 핵심 분산 컴퓨팅 개념을 비롯해 견고한 분산 시스템을 쉽게 구성하기 위해 만들어졌다. 이 책은 이런 분산 시스템에 대한 배경지식과 함께 마스터-워커(master-worker) 예제를 통해 주키퍼 API 사용 방법, 와처(watcher) 사용 방법, 장애 처리 방법 등을 다룬다. 또한 주키퍼가 동작하는 과정을 이해할 수 있도록 내부 구조에 대한 설명을 제공해 효과적인 주키퍼 사용과 운영 방법에 대해 설명한다.

이 책에서 다루는 내용

코디네이션 기능 없이 동작하는 분산 애플리케이션을 구성하는 것은 어렵다. 이 책에서는 여러분이 애플리케이션의 로직에 집중할 수 있도록 아파치 주키퍼가 도움을 주는 분산 시스템 관리에 대한 실용적인 방법을 제시한다. 물론 주키퍼를 사용하더라도 코디네이션 작업을 구현하는 것은 쉽지 않다. 그렇지만 이 책에서는 여러분이 쉽게 이해할 수 있도록 훌륭한 예제를 제공하며, 주키퍼를 사용하면서 개발자와 관리자 모두가 인지해야 하는 주의사항에 대해 짚어준다.

주키퍼 컨트리뷰터인 플라비오 융케이라와 벤자민 리드는 분산 시스템의 원리에 대해 소개하고 주키퍼 프로그래밍 테크닉과 주키퍼 서버를 관리하는 데 필요한 정보를 세 개의 부로 나누어 제공한다.

  • 주키퍼가 일반적인 코디네이션 작업을 해결하는 방법에 대한 학습
  • 주키퍼 API의 자바와 C 구현 방법과 차이점 비교
  • 주키퍼 상태 변화를 추적하고 상태 변화에 반응하는 메소드 사용
  • 네트워크 장애, 애플리케이션 프로세스 장애, 주키퍼 자체의 장애를 처리하는 방법
  • 주키퍼에서 어려운 부분인 동시성, 순서, 설정을 다루는 방법 학습
  • 연결 관리를 위한 고수준 인터페이스인 큐레이터 사용
  • 주키퍼의 내부 구조와 관리 도구에 익숙해짐
이 책의 대상 독자

이 책은 분산 시스템 개발자와 운영 환경에서 주키퍼를 사용하는 애플리케이션 관리자를 대상으로 한다. 기본적으로 자바에 대한 지식이 있는 것으로 가정한다. 이 책에서는 주키퍼를 효율적으로 사용할 수 있게 분산 시스템 원론에 대한 배경 지식을 제공하고자 한다.

이 책의 구성

1부는 아파치 주키퍼와 같은 시스템이 생겨난 배경을 이야기한다. 그리고 분산 시스템을 사용하는 데 필요한 분산 시스템의 필수 배경 지식에 대해 설명한다. ‘1장, 소개’에서는 주키퍼로 할 수 있는 일을 설명하고, 주키퍼로 목표를 달성하는 방법에 대해 설명한다. ‘2장, 주키퍼와 첫 만남’에서는 주키퍼의 기본 개념과 구성 요소에 대해 살펴본다. 명령 행에서 주키퍼를 사용해봄으로써 주키퍼로 할 수 있는 것에 대한 구체적인 아이디어를 얻는 방법을 설명한다.

2부는 라이브러리 호출과 프로그래머가 알고 있어야 하는 프로그래밍 테크닉에 대해 다룬다. 이 내용은 유용하지만 시스템 관리자들은 꼭 읽지 않아도 되며, 개발자들이 가장 많이 사용하는 자바 API에 초점을 맞춘다. 다른 언어를 사용하고 있다면 2부는 기본 테크닉과 기능에 대해 학습하는 용도로만 읽고 난 다음, 다른 언어로 구현해보는 것도 좋겠다. 아울러 C 언어 애플리케이션 개발자를 위한 C 언어 바인딩을 다루는 장도 추가적으로 제공한다. ‘3장, 주키퍼 API 시작’에서는 자바 API에 대해 소개한다. ‘4장, 상태 변경’에서는 주키퍼 상태 변경 사항을 추적하고 변경을 처리하는 방법에 대해 설명한다. ‘5장, 장애 처리’에서는 시스템이나 네트워크 문제를 복구하는 방법에 대해 보여준다. ‘6장, 주키퍼 사용자 위험 부담 원칙’에서는 문제 상황을 피하기 위한 다양한 중요 고려사항들에 대해 설명한다. ‘7장, C 클라이언트’에서는 자바가 아닌 모든 언어의 주키퍼 API 구현의 기본이 되는 C API에 대해 소개한다. 이 장은 자바 언어 외의 다른 언어를 사용하는 프로그래머에게 중요하다. ‘8장, 큐레이터: 주키퍼에 대한 고수준 API’에서는 주키퍼에 대한 고급 단계 API에서는 많이 사용하는 고수준의 추상화 인터페이스인 큐레이터에 대해 설명한다.

3부는 시스템 관리자를 위한 주키퍼 관련 내용을 설명한다. 특히 주키퍼 내부 구조를 설명하는 장은 프로그래머에게도 유익할 것이다. ‘9장, 주키퍼의 내부 구조’에서는 관리 작업에 영향을 주는 주키퍼 개발자들이 고민해서 선택한 몇 가지 선택 항목들에 대해 설명한다. ‘10장, 주키퍼 운영’에서는 주키퍼 설정 방법을 설명한다.

저자/역자 소개

저자 서문

사람들이 매일 이용하는 수많은 응용프로그램은 분산 시스템으로 운영되지만 이러한 분산 시스템을 구성하는 것은 어렵다. 그리고 가까운 시일 내에 분산 시스템에 대한 의존성을 제거할 수 있을 것으로 보이지 않는다. 아파치 주키퍼는 견고한 분산 시스템을 구성하는 작업을 쉽게 만들기 위해 설계되었다. 주키퍼는 핵심 분산 컴퓨팅 개념을 포함하여 만들어졌다. 주키퍼의 주요 목표는 개발자가 이해하기 쉽고 프로그래밍하기 쉬운 간결한 인터페이스를 제시하는 것이다. 그러므로 주키퍼를 이용하면 분산 시스템을 구성하는 작업을 단순하게 만들 수 있다.

주키퍼를 사용하더라도 분산 시스템을 만드는 작업은 그리 만만치 않다. 이것이 이 책을 쓰는 계기가 되었다. 이 책은 여러분이 주키퍼를 사용하여 분산 시스템을 빠르게 구성할 수 있도록 도와줄 것이다. 이 책에서는 여러분이 분산 시스템 전문가인 것처럼 생각할 수 있도록 기본 개념부터 시작한다. 미리 숙지하고 있어야 하는 분산 시스템의 주의사항을 설명하는 부분에서 간단하지만은 않은 기본 개념 설명에 약간 두려울 수도 있을 것이다. 하지만 걱정하지는 말자. 이 책에서 제시하는 주요 문제들을 제대로 이해한다면 거대한 분산 응용프로그램을 구성하는 올바른 방법을 알게 될 것이다.

저자 소개

플라비오 융케이라(Flavio Junqueira)

영국 캠브릿지에 있는 마이크로소프트 연구소의 연구원이다. 샌디에고 캘리포니아 대학에서 컴퓨터 과학 박사 학위를 받았으며, 분산 알고리즘, 동시성, 확장성 등을 포함해 분산 시스템의 다양한 측면에 관심이 있다. 또한 아파치 주키퍼(PMC 의장 및 커미터)와 아파치 북키퍼(BookKeeper)(커미터) 같은 아파치 프로젝트의 적극적인 공헌자다. 여가 시간에는 주로 잠을 잔다.

벤자민 리드(Benjamin Reed)

페이스북에서 일하는 소프트웨어 엔지니어로서 작은 주제들을 다루는 일을 하고 있다. 이전에는 야후! 연구소에서 (큰 주제를 다루는) 책임 연구원이었고 IBM 알마덴 연구소의 (큰 주제와 작은 주제를 다루는) 연구원이었다. 산타크루즈 캘리포니아 대학에서 컴퓨터 과학 박사 학위를 받았으며, 분산 컴퓨팅, 빅데이터 처리, 분산 저장소, 시스템 관리, 임베디드 프레임워크 분야에서 일했다. 하둡과 리눅스 같은 여러 가지 오픈소스 프로젝트에도 참여했다. 아파치 재단이 후원하는 피그(Pig), 주키퍼, 북키퍼 프로젝트를 시작하는 데 도움을 주었다.

옮긴이의 말

주키퍼는 앙상블로 이루어진 트리 구조의 데이터 저장소로서 그 개념이 매우 간단하다. 그래서 주키퍼를 처음 접한 많은 사람은 종종 이게 무슨 코디네이터이고 어떻게 클러스터 멤버십이나 큐로 사용할 수 있다는 것인지 의문이 생긴다. 이런 분들께 이 책을 적극적으로 추천한다. 이 책은 주키퍼가 무엇을 위해 만들어졌고 어떤 일을 할 수 있는지에 대한 배경 설명부터 예제를 통한 실제 구현으로 이런 궁금증을 해소해준다. 또한 주키퍼를 실제 필드에 적용해보고자 하는 분들에게는 주키퍼 사용에 대한 저자의 노하우를 알려주고, 주키퍼의 동작 원리를 자세히 설명해주기 때문에 직접 주키퍼를 운영하는 데 큰 도움을 줄 것이다.
- 한연수

하둡을 시작으로 에코 시스템이 형성되면서 HBase, 하이브(Hive), 피그(Pig), 머하웃(Mahout), 스파크(Spark), 타조(Tajo) 등 다양한 분산 시스템 컴포넌트들이 나왔습니다. 그 중 주키퍼는 분산 시스템을 코디네이션합니다. 다시 말해, 분산 환경의 시스템들을 관리하도록 도와줘서 안정적으로 운영되도록 하는 역할을 합니다.

저는 하둡 에코 시스템 중 주키퍼를 먼저 접했습니다. 처음 주키퍼를 설치한 후에 ‘파일 시스템과 유사한 트리 구조에 데이터를 저장하는 것으로 과연 무엇을 할 수 있을까?’라는 의문이 생겼지만 분산 락, 멤버십 관리, 큐, 이벤트 발행 등 주키퍼를 다양하게 활용해보면서, 주키퍼는 분산 시스템을 구성할 때 가장 먼저 떠오르는 컴포넌트였습니다.

주키퍼는 간단한 몇 가지 설정만으로도 대부분 잘 동작하기 때문에 하둡(Hadoop), HBase 같은 분산 시스템들과 달리 쉽게 사용할 수 있는 분산 시스템 컴포넌트입니다. 하지만, 다양한 시스템 환경에서 발생하는 복합적인 문제들을 정확히 파악하고 해결하려면 주키퍼와 분산 시스템에 대한 이해가 필요합니다. 이 책에서는 분산 시스템에서 발생하는 상황들에 대한 설명부터 주키퍼의 동작 원리, 코드를 참조할 수 있는 가이드를 제공합니다. 이런 내용들이 분산 시스템을 구성하거나 현재 주키퍼를 사용하면서 겪고 있는 문제를 해결하는 데 도움이 되었으면 합니다.
- 박용준

주키퍼를 처음 접한 건 4년 전 소셜커머스 서비스 프로젝트를 진행할 때였다. 당시 애플리케이션 서버의 클러스터 멤버십을 구성하기 위해 주키퍼를 사용했는데, 간단한 프로그래밍으로 분산된 서버들의 클러스터 관리를 손쉽게 할 수 있다는 것에 큰 감동을 받았다. 이후 많은 프로젝트에서 주키퍼를 큐, 메타데이터 저장소, Failover 구현 등으로 사용했고 물론 지금도 쓰고 있다.

옮긴이 소개

한연수

2010년부터 그루터(Gruter) 빅데이터 플랫폼 팀에서 하둡 에코시스템을 활용한 플랫폼과 서비스를 개발하고 있다. 정보시스템 공학과 컴퓨터 공학을 전공한 IT 세계에 대해 꿈 많은 개발자다. 주요 관심 분야는 분산시스템, 대용량 실시간 데이터 처리, 임베디드 응용프로그램이고, 특히 오픈소스 프로젝트에 관심이 많다.

박용준

분산 시스템, 소프트웨어 아키텍처, 개발 방법론 등 소프트웨어와 관련된 다양한 영역에 관심이 있으며 최근에는 개발 생산성을 높일 수 있는 방법들에 대해 관심을 집중하고 있다. 현재 그루터에서 소프트웨어 엔지니어로 근무하며 다양한 경험을 쌓고 있다.

목차

목차
  • 1부 주키퍼의 개념과 기본
  • 1장 소개
    • 주키퍼의 역할
    • 주키퍼로 인해 달라진 것들
    • 주키퍼의 역할이 아닌 일들
    • 아파치 프로젝트
    • 주키퍼를 이용한 분산 시스템 구성
    • 예제: 마스터 워커 애플리케이션
    • 마스터 결함
    • 워커 결함
    • 통신 결함
    • 작업 요약
    • 분산 코디네이션이 어려운 이유
    • 주키퍼의 성공과 주의 사항

  • 2장 주키퍼와 첫 만남
    • 주키퍼 기본
    • API 개요
    • Znode의 다양한 모드
    • 와치와 알림
    • 버전
    • 주키퍼 아키텍처
    • 주키퍼 쿼럼
    • 세션
    • 주키퍼 시작하기
    • 첫 번째 주키퍼 세션
    • 상태와 세션의 생명주기
    • 주키퍼 쿼럼
    • 기본 요소 구현: 주키퍼를 이용한 락
    • 마스터 워커 예제 구현
    • 마스터 역할
    • 워커, 작업, 할당
    • 워커 역할
    • 클라이언트 역할
    • 결론

  • 2부 주키퍼 프로그래밍
  • 3장 주키퍼 API 시작
    • 주키퍼 클래스패스 설정
    • 주키퍼 세션 생성
    • Watcher 구현
    • Watcher 예제 실행
    • 마스터십 획득
    • 비동기로 마스터십 획득
    • 메타데이터 설정
    • 워커 등록
    • 작업 큐
    • 관리 클라이언트
    • 결론

  • 4장 상태 변경
    • 일회성 트리거
    • 일회성 이벤트 트리거를 놓칠 수 있을까?
    • 와치를 설정하는 좀 더 구체적인 방법
    • 공통 패턴
    • 마스터-워커 예제
    • 멤버십 변경
    • 워커 목록 변경을 위한 마스터 대기
    • 새로운 작업 할당을 위한 마스터 대기
    • 새로운 작업 할당을 위한 워커 대기
    • 작업 실행 결과를 위한 클라이언트 대기
    • 또 다른 방법: 멀티옵
    • 명시적인 캐시관리의 대안으로써 와치
    • 순서 보장
    • 쓰기 순서
    • 읽기 순서
    • 알림 순서
    • 무리 효과와 와치의 확장성
    • 결론

  • 5장 장애 처리
    • 복구 가능한 장애
    • Disconnected 이벤트와 기존에 존재하던 와치
    • 복구불능 장애
    • 리더 선출과 외부 자원
    • 결론

  • 6장 주키퍼 사용자 위험 부담 원칙
    • ACL 사용
    • 내장된 인증 체계들
    • SASL과 커베로스
    • 새로운 체계 추가
    • 세션 복구
    • znode가 재생성되면 버전은 초기화된다
    • sync 호출
    • 순서 보장
    • 연결이 끊겼을 때의 순서
    • 동기 API와 멀티스레드 상황의 순서
    • 동기와 비동기 호출이 섞여 있는 경우의 순서
    • 데이터와 자식 수의 제한
    • 주키퍼 서버 임베딩
    • 결론

  • 7장 C 클라이언트
    • 개발 환경 설정
    • 세션 시작
    • 마스터 부트스트랩
    • 리더십
    • 태스크 할당
    • 멀티스레드 대 싱글스레드 클라이언트
    • 결론

  • 8장 큐레이터: 주키퍼에 대한 고수준API
    • 큐레이터 클라이언트
    • 플루언트 API
    • 리스너
    • 큐레이터에서 상태 변경
    • 몇 가지 특이사항
    • 레시피
    • 리더 래치
    • 리더 선출
    • 자식 캐시
    • 결론

  • 3부 주키퍼 관리
  • 9장 주키퍼의 내부 구조
    • 요청, 트랜잭션, 식별자
    • 리더 선출
    • 잽: 상태 변경사항 브로드캐스팅
    • 옵저버
    • 서버의 기본 구성
    • 단독 서버
    • 리더 서버
    • 팔로워 서버와 옵저버 서버
    • 로컬 저장소
    • 로그와 디스크 사용
    • 스냅샷
    • 서버와 세션
    • 서버와 와치
    • 클라이언트
    • 직렬화
    • 결론

  • 10장 주키퍼 운영
    • 주키퍼 서버 설정
    • 기본 설정
    • 저장소 설정
    • 네트워크 설정
    • 클러스터 설정
    • 인증과 권한 부여 옵션
    • 안전하지 않은 옵션
    • 로깅
    • 전용 자원
    • 주키퍼 앙상블 설정
    • 과반수 규칙
    • 설정 가능한 쿼럼
    • 옵저버
    • 재설정
    • 클라이언트 연결 문자열 관리
    • 쿼터
    • 멀티테넌시
    • 파일 시스템 레이아웃과 형식
    • 트랜잭션 로그
    • 스냅샷
    • 에퍽 파일
    • 저장된 주키퍼 데이터의 사용
    • 포-레터 단어
    • JMX 모니터링
    • 원격 연결
    • 도구
    • 결론

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

■ 2014. 10. 30

[ p31 2행 ]
발생했다 것을 -> 발생했다는 것을

[ p34 정확히 한 번과 최대 한 번의 의미(박스) 9행 ]
시맥틱 -> 시맨틱

[ p39 7행 ]
다른 개발자들은 -> 개발자들은

[ p42 ]
5행: 주키퍼 작업 -> 주키퍼 연산
아래에서 4행: /wokers -> /workers, znode는 부모 znode로 -> 부모 znode로 ('znode는' 삭제)

[ p43 ]
1행: znode는 워커가 실행할 -> 워커가 실행할 ('znode는' 삭제)
5행: znode는 워커에게 -> 워커에게 ('znode는' 삭제)
API 개요 3행: 주키퍼는 저장된 데이터를 저장 형식에 대해 분석하지 않는다. -> 주키퍼는 저장 내용에 대해서 관여하지 않는다.

[ p53 주키퍼 시작 4행 ]
맥 OS X 또는 다른 유닉스 라이크 시스템에서 -> 맥 OS X 등의 유니크 계열 시스템에서

[ p88 마스터십 획득 8행 ]
시도할 것 이다. -> 시도할 것이다.

[ p92 1행 ]
ConnectionLossException 처리한다. -> ConnectionLossException을 처리한다.

[ p93 2행 ]
인터럽션 -> 인터럽트

[ p94 3행 ]
로직을 개발한다 -> 로직을 넣는다.

[ p114 8행 ]
첫번 째부터 -> 첫 번째부터

[ p116 2행 ]
콜백 객체 구현하고 -> 콜백 객체를 구현하고

[ p137 ]
아래에서 10행: 태스크을 -> 태스크를

[ p145 아래에서 3행 ]
비동시 -> 비동기

[ p169 SASL과 커베로스 아래에서 1행 ]
SASLAuthentication Provider -> SASLAuthenticationProvider

[ p174 아래에서 12행 ]
Op1 작업 요청하게 된다. -> Op1 작업을 요청하게 된다.

[ p175 CONNECTIONLOSS 이벤트 발생 자체를 없애는 건 어떨까?(박스) 4행 ]
물어볼 수는 있지 않을까? 생각한다. -> 물어볼 수는 있지 않을까 생각한다.

[ p177 7행 ]
로그 메시지를 보여지게 되는 -> 로그 메시지를 보여주게 되는

[ p182 아래에서 2행 ]
ZOO_EXPIRED_SES SION_STATE -> ZOO_EXPIRED_SESSION_STATE

[ p185 1행 ]
비동기 호출로써 -> 비동기 호출로서

[ p201 ]
아래에서 7행: zookeep er_mt -> zookeeper_mt

[ p205 ]
아래에서 9행: CEATE -> CREATE
아래에서 6행 자바에서 실행자는 -> 실행자는 자바에서
아래에서 5행 객체로써 -> 객체로서

[ p206 리스너 1행 ]
매커니즘 -> 메커니즘

[ p224 요청, 트랜잭션, 식별자 1행 ]
주키퍼 서버는 읽기 요청은 요청을 -> 주키퍼 서버는 읽기 요청을

[ p225 8행 ]
트랙잭션 -> 트랜잭션

[ p231 그림 9.3 3번 ]
서버와 함꼐 -> 서버와 함께

[ p237 ]
1행: 뒤쳐져 -> 뒤처져
코드 들여다 보기 5행: LOOKING상태에서 -> LOOKING 상태에서
코드 들여다 보기 7행: SNAP에 대해 비교를 -> SNAP 비교를

[ p244 3행 ]
핵심 과정(Critical Path) -> 임계 경로(Critical Path)

[ p245 아래에서 3행 ]
스냅샷은 어떠한 반드시 -> 스냅샷은 어떠한

[ p250 ]
아래에서 3행: 주키퍼 코드 베이스는 -> 주키퍼 코드 베이스의
아래에서 1행: Jute 대체하는 -> Jute로 대체하는

[ p258 6행 ]
남기는 않는 -> 남기지 않는

[ p261 12행 ]
이 제한 동작하기 전까지 -> 이러한 제한 동작 전까지

[ p265 ]
2행: 리더 선출하는 동안 -> 리더를 선출하는 동안
인증과 권한 부여 옵션 5행: 클라이언트 모든 -> 클라이언트는 모든

[ p267 ]
새너티 검사 변경 4행: 목록을 반환 시도할 때 -> 목록을 반환하려 시도할 때

[ p270 아래에서 10행 ]
설정된 경우는 영향을 더욱 클 것이다. -> 설정된 경우에는 영향이 더욱 클 것이다.

[ p292 ]
옮긴이 주 삭제

[ p15 목차, p86, p88, p292-293 ]
포 레터 단어/포-레터 워드/포-레터 단어 -> '4글자 명령' 으로 일괄 변경