이미 소장하고 있다면 판매해 보세요.
PART I 소개
CHAPTER 01 소개 _ 3 서비스 관리를 위해 시스템 관리자를 활용하는 방법 _ 3 서비스 관리에 대한 구글의 해법: 사이트 신뢰성 엔지니어링 _ 5 SRE의 신조 _ 8 마무리하며 _ 14 CHAPTER 02 SRE 관점에서 바라본 구글의 프로덕션 환경 15 하드웨어 _ 15 하드웨어를 ‘조율하는’ 시스템 소프트웨어 _ 17 기타 시스템 소프트웨어 _ 21 소프트웨어 인프라스트럭처 _ 22 개발 환경 _ 23 셰익스피어: 예제 서비스 _ 24 PART II 원리와 원칙들 CHAPTER 03 위험 요소 수용하기 _ 30 위험 요소 관리하기 _ 31 서비스 위험 측정하기 _ 32 서비스의 위험 수용도 _ 34 에러 예산 활용해보기 _ 40 CHAPTER 04 서비스 수준 목표 _ 44 서비스 수준 관련 용어 _ 45 지표 설정 _ 48 목표 설정에 대한 실습 _ 51 협약에 대한 실습 _ 56 CHAPTER 05 삽질은 이제 그만! _ 57 삽질의 정의 _ 58 삽질이 줄어들면 좋은 이유 _ 60 엔지니어링에 해당하는 업무는? _ 61 삽질은 무조건 나쁜 것일까? _ 62 결론 _ 63 CHAPTER 06 분산 시스템 모니터링 _ 64 정의 _ 64 왜 모니터링해야 하는가? _ 66 모니터링에 대한 적절한 기대치 설정하기 _ 67 증상과 원인 _ 68 블랙박스와 화이트박스 _ 69 네 가지 결정적인 지표 _ 70 마지막 요청(혹은 실행과 성능)에 대한 고려 _ 72 적당한 측정 방법 선택하기 _ 72 더욱 단순하게가 아니라 최대한 단순하게 _ 73 지금까지 살펴본 원리들을 결합하기 _ 74 장기적 모니터링 _ 76 결론 _ 78 CHAPTER 07 구글의 발전된 자동화 _ 80 자동화의 가치 _ 81 구글 SRE의 가치 _ 83 자동화의 사례 _ 85 스스로를 이롭게 하라: 몽땅 자동화하자! _ 88 신의 한 수: 클러스터 턴업의 자동화 _ 91 보그: 창고 크기 컴퓨터의 탄생 _ 98 신뢰성은 근본적인 기능이다 _ 101 추천 사항 _ 101 CHAPTER 08 릴리즈 엔지니어링 _ 103 릴리즈 엔지니어의 역할 _ 104 릴리즈 엔지니어링의 철학 _ 104 지속적 빌드와 배포 _ 106 설정 관리 기법 _ 111 결론 _ 112 CHAPTER 09 간결함 _ 114 시스템의 안정성 vs. 신속함 _ 115 지루함의 미덕 _ 115 내 코드는 절대 포기하지 않을 거야! _ 116 ‘부정적 영향을 미치는 코드’의 지표 _ 116 최소한의 API _ 117 모듈화 _ 117 릴리즈의 간소화 _ 118 간결한 결론 _ 119 PART III 사례 CHAPTER 10 시계열 데이터에 대한 실용적인 알림 _ 127 보그몬의 탄생 _ 128 애플리케이션의 조작 _ 130 내보낸 데이터의 수집 _ 131 시계열 데이터를 위한 저장소 _ 132 규칙의 평가 _ 135 알림 _ 140 모니터링 토폴로지의 샤딩 _ 141 블랙박스 모니터링 _ 142 설정의 유지보수 _ 143 지난 10년 간 … _ 145 CHAPTER 11 비상 대기 _ 146 소개 _ 146 비상 대기 엔지니어의 삶 _ 147 비상 대기 업무의 균형 맞추기 _ 148 안전에 대해 고려하기 _ 150 부적절한 운영 부하에서 벗어나기 _ 153 결론 _ 155 CHAPTER 12 효과적인 장애 조치 _ 156 이론 _ 157 실전에 들어가보자 _ 159 부정적인 결과의 마법 _ 168 사례 연구 _ 171 조금 더 수월하게 장애를 조치하기 _ 175 결론 _ 176 CHAPTER 13 긴급 대응 _ 177 시스템에 문제가 생기면 어떻게 해야 할까? _ 178 테스트로 인한 장애 _ 178 변경으로 인한 장애 _ 180 절차에 의한 장애 _ 183 모든 문제가 해결되었다 _ 186 지난 일로부터 배우기. 그리고 반복하지 않기 _ 186 결론 _ 188 CHAPTER 14 장애 관리하기 _ 189 미흡한 장애 관리 _ 190 미흡한 장애 처리에 대한 자세한 분석 _ 191 장애 관리 절차의 기본 요소들 _ 191 적절하게 관리한 장애 조치 _ 194 언제 장애를 선언할 것인가? _ 195 요약 _ 196 CHAPTER 15 포스트모텀 문화: 실패로부터 배우기 _ 197 구글의 포스트모텀 철학 _ 198 협업과 지식의 공유 _ 200 포스트모텀 문화 도입하기 _ 201 결론 및 지속적인 개선 _ 204 CHAPTER 16 시스템 중단 추적하기 _ 205 에스컬레이터 _ 206 아우터레이터 _ 206 CHAPTER 17 신뢰성을 위한 테스트 _ 212 소프트웨어 테스트의 종류 _ 214 테스트 및 빌드 환경 구성하기 _ 221 대규모 환경에서의 테스트 _ 223 결론 _ 237 CHAPTER 18 SRE 조직의 소프트웨어 엔지니어링 _ 238 SRE 조직의 소프트웨어 엔지니어링 역량이 중요한 이유 _ 239 Auxon 사례 연구: 프로젝트 배경 및 문제가 발생한 부분 _ 240 의도 기반 수용량 계획 _ 244 SRE 조직에서 소프트웨어 엔지니어링을 육성하는 방법 _ 254 결론 _ 259 CHAPTER 19 프런트엔드의 로드밸런싱 _ 260 모든 일을 힘으로만 해결할 수는 없는 법 _ 260 DNS를 이용한 로드밸런싱 _ 262 가상 IP 주소를 이용한 로드밸런싱 _ 265 CHAPTER 20 데이터센터의 로드밸런싱 _ 268 이상적인 사례 _ 269 양호하지 않은 태스크 구별하기: 흐름 제어와 레임덕 _ 271 서브셋을 이용한 연결 풀 제한하기 _ 273 로드밸런싱 정책 _ 280 CHAPTER 21 과부하 처리하기 _ 287 ‘초당 쿼리 수’의 함정 _ 288 사용자별 제한 _ 289 클라이언트 측에서의 사용량 제한 _ 290 중요도 _ 292 활용도에 대한 신호들 _ 294 과부하 오류 처리하기 _ 295 연결에 대한 부하 _ 299 결론 _ 300 CHAPTER 22 연속적 장애 다루기 _ 302 연속적 장애의 원인과 그 대책 _ 303 서버 과부하 방지하기 _ 309 느긋한 시작과 콜드 캐싱 _ 320 연속적 장애의 발생 요인 _ 323 연속적 장애 테스트하기 _ 325 연속적 장애를 처리하기 위한 즉각적인 대처 _ 328 마무리하며 _ 331 CHAPTER 23 치명적인 상태 관리하기: 신뢰성을 위한 분산에 대한 합의 _ 332 합의는 왜 필요할까: 분산 시스템 간 협업의 실패 _ 335 분산에 대한 합의가 동작하는 방식 _ 337 분산 합의를 위한 시스템 아키텍처 패턴 _ 339 분산 합의의 성능 _ 345 분산 합의 기반 시스템의 배포 _ 354 분산 합의 시스템 모니터링 _ 364 결론 _ 365 CHAPTER 24 크론을 이용한 분산된 주기적 스케줄링 _ 366 크론 _ 367 크론 작업과 멱등성 _ 368 대용량 시스템 내에서의 크론 _ 369 구글에서 구현한 크론 서비스 _ 371 요약 _ 379 CHAPTER 25 데이터 처리 파이프라인 _ 380 파이프라인 디자인 패턴의 기원 _ 380 단순한 파이프라인 패턴을 적용한 빅데이터의 기본적인 효과 _ 381 정기적 파이프라인 패턴의 과제 _ 381 작업의 불균형 분산으로 인해 발생하는 문제 _ 382 분산 환경에서 정기적 파이프라인의 단점 _ 383 구글 워크플로우 소개 _ 387 워크플로우의 실행 단계들 _ 389 비즈니스의 지속성 보장하기 _ 391 요약 _ 392 CHAPTER 26 데이터 무결성: 내가 기록한 그대로 읽을 수 있어야 한다 _ 394 데이터 무결성의 중요한 조건 _ 395 데이터 무결성과 가용성을 유지하기 위한 구글 SRE의 목표 _ 401 구글이 데이터 무결성의 문제를 해결하는 방법 _ 406 사례 연구 _ 419 데이터 무결성과 관련된 SRE의 일반 원리들 _ 427 결론 _ 429 CHAPTER 27 대용량 환경에서의 신뢰할 수 있는 제품 출시 _ 430 출시 조율 엔지니어링 _ 432 출시 절차 마련하기 _ 434 출시 확인목록 개발하기 _ 438 안정적인 출시를 위한 기법들 _ 443 LCE의 개발 역량 _ 448 결론 _ 452 PART IV 관리 CHAPTER 28 비상 대기를 넘어 SRE의 성장을 촉진하기 _ 456 새 SRE를 고용했다. 이제 뭘 해야 하지? _ 456 최초의 학습 경험: 혼란을 방지하기 위한 구조의 사례 _ 459 스타 리버스 엔지니어와 즉흥적 사상가로 키워내기 _ 463 포부가 큰 비상 대기 엔지니어를 위한 다섯 가지 원칙 _ 467 비상 대기를 넘어서: 통과 의례와 지속적 학습의 관례 _ 473 마무리하며 _ 474 CHAPTER 29 방해 요소에 대한 대처 _ 475 운영 업무 부하 관리하기 _ 476 방해 요소의 관리 방법을 결정하기 위한 요소들 _ 477 불완전한 머신 _ 478 CHAPTER 30 SRE를 이용해 운영 업무의 부담에서 벗어나기 _ 486 1단계: 서비스에 대해 배우고 컨텍스트를 이해하기 _ 487 2단계: 컨텍스트의 공유 _ 489 3단계: 변화를 주도하기 _ 491 결론 _ 494 CHAPTER 31 SRE의 의사소통과 협업 _ 495 의사소통: 운영 환경 회의 _ 497 SRE와의 협업 _ 501 SRE의 협업에 대한 사례 연구: Viceroy _ 503 SRE 외 조직과의 협업 _ 509 사례 연구: DFP의 F1으로의 이전 _ 510 결론 _ 512 CHAPTER 32 SRE 참여 모델의 개선 _ 513 SRE의 도입: 의미와 방법, 그리고 이유 _ 513 PRR 모델 _ 514 SRE 도입 모델 _ 515 운영 환경 준비 검토: 간단한 PRR 모델 _ 517 간단한 PRR 모델의 발전: 조기 참여 _ 521 서비스 개발의 개선: 프레임워크와 SRE 플랫폼 _ 524 결론 _ 529 PART V 마무리하며 CHAPTER 33 다른 업계로부터의 교훈 _ 533 업계 전문가에 대한 소개 _ 534 준비와 재난 테스트 _ 536 포스트모텀 문화 _ 540 반복적인 업무와 운영 오버헤드를 자동화된 방식으로 제거하기 _ 542 구조화되고 합리적인 의사 결정 _ 544 결론 _ 546 CHAPTER 34 마치며 _ 547 APPENDIX. 부록 APPENDIX A 가용성 표 _ 551 APPENDIX B 운영 서비스를 위한 권장 사례 모음 _ 553 APPENDIX C 장애 상태 문서의 예 _ 559 APPENDIX D 포스트모텀의 예 _ 561 APPENDIX E 출시 조율 확인목록 _ 566 APPENDIX F 제품 회의의 예 _ 569 참고문헌 _ 573 찾아보기 _ 584 |
Betsy Beyer
Chris Jones
Jennifer Peto
Niall Richard Murphy
장현희 의 다른 상품
그 외에는 소프트웨어 시스템 개발을 통해 복잡한 문제를 해결할 수 있다는 신념과 재능을 SRE가 갖추어야 할 덕목으로 꼽을 수 있었다. SRE팀 내부에서는 이 두 그룹에 대한 업무 능력의 발달 과정을 면밀하게 추적했는데, 현재까지 이 두 부류의 엔지니어들의 성과에 대해서는 별다른 차이점을 발견하지 못했다. 사실, SRE팀의 배경적 차이점은 오히려 여러 기술이 집약된, 독창적이면서도 높은 품질의 시스템을 탄생시키곤 했다.
--- p.6 시스템이 기대치를 얼마나 충족하는지를 이해하는 것은 시스템을 더 빠르고, 더 가용성이 뛰어나며, 더 탄력적으로 만들기 위한 투자를 할 것인지를 판단하는 데 도움이 된다. 아니면 시스템이 잘 동작하고 있는 경우, 참여 인력의 시간을 기술 부채를 해결하거나 새로운 기능을 추가하거나 혹은 다른 제품을 개발하는 등 우선순위가 더 높은 작업에 투입할 수도 있다. --- p.56 시스템은 관성이 있다. 우리는 올바르게 동작하는 컴퓨터 시스템은 설정의 변경이나 서비스 부하의 종류가 바뀌는 등의 외부 요인이 발생하기 전까지는 계속해서 동작하려는 성향을 갖고 있음을 알아냈다. 그래서 무엇이 잘못되고 있는지 파악하기 위한 가장 좋은 시작 지점은 가장 최근에 변경된 부분이다. --- p.165 서브셋 선택 알고리즘을 적당히 구현하는 방법은 각 클라이언트가 백엔드의 목록을 임의로 섞은 후, 그중에서 접근이 가능하고 양호한 상태의 벡앤드를 선택해서 서브셋을 구축하는 방법이다. 한 번 임의로 섞은 후 백엔드를 차례로 선택하는 방법은 고려 대상이 될 백엔드의 수를 명시적으로 제한할 수 있으므로 재시작과 장애 상황을 안정적으로(예를 들면 상대적으로 적은 수의 연결을 유지하면서) 처리할 수 있다. 그러나 이 전략은 부하가 균등하게 분산되지 않기 때문에 대부분의 경우에 원하는 대로 동작하지 않는다는 것을 경험했다. --- p.275 빠르게 성장하며 제품과 서비스의 변화율이 높은 기업은 출시 조율 엔지니어링 역할을 도입하는 것이 도움이 될 것이다. 이런 팀은 기업이 매 1~2년 동안 제품 개발자들을 두 배 이상 더 채용할 계획이 있거나 서비스가 수백만 명의 사용자들로 확장되어야 하거나 높은 변화율에도 불구하고 안정성이 사용자에게 더 중요한 경우에 특히 더 유용하다 --- p.452 |