微服务从小白到专家:Spring Cloud和Kubernetes实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

写作初衷

在这里,笔者想和大家聊聊笔者与这本书的缘分。一个偶然的机会,编辑老师问笔者,是否有意愿写一本面向初学者的微服务与容器化的实战图书。编辑老师话虽短,但包含的信息量着实不小,既要介绍微服务和容器化的实用技术,又要让初学者能够读懂,还要紧扣实战。一番思索之后,笔者欣然应允。

微服务架构的概念在2012年由Fred George提出以来,至今已经过了近十个年头。在这期间,随着互联网和云服务技术的蓬勃发展,微服务架构也逐渐从“阳春白雪”走入了“寻常百姓家”。Spring Cloud作为微服务领域的弄潮儿,利用Spring Boot提供的“开箱即用”的特性,极大地简化了分布式系统基础设施的构建。借助Docker容器化技术和Kubernetes容器编排技术,我们可以轻松地实现微服务应用的跨平台快速部署和弹性伸缩。Spring Cloud+Docker+Kubernetes的组合已经逐渐成为各大公司落地微服务架构的首选方案。

本书特色

新版本:针对Spring Cloud Hoxton.SR5版本+Spring Boot 2.2.x.RELEASE版本。

专注实践:全书风格紧贴实战,学练结合。通过一个优惠券实战项目贯穿全书章节,带读者体验将单体应用逐步改造为微服务应用的全过程。

技术全面:实战案例涵盖了Spring Boot、Spring Cloud核心组件库和容器化技术的知识点,介绍了Spring Boot的核心功能和服务治理组件Eureka及Nacos,讲解了Spring Cloud的第二代网关组件Spring Cloud Gateway、负载均衡组件Ribbon、服务间调用组件OpenFeign、配置中心组件Spring Cloud Config、批量消息推送组件Bus、服务容错组件Hystrix+Turbine+Dashboard、防流量哨兵组件Sentinel、链路追踪组件Sleuth+Zipkin+ELK、消息驱动组件Stream,分析了分布式事务框架Seata和用于DevOps实践的Docker容器化技术、Kubernetes容器编排技术及下一代微服务技术Service Mesh。

低门槛:本书为初学者构建了非常友好的学习曲线,通过实战项目手把手带读者从Spring Boot应用的核心功能模块入手,逐渐过渡到微服务和容器化部分。

深入剖析:对于书中的知识点,通过实战案例向读者展示业界主流的微服务架构最佳实践。

适用读者

本书适合具备一定Java基础的开发人员及对微服务架构和Spring Cloud技术、容器编排技术感兴趣的读者。对处在微服务架构转型期的团队来说,本书具有很大的实践指导价值。

本书内容

本书共22章,每章的具体内容如下:

第1章:热身运动。

这一章主要介绍了在进行Spring Boot开发之前所需的准备工作,例如相关常识的介绍、常规软件的安装和开发环境的搭建等,此后再通过几个例子介绍了Java Web应用开发的进化史。

第2章:Spring Boot介绍。

这一章首先简单介绍了Spring框架的历史并穿插了一些业界趣闻,然后讲解了Spring框架的基石技术IoC、AOP及Spring主要组件,接着解释了Spring Boot出现的契机及原因,最后重点介绍了Spring Boot的工作原理、组件及如何利用Spring Boot进行应用开发。

第3章:Spring Boot实战。

这一章主要通过优惠券项目细致地讲解了如何基于Spring Boot进行项目实战开发,先用Spring Boot构建应用的核心功能,再循序渐进地引入更多主流开源软件与项目集成,以实现更丰富的应用功能来应对各种各样的开发场景。

第4章:微服务与Spring Cloud。

这一章首先介绍微服务架构的理念及服务拆分规范,然后介绍目前一线大厂的服务治理方案,接着介绍Spring Cloud及Netflix组件库和Alibaba组件库,最后介绍实战项目中采用的微服务技术选型方案。

第5章:使用Eureka实现服务治理。

这一章首先向读者介绍服务治理的概念和Spring Cloud中常用的服务注册中心,然后着重介绍Eureka的核心概念和微服务生命周期的管理流程,最后通过实战项目落地一套高可用化的注册中心方案。

第6章:使用Nacos实现服务治理。

这一章首先介绍如何安装Nacos,并对Eureka和Nacos做了简单比较,最后演示了如何使用Nacos实现服务治理。

第7章:使用Ribbon实现负载均衡。

这一章介绍了负载均衡的基本概念,并针对Ribbon内置的负载均衡策略及各个负载均衡策略适用的业务场景,探讨了Ribbon的IPing机制,最后通过将Ribbon集成到实战案例来巩固学习效果。

第8章:使用OpenFeign实现服务间调用。

在这一章中,为了避免烦琐的REST API调用流程,我们通过Feign组件实现了一种类似于“本体方法调用”的简易步骤,我们只需要定义一个Feign接口,就可以将该接口注入Java类中实现远程REST API调用。我们还深入介绍了Feign组件的工作原理,以及Feign的超时配置和数据压缩配置。

第9章:使用Hystrix实现服务间容错。

这一章通过一个“服务雪崩”的例子来理解服务容错的几种常规手段,进而学习Hystrix如何通过服务降级、服务熔断和线程隔离的方式实现服务容错。在这个过程中,我们还介绍了Hystrix的两个好搭档,即分别用来聚合服务调用数据的Turbine和服务大盘监控组件的Hystrix Dashboard。

第10章:使用Sentinel实现限流控制。

这一章首先介绍了如何安装Sentinel,再介绍了Hystrix和Sentinel之间的异同,最后演示了如何使用Sentinel在不同场景下对服务进行限流控制。

第11章:使用Spring Cloud Config和Bus搭建配置中心。

这一章首先介绍了分布式配置中心在微服务架构中的用途,然后落地了一套Spring Cloud Config+GitHub的远程配置中心,最后通过集成Bus组件实现了配置项的动态推送。在这个过程中,我们还介绍了如何对配置中心进行高可用化改造,以及如何使用对称密钥和非对称密钥将敏感信息进行加密存储。

第12章:使用Spring Cloud Gateway搭建服务网关。

这一章介绍了Spring Cloud的第二代网关组件Spring Cloud Gateway,它与Nginx这类外部网关不同,Spring Cloud Gateway主要用来承接经由外部网关导向微服务集群的服务请求,并基于这些服务请求的路径及参数等信息做服务转发。除了介绍如何设置请求转发规则,我们还介绍了如何在网关层添加过滤器和限流规则(底层采用Redis+Lua实现限流)。

第13章:使用Sleuth进行调用链路追踪。

在一个大型微服务系统中完成一个复杂的业务流程可能需要调用数十个微服务模块,从调用链分析及线上故障排查的角度来看,我们需要将每一次服务请求中的所有调用链路通过某种标记串联起来。这一章介绍了一款调用链路“打标工具”Sleuth,通过对Sleuth底层数据结构的介绍使读者了解它的工作原理,并将打标后的日志信息传输到Zipkin和ELK组件中,实现调用链路分析和日志检索功能。

第14章:使用Stream集成消息队列。

这一章介绍了如何通过Stream组件简化微服务应用与消息队列组件的对接,我们首先介绍了发布订阅、消费组和消费分区三个重要场景,然后通过实际案例介绍了消息的异常处理手段,比如本机重试、消息重新入队、降级流程和死信队列,最后介绍了消息队列的一个特殊场景“延迟消息”。

第15章:使用Seata实现分布式事务。

这一章首先介绍分布式事务的基本概念,再通过传统的XA事务模式了解分布式事务所要解决的问题,了解XA模式在高并发场景下的性能瓶颈。然后,我们引出阿里开源的Seata分布式事务框架,了解Seata内置的多种分布式事务解决方案。在这个过程中,我们重点学习Seata官方推荐的AT方案,深入学习AT方案的原理及读写隔离策略。最后,我们将AT方案集成到实战项目中。

第16章:走进容器化的世界。

这一章是容器部分的起始章节,重点介绍了微服务落地的难点:高内聚和低耦合需求、异构部署需求、云原生12因素、康威定律等,以及如何通过容器化技术来攻克难点。这一章纵向分析了容器技术的前世今生和未来展望,横向比对了不同容器技术的差异和选择。

第17章:Docker容器技术。

这一章从HelloWorld起步,介绍了Docker的安装和容器的部署;讲述了Docker的整体架构和核心概念,包括镜像、容器、存储、网络、仓库等;并以贯穿全书的优惠券项目为例,讲解了微服务Docker容器化改造的实战细节。

第18章:Kubernetes基础。

这一章是容器部分的核心章节,从容器编排的概念到Kubernetes的整体框架,从Kubernetes的集群搭建到Pod、Controller、Namespace的控制管理,完整地阐述了Kubernetes容器编排的基础。本章针对优惠券项目,讲解了应该如何采用无状态部署的方式进行应用容器的编排管理。

第19章:Kubernetes网络互联。

这一章介绍了Kubernetes的网络互联模型和主流的服务发现、负载均衡方式。本章针对优惠券项目,实战了不同类型的应用部署和服务发现手段。

第20章:Kubernetes数据存储。

这一章介绍了Kubernetes的数据存储模型,以及Volume卷、ConfigMap和Secret的管理。本章针对优惠券项目讲解了环境变量加载和应用磁盘挂载的实战细节。

第21章:Kubernetes高级功能。

这一章从安全性、可用性、扩展性、易用性、可观察性等多个角度描述了容器化部署的非功能性需求,并以优惠券项目为示范,实现了整套应用的高可用、弹性扩展和监控告警。

第22章:Service Mesh。

这一章的核心是微服务的非侵入式治理。本章重点描述了Service Mesh的兴起和优势、Istio框架的原理和架构,以及如何实现服务流量治理、服务安全增强、自动化监控追踪。最后,以优惠券项目的全透明授权验证和拓扑监控收尾。

第1章~第3章,第6章,第10章,作者卿睿;第4章,第5章,第7章~第9章,第11章~第15章,作者姚秋辰;第16章~第22章,作者张昕。

相关资源:

本书提供了一个GitHub项目供读者学习和实践,其中包括优惠券项目的所有源码。若读者在启动项目的过程中遇到异常报错,可以参考GitHub根目录下的README文档中的解决方案。具体下载方式可以参考下方(或封底)的读者服务。

作者
2021年9月1日