重磅推荐
【产品特色】


【编辑推荐】

1.易读易懂:没有高深的理论,每一章都是以实例为主,读者参考源码,修改实例,看得懂、学得会、做得出。

2.内容系统,实战性强。本书从零开始讲解,然后逐步深入相关分布式技术,从而达到从入门到精通的学习效果。

3.代码精彩,注释详细。深入剖析代码的底层逻辑,知其然更知其所以然。

4.配套资源:赠送全书案例源文件助力学习。


【内容简介】

本书从分布式系统的基础概念讲起,逐步深入分布式系统中间件进阶实战,并在后结合一个大型项目案例进行讲解,重点介绍了使用Spring Cloud框架整合各种分布式组件的过程,让读者不但可以系统地学习分布式中间件的相关知识,而且还能对业务逻辑的分析思路、实际应用开发有更为深入的理解。

全书共分12章,前3个章节是学习分布式系统架构的准备阶段。第1章开篇部分,讲解演进过程中分布式系统是如何出现的;第2章Spring部分,讲解如何搭建目前流行的Spring Boot和Spring Cloud框架;第3章容器部分,讲解目前流行的Docker容器技术和Kubernetes容器编排工具;第4~8章深入讲解消息中间件RocketMQ的相关知识,理论与实战并存;第9章将深入RocketMQ底层,探索阅读源码的乐趣,掌握精通RocketMQ的同时学会阅读源码的

方法;第10章和第11章讲解分布式系统中必须考虑的问题:分布式事务与分布式锁;第12章以一个电商系统业务为例,让读者体验一个项目从无到有的过程,并学以致用。

本书内容由浅入深、结构清晰、实例丰富、通俗易懂、实用性强,适合需要全方位学习分布式中间件相关技术的人员,也适合培训学校作为培训教材,还可作为大、中专院校相关专业的教学参考书。


【作者简介】

刘猛,网名HUC王子, 一名因个人爱好进入IT行业的程序员,拥有多年软件开发、设计和架构经验。在中国移动平台架构组担任过高级工程师,负责过SAAS化平台的建设工作,在某互联网创业公司

担任过系统架构师,负责整体技术架构演进工作。近年来- -直从事企业平台建设工作,并通过理论指导与实战演练等方式为企业研发团队赋能。


【目录】

第1章 走进分布式系统 1
1.1 分布式系统简介 2
1.1.1 分布式系统的架构演变过程 2
1.1.2 分布式系统的特性 6
1.1.3 分布式系统带来的问题 6
1.2 分布式中间件简介 7
1.2.1 什么是分布式中间件 7
1.2.2 常用的分布式中间件 8
1.3小结8
第2章 Spring微服务实战 9
2.1 Spring Boot实战 10
2.1.1 什么是Spring Boot 10
2.1.2 创建Spring Boot项目 10
2.1.3 实战:Spring Boot定时访问数据库 13
2.2 Spring Cloud实战 18
2.2.1 什么是Spring Cloud 18
2.2.2 从电商系统看Spring Cloud基本架构 18
2.2.3 实战:动手搭建Spring Cloud电商项目 22
2.3 小结 33
第3章 容器技术简介 34
3.1 Docker简介 35
3.1.1 什么是Docker 35
3.1.2 动手安装Docker环境 36
3.1.3 Docker镜像常用命令 37
3.1.4 Docker容器常用命令 39
3.1.5 Dockerfile介绍 42
3.1.6 实战:Docker打包Spring Boot项目 45
3.2 Kubernetes简介 49
3.2.1 什么是Kubernetes 49
3.2.2 动手搭建Kubernetes集群 51
3.2.3 实战:Kubernetes部署Spring Boot项目 55
3.3 小结 57
第4章 消息中间件概述 58
4.1 消息中间件简介 59
4.1.1 同步的概念 59
4.1.2 异步调用 60
4.1.3 什么是消息中间件 60
4.2 消息中间件的作用 61
4.2.1 异步化提升性能 61
4.2.2 降低耦合度 62
4.2.3 流量削峰 63
4.3 常见的消息中间件 64
4.3.1 ActiveMQ 64
4.3.2 RabbitMQ 65
4.3.3 RocketMQ 66
4.3.4 Kafka 67
4.4 RocketMQ的基本架构 69
4.4.1 RocketMQ是如何承受高并发的 69
4.4.2 RocketMQ如何存储大量消息数据 69
4.4.3 RocketMQ是如何处理宕机的 70
4.4.4 如何知道我该访问哪个Broker 71
4.5 电商系统面临的技术挑战 72
4.5.1 再谈电商系统业务流程 72
4.5.2 退款与取消支付流程 74
4.5.3 大数据团队带来的技术挑战 75
4.6 小结 75
第5章 NameServer 76
5.1 NameServer概述 77
5.2 NameServer与其他组件的交互流程 77
5.2.1 Broker如何向NameServer注册信息 77
5.2.2 系统如何从NameServer获取信息 79
5.2.3 NameServer如何感知到Broker宕机 79
5.2.4 系统如何感知到Broker宕机 80
5.3 小结 81
第6章 RocketMQ的高可用 82
6.1 Broker的主从架构 83
6.1.1 Master Broker与Slave Broker之间的消息同步 83
6.1.2 Master Broker与Slave Broker的读写分离 83
6.1.3 Master Broker与Slave Broker的宕机处理 84
6.1.4 Dledger实现RocketMQ的高可用 85
6.2 Dledger的自动切换原理 85
6.2.1 使用Dledger技术替换CommitLog 85
6.2.2 Dledger怎么选举Leader 86
6.2.3 Dledger的数据同步机制 87
6.3 其他消息中间件的高可用 87
6.3.1 RabbitMQ的高可用 88
6.3.2 Kafka的高可用 89
6.4实战——部署一个RocketMQ集群91
6.4.1 单机快速部署 91
6.4.2 使用三台机器部署NameServer 92
6.4.3 使用三台机器部署Broker 93
6.4.4 补充说明实践中的问题 94
6.5 实战——RocketMQ的可视化监控管理 95
6.5.1 部署可视化监控工具 95
6.5.2 如何使用控制台 95
6.6 实战——RocketMQ的生产环境参数调整 97
6.6.1 OS内核参数调整 97
6.6.2 JVM参数调整 98
6.6.3 RocketMQ参数调整 98
6.7 小结 99
第7章 生产者与消费者 100
7.1 发送模式与消费模式 101
7.1.1 RocketMQ的发送模式 101
7.1.2 RocketMQ的消费模式 104
7.2 生产者发送消息的底层原理 105
7.2.1 什么是MessageQueue 106
7.2.2 生产者发送消息存入哪个MessageQueue 107
7.2.3 如果Broker发生故障怎么办 107
7.3 Broker的持久化 108
7.3.1 CommitLog 108
7.3.2 MessageQueue是如何存储的 109
7.3.3 写入CommitLog的性能探索 110
7.3.4 同步刷盘和异步刷盘 110
7.4 消费者获取消息的底层原理 111
7.4.1 消费者组 111
7.4.2 集群模式和广播模式 112
7.4.3 MessageQueue与消费者的关系 113
7.4.4 Push模式和Pull模式 113
7.4.5 Broker如何读取消息返回给消费者 114
7.5 实战——使用代码来操作RocketMQ 115
7.5.1 原生代码实现 115
7.5.2 Spring Boot实现 116
7.6 实战——对RocketMQ集群进行压测 121
7.6.1 压测的指标 122
7.6.2 动手实践压测 122
7.7 小结 126
第8章 RocketMQ的实际问题与解决方案 127
8.1 消息是怎么丢失的 128
8.1.1 引入订单业务 128
8.1.2 订单系统推送消息过程中会丢失消息吗 129
8.1.3 MQ接收到消息后,自己会把消息弄丢吗 129
8.1.4 积分系统消费到了消息就能保证消息的不丢失了吗 130
8.2 RocketMQ消息丢失解决方案:事务消息 131
8.2.1 half消息机制 131
8.2.2 half消息的流程分析 132
8.3 RocketMQ消息丢失解决方案:同步刷盘 手动提交 134
8.3.1 Broker的消息丢失解决方案 135
8.3.2 Consumer的消息丢失解决方案 135
8.3.3 消息零丢失方案的优缺点分析 136
8.4 探索RocketMQ的重复消费和乱序问题 136
8.4.1 为什么会重复消费 137
8.4.2 消息重试、延时消息、死信队列 138
8.4.3 消息乱序 139
8.5 实战:RocketMQ高级功能代码实现 140
8.5.1 事务消息代码实现 140
8.5.2 顺序消息代码实现 145
8.5.3 消息过滤代码实现 149
8.5.4 延时消息代码实现 150
8.6 小结 152
第9章 走进RocketMQ底层 153
9.1 开启源码阅读之路 154
9.1.1 RocketMQ源码结构介绍 154
9.1.2 启动NameServer与Broker 156
9.1.3 测试生产消息和消费消息 159
9.2 NameServer源码解析 160
9.2.1 NameServer的启动与配置的加载 160
9.2.2 NameServer网络通信的初始化 166
9.2.3 NameServer中Netty是如何启动的 168
9.3 Broker源码解析 173
9.3.1 Broker的启动 173
9.3.2 BrokerController的创建与初始化 177
9.3.3 Broker如何向NameServer注册 188
9.3.4 NameServer如何接收Broker的请求 198
9.4 Producer与Consumer源码解析 205
9.4.1 Producer与NameServer的通信 205
9.4.2 Producer与Broker的通信 207
9.4.3 Broker的同步刷盘与异步刷盘 211
9.4.4 Consumer的创建与启动 213
9.5 小结 215
第10章 分布式事务 216
10.1 ACID与隔离级别 217
10.1.1 事务的ACID 217
10.1.2 事务的隔离级别 218
10.1.3 MySQL是如何实现可重复读的 218
10.2 业内分布式事务方案介绍 219
10.2.1 CAP理论与BASE理论 219
10.2.2 XA规范与2PC/3PC分布式事务 220
10.2.3 TCC分布式方案 222
10.2.4 可靠消息终一致性方案 223
10.3 实战:分布式事务框架Seata 224
10.3.1 Seata原理介绍 224
10.3.2 Seata Server的部署 224
10.3.3 Seata的代码实现 226
10.4 小结 227
第11章 分布式锁 228
11.1 分布式锁简介 229
11.1.1 单机系统下的锁 229
11.1.2 分布式锁 229
11.2 Zookeeper实现分布式锁 230
11.2.1 Zookeeper实现分布式锁的原理 230
11.2.2 实战:使用Curator实现分布式锁 231
11.3 Redis实现分布式锁 233
11.3.1 Redis实现分布式锁的原理 233
11.3.2 实战:使用Redisson实现分布式锁 234
11.4 小结 236
第12章 电商网站系统案例实战 237
12.1 项目业务分析 238
12.1.1 下单业务 238
12.1.2 支付业务 238
12.2 基础技术架构与表结构设计 240
12.2.1 技术选型 240
12.2.2 Spring Cloud Alibaba框架搭建 240
12.2.3 数据库表结构设计 249
12.3 下单业务开发 252
12.3.1 下单接口定义 252
12.3.2 下单接口实现类定义 255
12.3.3 注册中心Nacos搭建 258
12.3.4 引入Dubbo框架 260
12.3.5 订单接口实现类开发 264
12.3.6 使用RocketMQ实现失败补偿机制 272
12.4 支付业务开发 278
12.4.1 支付接口定义 278
12.4.2 创建支付订单 278
12.4.3 支付回调接口 279
12.4.4 消息的消费 281
12.5 网关服务的完善 282
12.5.1 网关服务的搭建 282
12.5.2 测试网关服务 284
12.6 小结 285


【前言】

本书创作的初衷

书籍是知识的载体,读者选择阅读这本书就一定想从中获得自己想要的答案。阅读是理解知识的途径,笔者在实际工作中也经常阅读书籍,并从书中获得了自己需要的知识。为什么会写这本书呢?那是因为近几年分布式系统架构在当前市场中已经成了业界标准,如果你去面试说自己没有接触过分布式系统架构,那十有八九是直接没戏了。当然这本书的写作不仅仅是为了应付面试,更多的是用来帮助读者学习和实践分布式系统中间件的相关知识,以及掌握RocketMQ的底层原理,做到精通的程度。

其实目前国内的图书市场中有关分布式技术的书籍还是不少的,但使用大白话来讲解,能让读者通俗易懂的书籍却没有那么多。所以本书的一大特色就是完全使用大白话的语言来说明理论知识,并通过手把手的实战来让读者更容易地学习到分布式系统的知识,从而能够在真正意义上的帮助读者提高自己的技术水平,为自己的职业道路奠定基础。

适合阅读本书的读者

需要全方位学习分布式中间件的技术人员;

对RocketMQ消息中间件有着强烈探索欲望的人;

希望学会分布式技术,准备求职面试的人;

相关专业的学生以及培训机构学员。

分布式技术通过一本书是远远讲不完的,本书不单纯是技术工具书,不可能包含全部分布式技术内容,所以阅读本书的目的不应该是在其中找到所有想要探寻的答案,而是掌握探寻答案的能力,授人以鱼不如授人以渔,相信本书会给你提供很大的帮助。

读者讨论

如果小伙伴们在书中发现不懂的问题,或者是不准确的地方,欢迎关注微信公众号“HUC思梦”联系笔者共同探讨问题。

编者


【书摘与插画】


返回顶部