描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121309540
提前看到这部著作的人这样评价——
√ 经历618、双11多次大考,是保证大规模电商系统高流量、高频次的葵花宝典。
√ 集中火力讲述作者构建大流量系统用到的高可用和高并发原则。
√ 浓缩作者多年对网站系统升级迭代的创新、技术、实践和积累。
√ 高可用和高并发总体原则、关键技术、实战经验的总结,以及曾经踩过的坑。
√ 教你如何构建高并发、大流量系统方能经受起亿级线上用户流量的真实考验。
√ 从前端到DB底层设计,本书无不精细阐述。
√ 站在一个新高度思考网站后台技术,从应用级缓存到前端缓存,从SOA到闭环。
√ *多年架构升级及大促备战的高质量总结。
√ 将系统设计的深奥套路讲得如此清晰,难能可贵。
√ 完整呈现如何设计响应亿级请求的*商品详情页系统。
√ 本书作者是将技术应用于业务、理论应用于实践的大师。
√ 地表至强,天大福利。
√ 流量并发暴增与系统架构变革的十字路口,需要这样一本书。
√ 一个亿级流量网站和一个中小型网站的技术架构难度截然不同。
√ 这种指导手册式的技术书籍,值得精读和细品。
√ 一本互联网高并发架构设计的百科全书。
√ 从各角度剖析系统设计的优化要点和注意事项。
√ 循序渐进地将一系列复杂问题阐述得清晰、易读。
√ 实战出真理,选择这本书,靠谱。
《亿级流量网站架构核心技术》一书总结并梳理了亿级流量网站高可用和高并发原则,通过实例详细介绍了如何落地这些原则。本书分为四部分:概述、高可用原则、高并发原则、案例实战。从负载均衡、限流、降级、隔离、超时与重试、回滚机制、压测与预案、缓存、池化、异步化、扩容、队列等多方面详细介绍了亿级流量网站的架构核心技术,让读者看后能快速运用到实践项目中。
不管是软件开发人员,还是运维人员,通过阅读《亿级流量网站架构核心技术》都能系统地学习实现亿级流量网站的架构核心技术,并收获解决系统问题的思路和方法。
第1部分 概述 / 1
1 交易型系统设计的一些原则 / 2
1.1 高并发原则 / 3
1.1.1 无状态 / 3
1.1.2 拆分 / 3
1.1.3 服务化 / 4
1.1.4 消息队列 / 4
1.1.5 数据异构 / 6
1.1.6 缓存银弹 / 7
1.1.7 并发化 / 9
1.2 高可用原则 / 10
1.2.1 降级 / 10
1.2.2 限流 / 11
1.2.3 切流量 / 12
1.2.4 可回滚 / 12
1.3 业务设计原则 / 12
1.3.1 防重设计 / 13
1.3.2 幂等设计 / 13
1.3.3 流程可定义 / 13
1.3.4 状态与状态机 / 13
1.3.5 后台系统操作可反馈 / 14
1.3.6 后台系统审批化 / 14
1.3.7 文档和注释 / 14
1.3.8 备份 / 14
1.4 总结 / 14
第2部分 高可用 / 17
2 负载均衡与反向代理 / 18
2.1 upstream配置 / 20
2.2 负载均衡算法 / 21
2.3 失败重试 / 23
2.4 健康检查 / 24
2.4.1 TCP心跳检查 / 24
2.4.2 HTTP心跳检查 / 25
2.5 其他配置 / 25
2.5.1 域名上游服务器 / 25
2.5.2 备份上游服务器 / 26
2.5.3 不可用上游服务器 / 26
2.6 长连接 / 26
2.7 HTTP反向代理示例 / 29
2.8 HTTP动态负载均衡 / 30
2.8.1 Consul Consul-template / 31
2.8.2 Consul OpenResty / 35
2.9 Nginx四层负载均衡 / 39
2.9.1 静态负载均衡 / 39
2.9.2 动态负载均衡 / 41
参考资料 / 42
3 隔离术 / 43
3.1 线程隔离 / 43
3.2 进程隔离 / 45
3.3 集群隔离 / 45
3.4 机房隔离 / 46
3.5 读写隔离 / 47
3.6 动静隔离 / 48
3.7 爬虫隔离 / 49
3.8 热点隔离 / 50
3.9 资源隔离 / 50
3.10 使用Hystrix实现隔离 / 51
3.10.1 Hystrix简介 / 51
3.10.2 隔离示例 / 52
3.11 基于Servlet 3实现请求隔离 / 56
3.11.1 请求解析和业务处理线程池分离 / 57
3.11.2 业务线程池隔离 / 58
3.11.3 业务线程池监控/运维/降级 / 58
3.11.4 如何使用Servlet 3异步化 / 59
3.11.5 一些Servlet 3异步化压测数据 / 64
4 限流详解 / 66
4.1 限流算法 / 67
4.1.1 令牌桶算法 / 67
4.1.2 漏桶算法 / 68
4.2 应用级限流 / 69
4.2.1 限流总并发/连接/请求数 / 69
4.2.2 限流总资源数 / 70
4.2.3 限流某个接口的总并发/请求数 / 70
4.2.4 限流某个接口的时间窗请求数 / 70
4.2.5 平滑限流某个接口的请求数 / 71
4.3 分布式限流 / 75
4.3.1 Redis Lua实现 / 76
4.3.2 Nginx Lua实现 / 77
4.4 接入层限流 / 78
4.4.1 ngx_http_limit_conn_module / 78
4.4.2 ngx_http_limit_req_module / 80
4.4.3 lua-resty-limit-traffic / 88
4.5 节流 / 90
4.5.1 throttleFirst/throttleLast / 90
4.5.2 throttleWithTimeout / 91
参考资料 / 92
5 降级特技 / 93
5.1 降级预案 / 93
5.2 自动开关降级 / 95
5.2.1 超时降级 / 95
5.2.2 统计失败次数降级 / 95
5.2.3 故障降级 / 95
5.2.4 限流降级 / 95
5.3 人工开关降级 / 96
5.4 读服务降级 / 96
5.5 写服务降级 / 97
5.6 多级降级 / 98
5.7 配置中心 / 100
5.7.1 应用层API封装 / 100
5.7.2 配置文件实现开关配置 / 101
5.7.3 配置中心实现开关配置 / 102
5.8 使用Hystrix实现降级 / 106
5.9 使用Hystrix实现熔断 / 108
5.9.1 熔断机制实现 / 108
5.9.2 配置示例 / 112
5.9.3 采样统计 / 113
6 超时与重试机制 / 117
6.1 简介 / 117
6.2 代理层超时与重试 / 119
6.2.1 Nginx / 119
6.2.2 Twemproxy / 126
6.3 Web容器超时 / 127
6.4 中间件客户端超时与重试 / 127
6.5 数据库客户端超时 / 131
6.6 NoSQL客户端超时 / 134
6.7 业务超时 / 135
6.8 前端Ajax超时 / 135
6.9 总结 / 136
6.10 参考资料 / 137
7 回滚机制 / 139
7.1 事务回滚 / 139
7.2 代码库回滚 / 140
7.3 部署版本回滚 / 141
7.4 数据版本回滚 / 142
7.5 静态资源版本回滚 / 143
8 压测与预案 / 145
8.1 系统压测 / 145
8.1.1 线下压测 / 146
8.1.2 线上压测 / 146
8.2 系统优化和容灾 / 147
8.3 应急预案 / 148
第3部分 高并发 / 153
9 应用级缓存 / 154
9.1 缓存简介 / 154
9.2 缓存命中率 / 155
9.3 缓存回收策略 / 155
9.3.1 基于空间 / 155
9.3.2 基于容量 / 155
9.3.3 基于时间 / 155
9.3.4 基于Java对象引用 / 156
9.3.5 回收算法 / 156
9.4 Java缓存类型 / 156
9.4.1 堆缓存 / 158
9.4.2 堆外缓存 / 162
9.4.3 磁盘缓存 / 162
9.4.4 分布式缓存 / 164
9.4.5 多级缓存 / 166
9.5 应用级缓存示例 / 167
9.5.1 多级缓存API封装 / 167
9.5.2 NULL Cache / 170
9.5.3 强制获取数据 / 170
9.5.4 失败统计 / 171
9.5.5 延迟报警 / 171
9.6 缓存使用模式实践 / 172
9.6.1 Cache-Aside / 173
9.6.2 Cache-As-SoR / 174
9.6.3 Read-Through / 174
9.6.4 Write-Through / 176
9.6.5 Write-Behind / 177
9.6.6 Copy Pattern / 181
9.7 性能测试 / 181
9.8 参考资料 / 182
10 HTTP缓存 / 183
10.1 简介 / 183
10.2 HTTP缓存 / 184
10.2.1 Last-Modified / 184
10.2.2 ETag / 190
10.2.3 总结 / 192
10.3 HttpClient客户端缓存 / 192
10.3.1 主流程 / 195
10.3.2 清除无效缓存 / 195
10.3.3 查找缓存 / 196
10.3.4 缓存未命中 / 198
10.3.5 缓存命中 / 198
10.3.6 缓存内容陈旧需重新验证 / 202
10.3.7 缓存内容无效需重新执行请求 / 205
10.3.8 缓存响应 / 206
10.3.9 缓存头总结 / 207
10.4 Nginx HTTP缓存设置 / 208
10.4.1 expires / 208
10.4.2 if-modified-since / 209
10.4.3 nginx proxy_pass / 209
10.5 Nginx代理层缓存 / 212
10.5.1 Nginx代理层缓存配置 / 212
10.5.2 清理缓存 / 215
10.6 一些经验 / 216
参考资料 / 217
11 多级缓存 / 218
11.1 多级缓存介绍 / 218
11.2 如何缓存数据 / 220
11.2.1 过期与不过期 / 220
11.2.2 维度化缓存与增量缓存 / 221
11.2.3 大Value缓存 / 221
11.2.4 热点缓存 / 221
11.3 分布式缓存与应用负载均衡 / 222
11.3.1 缓存分布式 / 222
11.3.2 应用负载均衡 / 222
11.4 热点数据与更新缓存 / 223
11.4.1 单机全量缓存 主从 / 223
11.4.2 分布式缓存 应用本地热点 / 224
11.5 更新缓存与原子性 / 225
11.6 缓存崩溃与快速修复 / 226
11.6.1 取模 / 226
11.6.2 一致性哈希 / 226
11.6.3 快速恢复 / 226
12 连接池线程池详解 / 227
12.1 数据库连接池 / 227
12.1.1 DBCP连接池配置 / 228
12.1.2 DBCP配置建议 / 233
12.1.3 数据库驱动超时实现 / 234
12.1.4 连接池使用的一些建议 / 235
12.2 HttpClient连接池 / 236
12.2.1 HttpClient 4.5.2配置 / 236
12.2.2 HttpClient连接池源码分析 / 240
12.2.3 HttpClient 4.2.3配置 / 241
12.2.4 问题示例 / 243
12.3 线程池 / 244
12.3.1 Java线程池 / 245
12.3.2 Tomcat线程池配置 / 248
13 异步并发实战 / 250
13.1 同步阻塞调用 / 251
13.2 异步Future / 252
13.3 异步Callback / 253
13.4 异步编排CompletableFuture / 254
13.5 异步Web服务实现 / 257
13.6 请求缓存 / 259
13.7 请求合并 / 261
14 如何扩容 / 266
14.1 单体应用垂直扩容 / 267
14.2 单体应用水平扩容 / 267
14.3 应用拆分 / 268
14.4 数据库拆分 / 271
14.5 数据库分库分表示例 / 275
14.5.1 应用层还是中间件层 / 275
14.5.2 分库分表策略 / 277
14.5.3 使用sharding-jdbc分库分表 / 279
14.5.4 sharding-jdbc分库分表配置 / 279
14.5.5 使用sharding-jdbc读写分离 / 283
14.6 数据异构 / 284
14.6.1 查询维度异构 / 284
14.6.2 聚合数据异构 / 285
14.7 任务系统扩容 / 285
14.7.1 简单任务 / 285
14.7.2 分布式任务 / 287
14.7.3 Elastic-Job简介 / 287
14.7.4 Elastic-Job-Lite功能与架构 / 287
14.7.5 Elastic-Job-Lite示例 / 288
15 队列术 / 295
15.1 应用场景 / 295
15.2 缓冲队列 / 296
15.3 任务队列 / 297
15.4 消息队列 / 297
15.5 请求队列 / 299
15.6 数据总线队列 / 300
15.7 混合队列 / 301
15.8 其他队列 / 302
15.9 Disruptor Redis队列 / 303
15.10 下单系统水平可扩展架构 / 311
第4部分 案例 / 323
16 构建需求响应式亿级商品详情页 / 324
16.1 商品详情页是什么 / 324
16.2 商品详情页前端结构 / 325
16.3 我们的性能数据 / 327
16.4 单品页流量特点 / 327
16.5 单品页技术架构发展 / 327
16.5.1 架构1.0 / 328
16.5.2 架构2.0 / 328
16.5.3 架构3.0 / 330
16.6 详情页架构设计原则 / 332
16.7 遇到的一些坑和问题 / 339
16.8 其他 / 347
17 商品详情页服务闭环实践 / 348
17.1 为什么需要统一服务 / 348
17.2 整体架构 / 349
17.3 一些架构思路和总结 / 350
17.4 引入Nginx接入层 / 354
17.5 前端业务逻辑后置 / 356
17.6 前端接口服务端聚合 / 357
17.7 服务隔离 / 359
18 使用OpenResty开发高性能Web应用 / 360
18.1 OpenResty简介 / 361
18.1.1 Nginx优点 / 361
18.1.2 Lua的优点 / 361
18.1.3 什么是ngx_lua / 361
18.1.4 开发环境 / 362
18.1.5 OpenResty生态 / 362
18.1.6 场景 / 362
18.2 基于OpenResty的常用架构模式 / 363
18.3 如何使用OpenResty开发Web应用 / 371
18.4 基于OpenResty的常用功能总结 / 375
18.5 一些问题 / 376
19 应用数据静态化架构高性能单页Web应用 / 377
19.1 整体架构 / 378
19.2 数据和模板动态化 / 381
19.3 多版本机制 / 381
19.4 异常问题 / 382
20 使用OpenResty开发Web服务 / 383
20.1 架构 / 383
20.2 单DB架构 / 384
20.3 实现 / 387
21 使用OpenResty开发商品详情页 / 405
21.1 技术选型 / 407
21.2 核心流程 / 408
21.3 项目搭建 / 408
21.4 数据存储实现 / 410
21.5 动态服务实现 / 422
21.6 前端展示实现 / 430
序1
开涛勤奋好学又乐于分享,他很早就深读了不少开源框架源码,吃透了内核技术,又非常喜欢看技术大侠们的分享,不断与同行交流,并学以致用,一开始参加工作就站在了较高的起点上,所以往往比同龄人做系统更加有信心,成果更加突出。他感恩于开源和分享,也践行着开源分享之路,每次埋头探索之后都有细心总结,有博客时写博客,有微信公众号时发公众号,把学到的和实践总结出来的,都无私分享出来。
网站是直接面对广大客户的,是公司的门户,必须快速响应,必须持续可用,必须抗得住洪峰。任何一个网站的发展过程中都出现过问题,影响客户体验和商业利益,公司业务规模越大,网站出现问题的损失越大。
本书高屋建瓴,抓住了大型高并发网站设计的核心,从设计原则,到高性能、高吞吐量、高可用的系统设计,到高灵敏的监控系统构思、再到应急方案的制定,不失细节,又不拘泥于细节。相比其他已出版的关于大型网站的架构类的书籍,此书更加贴近实战,追求实用,所有内容来自于实战,文章内容也是与同道和网友们互动后改进的,本书也没有那些为了构建一个“完整的体系”而只起到填充作用的段落。此书特别适合那些快速成长型企业网站的建设者,互联网行业的研发人员,对较大规模网站的重构也有借鉴意义,看这本书可以少走些弯路,少踩些坑,其中的策略和技术许多可以直接拿来用,从而节省时间。作为本书的批读者,发现这本书的内容组织上兼具工具书的特点,没有严格的前后依赖,可以按章节顺序阅读,也可以随机选取中间的一章。文中公布了作者的联络方式,有问题能方便地交流。希望这本书不要成为一个网站架构分享的终结者,希望有更多同学加入到探索和分享的队伍中来,不断克服新的挑战,分享更多新成果。
序2
我们的互联网开发者都曾经有过这样的经验。搭建一个设计精良,功能丰富的网站并不是一个高不可攀的事情。但能够支持巨大的流量而运行自如就不是一件容易的事情了。可是,当你拥有《亿级流量网站架构核心技术》时,这一切又变得那么轻松。
《亿级流量网站架构核心技术》一书详细地阐述了开发高并发高可用网站的一系列关键原则问题。就如何实现系统高可用,流量高并发进行了深刻剖析。本书例举了大量的真实应用案例,帮助读者深入了解。并且使得枯燥的说教变得生动,活泼。
序3
经历过双11和618的同学都知道,在大促时如何保证系统的高并发、高可用是非常重要的事情。因此在备战大促时,有些通用原则和经验可以帮助我们在遇到高并发时,构建更可用的系统,如限流、降级、水平扩展和隔离解耦等。通过这些原则可以在流量超预期时,很好地保护系统,避免冲击导致的系统不可用。
以前也遇到过一些高可用问题,如超时设置不合理导致系统崩溃;限流措施不到位,导致负载过高时系统崩溃;解耦不彻底,导致某个服务挂掉时所有依赖服务受影响等。这些都是在开发和运维系统中很常见的问题,只要开发人员在开发系统时注意下这些点就可以很好地避免。书中的高可用部分可以很好地帮助读者解决这些问题。
也经常有人讨论如何提升系统性能,直接的解决方案是扩容,或通过如加缓存来提升系统并发能力,或使用队列进行流量削峰,也可以使用异步并发机制提升吞吐量或者接口性能等。这些技术老生常谈,并不新鲜,但很实用,大家在实现高并发系统时经常会遇到。书中的高并发部分可以帮助读者理解和使用这些技术。
这本书还有一部分介绍实战案例,其中包含了0级系统“商品详情页”和“商品详情页统一服务”系统,这两个系统每天承载了几十亿的流量,书中深入讲解这两个系统的核心技术,还通过案例详细介绍如何使用OpenResty设计和开发高性能Web应用,值得认真阅读。
本书的特点是实用,书中的原则和经验是在实战中总结和进化出来的。市面上系统化地介绍高可用和高并发的文章并不多,成体系的就更少了,很多都是散落在网络上。开涛是优秀的架构师,有很强的架构抽象能力、扎实的编程基本功和丰富的实战经验,他将这些原则整理成体系,而且加了很多案例,相信可以很好地帮助读者学习和使用这些原则,让读者读完此书后能落地到实际项目中。
集团架构师吴博
序4
大型互联网业务需要持续建设网站系统并通过PC、移动等各种终端来与用户进行交互。大流量网站架构如何支持高并发访问并且保证高可用性,这是一个持久的、极具挑战的技术话题。毫不夸张地说,无数互联网行业的工程师为之奋斗。
开涛是优秀技术人才的典型代表。他从研发一线做起,脚踏实地成长为核心架构师。他所著《亿级网站架构核心技术》一书,分享高可用与高并发网站构建技术,干货满满,特点鲜明。
首先,理论与实践结合。本书不仅总结出一系列技术方法论,而且配合真实的案例,娓娓道来,深入浅出。读者可以直接运用这些实用技术到自己的日常工作中。
第二,深度与广度兼具。本书选题极具针对性,专注于高可用与高并发两方面技术实践,每个方面均详解一系列技术细节。
第三,技术与业务并重。开涛并没有纯谈技术,而是围绕商品详情页—重要的业务产品之一,来展开更进一步的实践经验分享,给读者从业务需求到技术架构的完整视图。
第四,新兵与老将咸宜。无论是年的软件工程师,还是工作多年的资深人士,均可从本书中受益。
我个人强烈推荐此书。相信开涛的作品不会让大家失望。
商城总架构师、基础平台负责人刘海锋
序5
去年年底我拿到本书的电子版,受邀为其写书评。全书篇幅很长,打开修订视图后,看到开涛在即将出版之前仍然在不断的补充素材、示例,推敲着词句。在读到其中的某个部分的时候,我联想到当时工作中正在做的一个优化,还跟他详细的讨论过,他想把这个方案也补充进去作为示例。我说,内容已经够翔实了,还嫌书不够厚吗?
是的,开涛恨不得在这本书中,一股脑地告诉大家他所在领域中所学到和实践的知识。写书是一个吃力还不一定能讨好的活儿,很佩服他居然能耐心写了这么多(还有很多限于整书篇幅,链接到他的博客和公众号上的扩展阅读内容)。我看到了作者的诚意。
全书前半部分我是利用地铁上的时间看的,虽然内容我比较熟悉,但想在看书的同时如果能提前发现一些错误就更好了,看得极慢。不过,除了一些笔误之外也没发现什么硬伤。后来假期拖延症犯了,答应的书评还迟迟没有写完。后半部分就快速看过。尤其是第四部分案例,差不多就是开涛自己之前的工作内容,这些或多或少的都通过其他渠道看过了。
开涛结合自己的工作内容,以及相关上下游依赖系统中的各种方案、架构思想,通过自己的思考和归类总结写成本书。其中不仅有很多的中前端的架构实践和技术,还有作者在工作过程中用到的很多技术细节甚至代码。第二、三部分比较详细和系统地说明了高可用、高并发互联网应用的常用架构思想和设计方法,并配合不同的场景进行举例阐述,比较适合对此已经有了一些经验的读者。针对一些常见软件和框架的细节使用说明,以及提供很多代码的行文风格,也许能满足那些想立即动手实践的读者。
架构讲究权衡和取舍,但是前提之一是尽可能在多个相关领域的技术知识层面有经验,因此架构也很重视细节,需要对很多因素有充分思考和权衡,才有取舍。读者在阅读本书的过程中,关注点如果是各种架构方法,则需要注意作者描述的适用场景。如果关注点是各种具体的技术细节,也不要忘记思考背后所体现的架构思想。实际的工作中,很多方案是若干架构方法和技术的综合运用,并且随着业务或场景的变化而不断调整的,不要拘泥。
突然想到了倚天屠龙记中张无忌向张三丰学太极剑一节,张无忌成功忘记了所有的招式。对于武功高手来说,都是要融会贯通,形成自身体系的,不要被特定的招式所束缚。学习架构,也不外乎是吧。
交易平台架构师肖飞
序6
动起来
开涛是个勤奋的写手,写方案,写代码,写分享,孜孜不倦。对于大多数软件开发和设计人员来说,写作不是一件容易的事。因为写出来并不是给自己看的,是要给同行们看。技术人员一方面对好的技术追求若渴,另一方面又天然地用批判和挑剔的眼光看同行的作品,算是鲁迅先生的同道吧。也正因为如此,开涛为此书内容的质量下了不少功夫。
开涛的职业生涯从空中网开始,2014年加入,一头扎进了超0级系统的建设过程中,商城商品详情页改版、商品详情页统一服务规划与落地。这些系统代表着的形象,代表着技术团队的形象(开涛也是高颜值)。这些系统必须能抗峰值、不掉线、响应快,随着业务量的猛增,预期的瓶颈很快会到来,这次关键的系统改版也是从这些挑战开始,后来也就有了“永不消失的单品页”,也就有了这本书中的案例和用心总结。
作者停下开发的脚步,通过思考和总结,把动态的实践静止到了纸张上,给大家带来了精彩,又似跃然纸上,愿各位读者能够把这些发生在某个历史瞬间的实践总结动态地运用到现实的开发实践中。也期望作者可以开放群或者公众号,邀请技术专家进来,与读者进行交流,动起来。
商城架构师林世洪
2016年12月
序7
开启探索之旅,感受技术的魅力
近年来,中国的互联网产业正在以前所未有的速度迅猛发展。而技术在业务发展中所扮演的角色日益重要,随着各个业务形态的发展涌现出了许多技术应用上的成功案例和先进技术的研究成果。而作者在本书中则通过对工作中的探索和总结来将系统高可用这个神秘莫测的面纱揭开,让对此有兴趣的人得以窥其真容。
在以往的交流和面试过程中,大多数的研发人员在其所研发的系统中很少有机会或确实不需要和繁多的上下游系统、海量的业务数据、复杂的部署环境以及灾难(如机房断电、光纤损坏)打交道,因此也没有契机和计划去详细了解、研究系统的高可用,对于系统高可用的理解和实践大多停留在理论认知和个人尝试阶段,很难有机会应用到解决实际业务问题上,也就很难形成自己技术和理念上的一个积累。而等到终于有机会开始在海量数据和高并发场景下一展身手的时候,又常常会因为曾经没有过系统的学习和经验积累而在设计系统、容灾策略、解决问题的过程中艰难前行。本书则通过浅显易懂的理念解读和实际案例将系统高可用相关的系统设计原则、系统限流、降级措施等“兵法三十六计”以非常直白的方式呈现给了大家。让我们对于一些常见的高并发业务场景下的系统设计原则、高可用策略有了清晰的认识和思路的拓展。无论是刚刚接触编程的学生还是已身经百战的一线研发人员都可以从书中得到很多启发,也许只是一个配置的改变、一行逻辑的优化、一个策略的调整都有可能让我们的系统可用性登上新的台阶。
网站系统走过了从静态到动态、从动态到动静结合、从对DB的强依赖到多级缓存、从重启服务器到自如切换流量、从对503的恐惧到从容应对问题、从修改代码应对异常到修改配置轻松搞定的系统演变历程。当一个系统的业务体量达到可以引起系统性能和健壮性发生退变的时候,伴随着系统问题到来的更是研发人员自身能力提升和宝贵经验积累的好时机。与其将问题用重启应用和“无法解释的诡异问题”来掩盖,不如把问题的根源挖掘出来。如果挖掘得足够深入,一切问题都是可解决的。书中使用的技术和总结的经验也许无法解决书中业务场景之外的问题,但这也恰恰是技术的魅力所在。没有一种技术和经验可以作为系统的解药来帮助我们一劳永逸的避免掉所有隐患,但我们可以通过对思想的接纳和消化来丰富我们的知识体系,让我们成为一个有思想的研发人员。阮一峰曾经在他的书中对于“如何变有思想”做过解释,我觉得非常适合用在研发人员的身上。研发人员的思想是什么?当你对一个需求、对一个业务形态或者对一个问题有自己的观点见解,那你就是有思想的。你的观点越多就越可能接近问题的本质,那么你的思想就越深刻和丰富。虽然你的观点不一定是事实也不一定是正确的,但作为研发人员如果有了通过不断探索、质疑、证明观点的能力之后,那么也就有了透析问题、解决问题的能力。那么在面对一个看似简单的需求或者业务时,也许你可以看得更透彻,将系统设计得更适用更合理,当你遇到书中提及的问题时也可以开始轻松应对。
我想,阅读并了解书中对于系统高可用这个领域的介绍一定会让你乐在其中。虽然你可能会有些疑惑和不解,但作为一个技术人对于技术的追求和探索不就是应该这样吗?我邀请你一起踏上这个对于系统高可用的探索之旅,来感受技术的魅力。
商城研发总监韩笑跃
序8
大规模分布式系统的构建,面临很多的困难和问题,但是请记住,对架构师而言,不管我们要解决多少困难,重要的是要保证系统可用,无论任何环境、任何压力、任何场景,系统都要可用,这是我们的首要务。在保证系统高可用的前提下,大型分布式系统面临的突出的三大问题就是:如何应对高并发、如何处理大数据量、如何处理分布式带来的一系列问题。这也是很多一线架构老司机们的感悟和共识。
由于一本书的容量有限,不可能面面俱到,因此本书集中火力,系统、详细、专业地讲述了:大型分布式系统如何保证高可用性,以及如何应对高并发这两个大方面。涉及到很多技术和细节。比如用来保证高可用的:负载均衡和反向代理、隔离、限流、降级、超时与重试等;又比如用来处理高并发的:应用缓存、多极缓存、连接池、异步并发、队列处理等。对很多朋友来说,这里面很多知识都是久闻其名,而不知其然,更不知其所以然的,学习本书正好能弥补大家在这些方面的知识短板。
作者以匠人的情怀,把每个方面从理论到应用、从技术本质到具体实现都讲得透彻明了,以平实而不失激情的风格娓娓道来,再辅以实战经验的扩展,不单单让读者学习到具体的技术和解决问题的思路,更是给出了应对问题的具体解决方案,基本上可以直接把这些方案拿到实际项目中直接使用。
尤为难得的是:本书还结合实际的大型应用——的商品详情页的实现,详细讲解了这些技术和方案在真实场景的组合应用,以更好的让知识落地。本书先是介绍了商品详情页的基本功能、技术架构的发展以及架构设计,当然还有很多实际的经验和体会,以“遇到的坑和问题”的面貌出现;然后详细地讲述了商品详情页的服务闭环实践。
为了更好地讲述商品详情页的具体实现,作者先讲述了实现中使用的基本技术——OpenResty,然后再详细地讲解如何使用OpenResty来开发商品详情页,里面涉及好多具体而细化的点,都是实际开发中会用到的,值得去认真体会。
其实,市面上讲述大型分布式架构的书很多,但基本上都停留在理论和知识的层面,看上去都很对,很“高大上”,但就是落不了地,不能很好地跟实际应用进行结合,从而导致学习的效果欠佳。而本书很好地解决了这个问题,不仅深入浅出地讲述了各种保障高可用,以及处理高并发的技术和方案,并理论联系实际,采用商品详情页的具体实现这个实际案例,来综合展示了这些技术的应用,从而加深大家的理解和领悟,以更好地把这些技术和方案应用到自己的实际项目中去。
事实上,像本书这样既有详尽的技术学习,又有真实、典型案例讲述的好书,在市面上是不多见的,毕竟真正拥有这种大型系统完整架构经验的人并不多,能讲明白的更少。本书作者恰好就是那极少数技术、经验和知识传授俱佳的牛人之一,这是读者之幸。仔细阅读完本书,让人有一种醍醐灌顶的顿悟,掩卷长叹“原来如此啊”。
坦率地说,本书不是写给初学者的,对于有一定的开发经验,甚至是架构设计经验的朋友,能从本书中收获更多。但我仍然确信,不管是富有经验的架构师,还是想要学习架构知识的入门者,仔细、深入阅读本书,就一定会有收获。对于暂时不太理解的内容,建议反复阅读,或者隔段时间再看,并不断深入思考,好是能结合实际的项目,把这些知识都应用上去,学以致用,这也不枉费作者的一番心血。
细想起来,认识作者八年多了,眼看着作者走出校园步入职场,从职场新兵,到成长成为在领导着上百人团队的技术大牛,仿佛一切都在昨天,让人不由不感慨时间如白驹过隙。在我眼中,作者依然是那帅气、阳光、聪明而又略微有些腼腆的大男孩形象;喜欢研究技术,特别好学、善思、勤奋,且积极在实际工作中应用所学的知识;喜欢分享技术,常年坚持撰写技术博文,拥有不少忠实粉丝,另外告诉大家一个小秘密,作者爱好摄影,专业级水准哦。
《研磨设计模式》作者陈臣
本书是保证大规模电商系统高流量、高频次的葵花宝典,是互联网一线技术研发人员的实战手册。该书是经过“618”、“双十1”多次大考,在实践中反复论证应运而生的。就如山野的绿草历经大自然千锤百炼、风雨彩虹、破土而出,在自然中寻得的法则。但一切有为的成果都是辛勤努力的结果,我认识开涛后重要的印象之一就是他加班加点,挑灯夜战,几乎每天下班都是星辰相伴;印象之二不像传统中的IT男,而是一个热情、开朗、有爱心的阳光男;印象之三他本身就如他的大作,是一个博学多才的“字典”,凡是技术性的问题大家都找他请教,有问必答。向致力于电商系统建设的研发人员强烈推荐。
集团副总裁、保险业务负责人 徐春俊
经过这么多年的沉淀,早已摆脱“不行就加机器”的野蛮扩张阶段,今天的技术人有着丰富的大流量应对经验,每到大促都期望更猛烈的流量来检验他们的系统。作者集中火力讲述了他在构建大流量系统用到的高可用和高并发原则,并通过实际案例让读者能落地。
集团副总裁、商城研发体系负责人 马松
近十年来,电商的业务规模在不停驱动着系统的升级迭代和技术创新,到今天,已沉淀了不少技术创新,可以说完成了从使用技术到创新技术的转变。与此同时,电商的技术人在技术圈内的影响力也在不断扩大,开涛同学就是电商技术的一个好代表。他在网站系统升级迭代的过程中,不断创新和使用新技术,并将多年的实践和积累都浓缩到了本书中。该书可谓是当今电商互联网圈内的良心力作,理论和实践的完美结合,满满都是干货,也是电商技术人对互联网技术圈的一份贡献,强烈推荐大家阅读。
集团副总裁、X事业部负责人 肖军
首次见到开涛是在部门的每周例会上,当时就对开涛留下了深刻印象,说话清晰简洁,分析严谨透彻,人也长得阳光帅气。后来才知道他在Java圈中知名度很高,“开涛的博客”浏览量过千万,是个不折不扣的技术大牛。本书是开涛5年多在高可用和高并发方面总体原则、关键技术和实战经验的总结,还包括了曾经经历的坑,可谓是理论与实践相结合的结晶。在经过了“*618”、“双十1”的亿级大考后,保证了此书足以作为有志于构建亿级流量网站的技术人员们的案头参考书。
保险高级研发总监 杨建
如何构建高并发、大流量的系统,不是架构师闭门造车想出来的,是线上实际的用户流量检验的。本书通过大量的实践案例,告诉读者如何架构高并发,大流量的网站系统,不光有理论探讨,亦有大量的*实际案例,干货多,强烈推荐研发人员通读此书。
商城高级研发总监 王晓钟
本书内容翔实,将专业知识讲解的通俗易懂,从前端HTML到DB底层的设计无不精细阐述。更难能可贵的是用真实成功案例传授如何在实战中进行大流量网站架构,字里行间都传递着作者的经验积累,可谓字字珠矶,是初学者的手册,更是技术大牛的切磋宝典。
商城研发总监 尚鑫
面对大流量高并发,怎样让自己开发的系统运行得更高效、展现出更好的性能体验?系统底层怎么构建、资源怎么调度、流量怎么管控……其实这些在系统设计上都是有套路的,能将这种套路讲得特别清晰、总结得特别到位的书真的为数不多,此书非常值得大家一读。
商城研发总监 付彩宝
本书着重介绍了高并发、高可用服务基本设计原则和技术,并辅以详实的案例说明,对从业人员有很强的指导意义。作者开涛具备多年高并发高可用服务经验,结合自己的工作实践,将响应亿级请求的商品详情页系统的设计过程完整展现给读者,干货满满,在同类书籍中极为少见,具有很强的借鉴意义,强烈推荐。
商城研发总监 王春明
本书深入浅出地介绍了高并发系统的建设之路,是几年实战经验的沉淀,并且都经过了大流量的考验。不管是初学者还是资深的架构师都能从中获取到宝贵经验。开涛是技术应用于业务、理论应用于实践的大师。开涛出品,必属精品。
商城基础平台部首席架构师 何小锋
大家期待已久的《亿级流量网站架构核心技术》终于出版了,这对于中国互联网界的攻城狮们来说真是一个天大的福利。该书可谓理论和实践结合的*典范,着眼于高并发和高可用,提出了一系列作者在实战中总结提炼出来的设计秘籍,并通过案例对每一条秘籍进行详细破解,书中提及的每一个案例均为作者在工作中的真实案例,都经历过大促亿级流量的考验,全是满满的干货。该书作者开涛同学热爱技术,乐于分享,我拜读了他所有的博客和公众号文章,受益匪浅。这是作者又一次良心出品,值得研读,强烈推荐。
商城运营研发部首席架构师 者文明
随着用户规模的增长,网站架构问题的难度也在成倍增加。构建一个规模亿级流量网站和构建一个中小型网站的技术架构难度截然不同。
在具体的架构实践中,所需要考虑的问题也远比中小型网站多得多。开涛根据*网站架构工作期间的实战经验写成此书。书中既有大型网站架构的通用原则,也有具体难点的解决方案和实践经验。
重要的是,书中所述的很多通用原则和技术方案都在*网站线上得到了有效使用和验证。对于想深入了解如何构建一个大型网站的读者,这是一本难得的好书。
云平台事业部架构师 陈锋
读完了开涛的《亿级流量网站架构核心技术》原稿,我激动的心情难以平复,这正是我一直希望得到的那种指导手册式的技术书籍。书中没有浮夸的辞藻,而是实实在在的展示了开涛多年来在实战中的验证过的理论与经验。
如果你是一位也面临着高访问高并发场景的研发人员,那么相信我,这本书中所描述的思路和方法,*值得你去学习和借鉴。
商城 API网关负责人 赵云霄
本书详细介绍了大流量,高并发系统的设计原则和具体实现方法。从限流降级到多级缓存,异步化,服务闭环,对近几年在高并发领域大行其道的Nginx Lua架构的讲解更是细致入微。感谢开涛为大家带来这本互联网高并发架构设计的百科全书。
商城交易平台架构师 李尊敬
作者将多年的实践经验和研究心得呈现在这本书中,而且和实践很好的结合起来,具有很强的实践指导意义。从各个角度讲述了系统设计的注意点与优化,一层一层从前到后,范围广而详细。干活十足,强烈推荐。 商城交易平台架构师 赵辉
开涛理论与实践经验结合,循序渐进地将构建亿级流量网站的高并发、高可用的一系列复杂问题阐述得很清楚。阅读此书受益匪浅,希望每一位开发人员都能阅读到这本书。
商城交易平台架构师 尤凤凯
作者在商品详情页架构升级实战等多个项目中总结的成果,已经成功经历了多次618、双十1大促流量的考验,实战出真理,选择这本书,靠谱。作为技术进阶优选的书籍,满满的干货,备好水,慢慢啃。
商城网站平台架构师 刘峻桦
叶草 –
这书还是值得大家去读,来自互联网技术leader,有经历才会写出这样的佳作
知雅意 –
乘打折买了一堆,希望物有所值,能够学到东西,这点钱就不亏
黑瓷娃娃 –
感觉作者罗列了很多知识点,但是逻辑性不强,看起来比较杂乱,跟李智慧的那本书差距还是很大。