前言
作为Java语言的落地微服务框架,Spring Cloud已经在各大企业普遍应用,各大云厂商也支持Spring Cloud微服务框架的云产品。可以说,Spring Cloud微服务框架已经应用到了各大行业之中,并成为Java开发者的必备技能之一,熟练掌握Spring Cloud是面试者的加分项。
Spring Cloud由Spring Cloud社区维护,并且在Pivatol和Netflix两大公司的推动下飞速发展。随着Eureka的闭源,虽然Netflix OSS等组件进入维护期,不再提供新功能,但Spring Cloud微服务框架并没有受到显著影响,而是被越来越多的企业和开发者所接受。阿里巴巴推出的Nacos和Sentinel等组件已经加入Spring Cloud孵化器项目,未来极有可能替代Netflix OSS,因此Spring Cloud是一个极具生命力的微服务框架。
在本书第1版出版后不到一年的时间,我便开始着手准备第2版,在短时间内更新第1版的原因有以下几点。
第一,为了快速跟进Spring Cloud新版本。本书使用的Spring Cloud版本为Greenwich,Spring Boot版本为2.1.0。众所周知,Spring Cloud最大的特色是开源,它是由众多优秀的开源组件封装、集成的。比如,它集成了Netflix OSS组件和Nacos组件等;Spring Cloud社区十分活跃,吸引了众多优秀的开发者加入其项目开发中,因此Spring Cloud的版本迭代非常快。本书第1版使用的Spring Cloud版本为Dalston,Spring Boot版本为1.5.3。在短短一年多的时间内,Spring Cloud已经迭代了Edgware、Finchley和Greenwich三大版本,对应的Spring Boot版本分别为1.5.x、2.0.x和2.1.x。2.0.x版本的Spring Boot更新幅度较大,支持Webflux响应式编程和Http2等新特性。Spring Cloud基于Spring Boot,所以Spring Cloud的Finchley版本是一个变动较大的版本。本书使用的Greenwich版本是基于Finchley的一个小迭代。
第二,使用Spring Cloud作为微服务框架的大多数企业都使用Consul作为服务注册组件。Consul为微服务的元数据提供了强一致性的保障,支持多个数据中心,这是它相对于Eureka 1.0的优点。此外,Eureka的闭源使得作为注册中心的Consul越来越重要,所以本书第2版详细介绍了Consul。
第三,Spring Cloud的第一代网关Zuul是一个阻塞式网关,在性能方面有诸多不足。Spring Cloud在Finchley版本中推出了新一代网关Spring Cloud Gateway。Spring Cloud Gateway是非阻塞式网关,与Zuul相比,性能有较大提升。
第四,很多组件在新版本中的变动较大,如Sleuth、Admin和Security等。部分读者反馈,第1版中的源码在更新版本后出现了无法运行的现象,因此内容更新和升级迫在眉睫。
本书内容
本书共分为18章,各章主要内容如下。
第1章介绍了什么是微服务、为什么需要微服务、微服务的优缺点和面临的挑战,并且将单体架构的系统和微服务架构的系统进行了比较。
第2章主要介绍微服务应该具备的功能以及Spring Cloud的基本组件,最后介绍了Spring Cloud与Dubbo、Kubernetes之间的差异。
第3、4章介绍了构建微服务的准备工作:开发环境的构建和Spring Boot的使用。其中,第3章介绍了开发环境的构建,包括JDK的安装、IDEA和Maven的使用等;第4章介绍了Spring Boot的基本使用方法,包括Spring Boot的特点、用IDEA创建一个Spring Boot项目、Spring Boot配置文件详情、Spring Boot的Actuator模块,以及Spring Boot集成JPA、Redis和Swagger2等。
第5~9章介绍了Spring Cloud框架的基础模块—Spring Cloud Netflix模块,涵盖了Spring Cloud构建微服务的基础组件。诸如Eureka、Ribbon、Feign、Hystrix和Zuul等组件为微服务系统提供了基本的服务治理能力。这些章以案例为切入点,由浅入深介绍这些组件,并从源码的角度分析这些组件的工作原理。
第10章介绍了Spring Cloud的第二代网关Gateway。Gateway在性能上比Zuul要优异很多,是Spring Cloud的新一代网关。
第11章介绍了服务注册中心Consul,详细讲解了如何使用Consul进行服务注册和发现,以及如何使用Consul作为分布式配置中心。
第12章介绍了分布式配置中心Spring Cloud Config,详细讲解了Config Server如何从本地仓库和远程Git仓库读取配置文件,以及如何构建高可用的分布式配置中心和使用消息总线刷新配置文件。
第13章介绍了链路追踪组件Spring Cloud Sleuth,包括微服务系统为什么需要链路追踪组件,并以案例的形式详细介绍了如何在Spring Cloud微服务系统中使用链路追踪,以及如何传输、存储和展示链路数据。
第14章以案例的形式介绍了Spring Boot Admin,包括Spring Boot Admin在微服务系统中的应用、在Spring Boot Admin中集成安全组件。
第15~17章介绍了Spring Cloud微服务系统的安全验证模块,包括Spring Boot Security组件和Spring Cloud OAuth2模块。第15章详细介绍了如何在Spring Boot应用中使用Spring Boot Security;第16章介绍了如何在Spring Cloud微服务系统中使用Spring Cloud OAuth2来保障微服务系统的安全;第17章介绍了如何在Spring Cloud微服务系统中使用Spring Cloud OAuth2和JWT来保护微服务的系统安全。
第18章以一个综合案例介绍了使用Spring Cloud构建微服务系统的全过程,该案例是对全书内容的总结和提炼。
本书特色
•案例丰富,通俗易懂 本书的写作目标之一就是将复杂问题简单化,从而让读者轻松地学习到技术。本书用丰富的案例循序渐进地讲解了如何使用Spring Cloud构建微服务。
•深入浅出,透析本质 以案例为切入点,基于代码对Spring Cloud关键组件进行解读,深入讲解原理,并在案例中使用大量图片(包括展示图和架构图等),帮助读者深入理解。最后以一个综合案例完整讲解如何使用Spring Cloud构建微服务,达到学以致用的目的。
•网络资源,技术支持 本书中所有的源码按章节划分,每章都有独立的源码,便于读者使用和理解。读者可以到异步社区或扫描下方二维码到我的微信公众号(walkingstory)中下载源码。打开源码即可轻松运行。为了快速学习和掌握Spring Cloud,建议对照源码阅读本书。
致谢
感谢我的家人在我写作本书过程中给予我的支持和鼓励。
感谢我的大学导师王为民教授对我的指导和培养。
感谢编辑张爽在本书写作和出版过程中所做的工作。
感谢各位读者和朋友的厚爱!
方志朋
2019年夏