



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版本下测试通过。如果读者在编译时产生错误,需要仔细检查一下部分注释掉的配置和代码。因为这些被注释掉的配置和代码可能是为了配合书中演示的某些功能而被注释掉的。
此外,书中用到的工具和相关服务器环境等都可以在其官网上下载,读者可自行下载,本书源码中并不包含这些内容。
·如果你是一名Java程序员,并且打算构建分布式系统,那么本书适合你阅读;
·如果你对微服务开发非常有兴趣,那么本书适合你阅读;
·如果你对使用Spring Cloud开发云原生应用非常感兴趣,那么本书适合你阅读;
·如果你正打算开发一款互联网应用产品,那么本书适合你阅读;
·如果你想知道Spring Cloud中各子项目在微服务中的角色及位置,那么本书适合你阅读;
·如果你想了解基于微服务架构的开发对运维和部署的影响,那么本书适合你阅读;
·如果你是Spring技术的狂热分子,那么本书非常适合你阅读。
读者阅读本书时若有疑问,或者有好的建议可以反馈给笔者或编辑,我们会抽空回复。
由于作者的水平所限,加之时间有限,书中可能还存在一些疏漏和不当之处,也敬请各位读者斧正。
联系我们请发电子邮件到hzbook2017@163.com。
董超