第1章 生产环境的生存法则
1.1 瞄准正确的目标
1.2 应对不断扩大的挑战范围
1.3 多花5万美元来节省100万美元
1.4 让“原力”与决策同在
1.5 设计务实的架构
1.6 小结
第一部分 创造稳定性
第2章 案例研究:让航空公司停飞的代码异常
2.1 进行变更
2.2 遭遇停机
2.3 严重后果
2.4 事后分析
2.5 寻找线索
2.6 证据确凿
2.7 预防管用吗
第3章 让系统稳定运行
3.1 定义稳定性
3.2 延长系统寿命
3.3 系统失效方式
3.4 阻止裂纹蔓延
3.5 系统失效链
3.6 小结
第4章 稳定性的反模式
4.1 集成点
4.1.1 套接字协议
4.1.2 凌晨5点的紧急电话
4.1.3 HTTP协议
4.1.4 供应商的API程序库
4.1.5 应对集成点的问题
4.1.6 要点回顾
4.2 同层连累反应
4.3 层叠失效
4.4 用户
4.4.1 网络流量
4.4.2 难伺候的用户
4.4.3 不受欢迎的用户
4.4.4 恶意用户
4.4.5 要点回顾
4.5 线程阻塞
4.5.1 发现阻塞
4.5.2 程序库
4.5.3 要点回顾
4.6 自黑式攻击
4.6.1 避免自黑式攻击
4.6.2 要点回顾
4.7 放大效应
4.7.1 点对点通信
4.7.2 共享资源
4.7.3 要点回顾
4.8 失衡的系统容量
4.8.1 通过测试发现系统容量失衡
4.8.2 要点回顾
4.9 一窝蜂
4.10 做出误判的机器
4.10.1 被放大的停机事故
4.10.2 控制和防护措施
4.10.3 要点回顾
4.11 缓慢的响应
4.12 无限长的结果集
4.12.1 黑色星期一
4.12.2 要点回顾
4.13 小结
第5章 稳定性的模式
5.1 超时
5.2 断路器
5.3 舱壁
5.4 稳态
5.4.1 数据清除
5.4.2 日志文件
5.4.3 内存中的缓存
5.4.4 要点回顾
5.5 快速失败
5.6 任其崩溃并替换
5.6.1 有限的粒度
5.6.2 快速替换
5.6.3 监管
5.6.4 重新归队
5.6.5 要点回顾
5.7 握手
5.8 考验机
5.9 中间件解耦
5.10 卸下负载
5.11 背压机制
5.12 调速器
5.13 小结
第二部分 为生产环境而设计
第6章 案例研究:屋漏偏逢连夜雨
6.1 宝宝的第一个感恩节
6.2 把脉
6.3 感恩节
6.4 黑色星期五
6.5 生命体征
6.6 进行诊断
6.7 求助专家
6.8 如何应对
6.9 应对奏效吗
6.10 尾声
第7章 基础层
7.1 数据中心和云端的联网
7.1.1 网卡和名字
7.1.2 多网络编程
7.2 物理主机、虚拟机和容器
7.2.1 物理主机
7.2.2 数据中心的虚拟机
7.2.3 数据中心的容器
7.2.4 云上的虚拟机
7.2.5 云上的容器
7.3 小结
第8章 实例层
8.1 代码
8.1.1 构建代码
8.1.2 不可变、易处理的基础设施
8.2 配置
8.2.1 配置文件
8.2.2 易处理基础设施的配置
8.3 明晰性
8.3.1 明晰性设计
8.3.2 提升明晰性的实现技术
8.3.3 记录日志
8.3.4 实例的健康度量指标
8.3.5 健康状况检查
8.4 小结
第9章 互连层
9.1 不同规模的解决方案
9.2 使用DNS
9.2.1 基于DNS的服务发现
9.2.2 基于DNS的负载均衡
9.2.3 基于DNS的GSLB
9.2.4 DNS的可用性
9.2.5 要点回顾
9.3 负载均衡
9.3.1 软件负载均衡
9.3.2 硬件负载均衡
9.3.3 健康状况检查
9.3.4 会话黏性
9.3.5 按请求类型分隔流量
9.3.6 要点回顾
9.4 控制请求数量
9.4.1 系统为何会失效
9.4.2 防止灾难
9.4.3 要点回顾
9.5 网络路由
9.6 发现服务
9.7 迁移虚拟IP地址
9.8 小结
第10章 控制层
10.1 适合的控制层工具
10.2 机械效益
10.2.1 属于系统失效,而非人为错误
10.2.2 运行得太快也有问题
10.3 平台和生态系统
10.4 开发环境就是生产环境
10.5 整个系统的明晰性
10.5.1 真实用户监控
10.5.2 经济价值高于技术价值
10.5.3 碎片化的风险
10.5.4 日志和统计信息
10.5.5 要监控什么
10.6 配置服务
10.7 环境整备和部署服务
10.8 命令与控制
10.8.1 要控制什么
10.8.2 发送命令
10.8.3 可编写脚本的界面
10.8.4 要点回顾
10.9 平台厂商
10.10 工具