书籍详情
超大流量分布式系统架构解决方案:人人都是架构师2.0
作者:高翔龙 著
出版社:电子工业出版社
出版时间:2020-03-01
ISBN:9787121385056
定价:¥89.00
购买这本书可以去
内容简介
本书共5章,每一章的内容几乎都是独立的,大家完全可以有选择性地阅读。第1章以大规模服务化架构作为全书的开篇,主要介绍了分布式系统架构的演变过程,以及在大规模服务调用场景下,如何实施服务治理。第2章重点介绍了在大促前夕,如何在线上实施全链路压测,以及有指导性地进行容量规划和性能优化,让系统坚如磐石。第3章重点介绍了如何有效地对流量实施管制,若采用合理且有效的方式管制住峰值流量,使其井然有序地对系统进行访问,则在任何情况下,系统就都能稳定运行。第4章重点介绍了在大促抢购的场景下,如何解决高并发读和高并发写等核心技术难题。第5章详细地介绍了关系型数据库的架构演变过程,还重点介绍了在实际的订单业务场景下,如何保证数据的最终一致性。
作者简介
云集基础架构负责人,技术委员会委员,经历了云集架构从0到1的蜕变,见证了云集业务的井喷式增长,拥有大量高并发、大流量,以及海量数据处理的实战经验,负责云集基础技术平台的架构设计和中间件研发等工作,热衷于开源技术,常年游走在GitHub上。
目录
目录
第 1 章 大系统小做――大规模服务化架构 1
1.1 分布式系统的架构演变过程 1
1.1.1 单机架构 3
1.1.2 集群架构 4
1.1.3 垂直拆分业务子系统 6
1.1.4 服务化架构演进 8
1.1.5 服务化与微服务架构的区别 9
1.1.6 集群与分布式的区别 10
1.1.7 前后端分离架构演进 11
1.1.8 API 网关服务 14
1.1.9 分布式多活数据中心架构演进 17
1.2 服务治理需求 20
1.2.1 服务化与 RPC 协议 20
1.2.2 基于服务治理框架 Dubbo 实现服务化 22
1.2.3 警惕因超时和重试引起的系统雪崩 26
1.2.4 为什么需要实施服务治理 28
1.2.5 关于服务化后的分布式事务问题 31
1.2.6 注册中心性能瓶颈方案 32
1.2.7 分布式多活架构下的服务就近调用方案 34
1.3 服务治理之调用链 35
1.3.1 Google 的 Dapper 论文简介 36
1.3.2 调用链的实现方案 38
1.3.3 基于非侵入式运行期 AOP 方案实现数据采集上报 48
1.3.4 调配采样率 57
1.4 本章小结 58
第 2 章 大促备战核弹――全链路压测 59
2.1 为什么要在线上实施全链路压测 60
2.2 业务系统如何区分压测流量 63
2.2.1 压测流量打标方案 63
2.2.2 在链路上下文信息中传递压测标记 65
2.2.3 外部第三方接口走 Mock 67
2.2.4 压测数据的隔离方案 68
2.3 如何发起大规模的压测流量 69
2.3.1 数据构造平台 69
2.3.2 自研全链路压测军演系统的一些经验分享 71
2.4 本章小结 74
第 3 章 削峰填谷――流控方案 75
3.1 为什么需要限流 76
3.2 限流方案 79
3.2.1 常见的限流算法 80
3.2.2 基于 Guava 实现平均速率限流 83
3.2.3 接入层限流方案 86
3.2.4 应用层限流――限时抢购限流方案 89
3.3 基于时间分片的削峰方案 92
3.3.1 活动分时段进行实现削峰 93
3.3.2 通过答题验证实现削峰 93
3.4 基于消息队列的解耦、削峰、最终一致性方案 94
3.4.1 基于消息队列实现解耦 95
3.4.2 常见消息中间件的使用 96
3.4.3 基于消息队列的一些典型案例 113
3.5 本章小结 116
第 4 章 大促抢购核心技术难题――读/写优化方案 117
4.1 缓存技术简介 118
4.1.1 本地缓存 119
4.1.2 本地缓存的痛点 121
4.1.3 神秘的 off-heap 技术 122
4.2 高性能分布式缓存 Redis 127
4.2.1 基于 Jedis 客户端操作 Redis 128
4.2.2 基于 RedisCluster 模式实现 Sharding 129
4.3 同一热卖商品高并发读难题 133
4.3.1 多级缓存方案 135
4.3.2 缓存穿透思考 139
4.3.3 RedisCluster 模式下的读/写分离方案 140
4.4 同一热卖商品高并发写难题 143
4.4.1 InnoDB 引擎的行锁问题 143
4.4.2 基于 Redis 乐观锁的库存扣减方案 145
4.4.3 嵌入 Lua 脚本的库存扣减方案149
4.4.4 基于 AliSQL 数据库提升并发写性能 155
4.5 本章小结 161
第 5 章 星罗棋布――分库分表方案 162
5.1 关系数据库的架构演变 163
5.1.1 数据库读/写分离 163
5.1.2 数据库垂直分库 164
5.1.3 数据库水平分库与水平分表 165
5.1.4 MySQL Sharding 与 MySQL Cluster 的区别166
5.2 Sharding 中间件 167
5.2.1 常见的 Sharding 中间件对比 167
5.2.2 Shark 简介 169
5.2.3 Shark 的架构模型 170
5.2.4 使用 Shark 实现分库分表后的数据路由任务 171
5.2.5 分库分表后所带来的影响 178
5.2.6 全局唯一 SequenceID 解决方案 179
5.2.7 基于 Solr 满足多维度的复杂条件查询 182
5.2.8 关于分布式事务 183
5.3 数据库的 HA 方案 184
5.3.1 基于配置中心实现主备切换 185
5.3.2 基于 Keepalived 实现主备切换 186
5.3.3 保障主备切换过程中的数据一致性 188
5.4 订单业务冗余表需求 190
5.4.1 冗余表的实现方案 190
5.4.2 数据最终一致性方案 192
5.5 本章小结 195
附录 196
后记223
第 1 章 大系统小做――大规模服务化架构 1
1.1 分布式系统的架构演变过程 1
1.1.1 单机架构 3
1.1.2 集群架构 4
1.1.3 垂直拆分业务子系统 6
1.1.4 服务化架构演进 8
1.1.5 服务化与微服务架构的区别 9
1.1.6 集群与分布式的区别 10
1.1.7 前后端分离架构演进 11
1.1.8 API 网关服务 14
1.1.9 分布式多活数据中心架构演进 17
1.2 服务治理需求 20
1.2.1 服务化与 RPC 协议 20
1.2.2 基于服务治理框架 Dubbo 实现服务化 22
1.2.3 警惕因超时和重试引起的系统雪崩 26
1.2.4 为什么需要实施服务治理 28
1.2.5 关于服务化后的分布式事务问题 31
1.2.6 注册中心性能瓶颈方案 32
1.2.7 分布式多活架构下的服务就近调用方案 34
1.3 服务治理之调用链 35
1.3.1 Google 的 Dapper 论文简介 36
1.3.2 调用链的实现方案 38
1.3.3 基于非侵入式运行期 AOP 方案实现数据采集上报 48
1.3.4 调配采样率 57
1.4 本章小结 58
第 2 章 大促备战核弹――全链路压测 59
2.1 为什么要在线上实施全链路压测 60
2.2 业务系统如何区分压测流量 63
2.2.1 压测流量打标方案 63
2.2.2 在链路上下文信息中传递压测标记 65
2.2.3 外部第三方接口走 Mock 67
2.2.4 压测数据的隔离方案 68
2.3 如何发起大规模的压测流量 69
2.3.1 数据构造平台 69
2.3.2 自研全链路压测军演系统的一些经验分享 71
2.4 本章小结 74
第 3 章 削峰填谷――流控方案 75
3.1 为什么需要限流 76
3.2 限流方案 79
3.2.1 常见的限流算法 80
3.2.2 基于 Guava 实现平均速率限流 83
3.2.3 接入层限流方案 86
3.2.4 应用层限流――限时抢购限流方案 89
3.3 基于时间分片的削峰方案 92
3.3.1 活动分时段进行实现削峰 93
3.3.2 通过答题验证实现削峰 93
3.4 基于消息队列的解耦、削峰、最终一致性方案 94
3.4.1 基于消息队列实现解耦 95
3.4.2 常见消息中间件的使用 96
3.4.3 基于消息队列的一些典型案例 113
3.5 本章小结 116
第 4 章 大促抢购核心技术难题――读/写优化方案 117
4.1 缓存技术简介 118
4.1.1 本地缓存 119
4.1.2 本地缓存的痛点 121
4.1.3 神秘的 off-heap 技术 122
4.2 高性能分布式缓存 Redis 127
4.2.1 基于 Jedis 客户端操作 Redis 128
4.2.2 基于 RedisCluster 模式实现 Sharding 129
4.3 同一热卖商品高并发读难题 133
4.3.1 多级缓存方案 135
4.3.2 缓存穿透思考 139
4.3.3 RedisCluster 模式下的读/写分离方案 140
4.4 同一热卖商品高并发写难题 143
4.4.1 InnoDB 引擎的行锁问题 143
4.4.2 基于 Redis 乐观锁的库存扣减方案 145
4.4.3 嵌入 Lua 脚本的库存扣减方案149
4.4.4 基于 AliSQL 数据库提升并发写性能 155
4.5 本章小结 161
第 5 章 星罗棋布――分库分表方案 162
5.1 关系数据库的架构演变 163
5.1.1 数据库读/写分离 163
5.1.2 数据库垂直分库 164
5.1.3 数据库水平分库与水平分表 165
5.1.4 MySQL Sharding 与 MySQL Cluster 的区别166
5.2 Sharding 中间件 167
5.2.1 常见的 Sharding 中间件对比 167
5.2.2 Shark 简介 169
5.2.3 Shark 的架构模型 170
5.2.4 使用 Shark 实现分库分表后的数据路由任务 171
5.2.5 分库分表后所带来的影响 178
5.2.6 全局唯一 SequenceID 解决方案 179
5.2.7 基于 Solr 满足多维度的复杂条件查询 182
5.2.8 关于分布式事务 183
5.3 数据库的 HA 方案 184
5.3.1 基于配置中心实现主备切换 185
5.3.2 基于 Keepalived 实现主备切换 186
5.3.3 保障主备切换过程中的数据一致性 188
5.4 订单业务冗余表需求 190
5.4.1 冗余表的实现方案 190
5.4.2 数据最终一致性方案 192
5.5 本章小结 195
附录 196
后记223
猜您喜欢