• 前言 xxxi
  • 序言 xxxv
  • 第Ⅰ部分 概览 1
  • 第1章 介绍 2
  • 系统管理员模式 2
  • Google 的解决之道:SRE 4
  • SRE 方法论 6
  • 确保长期关注研发工作 6
  • 在保障服务SLO 的前提下最大化迭代...
  • 监控系统 8
  • 应急事件处理 8
  • 变更管理 9
  • 需求预测和容量规划 9
  • 资源部署 10
  • 效率与性能 10
  • 小结 10
  • 第2章 Google 生产环境:SRE 视角 11
  • 硬件 11
  • 管理物理服务器的系统管理软件 13
  • 管理物理服务器 13
  • 存储 14
  • 网络 15
  • 其他系统软件 16
  • 分布式锁服务 16
  • 监控与警报系统 16
  • 软件基础设施 17
  • 研发环境 17
  • 莎士比亚搜索:一个示范服务 18
  • 用户请求的处理过程 18
  • 任务和数据的组织方式 19
  • 第Ⅱ部分 指导思想
  • 第3章 拥抱风险 23
  • 管理风险 23
  • 度量服务的风险 24
  • 服务的风险容忍度 25
  • 辨别消费者服务的风险容忍度 26
  • 基础设施服务的风险容忍度 28
  • 使用错误预算的目的 30
  • 错误预算的构建过程 31
  • 好处 32
  • 第4章 服务质量目标 34
  • 服务质量术语 34
  • 指标 34
  • 目标 35
  • 协议 36
  • 指标在实践中的应用 37
  • 运维人员和最终用户各关心什么 37
  • 指标的收集 37
  • 汇总 38
  • 指标的标准化 39
  • 目标在实践中的应用 39
  • 目标的定义 40
  • 目标的选择 40
  • 控制手段 42
  • SLO 可以建立用户预期 42
  • 协议在实践中的应用 43
  • 第5章 减少琐事 44
  • 琐事的定义 44
  • 为什么琐事越少越好 45
  • 什么算作工程工作 46
  • 琐事繁多是不是一定不好 47
  • 小结 48
  • 第6章 分布式系统的监控 49
  • 术语定义 49
  • 为什么要监控 50
  • 对监控系统设置合理预期 51
  • 现象与原因 52
  • 黑盒监控与白盒监控 53
  • 4 个黄金指标 53
  • 关于长尾问题 54
  • 度量指标时采用合适的精度 55
  • 简化,直到不能再简化 55
  • 将上述理念整合起来 56
  • 监控系统的长期维护 57
  • Bigtable SRE :警报过多的案例 57
  • Gmail :可预知的、可脚本化的人工...
  • 长跑 59
  • 小结 59
  • 第7章 Google 的自动化系统的演进 60
  • 自动化的价值 60
  • 一致性 60
  • 平台性 61
  • 修复速度更快 61
  • 行动速度更快 62
  • 节省时间 62
  • 自动化对Google SRE 的价值 62
  • 自动化的应用案例 63
  • Google SRE 的自动化使用案例 63
  • 自动化分类的层次结构 64
  • 让自己脱离工作:自动化所有的东西 66
  • 舒缓疼痛:将自动化应用到集群上线...
  • 使用Prodtest 检测不一致情况 68
  • 幂等地解决不一致情况 69
  • 专业化倾向 71
  • 以服务为导向的集群上线流程 72
  • Borg :仓库规模计算机的诞生 73
  • 可靠性是最基本的功能 74
  • 建议 75
  • 第8章 发布工程 76
  • 发布工程师的角色 76
  • 发布工程哲学 77
  • 自服务模型 77
  • 追求速度 77
  • 密闭性 77
  • 强调策略和流程 78
  • 持续构建与部署 78
  • 构建 78
  • 分支 79
  • 测试 79
  • 打包 79
  • Rapid 系统 80
  • 部署 81
  • 配置管理 81
  • 小结 82
  • 不仅仅只对Google 有用 83
  • 一开始就进行发布工程 83
  • 第9章 简单化 85
  • 系统的稳定性与灵活性 85
  • 乏味是一种美德 86
  • 我绝对不放弃我的代码 86
  • “负代码行”作为一个指标 87
  • 最小 API 87
  • 模块化 87
  • 发布的简单化 88
  • 小结 88
  • 第Ⅲ部分 具体实践
  • 第10章 基于时间序列数据进行有效...
  • Borgmon 的起源 94
  • 应用软件的监控埋点 95
  • 监控指标的收集 96
  • 时间序列数据的存储 97
  • 标签与向量 98
  • Borg 规则计算 99
  • 报警 104
  • 监控系统的分片机制 105
  • 黑盒监控 106
  • 配置文件的维护 106
  • 十年之后 108
  • 第11章 on-call 轮值 109
  • 介绍 109
  • on-call 工程师的一天 110
  • on-call 工作平衡 111
  • 数量上保持平衡 111
  • 质量上保持平衡 111
  • 补贴措施 112
  • 安全感 112
  • 避免运维压力过大 114
  • 运维压力过大 114
  • 奸诈的敌人—运维压力不够 115
  • 小结 115
  • 第12章 有效的故障排查手段 116
  • 理论 117
  • 实践 119
  • 故障报告 119
  • 定位 119
  • 检查 120
  • 诊断 122
  • 测试和修复 124
  • 神奇的负面结果 125
  • 治愈 126
  • 案例分析 127
  • 使故障排查更简单 130
  • 小结 130
  • 第13章 紧急事件响应 131
  • 当系统出现问题时怎么办 131
  • 测试导致的紧急事故 132
  • 细节 132
  • 响应 132
  • 事后总结 132
  • 变更部署带来的紧急事故 133
  • 细节 133
  • 事故响应 134
  • 事后总结 134
  • 流程导致的严重事故 135
  • 细节 135
  • 灾难响应 136
  • 事后总结 136
  • 所有的问题都有解决方案 137
  • 向过去学习,而不是重复它 138
  • 为事故保留记录 138
  • 提出那些大的,甚至不可能的问题:...
  • 鼓励主动测试 138
  • 小结 138
  • 第14章 紧急事故管理 140
  • 无流程管理的紧急事故 140
  • 对这次无流程管理的事故的剖析 141
  • 过于关注技术问题 141
  • 沟通不畅 141
  • 不请自来 142
  • 紧急事故的流程管理要素 142
  • 嵌套式职责分离 142
  • 控制中心 143
  • 实时事故状态文档 143
  • 明确公开的职责交接 143
  • 一次流程管理良好的事故 144
  • 什么时候对外宣布事故 144
  • 小结 145
  • 第15章 事后总结:从失败中学习 146
  • Google 的事后总结哲学 146
  • 协作和知识共享 148
  • 建立事后总结文化 149
  • 小结以及不断优化 151
  • 第16章 跟踪故障 152
  • Escalator 152
  • Outalator 153
  • 聚合 154
  • 加标签 155
  • 分析 155
  • 未预料到的好处 156
  • 第17章 测试可靠性 157
  • 软件测试的类型 158
  • 传统测试 159
  • 生产测试 160
  • 创造一个构建和测试环境 163
  • 大规模测试 165
  • 测试大规模使用的工具 166
  • 针对灾难的测试 167
  • 对速度的渴求 168
  • 发布到生产环境 170
  • 允许测试失败 170
  • 集成 172
  • 生产环境探针 173
  • 小结 175
  • 第18章 SRE 部门中的软件工程实践 176
  • 为什么软件工程项目对SRE 很重要 176
  • Auxon 案例分析:项目背景和要解决...
  • 传统的容量规划方法 177
  • 解决方案:基于意图的容量规划 179
  • 基于意图的容量规划 180
  • 表达产品意图的先导条件 181
  • Auxon 简介 182
  • 需求和实现:成功和不足 183
  • 提升了解程度,推进采用率 185
  • 团队内部组成 187
  • 在SRE 团队中培养软件工程风气 187
  • 在SRE 团队中建立起软件工程氛围:...
  • 做到这一点 189
  • 小结 190
  • 第19章 前端服务器的负载均衡 191
  • 有时候硬件并不能解决问题 191
  • 使用DNS 进行负载均衡 192
  • 负载均衡:虚拟IP 194
  • 第20章 数据中心内部的负载均衡系...
  • 理想情况 198
  • 识别异常任务:流速控制和跛脚鸭任...
  • 异常任务的简单应对办法:流速控制...
  • 一个可靠的识别异常任务的方法:跛...
  • 利用划分子集限制连接池大小 201
  • 选择合适的子集 201
  • 子集选择算法一:随机选择 202
  • 子集选择算法二:确定性算法 204
  • 负载均衡策略 206
  • 简单轮询算法 206
  • 最闲轮询策略 209
  • 加权轮询策略 210
  • 第21章 应对过载 212
  • QPS 陷阱 213
  • 给每个用户设置限制 213
  • 客户端侧的节流机制 214
  • 重要性 216
  • 资源利用率信号 217
  • 处理过载错误 217
  • 决定何时重试 218
  • 连接造成的负载 220
  • 小结 221
  • 第22章 处理连锁故障 223
  • 连锁故障产生的原因和如何从设计上...
  • 服务器过载 224
  • 资源耗尽 225
  • 服务不可用 228
  • 防止软件服务器过载 228
  • 队列管理 229
  • 流量抛弃和优雅降级 230
  • 重试 231
  • 请求延迟和截止时间 234
  • 慢启动和冷缓存 236
  • 保持调用栈永远向下 238
  • 连锁故障的触发条件 238
  • 进程崩溃 239
  • 进程更新 239
  • 新的发布 239
  • 自然增长 239
  • 计划中或计划外的不可用 239
  • 连锁故障的测试 240
  • 测试直到出现故障,还要继续测试 240
  • 测试最常用的客户端 241
  • 测试非关键性后端 242
  • 解决连锁故障的立即步骤 242
  • 增加资源 242
  • 停止健康检查导致的任务死亡 242
  • 重启软件服务器 242
  • 丢弃流量 243
  • 进入降级模式 243
  • 消除批处理负载 244
  • 消除有害的流量 244
  • 小结 244
  • 第23章 管理关键状态:利用分布式...
  • 使用共识系统的动力:分布式系统协...
  • 案例1 :脑裂问题 249
  • 案例2 :需要人工干预的灾备切换 249
  • 案例3 :有问题的小组成员算法 249
  • 分布式共识是如何工作的 250
  • Paxos 概要:协议示例 251
  • 分布式共识的系统架构模式 251
  • 可靠的复制状态机 252
  • 可靠的复制数据存储和配置存储 252
  • 使用领头人选举机制实现高可用的处...
  • 分布式协调和锁服务 253
  • 可靠的分布式队列和消息传递 254
  • 分布式共识系统的性能问题 255
  • 复合式Paxos :消息流过程详解 257
  • 应对大量的读操作 258
  • 法定租约 259
  • 分布式共识系统的性能与网络延迟 259
  • 快速Paxos 协议:性能优化 260
  • 稳定的领头人机制 261
  • 批处理 262
  • 磁盘访问 262
  • 分布式共识系统的部署 263
  • 副本的数量 263
  • 副本的位置 265
  • 容量规划和负载均衡 266
  • 对分布式共识系统的监控 270
  • 小结 272
  • 第24章 分布式周期性任务系统 273
  • Cron 273
  • 介绍 273
  • 可靠性 274
  • Cron 任务和幂等性 274
  • 大规模Cron 系统 275
  • 对基础设施的扩展 275
  • 对需求的扩展 276
  • Google Cron 系统的构建过程 277
  • 跟踪Cron 任务的状态 277
  • Paxos 协议的使用 277
  • 领头人角色和追随者角色 278
  • 保存状态 281
  • 运维大型Cron 系统 282
  • 小结 283
  • 第25章 数据处理流水线 284
  • 流水线设计模式的起源 284
  • 简单流水线设计模式与大数据 284
  • 周期性流水线模式的挑战 285
  • 工作分发不均造成的问题 285
  • 分布式环境中周期性数据流水线的缺...
  • 监控周期性流水线的问题 287
  • 惊群效应 287
  • 摩尔负载模式 288
  • Google Workflow 简介 289
  • Workflow 是模型—视图—控制器(M...
  • Workflow 中的执行阶段 291
  • Workflow 正确性保障 291
  • 保障业务的持续性 292
  • 小结 294
  • 第26章 数据完整性:读写一致 295
  • 数据完整性的强需求 296
  • 提供超高的数据完整性的策略 297
  • 备份与存档 298
  • 云计算环境下的需求 299
  • 保障数据完整性和可用性:Google S...
  • 数据完整性是手段,数据可用性是目...
  • 交付一个恢复系统,而非备份系统 301
  • 造成数据丢失的事故类型 301
  • 维护数据完整性的深度和广度的困难...
  • Google SRE 保障数据完整性的手段 304
  • 24 种数据完整性的事故组合 304
  • 第一层: 软删除 305
  • 第二层:备份和相关的恢复方法 306
  • 额外一层:复制机制 308
  • 1T vs. 1E :存储更多数据没那么简...
  • 第三层:早期预警 310
  • 确保数据恢复策略可以正常工作 313
  • 案例分析 314
  • Gmail—2011 年2 月:从GTape 上恢...
  • Google Music—2012 年3 月:一次...
  • SRE 的基本理念在数据完整性上的应...
  • 保持初学者的心态 319
  • 信任但要验证 320
  • 不要一厢情愿 320
  • 纵深防御 320
  • 小结 321
  • 第27章 可靠地进行产品的大规模发...
  • 发布协调工程师 323
  • 发布协调工程师的角色 324
  • 建立发布流程 325
  • 发布检查列表 326
  • 推动融合和简化 326
  • 发布未知的产品 327
  • 起草一个发布检查列表 327
  • 架构与依赖 328
  • 集成 328
  • 容量规划 328
  • 故障模式 329
  • 客户端行为 329
  • 流程与自动化 330
  • 开发流程 330
  • 外部依赖 331
  • 发布计划 331
  • 可靠发布所需要的方法论 332
  • 灰度和阶段性发布 332
  • 功能开关框架 333
  • 应对客户端滥用行为 334
  • 过载行为和压力测试 335
  • LCE 的发展 335
  • LCE 检查列表的变迁 336
  • LCE 没有解决的问题 337
  • 小结 338
  • 第Ⅳ部分 管理
  • 第28章 迅速培养SRE 加入on-call 341
  • 新的SRE 已经招聘到了,接下来怎么...
  • 培训初期:重体系,而非混乱 344
  • 系统性、累积型的学习方式 345
  • 目标性强的项目工作,而非琐事 346
  • 培养反向工程能力和随机应变能力 347
  • 反向工程:弄明白系统如何工作 347
  • 统计学和比较性思维:在压力下坚持...
  • 随机应变的能力:当意料之外的事情...
  • 将知识串联起来:反向工程某个生产...
  • 有抱负的on-call 工程师的5 个特点...
  • 对事故的渴望:事后总结的阅读和书...
  • 故障处理分角色演习 350
  • 破坏真的东西,并且修复它们 351
  • 维护文档是学徒任务的一部分 352
  • 尽早、尽快见习on-call 353
  • on-call 之后:通过培训的仪式感,...
  • 小结 354
  • 第29章 处理中断性任务 355
  • 管理运维负载 356
  • 如何决策对中断性任务的处理策略 356
  • 不完美的机器 357
  • 流状态 357
  • 将一件事情做好 358
  • 实际一点的建议 359
  • 减少中断 361
  • 第30章 通过嵌入SRE 的方式帮助团...
  • 第一阶段:了解服务,了解上下文 364
  • 确定最大的压力来源 364
  • 找到导火索 364
  • 第二阶段:分享背景知识 365
  • 书写一个好的事后总结作为示范 366
  • 将紧急事件按类型排序 366
  • 第三阶段:主导改变 367
  • 从基础开始 367
  • 获取团队成员的帮助 367
  • 解释你的逻辑推理过程 368
  • 提出引导性问题 368
  • 小结 369
  • 第 31章 SRE 与其他团队的沟通与协...
  • 沟通:生产会议 371
  • 议程 372
  • 出席人员 373
  • SRE 的内部协作 374
  • 团队构成 375
  • 高效工作的技术 375
  • SRE 内部的协作案例分析:Viceroy 376
  • Viceroy 的诞生 376
  • 所面临的挑战 378
  • 建议 379
  • SRE 与其他部门之间的协作 380
  • 案例分析:将DFP 迁移到F1 380
  • 小结 382
  • 第32章 SRE 参与模式的演进历程 383
  • SRE 参与模式:是什么、怎么样以及...
  • PRR 模型 384
  • SRE 参与模型 384
  • 替代性支持 385
  • PRR :简单PRR 模型 386
  • 参与 386
  • 分析 387
  • 改进和重构 387
  • 培训 388
  • “接手”服务 388
  • 持续改进 388
  • 简单PRR 模型的演进:早期参与模型...
  • 早期参与模型的适用对象 389
  • 早期参与模型的优势 390
  • 不断发展的服务:框架和SRE 平台 391
  • 经验教训 391
  • 影响SRE 的外部因素 392
  • 结构化的解决方案:框架 392
  • 新服务和管理优势 394
  • 小结 395
  • 第Ⅴ部分 结束语
  • 第33章 其他行业的实践经验 398
  • 有其他行业背景的资深SRE 399
  • 灾难预案与演习 400
  • 从组织架构层面坚持不懈地对安全进...
  • 关注任何细节 401
  • 冗余容量 401
  • 模拟以及进行线上灾难演习 402
  • 培训与考核 402
  • 对详细的需求收集和系统设计的关注...
  • 纵深防御 403
  • 事后总结的文化 403
  • 将重复性工作自动化,消除运维负载...
  • 结构化和理性的决策 406
  • 小结 407
  • 第34章 结语 408
  • 附录A 系统可用性 411
  • 附录B 生产环境运维过程中的最佳实...
  • 附录C 事故状态文档示范 417
  • 附录D 事后总结示范 419
  • 附录E 发布协调检查列表 423
  • 附录F 生产环境会议记录示范 425
  • 参考文献 427
  • 索引 439