Chapter 1 웹 서비스에서 인프라의 역할
1.1 웹 서비스 구축에 관련된 인프라 영역
이 책에서 다루는 인프라의 범위
웹 서비스 구축에 관련된 인프라의 기술 요소
인프라 기술의 계층 구조
1.2 인프라의 요건 정의에서 운용까지의 주의점
1.3 인프라 설계 시의 주의점
인프라 설계의 어려움
인프라의 '기능적 요건' 정의의 주의점
인프라의 '비 기능적 요건' 정의의 주의점
인프라의 신뢰성 확보하기
1.4 RAS 검토하기
가동률을 높이는 방법
고장 발생 시의 대응 방법
대규모 재해 시의 대응 방법
Chapter 2 인프라 기술의 기초 지식
2.1 인터넷이라는 거대한 네트워크
IP 주소와 도메인
2.2 인터넷을 통한 데이터 송수신 구조
라우팅
NAT에 의한 IP 주소 변환
2.3 URL을 분석해보자
2.4 프로토콜의 내부 들여다보기
Request Headers와 Response Headers 읽기
2.5 네트워크 보안 이야기
방화벽
SSL
2.6 인프라 요소의 스펙을 읽는 방법과 선택 방법
서버 선택의 개요
CPU, 메모리의 스펙과 선택 방법
디스크의 스펙과 선택 방법
네트워크의 스펙과 선택 방법
네트워크 기기의 스펙을 읽는 방법과 선택 방법
2.7 성능과 데이터에 관한 기초 지식
ACID를 고려하자
락과 배타처리
버퍼
캐시
큐잉
2.8 다중화의 구조
데이터의 정합성을 얻기 위한 방법
페일오버에 관한 주의점
2.9 암호화와 해시화
Chapter 3 웹 서비스 서버 구성의 모범 사례
3.1 기본적인 구성
풀스택을 1대의 시스템으로 구성하기
시스템 구성 변경의 기초
패턴 1. 웹 서버 x 1, 데이터베이스 서버 x 1 구성 - 기능 분할
패턴 2. 웹 서버 x 2 구성 - 다중화
패턴 3. 웹 서버 x 2, 데이터베이스 서버 x 1 구성 - 다중화, 기능 분할, 스케일 아웃
패턴 4 . 웹 서버 x 2, 데이터베이스 서버 x 2 구성 - 다중화, 기능 분할, 스케일 아웃
3.2 부하 분산(로드밸런싱)의 기초 지식
로드밸런싱의 두 가지 종류
로드밸런서로 할 것인가 DNS 라운드로빈으로 할 것인가
로드밸런서와 분산 목적지 연결 방식
로드밸런서에서의 분산 목적지 결정 방법
Chapter 4 인프라 준비의 기초 지식
4.1 인프라를 준비할 때 무엇부터 결정할 것인가?
꼭 필요한 요구사항 정리하기
4.2 인터넷 회선의 용량 계산
4.3 서버 대수의 용량 계산
PV 수와 처리에 소요되는 시간으로 계산하기
4.4 이용할 클라우드 기반 선정하기
4.5 인프라 구축 후 확인해야 하는 것
툴을 사용해 빠짐없이 확인하기
4.6 백업
백업 시 확인해야 하는 것
Chapter 5 웹 서비스 운용 1 : 시스템 감시의 기본
5.1 시스템 감시의 개론
시스템 감시란?
'정상 상태'를 감시 항목 + 정상적인 결과의 형태로 정의하기
'정상 상태'가 아닐 때의 대응 방법을 감시 항목마다 정의하기
'정상 상태'인 것을 지속적으로 확인하기
'정상 상태'가 아닌 경우 '정상 상태'로 복구시키기
5.2 시스템 감시의 구현
감시 툴과 모니터링 툴
감시 항목 파악하기
감시의 구현 방법
감시 항목을 결정하기 위한 현재 상태 확인 방법
현재 상태의 확인 결과로부터 감시 항목 만들기
5.3 장애가 발생했을 때의 대응 방법
경보
현상 확인
1차 대응
경보 현상 및 다른 항목 확인하기
사후 작업
수습
5.4 대규모 장애 발생 시의 대응
팀으로 역할 분담하기
냉정하게 정보를 파악하고 전체를 바라보기
2차 재해가 발생하지 않도록 하기
5.5 항상 발생하는 장애의 관리와 리뷰
장애 사례 축적
리뷰
Chapter 6 웹 서비스 운용 2 : 상태 모니터링
6.1 상태 모니터링의 기초 지식
변화를 알아차리기 위한 요령
6.2 상태 모니터링 데이터를 읽는 방법 - OS
CPU 관련 그래프
메모리 관련 그래프
디스크 관련 그래프
네트워크 관련 그래프
6.3 상태 모니터링 데이터를 읽는 방법 - MySQL
상태 관련 그래프
성능 관련 그래프
InnoDB 관련 그래프
MyISAM 관련 그래프
6.4 실시간 모니터링의 방법
dstat 사용하기
top 사용하기
iostat 사용하기
6.5 트러블 대응에 사용하는 모니터링 툴
트러블이 발생하지 않도록 하는 사고방법
트러블 슈팅 테크닉
Chapter 7 웹 서비스 튜닝 1 : 보틀넥을 찾는 방법
7.1 용량의 검토 방법과 용량의 향상
7.2 시스템 튜닝의 철칙
대상과 목표 결정하기
보틀넥에 접근하기
추측하지 말고 계측하자
7.3 보틀넥을 찾는 방법 - 기초
대상과 목표 결정하기
데이터 흐름 확인하기
데이터 흐름의 포인트마다 처리 내용을 확인하기
시스템 리소스 확인하기
7.4 보틀넥을 찾는 방법 - 로그
Apache에서 보틀넥을 찾는 방법
MySQL에서 보틀넥을 찾는 방법
7.5 보틀넥을 찾는 방법 - 서버 리소스
수상한 움직임을 찾는 포인트
'dstat'과 'top'으로 확인하기
7.6 보틀넥을 찾는 방법 - 애플리케이션 코드
애플리케이션 프로파일러 사용하기
webgrind로 분석하기
Chapter 8 웹 서비스 튜닝 2 : 튜닝 레시피
8.1 포인트별 튜닝 레시피
요청 횟수와 데이터 전송량을 줄이는 방법
OS의 CPU 사용률 낮추기
OS의 메모리 용량 늘리기
OS의 메모리 사용량 낮추기
OS의 디스크 I/O 성능 높이기
OS의 네트워크 성능 높이기
OS의 네트워크 사용량 낮추기
Apache의 CPU 사용률 낮추기
Apache의 메모리 사용량 낮추기
Apache의 디스크 I/O 사용량 낮추기
Apache의 네트워크 성능 높이기와 사용률 낮추기
애플리케이션 서버의 CPU 사용률 낮추기
MySQL의 CPU 사용률 낮추기
MySQL의 메모리 사용량 낮추기
MySQL의 디스크 I/O 사용률 낮추기
MySQL의 네트워크 사용률 낮추기
SSL 통신을 고속화하기
8.2 SQL 튜닝에서의 고속화
SQL 튜닝을 위한 툴
SQL 튜닝의 흐름
기능 분할
8.3 시스템 구성의 변경 시 보틀넥 대책의 기초
스케일 업
스케일 아웃
[Web]을 스케일 아웃 할 때의 주의점
[DB]를 스케일 아웃 할 때의 주의점
[File]을 스케일 아웃 할 때의 주의점
8.4 [DB] 스케일 아웃 구현의 예
갱신 SQL의 스케일 아웃
참조 SQL의 스케일 아웃
리플리케이션과 데이터 반영의 지연
8.5 기능 분할 구현의 예
Web 서버와 DB 서버 분할하기
Web 서버와 AP 서버 분할하기
Web 서버와 Proxy 서버 분할하기
8.6 캐시 적용에서의 고속화
콘텐츠를 브라우저에서 캐시하기
콘텐츠를 Proxy에서 캐시하기
쿼리 캐시로 MySQL의 부하 낮추기