1 核心概念 1
什么是伸缩性 2
从单一服务器到全球用户的Web架构演化 4
单一服务器 5
使用更强的服务器:垂直伸缩 6
服务分离 10
内容分发网络:静态内容的伸缩性 12
分散访问流量:水平伸缩 13
服务全球用户的伸缩性架构 16
数据中心基础设施架构概览 18
前端 19
Web应用层 20
Web服务层 20
附加组件 21
数据持久层 21
数据中心基础架构 22
应用架构概览 23
前端 24
Web服务 25
支撑技术 29
小结 30
2 软件设计原则 31
简单 31
隐藏复杂与构建抽象 32
避免过度设计 33
尝试测试驱动开发 34
从软件设计的简化范例中学习 35
低耦合 36
促进低耦合 37
避免不必要的耦合 39
低耦合范式 40
不要重复自己(DRY) 41
复制粘贴代码 42
基于约定编程 43
画架构图 46
用例图 49
类图 50
模块图 51
单一职责 52
改善单一职责 52
单一职责的例子 53
开闭原则 53
依赖注入 55
控制反转(IOC) 57
为伸缩而设计 59
增加副本 60
功能分割 62
数据分片 63
自愈设计 65
小结 67
3 构建前端层 69
状态管理 70
管理HTTP会话 73
管理文件 77
管理其他类型的状态 80
可伸缩的前端组件 83
DNS 84
负载均衡器 85
Web服务器 92
缓存 93
自动伸缩 94
部署案例 96
AWS场景 97
私有数据中心 98
小结 101
4 Web服务 102
Web服务设计 102
Web服务作为一种备用表示层 103
API优先方式 105
务实的方式 107
Web服务类型 108
以功能为中心的服务 109
以资源为中心的服务 111
伸缩REST Web服务 115
保持服务无状态 115
缓存服务响应 121
功能分割 124
小结 127
5 数据存储层 129
MySQL伸缩性 130
复制 130
数据分区(分片) 142
NoSQL伸缩性 157
最终一致性 160
快速恢复增加可用性 164
Cassandra拓扑结构 166
小结 170
6 缓存 171
缓存命中率 171
基于HTTP的缓存 173
HTTP缓存头 174
HTTP缓存技术类型 179
伸缩HTTP缓存 185
缓存应用对象 188
对象缓存的一般类型 189
伸缩对象缓存 194
缓存的经验法则 198
缓存整个调用栈 198
用户间缓存重用 199
从哪儿开始使用缓存? 201
缓存失效的困难 201
小结 203
7 异步处理 204
核心概念 204
同步处理的例子 205
异步处理的例子 208
购物类比 211
消息队列 213
消息生产者 214
消息代理 215
消息消费者 216
消息协议 220
消息基础设施 221
消息队列的好处 224
实现异步处理 225
更好的伸缩性 226
平衡流量峰值 227
失败隔离和自我修复 228
解耦 229
消息队列相关的挑战 230
消息无序 230
消息重新入队列 233
竞态条件可能性增大 233
复杂度风险 234
消息队列有关的反模式 235
将消息队列当作TCP套接字 235
将消息队列当作数据库 235
耦合消息生产者和消费者 235
缺少坏消息处理 236
消息平台快速比较与选择 237
亚马逊简单队列服务 237
RabbitMQ 240
ActiveMQ 242
最后的比较说明 243
事件驱动架构介绍 245
请求/响应交互 246
直接队列交互 247
事件驱动交互 247
小结 250
8 数据搜索 252
索引介绍 252
数据建模 260
NoSQL数据建模 260
宽列数据存储的例子 264
搜索引擎 271
搜索引擎介绍 272
使用专用搜索引擎 274
小结 275
9 伸缩性的其他维度 277
自动化实现生产力可伸缩 278
测试 278
构建与部署 280
监控与报警 285
日志聚合 289
个人可伸缩 291
加班不是一种伸缩性方案 291
自我管理 293
伸缩敏捷团队 300
增加人手 300
流程与创新 301
团结的文化 302
小结 303
A 推荐阅读 304