前言
前 言
据O’Reilly在2020年7月15日公布的企业微服务市场现状的调研数据来看,有77%的组织采用了微服务,其中,92%的组织成功地使用了微服务。Spring Cloud和Apache Dubbo作为非常流行的两款微服务开发框架,深受开发者们关注。笔者编写本书的目的是让读者透彻理解Spring Cloud 这套开发框架。
2018年7月,笔者有幸参与了Spring Cloud Alibaba开源项目的建设,并成为该项目的创始人之一。在随后的日子里,笔者经历了Spring Cloud Alibaba进入Spring Cloud孵化器、毕业、Spring Cloud 官网上线 Spring Cloud Alibaba、Spring Initializr 上线 Spring Cloud Alibaba 组件、GitHub Star 数超过15000个、Used By 数超过7000个、企业使用数超过1000个等诸多具有里程碑意义的事件。在整个过程中,笔者有幸与Spring Cloud的创始人Spencer Gibb交流过Spring Cloud的一些设计理念,还通过与Spring首席布道师Josh Long一起制作Bootiful Podcast视频来介绍Spring Cloud Alibaba。这些都是非常难忘的经历。
在建设 Spring Cloud Alibaba 的过程中,笔者对Spring Cloud整个生态的知识点进行了深入学习,发现Spring Cloud 生态体系其实非常庞大,大家平时可能更多地关注于服务注册/发现、配置管理、熔断器和网关这4大方面,但实际上Spring Cloud还包括消息、消息总线、任务调度、应用部署、Serverless、CI/CD 等诸多领域的知识。
本书共分10章,主要介绍Spring Cloud各个核心组件的设计原理,以及目前流行的Spring Cloud Alibaba和 Netflix组件,并且剖析Spring Cloud对流处理、批处理,以及目前业界流行的 Serverless 的支持。在介绍各部分内容时,本书将理论与实践相结合,对每个核心知识点都给出了具体的案例应用,以帮助读者掌握核心组件的设计理念。
笔者一开始是不打算写这本书的,因为市面上已经有不少与Spring Cloud 相关的书籍,再编写一本可能也没有太大意义。有了 Spring Cloud Alibaba 的这段经历后,笔者发现市面上的那些 Spring Cloud 书籍对 Spring Cloud生态的介绍还不够详细,而且涉及的Spring Cloud 版本也比较老(本书所用的版本是Spring Cloud Hoxton.RELEASE),所以想把对Spring Cloud的理解写出来与大家分享。
由于笔者平时工作非常忙,又遇到新房装修的事情,只能每天早起、晚睡挤出时间来编写,所以导致本书历时近一年时间才完成。
因笔者能力有限,书中难免有错漏之处,恳请读者批评、指正。对本书的意见和建议,读者可以通过电子邮件发送给笔者,或者在本书对应的GitHub代码仓库上提交issue。本书所有的示例代码均已发布到GitHub官网的“fangjian0423/ deep-in-spring-cloud-samples”页面下,每个项目的说明文档(README)都注明了对应的章节。
本书能顺利出版,首先要感谢笔者的老板和同事,是他们让笔者有机会参与 Spring Cloud Alibaba 开源项目的建设。其次要感谢笔者的妻子,是她的鼓励让笔者有动力编写这本书,而且她在笔者写作期间分担了不少家庭事务,让笔者有更多的时间投入写作。*后要感谢电子工业出版社的编辑李利健和她的同事们对本书提出的修改建议。
作 者
商品简介
本书共分10章,主要介绍Spring Cloud各个核心组件的设计原理,以及目前流行的Spring Cloud Alibaba和 Netflix组件,并且剖析Spring Cloud对流处理、批处理,以及目前业界流行的Serverless的支持。在介绍各部分内容时,本书将理论与实践相结合,对每个核心知识点给出了具体的案例应用,以帮助读者掌握核心组件的设计理念。
作者简介
"方剑,花名洛夜,Spring Cloud Alibaba 开源项目负责人/创始人之一。Apache RocketMQ Committer,Alibaba Nacos Committer。目前就职于阿里巴巴集团。 曾在个人博客上编写过《Spring MVC源码分析系列》、《Spring Boot源码分析系列》文章。目前,关注微服务、云原生、Kubernetes。"
目录
章 Spring Cloud生态1
1.1 Spring Cloud 基础:Spring Boot概述1
1.2 Spring Boot核心特性3
1.2.1 Web服务器:WebServer3
1.2.2 条件注解:@ConditionalOnXX7
1.2.3 工厂加载机制10
1.2.4 配置加载机制12
1.2.5 Spring Boot Actuator15
1.3 Spring Cloud 概述17
1.3.1 Spring Cloud诞生背景17
1.3.2 Netflix OSS19
1.3.3 Spring Cloud项目20
1.3.4 Spring Cloud 版本21
1.3.5 Spring Cloud 最新动态23
第2章 服务注册与服务发现26
2.1 微服务架构演进26
2.2 使用Alibaba Nacos体验个Spring Cloud微服务应用29
2.2.1 下载并启动Nacos Server30
2.2.2 启动 Nacos Discovery Provider 进行服务注册32
2.2.3 启动 Nacos Discovery Consumer 进行服务发现33
2.3 使用Netflix Eureka替换Alibaba Nacos注册中心36
2.3.1 启动Eureka Server37
2.3.2 启动 Eureka Discovery Provider 进行服务注册38
2.3.3 启动 Nacos Discovery Consumer 进行服务发现39
2.4 Spring Cloud 统一服务注册/发现编程模型40
2.4.1 DiscoveryClient和ReactiveDiscoveryClient40
2.4.2 ServiceInstance和Registration44
2.4.3 ServiceRegistry48
2.4.4 ServiceRegistryEndpoint50
2.5 双注册双订阅模式51
2.5.1 双注册双订阅模式分析51
2.5.2 案例:使用双注册双订阅模式迁移Eureka注册中心到Nacos注册中心54
第3章 负载均衡与服务调用57
3.1 负载均衡原理57
3.2 Spring Cloud LoadBalancer负载均衡组件59
3.3 Netflix Ribbon负载均衡74
3.3.1 RibbonLoadBalancerClient74
3.3.2 RibbonServer和Server79
3.3.3 ServerIntrospector82
3.3.4 ILoadBalancer84
3.3.5 ServerList87
3.3.6 ServerListUpdater90
3.3.7 ServerStats92
3.3.8 Netflix Ribbon配置项总结94
3.3.9 Ribbon缓存时间97
3.4 Dubbo LoadBalance 负载均衡98
3.5 OpenFeign:声明式Rest客户端100
3.5.1 OpenFeign概述100
3.5.2 OpenFeign 对 JAX-RS 的支持102
3.5.3 OpenFeign 底层执行原理103
3.6 Dubbo Spring Cloud :服务调用的新选择105
3.7 再谈路由和负载均衡111
3.8 案例:应用流量控制112
3.8.1 流量控制可以解决的业务场景113
3.8.2 使用 Netflix Ribbon 完成应用灰度发布115
第4章 配置管理119
4.1 配置中心背景概述119
4.2 Spring/Spring Boot 与配置120
4.3 Spring Cloud与配置122
4.3.1 使用Alibaba Nacos体验配置的获取以及动态刷新123
4.3.2 从Spring Cloud 配置中心获取配置原理125
4.3.3 Spring Cloud配置动态刷新135
4.4 Spring Cloud Config Server/Client151
4.4.1 Spring Cloud Config Server151
4.4.2 Spring Cloud Config Client165
4.4.3 Spring Cloud Config Client 与 Service Discovery 整合171
4.4.4 Spring Cloud Config 配置动态更新174
4.5 再谈配置动态刷新175
4.6 案例:Spring Cloud应用流量控制策略动态生效179
第5章 熔断器184
5.1 熔断器模式概述184
5.2 手动实现一个断路器186
5.2.1 定义 State 枚举和 Counter 计数器类186
5.2.2 定义 CircuitBreaker 类188
5.2.3 使用 CircuitBreaker 进行场景测试191
5.3 Spring Cloud Circuit Breaker 技术演进193
5.4 Alibaba Sentinel199
5.4.1 Sentinel的核心概述199
5.4.2 Spring Cloud Alibaba Sentinel204
5.4.3 Sentinel 与 OpenFeign和RestTemplate207
5.4.4 Sentinel限流与Dashboard211
5.4.5 Sentinel 不错特性215
5.5 Netflix Hystrix219
5.5.1 Hystrix核心概述219
5.5.2 Spring Cloud Netflix Hystrix225
5.5.3 Hystrix限流与Dashboard227
5.5.4 Hystrix 不错特性231
5.6 Resilience4j235
5.6.1 Resilience4j 体验236
5.6.2 Spring Cloud Resilience4j241
5.6.3 Resilience4j 不错特性244
5.7 案例:使用 Sentinel 保护应用,防止服务雪崩248
第6章 Spring生态消息驱动253
6.1 消息中间件概述254
6.2 Spring与消息257
6.2.1 消息编程模型的统一257
6.2.2 消息发送和订阅258
6.2.3 WebSocket265
6.2.4 案例:使用spring-messaging处理WebSocket268
6.3 Spring Integration271
6.3.1 Spring Integration 核心组件概述272
6.3.2 Spring Integration核心组件使用275
6.4 Spring Cloud Stream277
6.4.1 使用Spring Cloud Stream发送和接收消息277
6.4.2 理解 Binder 和 Binding280
6.4.3 深入理解Spring Cloud Stream282
6.4.4 不错特性284
第7章 消息总线295
7.1 消息总线概述295
7.2 深入理解Spring Cloud Bus296
7.2.1 Spring Cloud Bus的使用297
7.2.2 Spring Cloud Bus的原理300
7.2.3 Spring Cloud Bus 事件302
7.2.4 Spring Cloud Bus 源码分析305
7.3 案例:使用Spring Cloud Bus完成多节点配置动态刷新309
第8章 Spring Cloud Data Flow311
8.1 批处理/流处理概述312
8.2 流处理案例:信用卡反欺诈系统315
8.3 批处理案例:统计GitHub仓库的各项指标数据323
8.4 Spring Cloud Data Flow批处理任务组合331
8.5 Spring Cloud Data Flow Shell335
8.6 Spring Cloud Skipper337
8.7 Spring Cloud Deployer341
8.7.1 TaskLauncher 接口342
8.7.2 AppDeployer 接口344
8.7.3 LocalAppDeployer348
8.8 Spring Cloud Task349
8.8.1 体验Spring Cloud Task349
8.8.2 深入理解Spring Cloud Task351
8.8.3 Spring Cloud Task Batch354
8.9 Spring Batch358
8.9.1 Spring Batch 核心组件358
8.9.2 案例:使用 Spring Batch 完成便利店每日账单统计361
第9章 网关366
9.1 API网关概述366
9.2 Netflix Zuul368
9.3 非阻塞式的Spring Cloud Gateway371
9.4 Route路由信息376
9.5 Predicate机制377
9.5.1 PredicateDefinition和AsyncPredicate377
9.5.2 RoutePredicateFactory378
9.5.3 内置RoutePredicateFactory381
9.6 Filter机制382
9.6.1 FilterDefinition和GatewayFilter382
9.6.2 GlobalFilter386
9.6.3 内置 GatewayFilterFactory387
9.6.4 网关内置的GlobalFilter390
9.7 整合注册中心和配置中心391
9.8 GatewayControllerEndpoint397
9.9 案例:使用Spring Cloud Gateway进行路由转发398
0章 Spring Cloud与Serverless401
10.1 Serverless401
10.2 Java Function403
10.3 Spring Cloud Function405
10.4 Spring Cloud Function与Spring生态的整合411
10.4.1 Spring Cloud Function与Spring Web/WebFlux412
10.4.2 Spring Cloud Function 与 Spring Cloud Stream420
10.4.3 Spring Cloud Function 与 Spring Cloud Task427
10.5 案例:使用GCP Cloud Functions体验Spring Cloud Function430
内容摘要
《深入理解Spring Cloud与实战》共分10章,主要介绍Spring Cloud各个核心组件的设计原理,以及目前流行的Spring Cloud Alibba和Netflix组件,并且剖析Spring Cloud对流处理、批处理,以及目前业界流行的Serverless的支持。在介绍各部分内容时,本书将理论与实践相结合,对每个核心知识点都给出了具体的案例应用,以帮助读者掌握核心组件的设计理念。
本书适合对Spring Cloud感兴趣并且想透彻理解Spring Cloud的读者阅读,也适合正在进行微服务选型的开发者阅读。
主编推荐
"1.Spring Cloud Alibaba创始人倾力打造
2.阿里云智能资深技术专家司徒放(姬风)、 阿里云智能不错技术专家张乎兴、 Spring Cloud Alibaba项目架构师小马哥(mercyblitz)、 阿里云智能不错技术专家彭文杰、云集架构师冷冷、Nepxion开源社区创始人任浩军联合力荐
3.理论与实践相结合,核心知识点辅以案例讲解"
以下为对购买帮助不大的评价