이미 소장하고 있다면 판매해 보세요.
|
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 모니터링 __원격 연결 __도구 __결론 |
|
★ 이 책에서 다루는 내용 ★
코디네이션 기능 없이 동작하는 분산 애플리케이션을 구성하는 것은 어렵다. 이 책에서는 여러분이 애플리케이션의 로직에 집중할 수 있도록 아파치 주키퍼가 도움을 주는 분산 시스템 관리에 대한 실용적인 방법을 제시한다. 물론 주키퍼를 사용하더라도 코디네이션 작업을 구현하는 것은 쉽지 않다. 그렇지만 이 책에서는 여러분이 쉽게 이해할 수 있도록 훌륭한 예제를 제공하며, 주키퍼를 사용하면서 개발자와 관리자 모두가 인지해야 하는 주의사항에 대해 짚어준다. 주키퍼 컨트리뷰터인 플라비오 융케이라와 벤자민 리드는 분산 시스템의 원리에 대해 소개하고 주키퍼 프로그래밍 테크닉과 주키퍼 서버를 관리하는 데 필요한 정보를 세 개의 부로 나누어 제공한다. ■ 주키퍼가 일반적인 코디네이션 작업을 해결하는 방법에 대한 학습 ■ 주키퍼 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장, 주키퍼 운영’에서는 주키퍼 설정 방법을 설명한다. ★ 저자 서문 ★ 사람들이 매일 이용하는 수많은 응용프로그램은 분산 시스템으로 운영되지만 이러한 분산 시스템을 구성하는 것은 어렵다. 그리고 가까운 시일 내에 분산 시스템에 대한 의존성을 제거할 수 있을 것으로 보이지 않는다. 아파치 주키퍼는 견고한 분산 시스템을 구성하는 작업을 쉽게 만들기 위해 설계되었다. 주키퍼는 핵심 분산 컴퓨팅 개념을 포함하여 만들어졌다. 주키퍼의 주요 목표는 개발자가 이해하기 쉽고 프로그래밍하기 쉬운 간결한 인터페이스를 제시하는 것이다. 그러므로 주키퍼를 이용하면 분산 시스템을 구성하는 작업을 단순하게 만들 수 있다. 주키퍼를 사용하더라도 분산 시스템을 만드는 작업은 그리 만만치 않다. 이것이 이 책을 쓰는 계기가 되었다. 이 책은 여러분이 주키퍼를 사용하여 분산 시스템을 빠르게 구성할 수 있도록 도와줄 것이다. 이 책에서는 여러분이 분산 시스템 전문가인 것처럼 생각할 수 있도록 기본 개념부터 시작한다. 미리 숙지하고 있어야 하는 분산 시스템의 주의사항을 설명하는 부분에서 간단하지만은 않은 기본 개념 설명에 약간 두려울 수도 있을 것이다. 하지만 걱정하지는 말자. 이 책에서 제시하는 주요 문제들을 제대로 이해한다면 거대한 분산 응용프로그램을 구성하는 올바른 방법을 알게 될 것이다. ★ 옮긴이의 말 ★ 하둡을 시작으로 에코 시스템이 형성되면서 HBase, 하이브(Hive), 피그(Pig), 머하웃(Mahout), 스파크(Spark), 타조(Tajo) 등 다양한 분산 시스템 컴포넌트들이 나왔습니다. 그 중 주키퍼는 분산 시스템을 코디네이션합니다. 다시 말해, 분산 환경의 시스템들을 관리하도록 도와줘서 안정적으로 운영되도록 하는 역할을 합니다. 저는 하둡 에코 시스템 중 주키퍼를 먼저 접했습니다. 처음 주키퍼를 설치한 후에 ‘파일 시스템과 유사한 트리 구조에 데이터를 저장하는 것으로 과연 무엇을 할 수 있을까?’라는 의문이 생겼지만 분산 락, 멤버십 관리, 큐, 이벤트 발행 등 주키퍼를 다양하게 활용해보면서, 주키퍼는 분산 시스템을 구성할 때 가장 먼저 떠오르는 컴포넌트였습니다. 주키퍼는 간단한 몇 가지 설정만으로도 대부분 잘 동작하기 때문에 하둡(Hadoop), HBase 같은 분산 시스템들과 달리 쉽게 사용할 수 있는 분산 시스템 컴포넌트입니다. 하지만, 다양한 시스템 환경에서 발생하는 복합적인 문제들을 정확히 파악하고 해결하려면 주키퍼와 분산 시스템에 대한 이해가 필요합니다. 이 책에서는 분산 시스템에서 발생하는 상황들에 대한 설명부터 주키퍼의 동작 원리, 코드를 참조할 수 있는 가이드를 제공합니다. 이런 내용들이 분산 시스템을 구성하거나 현재 주키퍼를 사용하면서 겪고 있는 문제를 해결하는 데 도움이 되었으면 합니다. - 박용준 주키퍼를 처음 접한 건 4년 전 소셜커머스 서비스 프로젝트를 진행할 때였다. 당시 애플리케이션 서버의 클러스터 멤버십을 구성하기 위해 주키퍼를 사용했는데, 간단한 프로그래밍으로 분산된 서버들의 클러스터 관리를 손쉽게 할 수 있다는 것에 큰 감동을 받았다. 이후 많은 프로젝트에서 주키퍼를 큐, 메타데이터 저장소, Failover 구현 등으로 사용했고 물론 지금도 쓰고 있다. 주키퍼는 앙상블로 이루어진 트리 구조의 데이터 저장소로서 그 개념이 매우 간단하다. 그래서 주키퍼를 처음 접한 많은 사람은 종종 이게 무슨 코디네이터이고 어떻게 클러스터 멤버십이나 큐로 사용할 수 있다는 것인지 의문이 생긴다. 이런 분들께 이 책을 적극적으로 추천한다. 이 책은 주키퍼가 무엇을 위해 만들어졌고 어떤 일을 할 수 있는지에 대한 배경 설명부터 예제를 통한 실제 구현으로 이런 궁금증을 해소해준다. 또한 주키퍼를 실제 필드에 적용해보고자 하는 분들에게는 주키퍼 사용에 대한 저자의 노하우를 알려주고, 주키퍼의 동작 원리를 자세히 설명해주기 때문에 직접 주키퍼를 운영하는 데 큰 도움을 줄 것이다. - 한연수 |