第1章 引言 1
1.1 瞄准正确的目标 1
1.2 使用决断力 2
1.3 生活的质量 3
1.4 挑战的范围 3
1.5 随手一松就是一百万 3
1.6 务实的架构 4
第一部分 稳定性 8
第2章 案例研究:航空系统宕机的异常 8
2.1 事故 9
2.2 结果 12
2.3 事后调查 12
2.4 确凿的证据 15
2.5 一点预防 17
第3章 稳定性概述 19
3.1 定义稳定性 20
3.2 故障模式 22
3.3 裂痕扩散 22
3.4 改障链 23
3.5 模式与反模式 24
第4章 稳定性反模式 26
4.1 集成点 27
4.2 连锁反应 37
4.3 连锁故障 40
4.4 用户 42
4.5 阻塞的线程 50
4.6 自我否定攻击 55
4.7 尺度效应 57
4.8 不平衡的容量 60
4.9 慢响应 63
4.10 SLA倒置 64
4.11 无边界结果集 67
第5章 稳定性模式 70
5.1 使用超时 70
5.2 断路器 73
5.3 隔板 75
5.4 稳定状态 78
5.5 快速失效 83
5.6 握手 85
5.7 测试装置 87
5.8 去耦合中间件 90
第6章 稳定性总结 93
第二部分 容量 96
第7章 案例研究:被客户压迫 96
7.1 发布倒计时 96
7.2 瞄准QA 97
7.3 负载测试 99
7.4 被大量会话所杀 101
7.5 测试的鸿沟 102
7.6 后果 103
第8章 容量概述 105
8.1 定义容量 105
8.2 约束 106
8.3 关联 107
8.4 可扩展性 107
8.5 容量的神话 108
8.6 总结 114
第9章 容量反模式 115
9.1 资源池竞争 115
9.2 泛滥的JSP碎片 118
9.3 AJAX过度之伤 119
9.4 驻留过久的会话 121
9.5 HTML中浪费的空间 122
9.6 刷新按钮 125
9.7 手工的SQL语句 126
9.8 数据库富营养化 128
9.9 集成点延迟 130
9.10 Cookie怪兽 131
9.11 总结 133
第10章 容量模式 134
10.1 连接池 134
10.2 谨慎使用缓存 136
10.3 预计算容量 137
10.4 调整垃圾回收器 140
10.5 总结 142
第三部分 一般设计问题 144
第11章 网络连接 144
11.1 多宿主服务器 144
11.2 路由 146
11.3 虚拟IP地址 146
第12章 安全 149
12.1 最少特权原则 149
12.2 配置的密码 150
第13章 可用性 151
13.1 收集可用性需求 151
13.2 记录可用性需求 152
13.3 负载均衡 153
13.4 集群 157
第14章 管理 159
14.1 “测试和产品匹配吗?” 159
14.2 配置文件 161
14.3 启动和关闭 163
14.4 管理接口 164
第15章 设计总结 165
第四部分 运营 168
第16章 案例研究:惊人的宇宙 168
16.1 旺季 168
16.2 婴儿的第一个圣诞 169
16.3 切脉 169
16.4 感恩节 170
16.5 黑色星期五 170
16.6 重要的信号 172
16.7 诊断测试 172
16.8 专家打来电话 173
16.9 比较解救方案 174
16.10 条件是否会响应处理 175
16.11 收尾 176
第17章 透明度 177
17.1 视角 178
17.2 透明度设计 184
17.3 使用各种技术 184
17.4 日志 185
17.5 监控系统 190
17.6 法律上及事实上的标准 194
17.7 操作数据库 201
17.8 支持流程 205
17.9 总结 208
第18章 适应 209
18.1 与时俱进 209
18.2 适应性的软件设计 210
18.3 适应性的企业架构 215
18.4 发布应无害 220
18.5 总结 224
参考书目 226