第1章 化简方程 1
1.1原则1:不要过度设计 2
1.2原则2:设计时就考虑扩展性(D-I-D方法) 6
1.2.1设计 7
1.2.2实现 8
1.2.3部署 8
1.3原则3:把方案一简再简 10
1.3.1如何简化范围 10
1.3.2如何简化设计 11
1.3.3如何简化实施 12
1.4原则4:减少DNS查找 13
1.5原则5:尽可能减少对象 16
1.6原则6:使用同一品牌的网络设备 19
1.7小结 21
参考资料 21
第2章 分布工作 23
2.1原则7:横向复制(X轴原则) 25
2.2原则8:拆分不同的东西(Y轴原则) 29
2.3原则9:拆分相近的东西(Z轴原则) 32
2.4小结 34
参考资料 34
第3章 横向扩展设计 35
3.1原则10:设计横向扩展方案 36
3.2原则11:采用经济型系统 39
3.3原则12:横向扩展数据中心 42
3.4原则13:利用云技术进行设计 48
3.5小结 50
参考资料 50
第4章 使用正确的工具 51
4.1原则14:合理使用数据库 52
4.2原则15:防火墙,到处都是防火墙 59
4.3原则16:积极利用日志文件 63
4.4小结 66
参考资料 66
第5章 不要重复工作 67
5.1原则17:不要立即检查刚做过的工作 68
5.2原则18:停止重定向 72
5.3原则19:放松时序约束 77
5.4小结 80
参考资料 80
第6章 积极利用缓存 81
6.1原则20:利用CDN 82
6.2原则21:使用过期头 85
6.3原则22:缓存Ajax调用 90
6.4原则23:利用页面缓存 95
6.5原则24:利用应用缓存 98
6.6原则25:利用对象缓存 102
6.7原则26:把对象缓存放在自己的“层”上 105
6.8小结 107
参考资料 107
第7章 从错误中吸取教训 109
7.1原则27:积极地学习 110
7.2原则28:不要依靠QA发现失误 113
7.3原则29:没有回退功能的设计是失败的设计 117
7.4原则30:讨论失败并从中吸取教训 120
7.5小结 124
参考资料 124
第8章 数据库原则 125
8.1原则31:注意代价高的关系 126
8.2原则32:使用类型正确的数据库锁 130
8.3原则33:不要使用多阶段提交 133
8.4原则34:不要使用SELECT FOR UPDATE 135
8.5原则35:不要选择所有数据 137
8.6小结 140
参考资料 140
第9章 容错设计与故障控制 141
9.1原则36:采用隔离故障的“泳道” 142
9.2原则37:绝对不要信任单点故障 148
9.3原则38:避免系统串联 151
9.4原则39:确保能够启用/禁用功能 155
9.5小结 158
第10章 避免或分发状态 159
10.1原则40:努力实现无状态 161
10.2原则41:尽可能在浏览器端维护会话 164
10.3原则42:利用分布式缓存存放状态 167
10.4小结 170
参考资料 170
第11章 异步通信和消息总线 171
11.1原则43:尽可能使用异步通信 172
11.2原则44:确保消息总线能够扩展 175
11.3原则45:避免让消息总线过度拥挤 179
11.4小结 182
第12章 其他原则 183
12.1原则46:慎用第三方解决方案扩展 184
12.2原则47:清除、归档和成本合理的存储 187
12.3原则48:删除事务处理中的商业智能 192
12.4原则49:设计能够监控的应用 195
12.5原则50:要能胜任 199
12.6小结 202
参考资料 202
第13章 原则回顾和优先级划分 203
13.1评估扩展项目和主动权的风险-收益模型 204
13.2扩展原则的收益/优先级等级 235
13.3小结 238