开篇
分布式系统比单机系统复杂得多,但经过多年的发展,业界已经有了丰富的分布式系统理论,也有了许多优秀的组件。在分布式系统理论里,最近流行的微服务架构理论成了佼佼者,微服务的概念也成了当前分布式系统实现方案中的主流,显然,微服务架构成了分布式系统的一种形式。优秀的分布式系统组件早期主要以国内阿里巴巴的Dubbo(现今已经被Apache归纳进入其孵化器)为主,后来从国外引入了Spring Boot和Spring Cloud,它们现在是微服务实现的主流方案。
为了更进一步地讲解微服务,满足当前企业搭建微服务系统的需要,我竭尽所能编写了这本关于Spring Cloud的书。虽然Spring Cloud能够有双搭P微服务系统,但微服务系统只是分布式系统的一种形式,它并不能解决分布式系统的所有问题,例如,分布式缓存、会话、数据库及其事务等,都不能通过Spring Cloud来有效处理。但这些问题又是企业实施微服务系统时必须要面对的,甚至是一些企业的难点和痛点。因此,本书在详细介绍Spring Cloud的基础上,还会对常用的分布式技术进行讲解,以满足企业的需要。
内容安排
本书基于一线企业的实际应用需求,介绍Spring Cloud微服务和常用的分布式系统。整体来说,全书分为4个部分。
第一部分:概述和基础(1~2章)
本部分将讲解分布式和微服务的基础知识和理念,并且简单介绍本书需要用到的基础知识。
第1章分布式和微服务概述
第2章技术基础:为了更好地介绍Spring Cloud,这里稍微介绍- .下Spring Boot和HTTP的REST风格。因为SpringCloud是以Spring Boot作为基石的,而各个服务系统又是通过REST风格的请求集成在-起的, 所以学习它们将有助于我们深入学习Spring Cloud。当然,如果你已经对它们很熟悉了,也可以跳过本章,直接学习第3章的内容。
第二部分:Spring Cloud微服务(3~12章)
介绍Spring Cloud的各类组件,这是微服务的核心内容。介绍的组件包括服务注册和服务发现(Eureka)、服务调用(Ribbon 和OpenFeign)、断路器(Hystix 和Resilience4j)、网关(Zuul和Gateway)、配置(Config)、 全链路追踪(Sleuth)、 微服务的监控(Admin)等。
第3章服务治理——Eureka:,Pivotal团队通过Spring Boot形式的封装将Nettlix公司开发的分布式系统组件封装了起来,其中就包括Eureka, Eureka是Spring Cloud的服务治理中心。在使用Spring Boot进行了二次封装后,Bureka 的使用就显得十分简易了。Eureka 作为一个微服务的治理中心,它是一个服务应用,可以接收其他服务的注册,也可以发现和治理服务实例。
第4章客户端负载均衡——Ribbon:Spring Cloud Netflix Ribbon是一种客户端负载均衡的组件,为了方便,在本书中都简称为Ribbon。在微服务架构中,我们依照业务将系统进行切分,但一个实际的业务往往需要多个微服务通过相互协作来完成,所以各种微服务之间存在服务调用。
第5章断路器——Hystrix:Spring Cloud社区推荐开发者使用其他仍然活跃的开源项目,其中最推荐使用的是Resilience4J, 并且Spring Cloud社区也在加紧开发spring cloud-ircuitbreaker,来取代Hystrix。但这个项目还在开发中,并没有发布,加之当前不少企业也在使用Hystrix, 并且技术是相通的,所以这里还是决定介绍一下 Hystrix。
第6章新断路器——Resilience4j:Resilience4j是一个轻量级的、易于使用的容错框架,它是受Netflix的Hystrix的启发,基于Java8和函数式编程设计的,所以在使用它的时候,可以看到大量的函数式编程设计。它与Hystrix 相比有几个不同点。
第7章声明式调用——OpenFeign:本书从第3章到第6章,介绍了微服务的核心内容:服务治理、服务调用(Ribbon)和熔断器(Hystrix和Resilience4j)。这些都是微服务的利器,只是从开发者的角度来说,和我们打交道最多的.是服务调用和熔断器。服务调用使得多个微服务可以通过相互调用,为同一个业务服务。熔断器则可以在很大的程度上保证服务调用。但是严格来讲,Ribbon 使用REST请求方式编写还是比较麻烦的,对于开发者也不算友好,因此在REST 请求方式的基础上,一些开发者 又提供了接口声明方式的调用,例如,我们本章要介绍的GitHub OpenFeign就是这样的。
第8章旧API网关——Zuul:前面几章,我们学习了服务注册和发现(Eureka), 通过它们,我们能够顺利地管理我们的服务;学习了服务之间的调用(Ribbon 和OpenFeign),让各个服务联系起来,通过共同协助来完企业业务逻辑;还学习了断路器(Hystrix和Resilience4j),它能尽可能地保护微服务之间的调用,通过熔断的方式来避免服务依赖造成的雪崩。以上谈到的这些都是Spring Cloud微服务的核心组件。本章开始让我们学习微服务最后的一一个核心组件一API 网关。Netflix Zuul是-一个API网关,它的主要功能是提供网关服务。
第9章新网关——Spring CloudGateway:在第8章中,我们讲述了旧网关Netlix Zuul,并且告知读者,Zuul 1.x只是性能一-般的网关,加上Netlix Zuul 2.x版本经常不能如期发布,所以新版的Spring Cloud不打算捆绑Zul了。新版的Spring Cloud提供了新的网关给开发者使用,这便是Spring Cloud Gateway。为了简便,下 文在没有特别指明的情况下,将简称它为Gateway。Gateway 并非是使用传统的Jakarta EE的Servlet容器,它是采用响应式编程的方式进行开发的。在Gateway中,需要Spring Boot和Spring WebFlux提供的基于Netty的运行环境。
第10章配置——Spring Cloud Config:Spring Cloud Config (为了方便,在不产生歧义时,全书都简称为Config)是一个支持微服务和分布式集中化提供配置的项目。微服务架构中的实例可能会非常多,如果一个个地更新配置,运维成本会十分大。为了简化配置的复杂性,一些开发者提出 了集中化管理配置的概念,也就是提供一个集中化的配置中心,让我们可以统- -配置各个微服务实例。本章要讲的Config 就是出于这个目的设计的。
第11章Spring Cloud Sleuth全链路追踪:在前面的章节中,我们学习了Eureka 服务治理中心,通过它可以管理各个服务,使得它们能够相互协作工作。但是随着业务变得复杂,服务也会复杂起来,加上每-一个服 务都可以有多个实例,一旦发生 问题,将很难查找问题的根源。为了解决这个问题,许多分布式开发者都开发了自己的链路监控组件,使得请求能够追踪到各个服务实例中,典型的如谷歌(Google)的Dapper、推特(Twitter)的Zipkin和阿里巴巴(Alibaba) 的EagleEye, 它们都是当前著名的链路追踪组件。
第12章微服务的监控——Spring Boot Admin:在一个优秀的分布式系统中,监控服务实例,及时发现实例存在的问题是十分重要的。SpringBoot Admin就提供了这样的功能,为了方便,在不引起歧义的情况下,下文将Spring Boot Admin简称为Admin。Admin 是一个监控平台,它可以检测各个Spring Boot应用,让运维和开发人员及时发现各个服务实例存在的问题。Admin 是一个 基于Spring Boot Actuator 的控制台,也就是它可以通过Spring Boot Actuator暴露的端点,来监测各个实例的运行状况。Admin 的用户界面(User Interface,UI)是采用AngularJs应用程序构建的。
第三部分:分布式技术(13~18章)
讲解分布式的其他知识,包括分布式发号机、分布式数据库、分布式缓存、分布式会话和权限等。
第13章生成唯一的ID——发号机制:在数据库(请注意,在本章中,如果没有特别说明,讲到的数据库就都是指关系数据库,而不包含类似Redis这样的非关系数据库)中,主键往往是一条记录的唯一标识,它具备唯- -性。 在单机的时候,只需要考虑单个数据库的问题,相对简单,但在分布式和微服务系统里,就相对困难了,因为它涉及多台机器之间的协作。那么如何保证在分布式或者微服务的多个节点下生成唯一的ID, 如何让ID具备- -定的可读性呢? 这就需要一个发 号机制来控制了。如何实现发号机制,便是本章要讨论的问题。
第14章分布式数据库技术:在第1章我们谈过,互联网会员的增加和业务的复杂化,必然导致大数据的存储,这时使用单机数据库对数据存储和访问,就显得捉襟见肘了。而划分的方法在第1章也谈过,主要是水平、垂直以及混合分法。对分布式和微服务来说,一种业务就可能有很多的数据,如交易,单数据库也很有可能无法支撑,需要多个数据库节点进行支持,这种需要将数据库拆分为多节点进行存储的技术,便是本章需要的论的分布式数据库技术。为了更好地阐述分布式数据库的知识,我们首先从分表、分库和分区这样的数据库知识开始讲述。不过本章我们还不会讨论分布式事务的相关知识,这将会在下章进行讨论。
第15章分布式数据库事务:上一章中,我们讨论了分布式数据库的知识,主要是分片技术。这一章让我们来讨论分布式数据库事务,我们知道在互联网的世界中,有些数据对一致性的要求是十分苛刻的,如商品的库存和用户的账户资金,而这些却极有可能分别存储在不同的数据库节点中,那么如何在多个数据库节点中保证这些数据的一致性,就是分布式数据库事务要解决的问题。
第16章分布式缓存——Redis:在当前互联网中,缓存系统一般由Redis来完成,所以后续我们会集中讨论Redis, 就不再讨论其他缓存系统了。本书采用的是Redis的5.0.5版本,如果采用别的版本,在配置项上会有少量不同,不过也大同小异,不会有太大的问题。
第17章分布式会话:在分布式系统中,有多个服务器节点,这些节点甚至是跨服务的,如果会话信息只在一个节点上, 就需要- -定的机制来保证会话在多个服务节点之间能够共享,方便是本章要讨论的分布式会话。在分布式会话中,最重要的功能是安全验证,因为不同的用户会有不同的权限。
第18章分布式系统权限验证:本章会讲述分布式系统的权限验证。实际上,在分布式会话中谈到的使用缓存存储会话(springsession-data-redis),也能在一定程度 上支持分布式的权限验证,不过一切还 需要从最基础的Spring Security开始讲起。因为这里涉及的内容较多,所以我还是新建了工程,且将其命名为chapter18,这样就可以根据需要新增对应的模块了。
第四部分:微服务系统实践(19~20章)
通过Apache Thrift 讲解远程过程调用(RPC),并且讲解在分布式中处理高并发的一些常用技巧,最后给出一个微服务实例。
第19章远程过程调用:远程过程调用(Remote Procedure Call, RPC)是-种服务调用的方式,它在许多企业中也得到了很多的应用。事实上,在微服务中,推荐我们使用的是REST风格的调用,而非RPC。那么为什么需要使用RPC?又如何使用呢?
第20章微服务设计和高并发实践:以上几章已经阐述了大部分搭建微服务的内容,本章主要讲微服务实践。在微服务中,要解决的大问题是高并发问题,这也是分布式中最受到关注的问题之一。
因为这份《spring cloud微服务和分布式系统实战》和《深入浅出springboot2.0》内容实在太多,两本书加起来一共971页,没有办法给大家全部展示出来,文中资料已整理打包存放网盘,有需要的朋友可以点击下方的名片自取!