Spring Cloud Alibaba 微服务原理与实战
《Spring Cloud Alibaba 微服务原理与实战 》
Spring Cloud Alibaba 微服务原理与实战
链接: https://pan.baidu.com/s/1H3Mlh0pKulS11n5KKMVOQg 提取码: ayef
第1章 微服务的发展史... 1
1.1 从单体架构到分布式架构的演进... 2
1.1.1 单体架构... 2
1.1.2 集群及垂直化... 3
1.1.3 SOA.. 4
1.1.4 微服务架构... 5
1.2 微服务架构带来的挑战... 7
1.2.1 微服务架构的优点... 7
1.2.2 微服务架构面临的挑战... 7
1.3 如何实现微服务架构... 8
1.3.1 微服务架构图... 8
1.3.2 微服务架构下的技术挑战... 9
第2章 微服务解决方案之Spring Cloud.. 10
2.1 什么是Spring Cloud. 11
2.2 Spring Cloud版本简介... 12
2.3 Spring Cloud规范下的实现... 13
2.4 Spring Cloud Netflix. 14
2.5 Spring Cloud Alibaba. 15
2.5.1 Spring Cloud Alibaba的优势... 15
2.5.2 Spring Cloud Alibaba的版本... 16
第3章 Spring Cloud的核心之Spring Boot. 18
3.1 重新认识Spring Boot. 18
3.1.1 Spring IoC/DI 19
3.1.2 Bean装配方式的升级... 21
3.1.3 Spring Boot的价值... 23
3.2 快速构建Spring Boot应用... 25
3.3 Spring Boot自动装配的原理... 26
3.3.1 自动装配的实现... 27
3.3.2 EnableAutoConfiguration. 28
3.3.3 AutoConfigurationImportSelector 29
3.3.4 自动装配原理分析... 31
3.3.5 @Conditional条件装配... 34
3.3.6 spring-autoconfigure-metadata. 37
3.4 手写实现一个Starter. 38
3.4.1 Starter的命名规范... 38
3.4.2 实现基于Redis的Starter 38
3.5 本章小结... 41
第4章 微服务架构下的服务治理... 42
4.1 如何理解Apache Dubbo. 43
4.2 Apache Dubbo实现远程通信... 44
4.3 Spring Boot集成Apache Dubbo. 48
4.4 快速上手ZooKeeper. 52
4.4.1 ZooKeeper的安装... 52
4.4.2 ZooKeeper的数据结构... 52
4.4.3 ZooKeeper的特性... 53
4.4.4 Watcher机制... 54
4.4.5 常见应用场景分析... 54
4.5 Apache Dubbo集成ZooKeeper实现服务注册... 56
4.5.1 Apache Dubbo集成ZooKeeper实现服务注册的步骤... 57
4.5.2 ZooKeeper注册中心的实现原理... 59
4.6 实战Dubbo Spring Cloud. 60
4.6.1 实现Dubbo服务提供方... 60
4.6.2 实现Dubbo服务调用方... 63
4.7 Apache Dubbo的高级应用... 65
4.7.1 集群容错... 66
4.7.2 负载均衡... 67
4.7.3 服务降级... 68
4.7.4 主机绑定规则... 69
4.8 Apache Dubbo核心源码分析... 70
4.8.1 源码构建... 71
4.8.2 Dubbo的核心之SPI 71
4.8.3 无处不在的自适应扩展点... 81
4.8.4 Dubbo中的IoC和AOP. 85
4.8.5 Dubbo和Spring完美集成的原理... 89
4.9 本章小结... 95
第5章 服务注册与发现... 97
5.1 什么是Alibaba Nacos. 98
5.2 Nacos的基本使用... 99
5.2.1 Nacos的安装... 99
5.2.2 Nacos服务注册发现相关API说明... 100
5.2.3 Nacos集成Spring Boot实现服务注册与发现... 101
5.3 Nacos的高可用部署... 103
5.3.1 安装环境要求... 104
5.3.2 安装包及环境准备... 104
5.3.3 集群配置... 104
5.3.4 配置MySQL数据库... 105
5.3.5 启动Nacos服务... 105
5.4 Dubbo使用Nacos实现注册中心... 106
5.5 Spring Cloud Alibaba Nacos Discovery. 109
5.5.1 服务端开发... 109
5.5.2 消费端开发... 113
5.6 Nacos实现原理分析... 115
5.6.1 Nacos架构图... 116
5.6.2 注册中心的原理... 116
5.7 深入解读Nacos源码... 117
5.7.1 Spring Cloud什么时候完成服务注册... 117
5.7.2 NacosServiceRegistry的实现... 122
5.7.3 从源码层面分析Nacos服务注册的原理... 123
5.7.4 揭秘服务提供者地址查询... 127
5.7.5 分析Nacos服务地址动态感知原理... 130
5.8 本章小结... 132
第6章 Nacos实现统一配置管理... 133
6.1 Nacos配置中心简介... 134
6.2 Nacos集成Spring Boot实现统一配置管理... 134
6.2.1 项目准备... 134
6.2.2 启动Nacos Server 135
6.2.3 创建配置... 135
6.2.4 启动服务并测试... 137
6.3 Spring Cloud Alibaba Nacos Config. 137
6.3.1 Nacos Config的基本应用... 137
6.3.2 动态更新配置... 139
6.3.3 基于Data ID配置YAML的文件扩展名... 140
6.3.4 不同环境的配置切换... 141
6.3.5 Nacos Config自定义Namespace和Group. 142
6.4 Nacos Config 实现原理解析... 145
6.4.1 配置的CRUD.. 145
6.4.2 动态监听之Pull Or Push. 146
6.5 Spring Cloud如何实现配置的加载... 148
6.5.1 PropertySourceBootstrapConfiguration. 148
6.5.2 PropertySourceLocator 150
6.6 Nacos Config核心源码解析... 152
6.6.1 NacosFactory.createConfigService. 154
6.6.2 NacosConfigService构造... 155
6.6.3 ClientWorker 155
6.6.4 ClientWorker.checkConfigInfo. 157
6.6.5 LongPollingRunnable.run. 157
6.6.6 服务端长轮询处理机制... 161
6.6.7 ClientLongPolling. 164
6.7 本章小结... 167
第7章 基于Sentinel的微服务限流及熔断... 168
7.1 服务限流的作用及实现... 168
7.1.1 计数器算法... 169
7.1.2 滑动窗口算法... 170
7.1.3 令牌桶限流算法... 171
7.1.4 漏桶限流算法... 172
7.2 服务熔断与降级... 172
7.3 分布式限流框架Sentinel. 174
7.3.1 Sentinel的特性... 174
7.3.2 Sentinel的组成... 175
7.3.3 Sentinel Dashboard的部署... 175
7.4 Sentinel的基本应用... 176
7.4.1 Sentinel实现限流... 176
7.4.2 资源的定义方式... 178
7.4.3 Sentinel资源保护规则... 179
7.4.4 Sentinel实现服务熔断... 183
7.5 Spring Cloud集成Sentinel实践... 185
7.5.1 Sentinel接入Spring Cloud. 185
7.5.2 基于Sentinel Dashboard来实现流控配置... 187
7.5.3 自定义URL限流异常... 189
7.5.4 URL资源清洗... 189
7.6 Sentinel集成Nacos实现动态流控规则... 190
7.7 Sentinel Dashboard集成Nacos实现规则同步... 194
7.7.1 Sentinel Dashboard源码修改... 194
7.7.2 Sentinel Dashboard规则数据同步... 199
7.8 Dubbo集成Sentinel实现限流... 200
7.8.1 Dubbo服务接入Sentinel Dashboard. 200
7.8.2 Dubbo服务限流规则配置... 201
7.9 Sentinel热点限流... 203
7.9.1 热点参数限流的使用... 204
7.9.2 @SentinelResource热点参数限流... 205
7.9.3 热点参数规则说明... 206
7.10 Sentinel的工作原理... 206
7.11 Spring Cloud Sentinel工作原理分析... 207
7.12 Sentinel核心源码分析... 210
7.12.1 限流的源码实现... 210
7.12.2 实时指标数据统计... 216
7.12.3 服务降级的实现原理... 225
7.13 本章小结... 229
第8章 分布式事务... 230
8.1 分布式事务问题的理论模型... 231
8.1.1 X/Open分布式事务模型... 231
8.1.2 两阶段提交协议... 233
8.1.3 三阶段提交协议... 234
8.1.4 CAP定理和BASE理论... 236
8.2 分布式事务问题的常见解决方案... 238
8.2.1 TCC补偿型方案... 238
8.2.2 基于可靠性消息的最终一致性方案... 239
8.2.3 最大努力通知型... 242
8.3 分布式事务框架Seata. 243
8.3.1 AT模式... 243
8.3.2 Saga模式... 244
8.4 Seata的安装... 248
8.4.1 file存储模式... 248
8.4.2 db存储模式... 249
8.4.3 Seata服务端配置中心说明... 251
8.5 AT模式Dubbo集成Seata. 258
8.5.1 项目准备... 259
8.5.2 数据库准备... 259
8.5.3 核心方法说明... 260
8.5.4 项目启动顺序及访问... 264
8.5.5 整合Seata实现分布式事务... 265
8.6 Spring Cloud Alibaba Seata. 269
8.6.1 Spring Cloud项目准备... 270
8.6.2 集成Spring Cloud Alibaba Seata. 270
8.6.3 关于事务分组的说明... 275
8.7 Seata AT模式的实现原理... 276
8.7.1 AT模式第一阶段的实现原理... 277
8.7.2 AT模式第二阶段的原理分析... 279
8.7.3 关于事务的隔离性保证... 280
8.8 本章小结... 283
第9章 RocketMQ分布式消息通信... 285
9.1 什么是RocketMQ.. 285
9.1.1 RocketMQ的应用场景... 286
9.1.2 RocketMQ的安装... 286
9.1.3 RocketMQ如何发送消息... 287
9.1.4 RocketMQ如何消费消息... 289
9.2 Spring Cloud Alibaba RocketMQ.. 291
9.2.1 Spring Cloud Alibaba RocketMQ架构图... 293
9.2.2 Spring Cloud Stream消息发送流程... 294
9.2.3 RocketMQ Binder集成消息发送... 299
9.2.4 RocketMQ Binder集成消息订阅... 303
9.2.5 Spring Cloud Stream消息订阅流程... 308
9.3 RocketMQ集群管理... 314
9.3.1 整体架构设计... 314
9.3.2 基本概念... 315
9.3.3 为什么放弃ZooKeeper而选择NameServer 316
9.4 如何实现顺序消息... 318
9.4.1 顺序消息的使用场景... 318
9.4.2 如何发送和消费顺序消息... 319
9.4.3 顺序发送的技术原理... 321
9.4.4 普通发送的技术原理... 322
9.4.5 顺序消费的技术原理... 324
9.4.6 并发消费的技术原理... 325
9.4.7 消息的幂等性... 325
9.5 如何实现事务消息... 326
9.5.1 事务消息的使用场景... 326
9.5.2 如何发送事务消息... 327
9.5.3 事务消息的技术原理... 330
9.6 高性能设计... 331
9.6.1 顺序写盘... 333
9.6.2 消费队列设计... 334
9.6.3 消息跳跃读取... 336
9.6.4 数据零拷贝... 336
9.6.5 动态伸缩能力... 336
9.6.6 消息实时投递... 337
9.7 高可用设计... 338
9.7.1 消息发送重试机制... 339
9.7.2 故障规避机制... 340
9.7.3 同步刷盘与异步刷盘... 343
9.7.4 主从复制... 350
9.7.5 读写分离... 351
9.7.6 消费重试机制... 351
9.7.7 ACK机制... 352
9.7.8 Broker集群部署... 352
9.8 本章小结... 353
第10章 微服务网关之Spring Cloud Gateway. 354
10.1 API网关的作用... 355
10.1.1 统一认证鉴权... 356
10.1.2 灰度发布... 357
10.2 网关的本质及技术选型... 358
10.2.1 OpenResty. 358
10.2.2 Spring Cloud Zuul 360
10.2.3 Spring Cloud Gateway. 361
10.3 Spring Cloud Gateway网关实战... 361
10.3.1 spring-cloud-gateway-service. 361
10.3.2 spring-cloud-gateway-sample. 362
10.4 Spring Cloud Gateway原理分析... 363
10.5 Route Predicate Factories. 364
10.5.1 指定时间规则匹配路由... 365
10.5.2 Cookie匹配路由... 365
10.5.3 Header匹配路由... 366
10.5.4 Host匹配路由... 366
10.5.5 请求方法匹配路由... 367
10.5.6 请求路径匹配路由... 367
10.6 Gateway Filter Factories. 367
10.6.1 GatewayFilter 368
10.6.2 GlobalFilter 372
10.7 自定义过滤器... 375
10.7.1 自定义GatewayFilter 375
10.7.2 自定义GlobalFilter 377
10.8 Spring Cloud Gateway集成Nacos实现请求负载... 378
10.9 Spring Cloud Gateway集成Sentinel网关限流... 381
10.9.1 Route维度限流... 382
10.9.2 自定义API分组限流... 384
10.9.3 自定义异常... 386
10.9.4 网关流控控制台... 387
10.9.5 网关限流原理... 388
10.10 本章小结... 389
前 言
我看过市面上很多关于分布式和微服务的书,对于初学者或者想要进阶的人来说,总感觉缺少一点什么。我希望能够写一本书帮助更多的同学快速并且正确地成长。当然,促使我写这本书的另外一个原因是我的职业生涯的转折。
我从事Java开发工作接近10年时间,然后在职业教育这个“风口”下选择以讲师的身份创业,幸运的是创业过程还算顺利,也有不少收获。从程序员转行到讲师之后,我接触了几十万名有不同背景和不同经验的程序员,慢慢总结了一些课程设计的方法和授课的方法,最大的收获是要针对不同层次的学员合理设计内容的铺垫方式和技术的讲解方式,从而达到事半功倍的效果。因此,我想基于这套方法论,结合目前比较主流的微服务架构,写这样一本书去帮助大家。
诚然,写书和讲课或者写代码是完全不一样的。对于这本书中的每一句话、每一个字,我都仔细斟酌,抱着一种程序员对于代码的极致追求的心态来写这本书。实际上我们都知道程序是不可能完美的,希望读者能够抱着容忍程序中出现小bug的心态来原谅我文字表达的不完美。
我从2012年开始接触Dubbo,当时公司正面临大规模服务化之后的服务治理和服务监控等一系列问题,Dubbo的出现解决了很多快速发展起来的互联网公司的技术难题。从那以后,我开始深入研究Dubbo的底层原理。
2015年,公司内部全面推动微服务架构,当时采用Spring Boot+Dubbo来构建微服务,基于微服务的治理生态和运维生态的逐步完善,我逐步认识到微服务带来的价值。在Spring Cloud还没有在国内大规模运用时,我们要解决服务注册与发现、服务熔断和降级、服务监控、服务路由等问题,采用的技术大部分是大公司或者Apache组织开源的。各种技术的拼凑和组装给企业带来了比较大的挑战。
从2016年开始,Spring Cloud逐步在国内普及,它提供了微服务开发、服务治理、监控等一体化解决方案。有了这个生态,中小型互联网公司要构建微服务,不需要再去找各种开源组件来集成。通过Spring Cloud可以轻松快速地构建微服务。
Spring Cloud服务治理的整个体系采用的是Netflix公司提供的开源组件,但是Netflix公司开源组件的活跃度不是很高,并且Netflix公司官方也声明了对于很多组件逐步进入维护模式。所以Spring Cloud官方发布了声明,Spring Cloud Netflix下的相关组件也会逐步进入维护模式(进入维护模式的意思就是从目前一直到以后一段时间Spring Cloud Netflix提供的服务和功能就这么多了,不再开发新的组件和功能了)。同时Spring Cloud 官方也在积极孵化其他替代品,以满足Spring Cloud 版本迭代的需求。
值得高兴的是,2018年10月31日的凌晨,Spring Cloud Alibaba正式入驻Spring Cloud官方孵化器,并在Maven中央库发布了第一个版本;2019年8月1日,在Alibaba仓库发布了第一个毕业版本。
Spring Cloud Alibaba生态下的各个组件其实在国内很多公司很早之前就有使用,它们在服务治理方面比Spring Cloud Netflix更加强大,而且比较符合国内互联网公司的业务特性,未来可期!
本书会从技术背景到基本使用再到深层次的设计思想和原理,对Spring Cloud Alibaba进行全面的分析,帮助大家全面构建Spring Cloud Alibaba技术体系。
本书特色
m 系统化的深度整理
Spring Cloud Alibaba在官网上有很多非常详细的资料,但是这些资料太散,没有系统性和深度。很多开发者需要花费大量的时间和精力去研究,很低效。本书系统分析了各个组件的使用方法和原理,对于初学者或者有一定经验的开发者来说,都能提供非常大的帮助。
m 高效的技术学习模型
以往我们学习一个技术往往直接从应用着手,这种方式会使得读者知其然而不知其所以然。本书对于Spring Cloud Alibaba生态下的技术组件采用高效的技术学习模型“场景→需求→解决方案→应用→原理”来展开,可以让读者更加了解技术背景,更好地理解技术的本质。
m 不仅有应用,还有核心原理
一个“不安分”的程序员,必然不会仅停留在技术的使用层次,技术实现原理的探索会给他带来更多的惊喜。本书在介绍Spring Cloud Alibaba生态下各个技术组件的使用方法的同时,会剖析其实现原理,并且结合一些核心源码分析设计方案的落地过程。这无疑给那些充满好奇心的读者带来了“福利”。
m 大量图形化设计,化繁为简
对于复杂的技术原理,如果一味地用书面化的文字来表述,难免会增加理解成本,读者可能要花大半天的时间去理解一句话。“书”对于开发者来说,是一个很好的学习渠道,理应化繁为简,所以本书采用“动不动就画图”的方式,在书中穿插了大量的图形,帮助读者更好地掌握技术原理。
示例源码
本书相关示例源码可以在GitHub站点下载:https://github.com/2227324689/Spring-Cloud-Alibaba-。
致谢
这本书笔者筹划了很久,中间因为各种原因,一直拖到2019年的11月份才正式动笔,接着到一月份又赶上了疫情在家里隔离,索性就利用隔离的这段时间没日没夜地把这本书写完了,也算是圆了自己写一本书的小梦想。
本书能够顺利出版,首先得感谢合伙人谭勇德、蒋孟枝的不断督促,以及本书的责任编辑董英的鼓励。其次,我要感谢我的妻子,是你的支持使我在写书期间可以“两耳不闻窗外事”,专注写作,从而顺利交稿。
我还要特别感谢我的好友汤陈,为本书提供了第7章的初稿。在整个写作过程中我们对于技术问题的交流,为我的写作提供了很多很好的思路。