《重新定义Spring Cloud实战》

举报
华章计算机 发表于 2019/06/04 15:32:46 2019/06/04
【摘要】 本书摘自《重新定义Spring Cloud实战》——作者是许进、叶志远、钟尊发、蔡波斯、方志朋、郭芳碧、朱德明。

云计算与虚拟化技术丛书

重新定义Spring Cloud实战


许进 叶志远 钟尊发 蔡波斯

方志朋 郭芳碧 朱德明 著

重新定义Spring Cloud实战 立.jpg

Foreword  专 家 推 荐

(排名不分先后)


在微服务体系中,Spring Cloud是目前最热门的构建微服务体系的解决方案,它提供了构建微服务架构的一些基础设施。本书内容上覆盖了Spring Cloud的一些主要组件,不仅在如何使用上做了详细的介绍,也从原理上深入浅出地剖析了其中的技术要点,同时也将部分组件与周边的一些开源项目进行了对比,且提供了一些原理分析和相关的示例,是一本不可多得的Spring Cloud实战书籍。新手和有微服务实践经验的读者都能从书中得到一些不一样的收获。

张艺辰 腾讯高级研发工程师


本书不仅对Spring Cloud各核心组件进行了细致入微的介绍,同时也跳出了框架本身,为微服务的实施和分布式架构所面临的基本问题交出了Spring Cloud式答卷,是开发者快速掌握Spring Cloud技术栈的神兵利器。不仅如此,本书还凝聚着Spring Cloud中国社区的智慧结晶,让我们看到了国人在开源领域的研发力量,可喜可贺。

王鸿飞 百度高级研发工程师


在微服务如火如荼的今天,各种微服务框架层出不穷,而Spring Cloud无疑是那颗最闪亮的星。从Spring Framework到Spring Boot,再到如今的Spring Cloud,Spring全家桶给众多程序员带来了“真正的春天”。由于分布式和服务化是极具挑战的任务,因此Spring Cloud也不可避免的愈加复杂。Spring Cloud中国社区为Spring Cloud的普及做出了巨大贡献,并迅速降低了语言问题所带来的学习门槛。这本书由Spring Cloud中国社区倾力打造,书中涵盖了Spring Cloud的服务发现、网关、熔断器、配置、全链路监控等最核心组件,并很接地气地详述了Dubbo向Spring Cloud迁移以及Spring Cloud与分布式事务相关内容,值得一看。

张亮 京东金融数据研发负责人/分布式数据库中间件Sharding-Sphere负责人


Spring Cloud提供了完整的微服务技术体系,可以帮助开发者快速实现架构升级。本书完整地介绍了Spring Cloud中各个组件的使用方法并深度剖析了其中的原理,深入浅出地帮助开发者快速掌握和理解Spring Cloud。

李艺恒 腾讯研发工程师





Preface 1  序1

随着淘宝业务的高速发展,阿里遇到了性能和效率两大问题,在经过一系列探索之后,从 2007 年开始进行了一系列分布式服务架构改造。其中,内部做服务化的最底层、最核心的两个框架是Dubbo(2011年开源)和HSF。我本人便是从2010年开始接触微服务的,由于阿里内部配套比较完善,所以用起来也是得心应手,没有遇到什么问题。直到有一个朋友的公司在用开源版本Dubbo遇到问题来咨询我时,我才发现如果单纯用开源的Dubbo来搭建一套完整的分布式系统,除了服务治理外还有不少的配套设置需要完善。

2014年3月,Martin Fowler发表文章《Microservices》,通俗易懂地讲解了什么是微服务架构,自那以后Microservices(微服务)一词越来越火爆,如今已是最热门的话题之一。Spring Cloud也是从那个时候开始流行起来,作为新一代的服务框架,它提出了开发“面向云环境的应用程序”的口号,为微服务架构提供了更加全面的技术支持。它的一站式解决方案大大降低了开发成本,让无数开发者欢呼雀跃。本书作者之一许进作为Spring Cloud中国社区的创始人之一,一直在中国为Spring Cloud布道。在学习Spring Cloud时,网上搜索到的很多中文资料都出自这个社区,我与许进也是因此结识。当他把本书书稿发给我时,我本着负责任的态度认真通读了一遍,发现这确实是一本不错的著作,从理论介绍到实战案例,从基础概念到高级特性基本全覆盖了。既适合初学者入门,也适合有一定经验的人查漏补缺。

目前国内还存在大量正在向互联网转型的传统IT企业,这些企业转型基本有三种方案:一是采用基于阿里企业级中间件(EDAS)的商业化一站式解决方案;二是基于开源Dubbo及生态(阿里已经加大开源投入,诸如像Nacos这样的注册、配置中心,像Sentinel这样熔断限流组件已经作为Dubbo的生态成长起来了)完全自研;第三个就是基于Spring Cloud这种“全家桶”的解决方案了。无论采用哪种方案,书中关于微服务的一些思想都是通用的,所以本书同样会让这些转型过程中的架构师有所收获。

最后祝本书大卖,也同样期望作者继续保持开源投入,因为这两样都是在帮助更多的中国开发者成长,也希望从此书受益的开发者能为开源贡献一份自己的力量。


谢吉宝(唐三)

阿里巴巴高级技术专家




序2  Preface 2

两年多前在唯品会基础架构部的时候,我刚认识许进,记得当时他正在从事高性能网关的研发工作(本书很多篇幅也涉及微服务网关,从中可以看到许进在这块的积累还是比较深入的)。之后我和许进陆陆续续有一些交流,我发现许进是一个偏后端且社区型的工程师,他对基础中间件、微服务架构、开源和技术社区建设抱有浓厚的兴趣和热情,不仅自己参与实际中间件的研发,也和社区中的志愿者一起做开源、写书,同时也经营社区(技术网站,微信群等)。说实话,国内这种社区型工程师还是比较少的,所以我一直比较关注许进,包括他写书的事情,当他提出要我帮忙写一篇序时,我觉得应该支持他一下。

微服务架构正逐渐成为企业应用架构的主流。几年前,Netflix在大规模生产级微服务落地的基础上,把它的成功经验以开源组件的形式贡献给了社区,Pivotal则基于Netflix的开源组件进行封装简化,推出Spring Cloud微服务技术栈,进一步简化了这些组件的使用门槛,大大推进了微服务架构在企业的普及和落地。本书主要介绍Spring Cloud微服务栈,各个组件背后的业务需求、技术架构,以及实际的操作案例。除了Spring Cloud以外,本书也涉及开源社区内比较成熟的其他微服务组件,还包括分布式系统的架构原理,可以说是深入了解微服务社区生态和理解分布式系统架构原理的一本实践参考。

相信本书对一线架构师拓展技术视野,实践落地微服务架构有所帮助。也感谢许进对Spring Cloud和微服务架构在国内的推广所做出的贡献。


杨波

拍拍贷基础架构研发总监,资深架构师,极客时间《微服务架构和实践160讲》作者




Preface 3  序3

现在想来,以前做架构升级的时候,我们往往是被业务的快速发展或者线上爆发的问题逼迫着去改造,然后才会思考为何不能未雨绸缪地来一次战略架构设计,或者是否有哪些好的模式可以帮助我们,而微服务的思想恰好可以解决这个问题。

让我们回顾下曾经的单体应用环境:在业务简单、团队组织成员很少的时候,我们常常把功能都集中于一个应用中,统一部署,统一测试,玩得不亦乐乎。但随着业务迅速发展,组织成员日益增多,我们会将所有的功能集中到一个Tomcat中去,每当更新一个功能模块时,势必要更新所有程序,搞不好,还要牵一发动全身,实在难以维护。在单体应用满足不了我们逐渐增长的扩展需求之后,微服务应运而生。它将原来集中于一体的功能拆分出去,比如商品功能、订单功能、用户功能,使其自成体系地发布、运维等,从而解决了单体应用中功能过多、不便维护的弊端。

自从微服务概念诞生以来,各种关于微服务的实践层出不穷,Spring Cloud作为实现微服务的工具集一直有着举足轻重的作用。这套工具集好比金庸武侠小说中的独孤九剑,招式鲜明而又实用。如果把所有的剑诀都学会,待任督二脉打通之后肯定所向披靡。我们在学习微服务以及Spring Cloud实践的过程中倒是不必将每个招式都学会,凭借破剑式、破枪式也能够行走江湖。比如我们可以裁剪里面的工具集,将Spring Cloud中的Zuul、Hystrix、Config等拿来为我所用,待熟练掌握之后,也一样可以独步微服务应用的“武林”。本书实现了Spring Cloud理论和实践的统一,为读者带来详实的指导,便于读者更好地将这套工具集应用到实际业务开发中去。


王新栋

京东商城京麦开放网关技术负责人,资深架构师





前  言  Preface

随着互联网的快速普及,云计算近年来得到蓬勃发展,企业的IT环境和架构体系也逐渐发生变革,其中最典型的就是由过去的单体应用架构发展为当今流行的微服务架构。微服务是一种架构风格,其优势是为软件应用开发带来很大的便利,让敏捷开发和复杂的企业应用快速持续交付成为可能。随着微服务架构的流行,很多企业纷纷使用微服务架构来搭建新的系统或者对历史系统进行重构,但是微服务架构的实施和落地会面临很大的挑战。虽然微服务架构的解决方案很多,但是对于如何真正落地微服务架构,目前还没有公认的技术标准和规范。幸运的是,业界已经有一些很有影响力的开源微服务解决方案,比如2015年年初,Spring团队推出的Spring Cloud,其目标是成为Java领域微服务架构落地的标准。Spring Cloud经过高速迭代和发展,至今已经成为Java领域落地微服务架构的推荐解决方案,为企业IT架构变革保驾护航。

Spring Cloud是一个优质的开源项目,它的稳健发展离不开众多开发人员的实践与反馈,开发人员通过一个社区化的平台去交流学习从而使Spring Cloud逐渐完善。Spring Cloud发展到2016年,得到国内越来越多的人的关注,但是相应的学习交流平台和材料比较分散,这阻碍了Spring Cloud在我国的普及和发展。因此Spring Cloud中国社区应运而生。Spring Cloud中国社区(http://springcloud.cn)是国内首个基于Spring Cloud微服务体系创建的非盈利技术社区,也是国内首个致力于Spring Cloud微服务架构开放交流的社区,是专为Spring Boot或Spring Cloud技术人员提供分享和交流服务的平台,目的是推动Spring Cloud在中国的普及和应用。

为什么写这本书?

Spring Cloud中国社区自2016年创建以来,在北京、上海、深圳、成都等地举办了多次技术沙龙,帮助数万名开发者快速学习Spring Cloud并用于生产。为更好地推动Spring Cloud在中国的发展,让更多开发者受益,社区针对Spring Cloud在国内的使用情况,结合国内上百家企业使用Spring Cloud落地微服务架构时遇到的问题和相应的解决方案,特推出本书。

你适合本书吗?

如果你没听说过微服务,也没有听说过Spring Cloud,或者你正在学习或尝试使用Spring Cloud去落地微服务架构,那么这本书会非常适合你。因为本书更加偏实战,书中所讲是一套可落地的解决方案。不管你是初学者、开发人员还是架构师,只要你想使用Spring Cloud去落地微服务架构,就可以阅读并学习本书。

本书是如何组织的?

本书共25章,按照“核心组件→进阶实战→解决方案”的结构将内容从逻辑上划分为三个部分,具体如下:

第1~10章为核心组件部分,主要介绍Spring Cloud的核心组件。首先从应用架构的发展历程讲起,介绍了微服务出现的背景,并对微服务架构的落地提出了相应的解决方案。然后分别详细介绍了Spring Cloud微服务体系中的核心常用组件,如Eureka、Feign、Ribbon、Hystrix、Zuul等。最后通过一个综合案例将前面介绍的组件连接起来,帮助大家融会贯通。

第11~18章为进阶实战部分,在核心组件的基础上,对Config、Consul、认证和鉴权、全链路监控以及Spring Cloud生态圈中第二代网关Spring Cloud Gateway进行详细阐述,循序渐进、案例驱动,帮助读者加深对组件的理解,更好地掌握相关内容并运用于生产实践中。

第19~25章为解决方案部分,主要从解决方案着手,内容包括Spring Cloud与gRPC的整合方式、版本控制与灰度发布、Spring Cloud容器化、Dubbo向Spring Cloud的迁移、分布式事务、领域驱动等生产级实用解决方案,为企业IT架构微服务化和变革保驾护航。

本书源码及勘误

本书案例源码使用Java 8版本编写,并使用Maven来构建管理。关于JDK的安装、Maven的安装,以及集成开发环境IDE的安装,在这里不再阐述,请读者自行安装。本书的源码托管在GitHub上,具体地址是https://github.com/springcloud/spring-cloud-code.git。可以使用Git客户端管理工具,比如通过SourceTree直接复制仓库到本地,然后通过IDE直接导入。代码模块根据章节内容进行编号,如ch2-1,其中ch是chapter的简称,ch2代表第2章,ch2-1代表第2章的第一个聚合案例工程。

由于能力有限,书中难免有不妥之处,如果在学习中遇到问题或者发现Bug,可以加QQ(2508203324)或者发邮件到Software_King@qq.com与我们交流沟通。

致谢

我们代表Spring Cloud中国社区编写本书,我们想把本书送给每一位Spring Cloud技术爱好者,帮助大家快速掌握Spring Cloud的实战技巧并快速落地实践,为企业创造价值。

感谢与我一起写作的小伙伴们,大家能聚在一起写一本书也是一种缘分,大家的思维碰撞和交流,使本书变得更加完善,更加接地气,更具实战性。

感谢机械工业出版社华章公司的杨福川编辑与他的团队,他们在写作和审校过程中给予的帮助和支持,让我们能顺利地写完本书,跟大家见面。

感谢为本书评审的专家们,他们专业的态度和建议,为本书提供了宝贵的建议,尤其感谢Spring Cloud中国社区核心成员何鹰、刘石明、任浩军、任聪、李云龙等对Spring Cloud中国社区开源项目的贡献和支持。

感谢一直支持Spring Cloud中国社区发展的读者和亲朋好友们,感恩一路有你们,因为有你们的支持和陪伴,社区才能更好地发展,本书才能顺利完成。

最后我想说的是,我们7位作者并不是Spring Cloud微服务落地方面的架构专家,我们只是Spring Cloud微服务架构的实践者。我们只是想重新定义什么是真正意义上的Spring Cloud实战,并把我们自己的实践经验分享给大家,帮助大家解决学习和工作上遇到的问题。三人行,必有我师焉,由于我们学识有限,难免会有不足之处,还请读者不吝赐教,一起交流学习,共同进步。


许进





Contents  目录

专家推荐

序1

序2

序3

前言

第1章 微服务与Spring Cloud1

1.1 微服务架构概述1

1.1.1 应用架构的发展1

1.1.2 微服务架构3

1.1.3 微服务解决方案4

1.2 Spring Cloud与中间件5

1.2.1 中间件概述5

1.2.2 什么是Spring Cloud5

1.2.3 Spring Cloud项目模块5

1.2.4 Spring Cloud与服务治理中间件6

1.2.5 Spring Cloud与配置中心中间件6

1.2.6 Spring Cloud与网关中间件8

1.2.7 Spring Cloud与全链路监控中间件9

1.3 Spring Cloud增强生态10

1.3.1 Spring Cloud分布式事务10

1.3.2 Spring Cloud与领域驱动10

1.3.3 Spring Cloud与gRPC11

1.3.4 Spring Cloud与Dubbo生态融合11

1.4 本章小结11

第2章 Spring Cloud Eureka上篇12

2.1 服务发现概述12

2.1.1 服务发现由来12

2.1.2 Eureka简介14

2.1.3 服务发现技术选型15

2.2 Spring Cloud Eureka入门案例16

2.3 Eureka Server的REST API简介20

2.3.1 REST API列表20

2.3.2 REST API实例20

2.4 本章小结26

第3章 Spring Cloud Eureka下篇27

3.1 Eureka的核心类27

3.1.1 InstanceInfo27

3.1.2 LeaseInfo28

3.1.3 ServiceInstance29

3.1.4 InstanceStatus29

3.2 服务的核心操作30

3.2.1 概述30

3.2.2 LeaseManager30

3.2.3 LookupService31

3.3 Eureka的设计理念31

3.3.1 概述31

3.3.2 AP优于CP32

3.3.3 Peer to Peer架构33

3.3.4 Zone及Region设计34

3.3.5 SELF PRESERVATION设计36

3.4 Eureka参数调优及监控36

3.4.1 核心参数36

3.4.2 参数调优39

3.4.3 指标监控41

3.5 Eureka实战42

3.5.1 Eureka Server在线扩容42

3.5.2 构建Multi Zone Eureka Server47

3.5.3 支持Remote Region52

3.5.4 开启HTTP Basic认证58

3.5.5 启用https61

3.5.6 Eureka Admin66

3.5.7 基于metadata路由实例67

3.6 Eureka故障演练69

3.6.1 Eureka Server全部不可用69

3.6.2 Eureka Server部分不可用71

3.6.3 Eureka高可用原理73

3.7 本章小结74

第4章 Spring Cloud Feign的使用扩展75

4.1 Feign概述75

4.1.1 什么是Feign75

4.1.2 Feign的入门案例76

4.1.3 Feign的工作原理78

4.2 Feign的基础功能79

4.2.1 FeignClient注解剖析79

4.2.2 Feign开启GZIP压缩79

4.2.3 Feign支持属性文件配置80

4.2.4 Feign Client开启日志81

4.2.5 Feign的超时设置82

4.3 Feign的实战运用83

4.3.1 Feign默认Client的替换83

4.3.2 Feign的Post和Get的多参数传递86

4.3.3 Feign的文件上传90

4.3.4 解决Feign首次请求失败问题92

4.3.5 Feign返回图片流处理方式93

4.3.6 Feign调用传递Token93

4.4 venus-cloud-feign设计与使用94

4.4.1 venus-cloud-feign的设计94

4.4.2 venus-cloud-feign的使用96

4.5 本章小结98

第5章 Spring Cloud Ribbon实战运用99

5.1 Spring Cloud Ribbon概述99

5.1.1 Ribbon与负载均衡99

5.1.2 入门案例100

5.2 Spring Cloud Ribbon实战105

5.2.1 Ribbon负载均衡策略与自定义配置105

5.2.2 Ribbon超时与重试107

5.2.3 Ribbon的饥饿加载108

5.2.4 利用配置文件自定义Ribbon客户端108

5.2.5 Ribbon脱离Eureka的使用108

5.3 Spring Cloud Ribbon进阶109

5.3.1 核心工作原理109

5.3.2 负载均衡策略源码导读113

5.4 本章小结114

第6章 Spring Cloud Hystrix实战运用115

6.1 Spring Cloud Hystrix概述115

6.1.1 解决什么问题116

6.1.2 设计目标117

6.2 Spring Cloud Hystrix实战运用118

6.2.1 入门示例118

6.2.2 Feign中使用断路器120

6.2.3 Hystrix Dashboard121

6.2.4 Turbine聚合Hystrix124

6.2.5 Hystrix异常机制和处理126

6.2.6 Hystrix配置说明128

6.2.7 Hystrix线程调整和计算129

6.2.8 Hystrix请求缓存130

6.2.9 Hystrix Request Collapser134

6.2.10 Hystrix线程传递及并发策略137

6.2.11 Hystrix命令注解142

6.3 本章小结144

第7章 Spring Cloud Zuul基础篇145

7.1 Spring Cloud Zuul概述145

7.2 Spring Cloud Zuul入门案例146

7.3 Spring Cloud Zuul典型配置149

7.3.1 路由配置149

7.3.2 功能配置152

7.4 本章小结154

第8章 Spring Cloud Zuul中级篇155

8.1 Spring Cloud Zuul Filter链155

8.1.1 工作原理155

8.1.2 Zuul原生Filter158

8.1.3 多级业务处理160

8.1.4 使用Groovy编写Filter165

8.2 Spring Cloud Zuul权限集成168

8.2.1 应用权限概述168

8.2.2 Zuul+OAuth2.0+JWT实战169

8.3 Spring Cloud Zuul限流176

8.3.1 限流算法176

8.3.2 限流实战177

8.4 Spring Cloud Zuul动态路由179

8.4.1 动态路由概述179

8.4.2 动态路由实现原理剖析180

8.4.3 基于DB的动态路由实战182

8.5 Spring Cloud Zuul灰度发布185

8.5.1 灰度发布概述185

8.5.2 灰度发布实战之一186

8.6 Spring Cloud Zuul文件上传189

8.6.1 文件上传实战189

8.6.2 文件上传乱码解决191

8.7 Spring Cloud Zuul实用小技巧192

8.7.1 饥饿加载192

8.7.2 请求体修改192

8.7.3 使用okhttp替换HttpClient193

8.7.4 重试机制194

8.7.5 Header传递195

8.7.6 整合Swagger2调试源服务195

8.8 本章小结197

第9章 Spring Cloud Zuul高级篇198

9.1 Spring Cloud Zuul多层负载198

9.1.1 痛点场景198

9.1.2 解决方案198

9.2 Spring Cloud Zuul应用优化200

9.2.1 概述200

9.2.2 容器优化201

9.2.3 组件优化202

9.2.4 JVM参数优化203

9.2.5 内部优化204

9.3 Spring Cloud Zuul原理&核心源码解析205

9.3.1 工作原理与生命周期205

9.3.2 Filter装载与Filter链实现208

9.3.3 核心路由实现210

9.4 本章小结213

第10章 Spring Cloud基础综合案例214

10.1 基础框架214

10.1.1 搭建说明214

10.1.2 技术方案214

10.1.3 具体实现215

10.2 实战扩展217

10.2.1 公共包 (对象,拦截器,工具类等)218

10.2.2 用户上下文对象传递218

10.2.3 Zuul的Fallback机制221

10.3 生产环境各组件参考配置222

10.3.1 Eureka推荐配置222

10.3.2 Ribbon推荐配置223

10.3.3 Hystrix推荐配置223

10.3.4 Zuul推荐配置223

10.4 本章小结224

第11章 Spring Cloud Config上篇225

11.1 Spring Cloud Config配置中心概述225

11.1.1 什么是配置中心225

11.1.2 Spring Cloud Config227

11.1.3 Spring Cloud Config入门案例228

11.2 刷新配置中心信息234

11.2.1 手动刷新操作234

11.2.2 结合Spring Cloud Bus热刷新237

11.3 本章小结244

第12章 Spring Cloud Config下篇245

12.1 服务端Git配置详解与实战245

12.1.1 Git多种配置详解概述245

12.1.2 Git中URI占位符245

12.1.3 模式匹配和多个存储库250

12.1.4 路径搜索占位符251

12.2 关系型数据库的配置中心的实现251

12.2.1 Spring Cloud Config基于MySQL的配置概述251

12.2.2 Spring Cloud Config与MySQL结合案例252

12.3 非关系型数据库的配置中心的实现255

12.3.1 Spring Cloud Config基于MongoDB的配置概述255

12.3.2 Spring Cloud Config MongoDB案例256

12.4 Spring Cloud Config使用技能259

12.5 Spring Cloud Config功能扩展260

12.5.1 客户端自动刷新260

12.5.2 客户端回退功能264

12.5.3 客户端的安全认证机制JWT270

12.6 高可用部分285

12.6.1 客户端高可用285

12.6.2 服务端高可用293

12.7 Spring Cloud与Apollo配置使用300

12.7.1 Apollo简介300

12.7.2 Apollo具备功能300

12.7.3 Apollo总体架构模块300

12.7.4 客户端设计301

12.7.5 Apollo运行环境方式302

12.8 Spring Cloud与Apollo结合使用实战303

12.8.1 Apollo环境的要求303

12.8.2 Apollo基础数据导入303

12.8.3 创建config-client-apollo307

12.8.4 创建gateway-zuul-apollo310

12.9 本章总结316

第13章 Spring Cloud Consul上篇317

13.1 Consul简介317

13.1.1 什么是Consul317

13.1.2 Consul能做什么317

13.1.3 Consul的安装318

13.1.4 Consul启动318

13.1.5 Consul UI319

13.1.6 Consul实用接口319

13.2 Spring Cloud Consul简介319

13.2.1 Spring Cloud Consul是什么319

13.2.2 Spring Cloud Consul能做什么320

13.2.3 Spring Cloud Consul入门案例320

13.3 本章小节324

第14章 Spring Cloud Consul下篇325

14.1 Spring Cloud Consul深入325

14.1.1 Spring Cloud Consul的模块介绍325

14.1.2 Spring Cloud Consul Discovery325

14.1.3 Spring Cloud Consul Config332

14.2 Spring Cloud Consul功能重写335

14.2.1 重写ConsulDiscoveryClient335

14.2.2 重写ConsulServerList338

14.3 常见问题排查343

14.3.1 版本兼容的那些坑343

14.3.2 Spring Cloud Consul的一些问题344

14.4 本章小节346

第15章 Spring Cloud认证和鉴权347

15.1 微服务安全与权限347

15.2 Spring Cloud认证与鉴权方案348

15.2.1 单体应用下的常用方案348

15.2.2 微服务下SSO单点登录方案348

15.2.3 分布式Session与网关结合方案349

15.2.4 客户端Token与网关结合方案349

15.2.5 浏览器Cookie与网关结合方案350

15.2.6 网关与Token和服务间鉴权结合350

15.3 Spring Cloud认证鉴权实战案例351

15.3.1 创建Spring Cloud Gateway及关联信息351

15.3.2 核心的公共工程core-service353

15.3.3 服务提供方工程provider-service355

15.3.4 客户端工程client-service356

15.3.5 运行结果356

15.4 本章小结358

第16章Spring Cloud全链路监控359

16.1 全链路监控概述359

16.1.1 链路监控的原理来源359

16.1.2 Sleuth原理介绍360

16.1.3 Brave和Zipkin360

16.2 Sleuth基本用法362

16.2.1 Sleuth对Feign的支持365

16.2.2 Sleuth对RestTemplate的支持366

16.2.3 Sleuth对多线程的支持367

16.3 Sleuth深入用法367

16.3.1 TraceFilter367

16.3.2 Baggage367

16.3.3 案例367

16.4 Spring Cloud与SkyWalking369

16.4.1 Skywalking概述369

16.4.2 SkyWalking提供主要功能370

16.4.3 SkyWalking主要特性370

16.4.4 SkyWalking整体架构370

16.5 Spring Cloud与Skywalking实战370

16.5.1 父工程创建371

16.5.2 创建eureka-server-skywalking工程372

16.5.3 创建zuul-skywalking373

16.5.4 创建service-a375

16.5.5 创建service-b377

16.5.6 SkyWalking Collector基础环境安装378

16.5.7 使用Agent启动服务和监控查看382

16.5.8 总结385

16.6 Spring Cloud与Pinpoint386

16.6.1 Pinpoint概述386

16.6.2 Pinpoint架构模块386

16.6.3 Pinpoint的数据结构386

16.6.4 Pinpoint兼容性387

16.7 Spring Cloud与Pinpoint实战389

16.7.1 Pinpoint基础环境389

16.7.2 Collector和Web部署391

16.7.3 Agent启动应用392

16.7.4 UI浏览指标394

16.7.5 总结397

16.8 本章总结398

第17章Spring Cloud Gateway上篇399

17.1 Spring Cloud Gateway概述399

17.1.1 什么是Spring Cloud Gateway399

17.1.2 Spring Cloud Gateway的核心概念399

17.2 Spring Cloud Gateway的工作原理400

17.3 Spring Cloud Gateway入门案例401

17.4 Spring Cloud Gateway的路由断言404

17.4.1 After路由断言工厂404

17.4.2 Before路由断言工厂406

17.4.3 Between路由断言工厂406

17.4.4 Cookie路由断言工厂407

17.4.5 Header路由断言工厂408

17.4.6 Host路由断言工厂410

17.4.7 Method路由断言工厂411

17.4.8 Query路由断言工厂411

17.4.9 RemoteAddr路由断言工厂412

17.5 Spring Cloud Gateway的内置Filter413

17.5.1 AddRequestHeader过滤器工厂413

17.5.2 AddRequestParameter过滤器413

17.5.3 RewritePath过滤器414

17.5.4 AddResponseHeader过滤器415

17.5.5 StripPrefix过滤器416

17.5.6 Retry过滤器417

17.5.7 Hystrix过滤器418

17.6 本章小结420

第18章 Spring Cloud Gateway下篇421

18.1 Gateway基于服务发现的路由规则421

18.1.1 Gateway的服务发现路由概述421

18.1.2 服务发现的路由规则案例422

18.2 Gateway Filter和Global Filter425

18.2.1 Gateway Filter和Global Filter概述425

18.2.2 自定义Gateway Filter案例425

18.2.3 自定义Global Filter案例427

18.3 Spring Cloud Gateway实战428

18.3.1 Spring Cloud Gateway权重路由428

18.3.2 Spring Cloud Gateway中Https的使用技巧431

18.3.3 Spring Cloud Gateway集成Swagger436

18.3.4 Spring Cloud Gateway限流442

18.3.5 Spring Cloud Gateway的动态路由450

18.4 Spring Cloud Gateway源码篇458

18.4.1 Spring Cloud Gateway的处理流程458

18.4.2 Gateway中ServerWebExchange构建分析459

18.4.3 DispatcherHandler源码分析460

18.4.4 RoutePredicateHandlerMapping源码分析461

18.4.5 FilteringWebHandler源码分析462

18.4.6 执行Filter源码分析463

18.5 本章小结465

第19章 Spring Cloud与gRPC上篇466

19.1 Spring Cloud为什么需要gRPC466

19.2 gRPC简介468

19.3 gRPC的一些核心概念469

19.3.1 服务定义469

19.3.2 使用API470

19.3.3 同步vs异步470

19.4 RPC的生命周期470

19.5 gRPC依赖于Protocol Buffers472

19.5.1 Protocol Buffers的特点472

19.5.2 使用Protocol Buffers的Maven插件472

19.5.3 Proto Buffer语法介绍475

19.6 gRPC基于HTTP2476

19.7 gRPC基于Netty进行IO处理477

19.8 gRPC案例实战478

19.9 本章小结481

第20章gRPC在Spring Cloud与gRPC下篇482

20.1 gRPC Spring Boot Starter介绍482

20.2 gRPC Spring Boot Starter架构设计482

20.3 gRPC Spring Boot Starter源码分析 483

20.3.1 gRPC Server Spring Boot Starter源码解析483

20.3.2 gRPC Client Spring Boot Starter源码解析486

20.4 案例实战489

20.4.1 注册中心489

20.4.2 链路追踪服务端490

20.4.3 gRPC的lib工程490

20.4.4 gRPC服务端491

20.4.5 gRPC客户端494

20.5 本章小结497

第21章 Spring Cloud版本控制与灰度发布498

21.1 背景498

21.2 常见发布方式499

21.2.1 蓝绿发布499

21.2.2 滚动发布500

21.2.3 灰度发布500

21.2.4 对比501

21.3 版本控制与灰度发布实战502

21.3.1 Discovery项目503

21.3.2 实战案例504

21.3.3 实战测试505

21.4 本章小结509

第22章 Spring Cloud容器化510

22.1 Java服务Docker化510

22.1.1 基础镜像选择510

22.1.2 Dockerfile编写511

22.1.3 镜像构建插件514

22.1.4 JDK8+的Docker支持516

22.1.5 JDK9+镜像优化517

22.2 Spring Cloud组件的Docker化519

22.2.1 Docker化配置519

22.2.2 config-server的Docker化520

22.2.3 eureka-server的Docker化522

22.2.4 gateway的Docker化524

22.2.5 turbine的Docker化526

22.2.6 Spring Admin的Docker化528

22.2.7 biz-service的Docker化530

22.2.8 网卡选择532

22.2.9 小结 532

22.3 使用Kubernetes管理532

22.3.1 概述532

22.3.2 本地安装Kubernetes533

22.3.3 部署到Kubernetes536

22.3.4 一键伸缩544

22.3.5 滚动升级547

22.4 本章小结552

第23章 Dubbo向Spring Cloud迁移553

23.1 将Dubbo服务纳入Spring Cloud体系中553

23.1.1 将Dubbo项目改造成Spring Boot项目553

23.1.2 集成Spring Cloud组件554

23.1.3 将Dubbo服务暴露为RESTful API555

23.2 将Spring Cloud服务Dubbo化556

23.2.1 服务注册中心556

23.2.2 服务提供者556

23.2.3 服务消费者558

23.2.4 Spring Cloud Dubbo框架原理561

23.3 本章小结562

第24章 Spring Cloud与分布式事务563

24.1 概述563

24.1.1 ACID563

24.1.2 X/Open DTP模型与XA接口564

24.1.3 CAP与BASE定理567

24.2 解决方案567

24.2.1 Java事务编程接口JTA567

24.2.2 分布式事务TCC模式568

24.2.3 分布式事务SAGA模式570

24.3 实战572

24.3.1 Atomikos JTA572

24.3.2 TCC for REST580

24.3.3 Servicecomb SAGA594

24.4 本章小结603

第25章 Spring Cloud与领域驱动实践604

25.1 领域驱动概述604

25.1.1 Spring Cloud与领域驱动604

25.1.2 为什么需要领域建模605

25.2 领域驱动核心概念606

25.2.1 实体概述606

25.2.2 值对象概述606

25.2.3 领域服务607

25.2.4 聚合及聚合根607

25.2.5 边界上下文608

25.2.6 工厂609

25.2.7 仓储/资源库609

25.2.8 CQRS架构610

25.2.9 领域事件610

25.2.10 领域驱动模型的设计步骤611

25.3 Halo框架的设计611

25.3.1 DDD应用框架的意义611

25.3.2 领域驱动框架现状612

25.3.3 Halo框架概述612

25.3.4 Halo框架分层设计613

25.3.5 Halo框架中的CQRS设计615

25.3.6 Command与Command Bus设计616

25.3.7 Event与Event Bus设计619

25.3.8 Extend扩展点设计621

25.3.9 业务身份设计623

25.3.10 规范设计624

25.4 Spring Cloud与Halo实战625

25.4.1 事件风暴寻找模型和聚合625

25.4.2 Spring Cloud与Halo实战案例626

25.4.3 新建二方包工程模块627

25.4.4 新建DDD基础设施层629

25.4.5 新建DDD领域层 630

25.4.6 新建DDD应用层 632

25.4.7 启动测试634

25.5 本章小结634


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。