内容简介:
Artur Ejsmont 是一位充满激情的软件工程师及敏捷领导者,目前就职于雅虎悉尼。Artur 从事 Web 应用方面的开发工作已经超过十年,同时也大量关注敏捷及创业公司管理,热爱精益创业模型。Artur 开发的网站每小时 PV 数超过一百万,为欧洲及澳洲两个大洲的用户提供服务。他还在大学开设课程,分享他的技术与知识。作为一名科技作家、博客写手、技术演讲者,Artur 对技术社区有许多积极的贡献。
译者
李智慧,曾供职阿里巴巴及英特尔亚太研发中心,从事分布式系统与大数据方面的开发。《大型网站技术架构:核心原理与案例分析》作者。目前正在互联网方面创业。
何坤,宅米首席架构师,前阿里巴巴平台架构师。曾参与阿里中文站架构建设,以及WebX 框架、云计算存储平台 Doris 等核心系统研发。曾就职丰联金融证券期货部任首席架构师。对大型互联网站架构有深刻理解,对中间件、分布式系统及新技术研发始终保持热情。目前关注自然语言处理、机器理解等新课题。
作者简介:
Artur Ejsmont 是一位充满激情的软件工程师及敏捷领导者,目前就职于雅虎悉尼。Artur 从事 Web 应用方面的开发工作已经超过十年,同时也大量关注敏捷及创业公司管理,热爱精益创业模型。Artur 开发的网站每小时 PV 数超过一百万,为欧洲及澳洲两个大洲的用户提供服务。他还在大学开设课程,分享他的技术与知识。作为一名科技作家、博客写手、技术演讲者,Artur 对技术社区有许多积极的贡献。
译者
李智慧,曾供职阿里巴巴及英特尔亚太研发中心,从事分布式系统与大数据方面的开发。《大型网站技术架构:核心原理与案例分析》作者。目前正在互联网方面创业。
何坤,宅米首席架构师,前阿里巴巴平台架构师。曾参与阿里中文站架构建设,以及WebX 框架、云计算存储平台 Doris 等核心系统研发。曾就职丰联金融证券期货部任首席架构师。对大型互联网站架构有深刻理解,对中间件、分布式系统及新技术研发始终保持热情。目前关注自然语言处理、机器理解等新课题。
目录:
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