高并发系统实战派:集群、Redis缓存、海量存储、Elasticsearch、RocketMQ、微服务、持续集成等
定 价:109 元
- 作者:谢恩德
- 出版时间:2022/9/1
- ISBN:9787121442049
- 出 版 社:电子工业出版社
- 中图法分类:TP311.11
- 页码:420
- 纸张:
- 版次:01
- 开本:16开
全书共5篇:第1篇,帮助读者建立高并发系统的基本认知;第2篇,通过一个生产系统的搭建全流程,介绍了企业系统在技术框架层面及上线方面需要关注的点;第3篇,介绍了构建高并发系统的各项技术,包括应用集群化、缓存设计、存储系统设计、搜索引擎、消息中间件设计、微服务设计、API网关设计等;第4篇,介绍了高并发系统设计原则及两个完整的高并发项目,一方面帮助读者对前面的内容进行巩固和实操,另一方面也希望给读者搭建自己的高并发系统以一定的启发;第5篇,介绍了高并发系统的运维与监控。
谢恩德 合肥优恩物联网科技有限公司 前后端技术负责人,在知乎和CSDN等多个网络媒体发表了几十篇前端后技术的文章。
★★第1篇 高并发系统认知
★★第1章 什么是高并发系统 2
1.1 什么是高并发 2
1.2 高并发系统有哪些关键指标 3
1.2.1 响应时间(Response Time) 3
1.2.2 吞吐量(Throughput) 3
1.2.3 每秒请求数(QPS) 4
1.2.4 每秒事务数(TPS) 4
1.2.5 访问量(PV) 5
1.2.6 独立访客(UV) 5
1.2.7 网络流量 5
1.3 为什么要学习高并发系统 5
1.3.1 提升自身及企业核心竞争力 6
1.3.2 在面试中脱颖而出 6
1.4 对比单体系统、分布式系统和微服务系统 7
1.4.1 单体系统之痛 7
1.4.2 高并发系统之分布式架构 11
1.4.3 高并发系统之微服务架构 12
★★第2章 从剖析两个高并发系统开始 20
2.1 案例一:千万级流量“秒杀”系统 20
2.1.1 千万级流量“秒杀”系统架构一览 20
2.1.2 动静分离方案设计 24
2.1.3 热点数据处理 27
2.1.4 大流量的高效管控 30
2.1.5 扣减库存的那些事 34
2.1.6 搭建千万级流量“秒杀”系统需要哪些技术 39
2.2 案例二:C2C二手电商平台的社会化治理子系统 40
2.2.1 C2C二手电商平台的社会化治理子系统架构一览 40
2.2.2 基础服务治理 42
2.2.3 RPC框架服务通信 50
2.2.4 分布式事务管理 55
★★第2篇 搭建生产级系统
★★第3章 生产级系统框架设计的细节 64
3.1 幂等性设计——保证数据的一致性 64
3.1.1 什么是幂等性 64
3.1.2 如何避免重复提交 66
3.1.3 如何避免更新中的ABA问题 68
3.2 接口参数校验——增强服务健壮性 70
3.2.1 【实战】Spring结合validation进行接口参数校验 70
3.2.2 【实战】自定义参数校验注解 73
3.3 统一异常设计——跟杂乱无章的异常信息说再见 75
3.3.1 Spring Boot默认的异常处理机制 75
3.3.2 【实战】基于Spring Boot构建全局异常处理 76
3.4 统一封装Response——智能的响应数据 83
3.4.1 接口响应数据的模型 83
3.4.2 【实战】开发统一的响应数据模型,以应对不同业务 87
3.5 编写高质量的异步任务 93
3.5.1 为什么要编写异步任务 93
3.5.2 【实战】基于Spring开发高质量的异步任务 94
3.6 DTO与PO的互相转换 98
3.6.1 什么是DTO、PO 98
3.6.2 【实战】实现DTO与PO的互相转换 99
3.7 优雅的API设计——对接“清爽”,不出错 102
3.7.1 最好采用“API先行”策略 103
3.7.2 API 的设计原则 104
3.7.3 RESTful API设计的规范 106
3.8 API治理——告别“接口满天飞” 108
3.8.1 【实战】基于Swagger构建可视化的API文档 109
3.8.2 API调用链管理 112
★★第4章 快速部署上线 113
4.1 反向代理配置 113
4.1.1 什么是反向代理,为什么要使用反向代理 113
4.1.2 【实战】使用Nginx配置线上服务 116
4.2 系统性能测试 120
4.2.1 【实战】进行单元测试 120
4.2.2 【实战】用AB工具做上线前的性能测试 131
★★第5章 生产环境监测 136
5.1 服务器性能日常监测 136
5.1.1 在运维中常说的“服务器平均负载”是什么意思 136
5.1.2 为什么经常被问到“CPU上下文切换” 138
5.1.3 【实战】快速分析出CPU的性能瓶颈 141
5.2 优化服务器性能 144
5.2.1 CPU性能优化方法论 144
5.2.2 定位和处理内存泄漏问题 145
5.3 Java虚拟机(JVM)的生产调优 147
5.3.1 JVM内存模型分析 147
5.3.2 Java程序是如何在JVM中运行的 151
5.3.3 JVM优化的思路 152
第3篇 专项突破
★★第6章 应用集群化 158
6.1 为什么要应用集群化 158
6.1.1 什么是集群服务器 158
6.1.2 采用集群服务器有什么好处 160
6.1.3 集群系统和分布式系统有什么区别 161
6.2 搭建应用集群 162
6.2.1 【实战】使用反向代理搭建应用集群 163
6.2.2 【实战】搭建Linux服务器集群 166
★★第7章 缓存设计 168
7.1 什么是缓存 168
7.1.1 缓存的定义 168
7.1.2 缓存的常见分类 169
7.2 使用缓存 171
7.2.1 如何正确选择缓存的读写策略 171
7.2.2 如何使用多级缓存来提升服务性能 173
7.2.3 多级缓存之痛 179
7.3 缓存架构设计 183
7.3.1 缓存组件的选择 183
7.3.2 缓存数据结构的设计 187
7.3.3 缓存分布的设计 187
7.3.4 缓存架构部署 190
7.3.5 缓存架构设计的关键点 190
7.4 用Redis构建生产级高性能分布式缓存 192
7.4.1 Redis的常见数据类型 192
7.4.2 【实战】通过Redis的读写分离抗住10万以上的QPS 197
7.4.3 【实战】在高并发场景下,缓存“雪崩”了该怎么办 201
7.4.4 【实战】在高并发场景下,缓存“穿透”了该怎么办 204
7.4.5 【实战】构建一个高性能、可扩展的Redis集群 206
7.4.6 【实战】实现朋友圈的“点赞”功能 210
7.4.7 【实战】实现App中的“查找附近的人”功能 212
★★第8章 存储系统设计 213
8.1 池化技术 213
8.1.1 数据库连接池是如何预分配连接的 213
8.1.2 线程池是如何工作的 214
8.1.3 协程池有什么作用 216
8.2 数据库采用主从架构——数据再也不会丢了 217
8.2.1 什么是数据库的主从架构 217
8.2.2 【实战】配置MySQL主从架构 219
8.2.3 主从架构中的数据是如何实现同步的 221
8.3 数据库读写分离——读/写数据再也不用争抢了 222
8.3.1 数据库读写分离能解决什么问题 223
8.3.2 数据库读写分离造成数据不一致,该怎么办 223
8.3.3 【实战】在程序开发中实现读写分离 224
8.4 数据库分库分表——处理海量数据的“终极大招” 226
8.4.1 在什么情况下需要分库分表,如何分 226
8.4.2 【实战】在分库分表后,如何处理主键ID 229
8.4.3 【实战】在程序开发中支持分库分表 232
8.4.4 分库分表会带来什么开发难题 233
8.4.5 【实战】在分库分表后实行项目无感上线 234
8.5 引入NoSQL数据库 236
8.5.1 NoSQL数据库是什么,它和SQL数据库有什么区别 236
8.5.2 常用的NoSQL数据库 237
8.5.3 利用NoSQL数据库可以提升写入性能 237
8.5.4 利用NoSQL数据库可以提升扩展性 238
★★第9章 搜索引擎——让查询更便捷 240
9.1 为什么需要搜索引擎 240
9.2 搜索引擎的通用算法和架构 241
9.2.1 必须知道的倒排索引 241
9.2.2 互联网搜索引擎的技术架构 243
9.2.3 Lucene与Elasticsearch的前世今生 245
9.3 用Elasticsearch搭建高性能的分布式搜索引擎 247
9.3.1 Elasticsearch分布式架构的原理 247
9.3.2 【实战】将Elasticsearch应用在电商系统中 250
9.3.3 【实战】快速实现Elasticsearch的搜索建议 253
9.3.4 【实战】在海量数据下,提高Elasticsearch的查询效率 254
★★第10章 消息中间件设计——解耦业务系统与核心系统 257
10.1 同步和异步 257
10.1.1 何为同步/异步 257
10.1.2 【实战】使用回调函数获取数据 258
10.2 为何要使用消息中间件 260
10.2.1 什么是消息中间件,它有什么作用 260
10.2.2 生产级消息中间件的选型 263
10.2.3 在高并发场景下如何处理请求 264
10.3 RocketMQ在项目中的使用 267
10.3.1 RocketMQ架构原理 267
10.3.2 【实战】利用RocketMQ改造订单系统,提升性能 269
10.4 引入消息中间件会带来什么问题 275
10.4.1 需要保证消息中间件的高可用 275
10.4.2 需要保证消息不被重复消费 277
10.4.3 需要保证消息的顺序性 279
10.4.4 需要解决消息中间件中的消息延迟 280
★★第11章 微服务设计——将系统拆分 282
11.1 好好的系统为什么要拆分 282
11.2 如何拆分服务 283
11.2.1 不可忽略的SOA架构 283
11.2.2 如何对已有系统进行微服务改造 284
11.2.3 微服务拆分的方式 287
11.2.4 有哪些好用的微服务开发框架 288
11.3 微服务设计参照模型 290
11.3.1 在开发中如何定义软件分层 290
11.3.2 运用好“微服务的使用模式”可以事半功倍 292
11.4 引入微服务架构会带来什么问题及其解决方案 294
11.4.1 数据一致性问题 295
11.4.2 分布式事务问题 296
11.4.3 复杂度问题 296
11.5 如何有效治理微服务 297
11.5.1 管理服务 298
11.5.2 治理服务 298
11.5.3 监控服务 298
11.5.4 定位问题 299
11.5.5 查询日志 299
11.5.6 运维服务 299
★★第12章 API网关设计——让服务井然有序 300
12.1 为什么要引入API网关 300
12.1.1 什么是API网关 300
12.1.2 API网关的作用 301
12.2 API网关的通用设计方案 302
12.2.1 设计API网关要考虑哪些关键点 302
12.2.2 API网关的选型 304
12.3 将API网关应用到生产项目中 305
12.3.1 【实战】基于Zuul搭建生产级API网关 305
12.3.2 【实战】基于Spring Cloud Gateway搭建生产级API网关 308
★★第4篇 高并发项目设计及实战
★★第13章 高并发系统设计原则 316
13.1 高并发系统的通用设计原则 316
13.1.1 利用负载均衡分散流量 316
13.1.2 利用分布式缓存扛住“读”流量 322
13.1.3 实现数据库的读写分离 322
13.1.4 实现数据库分库分表 323
13.1.5 使用NoSQL、消息队列及搜索引擎技术 324
13.1.6 将大应用拆为小应用 325
13.2 提升系统性能的策略 325
13.2.1 垂直伸缩 325
13.2.2 水平伸缩 326
★★第14章 【项目实战】搭建千万级流量“秒杀”系统 327
14.1 搭建“秒杀”系统工程 327
14.1.1 技术选型 327
14.1.2 工程搭建 329
14.2 分析“秒杀”业务 331
14.2.1 “秒杀”业务场景分析 331
14.2.2 “秒杀”痛点分析 334
14.3 具体设计与开发 335
14.3.1 数据库层的设计与开发 335
14.3.2 业务服务层的设计与开发 335
14.3.3 动静分离的实现 339
14.3.4 优化系统以应对千万级流量 340
★★第15章 【项目实战】搭建C2C二手电商平台的社会化治理系统 342
15.1 搭建系统工程 342
15.1.1 技术栈列表 342
15.1.2 工程搭建 343
15.2 分析系统业务 343
15.2.1 C2C二手电商平台社会化治理系统的业务介绍 343
15.2.2 C2C二手电商平台社会化治理系统的痛点分析 343
15.3 整体架构设计 344
15.3.1 整体架构图 344
15.3.2 场景分析 345
15.4 微服务设计开发 345
15.4.1 服务拆分及高可用注册中心搭建 345
15.4.2 服务间通信框架选择 349
15.4.3 平台服务开发 349
15.5 服务治理开发 351
15.5.1 链路追踪的设计与开发 351
15.5.2 引入分布式事务框架 352
15.5.3 平台限流熔断的设计与开发 354
15.5.4 引入API网关 357
15.5.5 基于Nacos搭建环境隔离配置中心 358
★★第5篇 运维监控
★★第16章 运维之术——告别加班 360
16.1 什么是CI/CD 360
16.2 为什么要CI/CD 361
16.3 搭建适合自己公司的CI/CD 362
16.3.1 【实战】基于GitLab搭建代码管理平台 362
16.3.2 【实战】基于Jenkins搭建持续集成与编译平台 363
16.3.3 【实战】基于Ansible搭建自动化部署平台 366
16.4 服务器通用运维 366
16.4.1 优化硬件 366
16.4.2 分析性能瓶颈 367
16.4.3 【实战】处理服务器丢包问题 369
16.4.4 【实战】分析服务吞吐量突然下降的原因 373
★★第17章 监控之术——天使之眼 374
17.1 如何定义系统监控 374
17.1.1 需要监控哪些系统指标 374
17.1.2 如何采集监控指标 375
17.1.3 如何存储监控指标 375
17.2 搭建一套可靠的监控系统 375
17.2.1 【实战】基于ELK搭建集中化日志监控平台 375
17.2.2 【实战】基于Prometheus搭建系统指标监控预警平台 378
17.3 链路追踪——不漏过任何一个异常服务 385
17.3.1 什么是链路追踪 385
17.3.2 常用的开源链路追踪系统 386
17.3.3 【实战】在微服务架构中加入链路追踪系统SkyWalking 386