이미 소장하고 있다면 판매해 보세요.
|
1부 클라우드 컴퓨팅 개요
1장 클라우드의 출현 인터넷 서비스 업체의 성공 아마존의 인프라 서비스 구글의 컴퓨팅 인프라와 플랫폼 서비스 세일즈포스닷컴의 소프트웨어 서비스 뉴욕타임즈의 클라우드 컴퓨팅 활용 사례 클라우드 컴퓨팅 개념의 등장 포괄적인 개념으로서의 클라우드 클라우드 컴퓨팅에 대한 정의 클라우드 컴퓨팅의 분류 2장 클라우드 컴퓨팅 아키텍처 아키텍처의 변화 분산 아키텍처의 출현 프레임워크와 경량 컨테이너 클라우드 서비스를 위한 아키텍처 분산 기술의 발전 아키텍처 단계별 진화 오픈소스 솔루션 2부 클라우드 컴퓨팅 기술 3장 경량 애플리케이션 서버 쓰리프트: 페이스북의 애플리케이션 서버 시스템 요구 사항 설치 인터페이스 정의 언어 코드 생성과 개발 데모: 블로그 애플리케이션 서버 에이브로: 더그 커팅이 만든 애플리케이션 서버 스키마 객체 컨테이너 파일 프로토콜 설치 코드 생성와 GenAvro 서버와 클라이언트 코드 개발 제티: 내장형 웹서버 4장 분산 코디네이터 분산된 환경에서의 고려 사항 네임 서비스/부하 분산 분산 락이나 동기화 문제 장애 상황 판단 문제 환경 설정 값 관리 주키퍼: 야후의 분산 코디네이터 주키퍼 시스템 구성 주키퍼 설치 데이터 모델 세션 이벤트 처리 데이터 관리 정책 멀티서버 구성과 운영 C 언어 API 분산 락 구현 분산 시스템 구성: 주키퍼 활용 클러스터 멤버십과 네이밍 서비스 이중화 구성 애플리케이션 환경 설정 관리 생성자/소비자 5장 하둡 분산 파일 시스템 구글 파일 시스템 하둡 파일 시스템 구성 동작 방식 특징과 장단점 설치 설치 요구 사항 ssh 환경 설정 다운로드 환경 설정 배포 하둡 파일 시스템 운영 실행과 관리 데이터 노드 제거 사용자 루트 패스 안전 모드 파일 시스템 API 활용 기본 파일 처리 API 데모: 블로그 애플리케이션 응용 사례: 클라우드 스토리지 서비스 6장 대용량 데이터 분석 프레임워크 맵리듀스 맵리듀스 소개와 구조 맵리듀스 프로그램 모델 시스템 구성 맵리듀스 처리 흐름 설치 스크립트 환경 설정 mapred-site.xml 실행과 중지 작업 관리 명령 맵리듀스 프로그래밍 WordCount 예제 맵리듀스 프로그래밍 요소 데이터 흐름 설계 InputFormat 구현 파티셔너 구현 OutputFormat 구현 공통 데이터 배포 디버깅 맵리듀스 튜닝 맵 태스크 병합 정렬(Merge Sort) 리듀스 태스크 잡 트래커와 태스크 트래커 튜닝 정렬 부분 정렬 전체 정렬 조인 맵 사이드 조인 리듀스 사이드 조인 하둡 버전 7장 NoSQL NoSQL 개요 CAP 이론 NoSQL의 특징과 분류 구글 빅테이블 클라우데이터 시스템 구성 데이터 모델 데이터 분산 데이터 저장 클러스터 멤버십과 장애 복구 설치 실시간 데이터 처리 배치 데이터 처리 클라우데이터 셸 응용 사례 1: 블로그 데이터 저장 응용 사례 2: 크롤과 검색 서비스 성능 HBase 데이터 모델 설치 예제 프로그램 배치 데이터 처리 카산드라(Cassandra) 다이나모(Dynamo) 카산드라 시스템 구성 데이터 모델 데이터 분산 클러스터 멤버십과 장애 복구 설치 예제 프로그램 정합성 수준 응용 사례: 블로그 데이터 검색 몽고디비 데이터 모델과 인덱스 데이터 복제와 샤딩 설치와 실행 가용성, 확장성 구성 예제 프로그램 맵리듀스 MySQL 분산 구성 MySQL 마스터-슬레이브 MySQL 고가용성 구성 MySQL MMM MySQL MMM 설치 NoSQL 사용 시 주의 사항 8장 로그 수집과 분석 척와: 하둡 기반의 로그 저장 분석 솔루션 시스템 구성과 동작 딜리버리 모델 데이터 모델과 처리 설치 동적 로그 수집 설정 스크라이브: 페이스북의 로그 관리 솔루션 설치 스토어 구성 분산 구성 9장 캐시: 성능 향상을 위한 필수 요소 메모리 캐시 memcached 설치 프로토콜 명령 C/C++ 클라이언트 라이브러리 자바 클라이언트 라이브러리 멤베이스(Membase): 분산 memcached 서버 멤베이스 서버 개요 멤베이스 서버 설치 버킷 구성 멤베이스 클라이언트 예제 글을 마치며 |
|
구글은 수십만 대 이상의 리눅스 서버를 이용해 전 세계의 모든 웹 데이터를 저장, 분석한 후 검색 서비스를 제공한다. 수십만 대의 서버를 관리하고 운영하려면 엄청난 기술이 필요하다. 수십만 대라면 수원, 성남의 인구수와 비슷한 수치다. 구글은 어떤 기술을 이용해 이런 엄청난 규모의 서버와 데이터를 관리할 수 있을까?
2004년부터 차례대로 구글 내부의 플랫폼 구성을 논문으로 발표하면서 구글의 내부 시스템이 세상에 공개됐다. 대용량 분산 파일 시스템 GFS(Google File System), 분산 병렬 처리 플랫폼(MapReduce), 분산 구조 데이터 저장소Bigtable, 분산 락 서비스(Chubby), 이기종 간 데이터 타입 처리 플랫폼(Protocol Buffer) 등을 차례대로 발표했다. 이모든 기술은 분산 컴퓨팅 분야이며, 대규모 분산 환경을 가장 잘 이용하는 회사라고 할 수 있다. 이와 비슷한 시기에 아마존은 온라인 쇼핑 시스템을 운영하면서 구축한 플랫폼과 서비스를 운영하면서 남는 여유 자원을 활용해 EC2(Elastic Cloud Computing), S3(Simple Storage Service) 등을 포함한 AWS(Amazon Web Services)를 서비스하기 시작한다. 이렇게 분산 기술의 발전과 플랫폼 서비스의 발전은 '클라우드 컴퓨팅'이라는 새로운 개념으로 포장돼 발표됐으며, 최근에는 수많은 기업이 도입하고 서비스를 제공하기 위해 노력 중이다. 나도 2006년부터 분산 컴퓨팅 분야의 업무를 시작하면서 구글 플랫폼의 오픈소스 버전이라고 할 수 있는 하둡(http://hadoop.apache.org)을 사용하고, 하둡 기반으로 운영되는 데이터 관리 시스템인 클라우데이터(Cloudata, www.cloudata.org)를 개발했지만 그 당시에는 이런 기술을 분산 컴퓨팅 분야로만 알고 있었다. 2008년 클라우드 컴퓨팅이라는 용어가 나오면서 내가 사용했던 솔루션, 기술들이 클라우드 컴퓨팅을 구현하는 핵심 기술이 됐다. 클라우드 컴퓨팅이 확산되면서 수많은 컨퍼런스에서 발표가 이뤄지고 수많은 문서가 나왔지만 대부분 클라우드 컴퓨팅에 대한 정의와 활용만 설명한다. SaaS의 경우에도 기업에서 SaaS를 어떻게 도입할 것인가에 대한 주제가 많다. 실제 클라우드 컴퓨팅 플랫폼을 만들거나, SaaS 서비스를 만드는 방법에 대한 문서나 서적은 거의 없다. 클라우드 컴퓨팅이라는 용어는 업무에 따라 다양한 정의가 나올 수 있다. 인프라 측면에서 보면 서버 가상화 기술을 이용하는 형태로 나타난다. 미터링, 과금 등 과 같은 운영 관리적인 부분도 있다. 프로비져닝 같은 시스템 관리 부분도 있다. 하지만 이런 것들은 부가적인 부분이다. 가장 중요한 것은 실제 업무를 수행하고 데이터를 분석하고 사용자 요청에 비즈니스 로직을 수행하는 애플리케이션에 있다. 애플리케이션이 클라우드적인 특성인 확장성, 유연성, 자기 치료 능력 등을 갖고 있을 때 클라우드 컴퓨팅의 진정한 효과가 나타난다. 이 책에서는 개발자들이 애플리케이션이나 클라우드 컴퓨팅을 구성하는 플랫폼을 개발할 때 어떻게 개발해야 클라우드 컴퓨팅의 속성을 가질 수 있는 시스템을 만들 수 있는지 설명한다. 클라우드 컴퓨팅 관련 기술은 하루가 다르게 발전 중이다. 따라서 이 글에서 제시하는 방법이나 솔루션이 최적의 방안이 될 수는 없다. 하지만 분산된 환경에서 유연한 확장성을 제공하는 기본 아키텍처는 견고하며, 과거에는 EJB, CBD, SOA 등의 이름으로 사용됐다. 이 책에서 제시하는 아키텍처도 과거의 기술과 크게 다르지 않다. 다만 구글에서 오픈한 기술을 최대 활용한 오픈소스를 이용함으로써 과거보다는 쉽고 견고한 시스템을 구축할 수 있게 됐다. 이 책은 클라우드 컴퓨팅 구현 기술이라기보다는 오픈소스를 이용해 확장성, 안정성있는 시스템을 구축하는 방법을 설명한다. 1장에서는 클라우드 컴퓨팅의 출현 배경과 클라우드 컴퓨팅의 정의, 개념을 설명한다. 2장에서는 클라우드 컴퓨팅 플랫폼과 이를 기반으로 하는 SaaS 서비스의 아키텍처를 설명한다. SaaS와 클라우드 컴퓨팅은 별개로 생각할 수 있는 개념이지만 구현이나 개발 관점에서는 모두 유사한 기술 요소를 사용하며, 아키텍처 요구사항도 비슷하다. 따라서 2장에서의 설명은 SaaS와 클라우드에 대한 설명이 혼재하는데, 이것은 개발/구현 관점에서는 매우 비슷하기 때문이다. 또한 SaaS 서비스를 만들려면 아키텍처와 프로그램 모델이 어떻게 돼야 하는지와 서비스에서 사용하는 인프라는 어떤 요소가 필요한지 설명한다. SaaS 서비스 구축에 필요한 이런 요소들은 클라우드 컴퓨팅 플랫폼을 구축하는 데도 그대로 적용될 수 있다. 3장에서 설명하는 쓰리프트(thrift)와 4장의 주키퍼(ZooKeeper), 5장의 하둡을 이용하면 분산 데이터 저장소를 만들 수 있다. 분산 데이터 저장소는 클라우드 플랫폼을 구성하슴 주요 컴포넌트 중 하나지만 자체적으로는 데이터를 클라우드 환경에서 서비스해주는 데이터베이스 SaaS 서비스다. 책에서 설명하는 모든 솔루션은 오픈소스다. 오픈소스 중 문서화가 잘돼 있는 것도 있지만 그렇지 않은 경우도 많다. 그리고 오픈소스는 버전업되면서 많은 기능이 바뀌기도 한다. 문서가 없는 것은 소스와 예제를 보거나 다른 블로거의 글을 참고했으므로 잘못된 내용이 있을 수도 있다. 가급적 정확한 내용을 전달하기 위해 노력은 했지만 일부 잘못된 내용이 있을 수 있음을 미리 밝혀둔다. 그리고 버전업돼 기능이 바뀌어도 사용할 수 있게 개념과 동작 원리, 내부 구조 등도 최대한 설명하고자 노력했다. 1장은 클라우드 컴퓨팅의 기본 개념을 설명하는데, 이 부분을 이미 이해하고 있는 독자는 2장부터 시작해도 좋다. 이 책에서 다루지 않는 내용: 클라우드 컴퓨티 관련 기술 중 애플리케이션 개발 관련되지 않은 가상 머신, 네트워크 같은 인프라 기술은 이 책에서 다루지 않는다. 인터넷에서 인용한 글은 최대한 출처를 밝히고자 노력했다. 하지만 다양한 분야의 오픈 소스 솔루션을 소개하다보니 본문에 출처 없이 인용된 글이 있을 수 있다. ---저자 서문 중에서 |
|
그동안 클라우드 컴퓨팅 분야에서 많이 다루지 않았던 시스템이나 서비스의 개발과 관련된 내용을 다룬다. 기존의 클라우드 컴퓨팅이 기술적인 분야에서 가상화, 프로비저닝 등에 초점이 맞춰져 있었다면 이 책에서는 분산 아키텍처를 이용해 확장성, 가용성 있는 시스템, 서비스를 개발하기 위한 아키텍처를 제시하고, 이를 구현할 수 있는 오픈소스를 소개한다. 책에서 소개하는 아키텍처와 오픈소스를 이용해 스토리지 서비스 같은 인프라 서비스에서부터 블로그, 소셜네트워크 분석 서비스 등과 같은 클라우드 서비스를 구축할 수 있다.
★ 이 책에서 다루는 내용 ★ ■ 클라우드 컴퓨팅의 출현 배경과 구글, 아마존, 세일즈포스닷컴의 클라우드 컴퓨팅 소개 ■ 클라우드 컴퓨팅의 정의와 분류 ■ 확장성, 가용성 있는 클라우드 컴퓨팅 시스템을 구축하기 위한 아키텍처 ■ 분산 아키텍처를 적용한 애플리케이션 서버 구축 방법 ■ 분산 환경에서의 동기화 제어와 쉽게 해결해 주는 오픈소스 주키퍼(ZooKeeper) ■ 대용량 파일을 저장하고 빠르게 분석할 수 있는 하둡(Hadoop) ■ 대용량 구조화된 데이터를 저장할 수 있는 NoSQL, 오픈소스 클라우데이터(Cloudata), Hbase, 카산드라(Cassandra), 몽고디비(MongoDB) ■ 분산 환경에서의 로그 수집 및 저장을 위한 오픈소스 척와(chukwa), 스크라이브(scribe) ■ 시스템의 성능 향상을 위한 캐시 솔루션인 memcached, 멤베이스(membase) ■ 단원별로 사용된 오픈소스에 대한 설치 방법과 블로그 예제 프로그램을 통한 실제 사용 방법 ★ 이 책의 대상 독자 ★ 이 책은 클라우드 컴퓨팅을 다루지만 인프라 측면이 아닌 시스템, 서비스의 개발과 관련된 내용을 다룬다. 따라서 분산 아키텍처를 이용한 확장성, 안정성있는 시스템을 구축하려는 개발자들을 위한 책이다. 분산 파일 시스템, NoSQL 등과 같은 클라우드 기반의 시스템 소프트웨어에 대해서도 설명함으로써 대용량 데이터 저장소를 구축하려는 운영자들에게도 도움이 된다. 자바, C 언어 등과 같은 프로그래밍 언어를 이해하고 있거나 시스템을 구축해 본 경험이 있으면 쉽게 이해할 수 있을 것이다. ★ 이 책의 구성 ★ 이 책은 두 개의 부로 구성되어 있다. 1부에서는 클라우드 컴퓨팅의 개요와 속성을 설명하며, 클라우드 컴퓨팅의 속성을 만족하는 시스템을 구축하기 위한 아키텍처를 제시한다. 2부에서는 제시된 아키텍처의 세부 구성 요소를 설명하고, 실제 적용을 위해 현재 사용 가능한 오픈소스를 소개한다. 각 분야의 오픈소스는 개념에 대한 이론적인 설명, 설치, 사용 방법, 예제 프로그램 등의 형태로 다뤘다. |