소개
사업 목표
이상적인 시스템 구조
이상적인 릴리스 과정
이상적인 운영
= 1부 설계: 시스템 만들기 =
CHAPTER 1 분산 세계에서의 설계
1.1 대규모 시스템의 가시성
1.2 단순함의 중요성
1.3 조합
1.3.1 부하 분산기와 다수의 뒷단 복제본들
1.3.2 서버와 다수의 뒷단들
1.3.3 서버 트리
1.4 상태의 분산
1.5 CAP 원리
1.5.1 일관성
1.5.2 가용성
1.5.3 분리 저항
1.6 느슨히 결합된 시스템
1.7 속도
1.8 요약
연습문제
CHAPTER 2 운영을 위한 설계
2.1 운영상의 요구사항
2.1.1 구성
2.1.2 시동과 종료
2.1.3 대기열 배출
2.1.4 소프트웨어 업그레이드
2.1.5 백업과 복구
2.1.6 중복성(redundancy)
2.1.7 복제된 데이터베이스
2.1.8 즉석 교체
2.1.9 개별 기능 켜고 끄기
2.1.10 우아한 강등
2.1.11 접근 제어와 속도 제한
2.1.12 자료 도입 제어
2.1.13 감시
2.1.14 감사
2.1.15 디버깅 계장(instrumentation)
2.1.16 예외 수집
2.1.17 운영을 위한 문서화
2.2 운영을 위한 설계의 구현
2.2.1 기능을 처음부터 구축
2.2.2 필요성을 발견한 후 개발팀에 요청
2.2.3 운영팀이 기능을 직접 작성
2.2.4 서드파티 공급업체와 협력
2.3 모형의 개선
2.4 요약
연습문제
CHAPTER 3 서비스 플랫폼 선택
3.1 서비스 추상 수준
3.1.1 IaaS(서비스로서의 기반구조)
3.1.2 PaaS(서비스로서의 플랫폼)
3.1.3 SaaS(서비스로서의 소프트웨어)
3.2 기계의 종류
3.2.1 물리적 기계
3.2.2 가상 기계
3.2.3 컨테이너
3.3 자원 공유 수준
3.3.1 법규 준수
3.3.2 개인정보
3.3.3 비용
3.3.4 제어권
3.4 코로케이션
3.5 선택 전략
3.6 요약
연습문제
CHAPTER 4 응용 프로그램 구조
4.1 단일 기계 웹 서버
4.2 3층 웹 서비스
4.2.1 부하 분산기의 종류
4.2.2 부하 분산 방법
4.2.3 공유 상태가 있는 부하 분산
4.2.4 사용자 신원
4.2.5 규모 변화
4.3 4층 웹 서비스
4.3.1 앞단
4.3.2 응용 프로그램 서버
4.3.3 구성 옵션
4.4 역 프록시 서비스
4.5 클라우드 규모 서비스
4.5.1 전역 부하 분산기
4.5.2 전역 부하 분산 방법
4.5.3 사용자 고유 자료에 근거한 전역 부하 분산
4.5.4 내부 기간망
4.6 메시지 버스 구조
4.6.1 메시지 버스의 설계
4.6.2 메시지 버스의 신뢰성
4.6.3 예제 1: 링크 단축 사이트
4.6.4 예제 2: 직원 인적자원 자료 갱신
4.7 서비스 지향 구조
4.7.1 유연성
4.7.2 지원
4.7.3 모범 관행
4.8 요약
연습문제
CHAPTER 5 규모 변화를 위한 설계 패턴
5.1 일반 전략
5.1.1 병목 식별
5.1.2 구성요소들의 재공학
5.1.3 결과의 측정
5.1.4 능동적 대처
5.2 규모 확장
5.3 AKF 규모 변화 입방체
5.3.1 x축: 수평 중복
5.3.2 y축: 기능 또는 서비스별 분할
5.3.3 z축: 조회 지향적 분할
5.3.4 조합
5.4 캐싱
5.4.1 캐시 효율성
5.4.2 캐시 위치
5.4.3 캐시 영속성
5.4.4 캐시 교체 알고리즘
5.4.5 캐시 항목 무효화
5.4.6 캐시 크기
5.5 자료 파편화
5.6 스레드 적용
5.7 대기열 적용
5.7.1 장점
5.7.2 변형들
5.8 CDN
5.9 요약
연습문제
CHAPTER 6 탄력성을 위한 설계 패턴
6.1 하드웨어 탄력성보다 중요한 소프트웨어 탄력성
6.2 모든 것은 결국에는 고장난다
6.2.1 분산 시스템의 MTBF
6.2.2 전통적인 접근방식
6.2.3 분산 컴퓨팅 접근방식
6.3 예비 수용량을 이용한 탄력성 확보
6.3.1 예비 수용량 결정
6.3.2 부하 공유 대 즉석 예비
6.4 장애 영역
6.5 소프트웨어 장애
6.5.1 소프트웨어 충돌
6.5.2 소프트웨어 멈춤
6.5.3 죽음의 질의
6.6 물리적 장애
6.6.1 부품과 구성요소
6.6.2 기계
6.6.3 부하 분산기
6.6.4 랙
6.6.5 데이터센터
6.7 과부하 장애
6.7.1 소통량 급증
6.7.2 DoS 및 DDoS 공격
6.7.3 스크레이핑 공격
6.8 사람의 실수
6.9 요약
연습문제
= 2부 운영: 시스템 실행하기 =
CHAPTER 7 분산 세계에서의 운영
7.1 분산 시스템의 운영
7.1.1 SRE팀 대 전통적인 전사적 IT 부서
7.1.2 변화 대 안정성
7.1.3 SRE의 정의
7.1.4 대규모 운영
7.2 서비스의 수명 주기
7.2.1 서비스 개시
7.2.2 서비스 폐지
7.3 운영팀을 위한 조직화 전략
7.3.1 팀원의 업무일 구분
7.3.2 기타 전략들
7.4 가상 사무실
7.4.1 의사소통 메커니즘
7.4.2 의사소통 방침
7.5 요약
연습문제
CHAPTER 8 개발운영 문화
8.1 개발운영이란?
8.1.1 전통적인 접근방식
8.1.2 개발운영 접근방식
8.2 개발운영의 3대 방법
8.2.1 제1 방법: 작업흐름
8.2.2 제2 방법: 피드백 개선
8.2.3 제3 방법: 끊임없는 실험과 학습
8.2.4 작은 일괄 단위들이 더 낫다
8.2.5 전략의 적용
8.3 개발운영의 역사
8.3.1 진화
8.3.2 사이트 신뢰성 공학
8.4 개발운영의 가치와 원리
8.4.1 관계
8.4.2 통합
8.4.3 자동화
8.4.4 지속적인 개선
8.4.5 흔한 비기술적 개발운영 관행
8.4.6 개발운영의 일반적인 기술적 관행들
8.4.7 릴리스 공학과 관련된 개발운영의 관행들
8.5 개발운영으로의 전환
8.5.1 첫걸음
8.5.2 사업 수준에서의 개발운영
8.6 애자일과 지속적 인도
8.6.1 애자일이란 무엇인가?
8.6.2 지속적 인도란 무엇인가?
8.7 요약
연습문제
CHAPTER 9 서비스 인도: 구축 국면
9.1 서비스 인도 전략
9.1.1 패턴: 현대적인 개발운영 방법론
9.1.2 반反패턴(안티패턴): 폭포수 방법론
9.2 품질의 선순환
9.3 구축 국면의 단계들
9.3.1 개발
9.3.2 커밋
9.3.3 구축
9.3.4 패키지
9.3.5 등록
9.4 구축 콘솔
9.5 지속적 통합
9.6 작업 이전 인터페이스로서의 패키지
9.7 요약
연습문제
CHAPTER 10 서비스 인도: 배치 국면
10.1 배치 국면의 단계들
10.1.1 승격
10.1.2 설치
10.1.3 구성
10.2 검사와 승인
10.2.1 검사
10.2.2 승인
10.3 운영 콘솔
10.4 기반구조 자동화 전략
10.4.1 물리적 기계 마련
10.4.2 가상 기계 마련
10.4.3 운영 체제와 서비스 설치
10.5 지속적 인도
10.6 코드로서의 기반구조
10.7 기타 플랫폼 서비스들
10.8 요약
연습문제
CHAPTER 11 활성 서비스의 업그레이드
11.1 서비스 중단 후 업그레이드
11.2 순회식 업그레이드
11.3 카나리아 공정
11.4 국면별 롤아웃
11.5 비례식 차단
11.6 청록 배치
11.7 기능 켜고 끄기
11.8 활성 스키마 변경
11.9 활성 코드 변경
11.10 지속적 배치
11.11 코드 투입 실패의 처리
11.12 릴리스 원자성
11.13 요약
연습문제
CHAPTER 12 자동화
12.1 자동화 접근방식들
12.1.1 잔여물 원리를 따르는 자동화 접근방식
12.1.2 보충 원리를 따르는 자동화 접근방식
12.1.3 상보성 원리를 따르는 자동화 접근방식
12.1.4 시스템 관리자를 위한 자동화
12.1.5 경험에서 얻은 교훈들
12.2 도구 구축 대 자동화
12.2.1 예: 자동차 제조
12.2.2 예: 컴퓨터 구성
12.2.3 예: 계정 생성
12.2.4 도구는 좋다, 자동화는 더 좋다
12.3 자동화의 목표
12.4 자동화 작성
12.4.1 자동화 작성 시간 마련
12.4.2 고역 줄이기
12.4.3 첫 번째 자동화 대상 선정
12.5 자동화 방법
12.6 언어 도구들
12.6.1 셸 스크립팅 언어
12.6.2 스크립팅 언어
12.6.3 컴파일식 언어
12.6.4 구성 관리용 언어
12.7 소프트웨어 공학 도구들과 기법들
12.7.1 문제점 추적 시스템
12.7.2 버전 관리 시스템
12.7.3 소프트웨어 패키지 작성
12.7.4 스타일 지침
12.7.5 TDD
12.7.6 코드 검토
12.7.7 딱 필요한 만큼의 코드를 작성
12.8 다중 입주 시스템
12.9 요약
연습문제
CHAPTER 13 설계 문서
13.1 설계 문서의 개요
13.1.1 변경과 그 논거의 문서화
13.1.2 과거 의사결정들을 보관하는 문서화
13.2 설계 문서의 구성
13.3 문서 양식
13.4 문서 보관소
13.5 설계 문서 검토의 작업흐름
13.5.1 검토자와 승인자
13.5.2 결재
13.6 설계 문서 표준의 채용
13.7 요약
연습문제
CHAPTER 14 호출대기
14.1 호출대기의 설계
14.1.1 SLA로 시작
14.1.2 호출대기 명단
14.1.3 당직대기
14.1.4 호출대기 일정 설계
14.1.5 호출대기 일정표
14.1.6 호출대기의 빈도
14.1.7 통지의 종류
14.1.8 근무 시간 외 유지보수 조정
14.2 호출대기 수행
14.2.1 교대근무 전 임무
14.2.2 정규 호출대기 임무
14.2.3 경보 처리 임무
14.2.4 관찰, 지향, 결정, 실행: OODA 루프
14.2.5 호출대기 각본
14.2.6 서드파티 상부 보고
14.2.7 교대근무 마감 임무
14.3 다음 호출대기 교대근무까지의 작업
14.3.1 장기적 해결책
14.3.2 사후 분석
14.4 주기적인 경보 검토
14.5 경보 줄이기
14.6 요약
연습문제
CHAPTER 15 재난 대비
15.1 사고방식
15.1.1 반취약 시스템
15.1.2 위험 줄이기
15.2 개인 훈련: 불운의 바퀴
15.3 팀 훈련: 소방 훈련
15.3.1 서비스 검사
15.3.2 무작위 검사
15.4 조직 훈련: 게임 데이/DiRT
15.4.1 첫걸음
15.4.2 범위 확장
15.4.3 계획과 구현
15.4.4 DiRT 검사의 예
15.5 사고지휘체계
15.5.1 작동 방식: 공공 안전 분야
15.5.2 작동 방식: IT 운영 분야
15.5.3 사고 대응 활동 계획서
15.5.4 모범 관행
15.5.5 사고지휘체계의 예
15.6 요약
연습문제
CHAPTER 16 감시의 기초
16.1 개요
16.1.1 감시의 용도
16.1.2 서비스 관리
16.2 감시 정보의 소비자
16.3 감시 대상
16.4 감시 자료의 유지
16.5 메타 감시
16.6 로그
16.6.1 접근방식
16.6.2 타임스탬프
16.7 요약
연습문제
CHAPTER 17 감시 시스템의 구조와 관행
17.1 감지 및 측정
17.1.1 블랙박스 측정 대 화이트박스 측정
17.1.2 직접 측정 대 합성 측정
17.1.3 속도 측정 대 능력 측정
17.1.4 계측치 측정 대 카운터 측정
17.2 수집
17.2.1 밀기 대 당기기
17.2.2 프로토콜 선택
17.2.3 서버 자체 측정 대 에이전트 대 주기적 점검
17.2.4 중앙 수집기 대 지역별 수집기
17.3 분석 및 계산
17.4 경보 및 상부 보고 구성요소
17.4.1 경보, 상부 보고, 확인
17.4.2 소음 대 금지
17.5 시각화
17.5.1 백분위수
17.5.2 스택 랭킹
17.5.3 히스토그램
17.6 저장
17.7 구성
17.8 요약
연습문제
CHAPTER 18 수용량 계획 수립
18.1 표준 수용량 계획 수립
18.1.1 현재 사용량
18.1.2 정상 성장
18.1.3 계획된 성장
18.1.4 여유분
18.1.5 탄력성
18.1.6 시간표
18.2 고급 수용량 계획 수립
18.2.1 1차 자원의 식별
18.2.2 수용량 한계 파악
18.2.3 핵심 동인 식별
18.2.4 참여도 측정
18.2.5 자료의 분석
18.2.6 핵심지표 감시
18.2.7 수용량 계획 수립의 위임
18.3 자원 회귀
18.4 새 서비스 개시
18.5 조달 시간 줄이기
18.6 요약
연습문제
CHAPTER 19 KPI 작성
19.1 KPI란 무엇인가?
19.2 KPI 작성
19.2.1 단계 1: 이상적 상황을 상상한다
19.2.2 단계 2: 이상과의 거리를 재는 방법을 고안한다
19.2.3 단계 3: 사람들의 행동 변화를 예상한다
19.2.4 단계 4: 수정하고 선택한다
19.2.5 단계 5: KPI를 배치한다
19.3 KPI의 예: 가상 기계 할당
19.3.1 첫 번째 패스
19.3.2 두 번째 패스
19.3.3 KPI의 평가
19.4 사례 연구: 구글 오류 예산
19.4.1 목표 대립
19.4.2 통합된 목표
19.4.3 모두의 이익
19.5 요약
연습문제
CHAPTER 20 탁월한 운영
20.1 탁월한 운영은 어떤 모습인가?
20.2 훌륭함을 측정하는 방법
20.3 평가 방법론
20.3.1 주요 운영 책무
20.3.2 평가 수준
20.3.3 평가를 위한 질문과 징표
20.4 서비스 평가
20.4.1 평가 대상 식별
20.4.2 각 서비스의 평가
20.4.3 서비스 간 결과 비교
20.4.4 결과에 기초한 행동
20.4.5 평가와 프로젝트 계획 수립의 빈도
20.5 조직 차원의 평가
20.6 개선 수준
20.7 평가 체계의 도입과 적용
20.8 요약
연습문제
맺음말
= 3부 부록 =
부록 A 평가
부록 B 분산 컴퓨팅과 클라우드의 기원과 미래
부록 C 규모 변화 관련 용어 및 개념
부록 D 문서 양식과 예제 문서
부록 E 읽을거리 추천