随着互联网技术的发展,分布式应用系统对具备高性能、高可用性、可扩展性和可维护性的架构的依赖度越来越高。本书以理论与实践相结合的方式,对分布式应用系统的架构设计进行系统、全面的阐述。本书分为3个部分,第一部分是分布式系统架构概述,介绍一些分布式系统架构下常见的基础概念和架构设计的目标;第二部分是核心理论及技术,介绍分布式应用系统下常见的技术中间件机制和使用场景,着重介绍分布式应用系统在高性能、高可用性、可扩展性和可维护性等方面常见的优化技术;第三部分是架构实践案例,梳理几种常见的大型分布式应用系统的架构,并结合具体问题进行分析,使读者能够真正理解设计分布式应用系统架构所面临的问题及解决问题的思路。
本书主要面向初/中/高级程序员和架构师,但书中的部分内容也适合产品经理、项目经理阅读。此外,本书内容由浅入深且案例丰富,也适合作为培训教材。
1.分布式系统是为了解决资源(如计算、存储等)紧缺的问题而出现的,它包含分布式应用系统和分布式中间件系统;
2.本书从基础的架构概念入手,由浅入深地讲解分布式应用系统的核心理论,形成了完整的方法论。
3.本书结合账号系统、秒杀系统、消息推送系统和区块链系统这4种常见的大型分布式应用系统,详细讲解了架构的实现细节。
4.阅读本书,读者可以掌握分布式应用系统的理论体系,并具备业务实战能力。
谢文辉,阿里巴巴高级技术专家,曾在华为、魅族、深信服担任架构师及技术经理,具有10年以上的系统开发及架构设计经验。他目前在阿里巴巴东南亚电商平台Lazada负责业务风控架构相关工作。他主导过多个双活机房的设计和构建工作,也主导过多个日均活跃用户数达千万级的应用系统的架构设计、改造及优化工作,对分布式应用系统的高性能、高可用性和高并发处理有较为丰富的经验。他的个人兴趣在于大数据存储处理、大规模系统的高性能、高可用性及多机房架构的设计和构建。
第 一部分 分布式系统架构概述
第 1章 架构的基础概念 3
1.1 架构的几个概念 3
1.1.1 系统与子系统 4
1.1.2 模块与组件 4
1.1.3 组件与框架 4
1.2 架构设计的目标 5
1.2.1 高性能 5
1.2.2 高可用性 6
1.2.3 可扩展性 7
1.2.4 可维护性 8
1.3 小结 9
第 2章 架构的演进 10
2.1 单体架构 10
2.2 分层架构 11
2.3 面向服务架构 12
2.4 微服务架构体系 14
2.4.1 微服务架构 14
2.4.2 服务网格架构 16
2.4.3 单元化架构 17
2.5 小结 18
第二部分 核心理论及技术
第3章 常见的基础组件 21
3.1 数据缓存 21
3.1.1 Redis高可用实现方案 22
3.1.2 Redis集群实现方案 24
3.1.3 Redis跨机房数据同步方案 29
3.2 数据分发 34
3.2.1 Kafka的分区机制及副本机制 34
3.2.2 Kafka高吞吐量实现方案 40
3.2.3 Kafka跨机房双活方案 44
3.3 数据存储 47
3.3.1 关系数据库MySQL 48
3.3.2 列式存储数据库HBase 49
3.3.3 文档型存储数据库MongoDB 51
3.3.4 图数据库Neo4j 54
3.3.5 内容搜索数据库Elasticsearch 57
3.4 服务远程调用 59
3.4.1 RPC架构及原理 59
3.4.2 Dubbo架构及原理 60
3.4.3 gRPC架构及原理 62
3.5 小结 63
第4章 高性能架构 64
4.1 基础概念 64
4.1.1 性能指标 64
4.1.2 利特尔法则 65
4.1.3 系统优化分析 65
4.1.4 系统指标选择 66
4.2 客户端及网络接入 66
4.2.1 浏览器访问优化 66
4.2.2 CDN缓存 68
4.2.3 反向代理 69
4.3 数据存储 71
4.3.1 数据库读写分离 71
4.3.2 数据库分库/分表 82
4.3.3 数据库如何实现平滑扩容 86
4.3.4 NoSQL综合解决方案 90
4.4 数据缓存 95
4.4.1 适合做缓存的场景 95
4.4.2 缓存穿透及解决方案 95
4.4.3 缓存雪崩及解决方案 97
4.4.4 缓存击穿及解决方案 97
4.4.5 如何保障缓存与数据库数据的一致性 100
4.5 业务逻辑 103
4.5.1 异步处理 103
4.5.2 消息队列 106
4.6 架构模式与负载均衡 106
4.6.1 多进程并发模式与多线程并发模式 107
4.6.2 阻塞与非阻塞I/O模式 107
4.6.3 负载均衡架构 109
4.7 小结 110
第5章 高可用架构 111
5.1 分布式系统的几个理论 111
5.1.1 CAP理论 111
5.1.2 BASE理论 114
5.2 数据存储层 116
5.2.1 双机架构 116
5.2.2 数据多副本 118
5.3 业务逻辑层 122
5.3.1 有状态和无状态 122
5.3.2 服务治理 124
5.3.3 服务降级 125
5.3.4 服务限流 130
5.4 多机房架构 133
5.4.1 多机房的几种架构 133
5.4.2 多机房多活架构 138
5.4.3 多机房流量分发 141
5.5 小结 143
第6章 可扩展架构 144
6.1 可扩展的几个维度 145
6.1.1 横向扩展 145
6.1.2 垂直扩展 146
6.1.3 纵深扩展 147
6.2 可扩展架构的实现 148
6.2.1 反向代理层 148
6.2.2 接入层 149
6.2.3 业务逻辑层 150
6.2.4 数据缓存层 152
6.2.5 数据存储层 152
6.3 几种典型可扩展架构 153
6.3.1 分层架构 153
6.3.2 服务化架构 153
6.3.3 单元化架构 154
6.4 小结 155
第7章 可维护架构 156
7.1 系统监控工具 156
7.1.1 Zabbix监控系统介绍 156
7.1.2 Prometheus介绍 158
7.1.3 中间件监控系统介绍 159
7.2 业务日志的监控及分析 162
7.2.1 日志采集及清洗 163
7.2.2 日志的传输及存储 165
7.2.3 日志查询及可视化 166
7.3 业务数据的安全监控及分析 167
7.3.1 数据安全防护方案 167
7.3.2 数据授权及审计系统 168
7.3.3 数据血缘追踪 169
7.4 小结 170
第三部分 架构实践案例
第8章 账号系统 173
8.1 系统整体架构 173
8.1.1 注册服务 173
8.1.2 认证服务 175
8.1.3 授权服务 176
8.2 关键问题及解决方案 177
8.2.1 如何解决会话粘连问题 177
8.2.2 如何实现数据一致性 181
8.2.3 如何实现安全降级 183
8.3 小结 184
第9章 秒杀系统 185
9.1 系统整体架构 185
9.1.1 接入网关 186
9.1.2 订单及库存服务 187
9.1.3 支付服务 189
9.2 关键问题及解决方案 190
9.2.1 如何优化流量金字塔模型 190
9.2.2 如何解决并发场景下的库存扣减一致性问题 191
9.2.3 如何提升热点账户的冲扣性能 193
9.3 小结 197
第 10章 消息推送系统 198
10.1 系统整体架构 198
10.1.1 业务接入层 199
10.1.2 通道层 200
10.1.3 客户端层 200
10.2 关键问题及解决方案 200
10.2.1 如何实现过载保护 201
10.2.2 如何提升消息分发性能 202
10.2.3 如何解决海量消息推送明细的存储问题 203
10.2.4 如何降低推送的客户端功耗 203
10.2.5 如何解决消息重复推送问题 204
10.2.6 如何解决海量长连接问题 205
10.2.7 如何解决客户端消息伪造问题 206
10.3 小结 206
第 11章 区块链系统 207
11.1 系统整体架构及优化 207
11.1.1 接入层 208
11.1.2 池化层及指令处理层 210
11.1.3 网络层 213
11.1.4 存储层 215
11.2 小结 216