首页>参考读物>计算机科学与技术>软件与程序设计

Spring Cloud微服务架构开发实战
作者 : 董超 胡炽维 编著
出版日期 : 2018-08-02
ISBN : 978-7-111-60452-5
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 332
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书首先从微服务架构兴起的背景讲起,探讨了为何在分布式系统开发中微服务架构将逐渐取代单体架构;然后对Spring Cloud所提供的微服务组件及解决方案进行了一一讲解,从而让读者不但可以系统地学习Spring Cloud的相关知识,而且还可以全面掌握微服务架构应用的设计、开发、部署和运维等知识。
本书共11章,分为三大部分:第1部分为微服务开发基础——Spring Boot框架及使用;第2部分为Spring Cloud组件实战;第3部分为微服务与Docker容器技术。
本书适合作为Spring Cloud的入门读物,也适合致力于互联网开发和Java开发的进阶读者阅读。如果你对微服务架构有兴趣,或者是公司运维人员本书也非常适合你。此外,本书也可作为相关培训机构作为教材使用。

图书前言

  2014年3月,Martin Fowler在其博客上发表了Microservices(微服务)一文,对过去几年逐渐开始流行的微服务架构开发模式给出了正式的定义。同年,Netflix OSS将自己多年来在实际开发中所使用的微服务基础组件开源。随后,Pivotal在Netflix OSS的基础上对这些组件进行了封装和集成,推出了Spring Cloud。到如今,微服务架构已逐渐普及,在技术生态上也得到了不断完善和更新,其在容器、应用框架、发布管理及监控等方面都有了长足进步。微服务在日常开发中也崭露头角,逐渐得到了开发者的认同。与此同时,Spring Cloud在过去几年中快速发展,不断迭代和更新,已经形成了微服务开发“全家桶”式的解决方案,逐渐在微服务开发领域奠定了坚实的基础。
  当我第一次接触微服务的概念时,以为这又是一个“新瓶装旧酒”的把戏。就像当年一些大公司为解决分布式大型应用所提出的COBRA、EJB、DCOM和ESB等概念一样难以使用,它们甚至还没有来得及等用户完全掌握就退出了历史的舞台。当我再次注意到微服务时,是因为Spring Cloud的推出。在大致阅读了相关文档之后顺便“跑”了一下示例项目,我就被其深深吸引了。正是这次接触,使我改变了对微服务的看法。正巧接下来的一段时间,公司内部正在做架构调整,也发现了微服务有其可用之处,所以便在架构调整中引入了Spring Cloud,并最终在项目中取得了不错的效果。这加深了我对微服务的好感,所以后续对Spring Cloud进行了更加深入和系统的学习与研究。
  不过话又说回来,虽然公司的第一次微服务架构实践取得了不错的效果,但在实践中也出现了很多问题。感受最深的是,微服务架构不再仅仅是编写代码。单体架构应用开发,一般在完成代码编写之后部署上线就可以了。但在微服务架构下,项目的部署和运维等都面临着新的考验。幸好,Spring Cloud本身提供了一系列开箱即用的功能,可以帮助开发人员降低微服务实践的难度。
  这两年,图书市场上虽然已经有了一些与微服务相关的图书,但却鲜见一本比较系统、实用,能够真正解决开发人员实际问题的微服务架构图书。基于此原因,我下定决心写一本书,通过讲解Spring Cloud为微服务开发所提供的核心组件,带领读者进入微服务开发的世界,并将Spring Cloud中涉及的微服务核心解决方案及微服务模式通过示例的方式一一呈现给读者,以期解决开发人员的实际问题。
本书特色
* 本书内容丰富,不仅涵盖了Spring Cloud的核心组件,而且还介绍了如何通过Spring Boot来搭建微服务,并介绍了Kafka、ELK和Redis等流行技术。
* 书中对微服务架构中的“痛点”,比如安全和消息应用等,都有非常详细的讲解,可以让读者快速掌握如何通过OAuth 2.0和JWT构建单点登录安全解决方案。另外,本书还详细介绍了如何使用Kafka和Redis构建基于消息驱动的应用。
* 本书在讲解时给出了大量的开发示例,这些示例通俗易懂,且易于构建、运行和测试,能够让读者在学习微服务架构时快速进入实战,从而对Spring Cloud所提供的组件有直观认知。
* 本书通过实例来讲解微服务自动化部署解决方案,可以让读者不仅能够掌握微服务开发的知识,还可以学习微服务部署和运维的知识,从而全面理解微服务架构之道。
本书内容
  本书共11章,分为3篇。书中首先从开发微服务所使用的基础框架Spring Boot开始讲起,然后重点讲述了Spring Cloud中的核心组件,最后介绍了微服务部署的相关技术。
  第1篇 微服务开发基础——Spring Boot框架及使用(第1、2章)
  第1章介绍了微服务架构开发的基础概念,并对比传统单体架构开发,总结了微服务架构的优缺点,以及如何将传统的应用拆分和迁移到微服务架构体系下,并列出了微服务架构的开发原则。
  第2章讲述了微服务架构开发的基础——Spring Boot,并通过Spring Boot技术构建了贯穿本书的一个项目案例——电子商城的单体应用案例。通过对该项目案例的构建,讲解了开发时需要的基础知识,如RestController、JPA和API文档自动生成等技术。此外,本章还讲解了Spring Boot的一些特性,如自动配置机制和扩展机制等,这些特性在应用开发中都非常有用。
  第2篇 Spring Cloud组件实战(第3~10章)
  第3章探讨了微服务架构开发需要关心的关键特性及业界的解决方案,并给出了Spring Cloud子项目。本章的最后一节给出了Hello World经典示例程序,读者可以感受一下通过Spring Cloud构建微服务的威力。
  第4章介绍了微服务架构最重要的一个服务支持组件:服务治理(Eureka)。通过介绍Eureka服务治理,可以让读者了解服务提供者如何将微服务注册到服务治理服务器中,以及服务消费者如何通过服务治理服务器来调用服务。在服务治理技术的基础上,本章还讲解了客户端负载均衡的实现方式及如何通过Feign实现声明式服务调用。
  第5章讲解了当微服务远程调用失败时如何启动服务应急预案——服务降级处理(Hystrix)。通过服务降级处理可以避免因调用失败而引起的“雪崩效应”。本章首先讲解了如何使用Spring Cloud Hystrix实现服务降级处理;然后对Hystrix执行流程及相应的“断路器”模式进行了详细分析,并给出了实施服务降级处理时可以参考的模式;最后引入了可视化分析监控,对微服务中各个服务及相应的方法进行统计分析。
  第6章讲述了如何通过Spring Cloud所提供的Zuul组件来实现API服务网关。通过API服务网关可以对后端具体实现细节进行隐藏,并且能够简化前端的调用。本章详细讲述了Zuul所提供的路由映射和请求过滤两个功能,并对路由映射规则进行了详细讲解。对于Zuul的请求过滤功能,重点讲述了过滤流程和几种标准的过滤器用法。通过这些过滤器,可以在API服务网关中统一实现用户身份验证、业务权限鉴权、流量与并发控制等处理,从而避免在每个微服务中重复实现这些处理。
  第7介绍了如何将前面章节中的项目案例的配置统一迁移到配置资源库中进行管理,并通过Spring Cloud Config实现配置文件的加载和管理,从而实现在项目中不需要重复编写配置文件。本章还结合Git讲述了如何让配置文件具有版本管理的功能,以及如何对项目中的敏感配置信息进行加密和解密,并施行配置文件的动态刷新。
  第8章介绍了微服务架构中比较让人头疼的一个问题:服务链路跟踪解决方案(Sleuth)。通过在项目中嵌入Sleuth,可以一次性将用户服务请求所调用的所有微服务串联起来,从而掌握微服务之间的关系。本章剖析了Sleuth的基础原理,并通过Zipkin服务器对服务调用链路进行了可视化分析,然后在此基础上讲述了如何与ELK整合,从而将微服务日志集中在一起,避免了当排查问题时需要跨越多个服务器进行查看的弊端。
  第9章介绍了如何在微服务之间实施面向消息驱动的开发(MoM),并基于一个翔实的例子讲述了消息的构建、发送和消费的整个流程。本章通过Spring Cloud的Stream项目实现了与Kafka消息中间件的对接,并讲解了如何使用“发布-订阅”模式。本章最后通过Spring Cloud基于Stream之上所提供的另外一个项目——Bus,实现了Config的自动刷新处理。
  第10章讲述了微服务安全的相关内容。本章首先介绍了Spring提供的Spring Security框架;然后根据微服务架构的特点,介绍了如何基于Spring Cloud Security来实现OAuth 2.0协议的用户单点登录功能;最后再进一步将安全服务器所生成的用户访问令牌转换成JWT格式的令牌,从而让每一个微服务可以避免多次与认证服务器之间进行交互,提升了微服务架构应用的弹性和效率。
  第3篇 微服务与Docker容器技术(第11章)
  第11章首先介绍了微服务部署所需要的基础知识——Docker,读者掌握了有关Docker的知识后,便能够将编写的微服务部署到Docker容器中;然后介绍了如何使用自动构建部署工具——Jenkins,通过配置Jenkins的构建任务,可以实现对微服务源码变更的监控并进行自动发布,从而将开发者从重复、乏味的编译、打包部署中解放出来;最后简要介绍了微服务的集群管理和编排。
本书源代码获取方式
  本书涉及的所有源代码文件都可以从https://github.com/cd826/springcloud-demo网站上下载。这些源代码按照书中的章节进行组织,并在源代码的README.md文件中给出了说明。如果某个章节中有多个不同的示例需要拆分成不同的项目,为了方便读者使用,将其分成了多个文件夹,而且在每一个文件夹中都包含了该示例所需要的全部工程代码。这些代码都可以使用Maven组织管理,并且可以在IDE之间使用根文件夹中的pom.xml导入整个工程,从而对示例代码进行编译、打包和测试,而不需要一个个地导入。
  另外,书中涉及的所有源代码文件还可以在机械工业出版社华章分社的网站www.hzbook.com上获取。请在该网站上搜索到本书,然后找到资料下载模块即可下载。
  书中涉及的所有示例代码均在JDK 1.8和Maven 3.3.9版本下测试通过。如果读者在编译时产生错误,需要仔细检查一下部分注释掉的配置和代码。因为这些被注释掉的配置和代码可能是为了配合书中演示的某些功能而被注释掉的。
  此外,书中用到的工具和相关服务器环境等都可以在其官网上下载,读者可自行下载,本书源码中并不包含这些内容。
本书适合哪些读者阅读
o 如果你是一名Java程序员,并且打算构建分布式系统,那么本书适合你阅读;
o 如果你对微服务开发非常有兴趣,那么本书适合你阅读;
o 如果你对使用Spring Cloud开发云原生应用非常感兴趣,那么本书适合你阅读;
o 如果你正打算开发一款互联网应用产品,那么本书适合你阅读;
o 如果你想知道Spring Cloud中各子项目在微服务中的角色及位置,那么本书适合你阅读;
o 如果你想了解基于微服务架构的开发对运维和部署的影响,那么本书适合你阅读;
o 如果你是Spring技术的狂热分子,那么本书非常适合你阅读。
售后服务
  读者阅读本书时若有疑问,或者有好的建议可以反馈给笔者或编辑,我们会抽空回复。
  由于作者的水平所限,加之时间有限,书中可能还存在一些疏漏和不当之处,也敬请各位读者斧正。
  联系我们请发电子邮件到hzbook2017@163.com。
  
  董超

上架指导

计算机\程序设计

封底文字

本书首先从微服务架构兴起的背景讲起,探讨了为何在分布式系统开发中微服务架构将逐渐取代单体架构,然后对Spring Cloud所提供的微服务组件及解决方案进行了一一讲解,从而让读者不但可以系统地学习Spring Cloud的相关知识,而且还可以全面掌握微服务架构应用的设计、开发、部署和运维等知识。
本书共11章,分为3篇。第1篇为微服务开发基础——Spring Boot框架及使用;第2篇为Spring Cloud组件实战;第3篇为微服务与Docker容器技术。其中第2篇为全书的核心内容,涵盖了构建微服务架构所需要的服务治理(Eureka)、客户端负载均衡(Ribbon)、微服务容错与降级处理(Hystrix)、微服务API统一网关(Zuul)、分布式配置中心(Config)、微服务调用链追踪(Sleuth)、微服务消息驱动开发(Stream)及微服务安全(OAuth及JWT)等组件的相关知识。
本书内容通俗易懂,每章都结合实例进行讲解,特别适合作为Spring Cloud的入门读物,也适合致力于互联网开发和Java开发的进阶读者阅读。如果你是公司运维人员,或者对微服务架构有兴趣,本书也非常适合你阅读。此外,本书也可以作为相关培训机构的教材使用。

图书目录

前言
第1篇 微服务开发基础——Spring Boot框架及使用
第1章 微服务架构开发 2
1.1 单体架构应用的困境 2
1.2 微服务架构 3
1.2.1 如何定义微服务架构 4
1.2.2 微服务架构的优点 5
1.2.3 微服务架构的缺点 6
1.3 微服务架构设计 7
1.3.1 微服务粒度 7
1.3.2 微服务拆分原则 8
1.3.3 微服务自治原则 9
1.3.4 微服务交互原则 10
1.3.5 微服务架构迁移 10
1.4 不应使用微服务架构的情形 11
第2章 微服务基础——Spring Boot 12
2.1 Spring与Spring Boot 12
2.2 快速启动Spring Boot 13
2.2.1 编写pom.xml文件 14
2.2.2 编写应用引导类 16
2.2.3 编写配置文件 17
2.2.4 运行项目 17
2.3 使用Spring Boot构建示例项目 19
2.3.1 经典三层应用架构 19
2.3.2 设计领域对象 20
2.3.3 实现数据管理 23
2.3.4 编写业务逻辑层 29
2.3.5 编写RESTful API 31
2.3.6 数据库初始化 35
2.3.7 启动测试 36
2.4 Spring Boot特性 37
2.4.1 Spring Boot自动配置机制 37
2.4.2 Spring Boot扩展属性配置 38
2.4.3 Spring Boot日志配置 39
2.5 关于敏捷开发 40
2.6 关于RESTful API设计 41
2.6.1 以资源为中心进行URL设计 42
2.6.2 正确使用HTTP方法及状态码 42
2.6.3 查询及分页处理原则 43
2.6.4 其他指导原则 43
第2篇 Spring Cloud组件实战
第3章 Spring Cloud简介 46
3.1 微服务架构的核心关键点 46
3.2 Spring Cloud技术概览 49
3.2.1 Spring Cloud子项目 50
3.2.2 为何选择Spring Cloud 53
3.3 Spring Cloud版Hello World示例 54
第4章 服务治理与负载均衡 58
4.1 什么是服务治理 58
4.2 构建服务治理——Eureka 59
4.2.1 搭建微服务Parent工程 60
4.2.2 搭建服务治理服务器——Eureka服务器 62
4.2.3 搭建服务提供者——注册服务 64
4.2.4 搭建服务消费者——获取服务 68
4.3 使用客户端负载均衡——Ribbon 72
4.3.1 什么是客户端负载均衡 72
4.3.2 启用Ribbon 74
4.3.3 负载均衡测试 75
4.4 使用Feign简化微服务调用 77
4.5 深入Eureka 80
4.5.1 服务注册及相关原理 80
4.5.2 Eureka自我保护模式 82
4.5.3 注册一个服务实例需要的时间 84
4.5.4 Eureka高可用集群及示例 84
4.5.5 多网卡及IP指定 88
4.5.6 Eureka服务访问安全 89
4.6 深入Ribbon 90
4.6.1 Ribbon客户端负载均衡原理 90
4.6.2 Ribbon负载均衡策略及配置 92
4.6.3 直接使用Ribbon API 94
4.7 深入Feign 96
4.7.1 Feign的参数绑定 96
4.7.2 Feign中的继承 97
4.7.3 Feign与Swagger的冲突 98
4.8 微服务健康监控 99
4.9 异构服务解决方案——Sidecar 101
第5章 微服务容错保护——Hystrix 102
5.1 什么是微服务容错保护 102
5.2 快速启动Hystrix 103
5.2.1 引入Hystrix依赖 104
5.2.2 开启Hystrix支持 104
5.2.3 修改UserService实现 104
5.2.4 容错测试 105
5.2.5 服务降级的两种实现方式 107
5.2.6 在Feign中使用Hystrix回退 109
5.3 Hystrix容错机制分析 110
5.3.1 Hystrix整体处理流程 111
5.3.2 HystrixCommand与HystrixObservableCommand 113
5.3.3 断路器原理分析 115
5.3.4 Hystrix异常——HystrixBadRequestException 117
5.4 服务隔离 117
5.4.1 线程池隔离与信号量隔离 118
5.4.2 服务隔离的颗粒度 119
5.4.3 服务隔离配置 119
5.4.4 小结 120
5.5 服务降级模式 121
5.5.1 快速失败 121
5.5.2 静默失败 121
5.5.3 返回默认值 122
5.5.4 返回组装的值 122
5.5.5 返回远程缓存 123
5.5.6 主/从降级模式 124
5.6 请求缓存 127
5.7 请求合并 128
5.8 Hystrix监控 130
5.8.1 Hystrix仪表盘 131
5.8.2 Turbine仪表盘集群监控 133
5.8.3 Turbine与消息服务器集成 136
第6章 API服务网关——Zuul 137
6.1 API服务网关 138
6.2 Spring Cloud与Netflix Zuul 139
6.3 启用Zuul路由服务 140
6.3.1 构建Zuul路由服务器 141
6.3.2 路由测试 142
6.3.3 负载均衡测试 144
6.3.4 Hystrix容错与监控测试 146
6.4 路由配置规则 146
6.4.1 服务路由默认规则 147
6.4.2 自定义微服务访问路径 148
6.4.3 忽略指定微服务 149
6.4.4 设置路由前缀 149
6.4.5 通过静态URL路径配置路由映射 150
6.4.6 路由配置顺序 151
6.4.7 自定义路由规则 151
6.5 Zuul路由其他设置 151
6.5.1 Header设置 152
6.5.2 HttpClient配置 153
6.5.3 路由配置的动态加载 153
6.6 Zuul容错与回退 153
6.6.1 实现Zuul的回退 154
6.6.2 服务超时 156
6.7 Zuul过滤器 157
6.7.1 过滤器特性 158
6.7.2 过滤器类型及生命周期 159
6.7.3 自定义Zuul过滤器 160
6.7.4 禁用Zuul过滤器 161
6.7.5 关于Error过滤器的一点补充 162
6.8 @EnableZuulServer与@EnableZuulProxy比较 164
6.8.1 EnableZuulServer注解的过滤器 164
6.8.2 EnableZuulProxy注解的过滤器 165
第7章 统一配置中心——Config 166
7.1 Spring Cloud Config简介 166
7.2 快速启动 168
7.2.1 构建配置服务器 168
7.2.2 创建应用配置文件 169
7.2.3 升级微服务配置 172
7.2.4 启动测试 173
7.2.5 @Value注解 174
7.2.6 关于配置服务的默认配置 174
7.2.7 Spring配置加载顺序 175
7.3 配置资源库 176
7.3.1 配置资源规则详解 176
7.3.2 集成Git仓库 177
7.3.3 搜索目录 179
7.3.4 本地缓存 179
7.3.5 Git访问配置 180
7.3.6 集成SVN 180
7.3.7 使用文件系统 181
7.4 配置的加密与解密 181
7.4.1 安装JCE(Java Cryptography Extension) 181
7.4.2 使用对称加密 182
7.4.3 加密/解密端点 183
7.4.4 客户端解密 185
7.4.5 非对称加密 187
7.5 配置服务器访问安全 187
7.6 配置服务器的高可用 188
7.6.1 整合Eureka 188
7.6.2 快速失败与响应 189
7.6.3 动态刷新配置 191
第8章 分布式服务跟踪——Sleuth 192
8.1 Spring Cloud Sleuth简介 192
8.1.1 快速启用Sleuth 193
8.1.2 Sleuth与日志框架 196
8.1.3 有关Span 199
8.2 Sleuth与ELK整合 202
8.2.1 将日志输出到Logstash 202
8.2.2 Logstash与Log4j的集成 205
8.3 整合Zipkin服务 206
8.3.1 构建Zipkin服务器 206
8.3.2 整合微服务 208
8.3.3 Zipkin分析 208
8.3.4 输出TraceId 211
8.4 Sleuth抽样采集与采样率 213
第9章 消息驱动——Stream 215
9.1 什么是消息驱动开发 215
9.1.1 基于消息中间件开发的优点 216
9.1.2 基于消息中间件开发的缺点 217
9.2 Spring Cloud Stream简介 218
9.2.1 应用模型 218
9.2.2 编程模型 220
9.2.3 使用“发布-订阅”模式 223
9.3 Kafka使用指南 224
9.3.1 Kafka基础知识 224
9.3.2 搭建Kafka环境 226
9.4 使用消息对应用重构 228
9.4.1 为商品服务增加缓存功能 229
9.4.2 为用户微服务添加消息发送功能 235
9.4.3 为商品微服务添加消息监听功能 239
9.4.4 测试 242
9.4.5 自定义消息通道 245
9.5 Spring Cloud Stream高级主题 246
9.5.1 单元测试 246
9.5.2 错误处理 247
9.5.3 消息处理分发 248
9.5.4 消费者组与消息分区 249
9.5.5 消息绑定器 250
9.6 消息总线——Spring Cloud Bus 252
9.6.1 完成配置自动刷新配置 252
9.6.2 发布自定义事件 256
第10章 微服务应用安全——Security 258
10.1 Spring Boot的应用安全 258
10.1.1 实现用户认证 258
10.1.2 实现用户鉴权 261
10.2 微服务安全 263
10.3 基于OAuth 2.0的认证 265
10.3.1 OAuth 2.0授权流程 265
10.3.2 客户端授权模式 266
10.3.3 使用OAuth 2.0完成用户认证及授权 268
10.3.4 整合API网关服务 274
10.4 基于JWT的认证 275
10.4.1 改造认证服务支持输出JWT 276
10.4.2 在Zuul中对JWT进行解析 281
10.4.3 改造商品微服务 282
第3篇 微服务与Docker容器技术
第11章 微服务与Docker 288
11.1 Docker简介 288
11.2 Docker的使用 289
11.2.1 安装 290
11.2.2 镜像 293
11.2.3 容器 298
11.2.4 容器实战:MySQL 299
11.3 Docker与Spring Cloud微服务 301
11.3.1 部署Eureka服务 302
11.3.2 部署应用微服务 304
11.4 微服务与Jenkins 305
11.4.1 安装Jenkins 306
11.4.2 Jenkins配置 307
11.4.3 构建任务 309
11.5 微服务编排 315

教学资源推荐
作者: [美] 陆永祥(Yung-Hsiang Lu) 著
作者: (美)Barry Wilkinson, Michael Allen
作者: [美] 丹尼尔·卡斯沃姆(Daniel Kusswurm) 著
参考读物推荐
作者: 王国辉 陈英 等编著
作者: 黄靖钧 编著
作者: [美] 莱斯利·兰伯特(Leslie Lamport) 著
作者: David Medinets