【what】

一、定义:

Spring Cloud直接基于Spring Boot的创新企业Java方法,通过实施经过验证的模式,为您的微服务带来弹性,可靠性和协调,从而简化了分布式微服务式架构。

二、分类:

1、对现有成熟框架”Spring Boot化”的封装和抽象,也是数量最多的项目;
(1)Spring Cloud Netflix: 是对Netflix开发的一套分布式服务框架的封装,包括服务的发现和注册,负载均衡、断路器、REST客户端、请求路由等。
(2)Spring Cloud Config: 将配置信息中央化保存, 配置Spring Cloud Bus可以实现动态修改配置文件
(3)Spring Cloud Bus: 分布式消息队列,是对Kafka, MQ的封装
(4)Spring Cloud Security: 对Spring Security的封装,并能配合Netflix使用
(5)Spring Cloud Zookeeper: 对Zookeeper的封装,使之能配置其它Spring Cloud的子项目使用
(6)Spring Cloud Eureka:Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分,它基于Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能。

2、开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色。

三、五大组件:

1、服务发现——Netflix Eureka

Spring Cloud - 图2

(1)作用:

实现服务治理(服务注册与发现)

(2)简介:

Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。

(3)由两个组件组成:

Eureka服务端和Eureka客户端。Eureka服务端用作服务注册中心。支持集群部署。Eureka客户端是一个java客户端,用来处理服务注册与发现。在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

2、客服端负载均衡——Netflix Ribbon

Spring Cloud - 图3

(1)作用:

Ribbon,主要提供客户侧的软件负载均衡算法。

(2)简介:

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
注意看上图,关键点就是将外界的rest调用,根据负载均衡策略转换为微服务调用。Ribbon有比较多的负载均衡策略,以后专门讲解。
不需要独立部署,但它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。

(3)功能:

1)客户端负载均衡:

负载均衡是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。
其中分为硬件负载均衡和软件负载均衡。
硬件负载均衡主要通过在服务器结点之间安装专门用于负载均衡的设备;软件的负载均衡则是通过在服务器上安装一些具有均衡负载功能或模块的软件来完成请求分发工作。比如Nginx等。
服务端负载均衡图:
image.png
客户端负载均衡和服务端负载均衡:区别:服务清单所存储的位置。
使用客户端负载均衡调用步骤:

  • 服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心;
  • 服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用;

2)RestTemplate详解

Get请求:getForEntity函数;getForObject函数;
Post请求:postForEntity函数;postForObject函数;postForLocation函数;
Put请求:put函数;
DELETE请求:delete方法;

3)源码分析

3、断路器——Netflix Hystrix

(1)作用:

断路器,保护系统,控制故障范围。(当某个服务单元发生故障之后,通过断路器的故障监控,想调用方返回一个国务相应,而不是长时间的等待。这样就不会是的线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延)

(2)简介:

为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

(3)使用:

1)引入Spring Cloud Hystrix:
pom.xml文件引入依赖:
image.png

在ConsumerApplication中使用@Enable-CircuitBreaker注解开启断路器功能:
image.png

(4)原理分析

**

4、声明式服务调用:Spring Cloud Feign

整合了Spring Cloud Ribbon与Spring Cloud Hystrix
**

(1)创建和使用image.png

(2)参数绑定

(3)继承特性

(4)Ribbon配置

(5)全局配置

image.png

(6)指定服务配置

(7)重试机制

(8)Hystrix配置

(9)全局配置

image.png

(10)禁用Hystrix

(11)指定命令配置

(12)服务降级配置

(13)其他配置

**

5、服务网关——Netflix Zuul

边缘服务

Spring Cloud - 图10

(1)作用:

api网关,路由,负载均衡等多种作用

(2)简介:

类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。
在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。

(3)使用:

1)在pom.xml中引入spring-cloud-starter-zuul依赖
image.png
image.png
2)创建主类,使用@EnableZuulProxy 注解开启Zuul的API网关服务功能
image.png
3)在Application.properties中配置Zuul应用的基础信息
image.png

(4)请求路由

1)传统路由方式
image.png
2)面向服务的路由
image.png

(5)请求过滤:Zuul允许开发者在API网关上通过定义过滤器来实现对请求的拦截与过滤,实现的方法非常简单,我们只需要继承ZuulFilter抽象类并实现它定义的4个抽象函数就可以完成对请求的拦截和过滤了

image.png

image.png

(6)路由详解

1)传统路由配置
image.png
image.png
2)服务路由配置
image.png
服务路由的默认规则
自定义路由映射规则

(7)路径匹配

Ant风格路径
image.png
image.png
忽略表达式:zuul.ignored-patterns
路由前缀:zuul.prefix
本地跳转
image.png

(8)Cookie与头信息

重定向问题
Hystrix和Ribbon支持

(9)过滤器详解

1)过滤器:4个基本特征:过滤类型、执行顺序、执行条件、具体操作
image.png
image.png
2)请求生命周期
image.png

3)核心过滤器:pre过滤器、route过滤器、post过滤器
image.png
4)异常处理:try-Catch处理、ErrorFilter处理、
image.png
不足与优化
自定义异常信息

5)禁用过滤器
image.png

(10)动态加载

1)动态路由
2)动态过滤器

6、分布式配置——Spring Cloud Config

(1)作用:

配置管理。为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持。

(2)简介:

SpringCloud Config提供服务器端和客户端。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。
这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。
服务端(分布式配置中心):用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;
而客户端则是微服务架构中的各个微服务应用或基础设施,通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。
Spring Cloud - 图31

(3)使用:

1)构建配置中心
在pom.xml中引入依赖
image.png
创建SpringBoot的程序主类,并添加@EnableConfigServer注解,开启Spring Cloud Config的服务端功能。
image.png
在Application.properties中添加配置服务的基本信息以及Git仓库的相关信息;
image.png
image.png

2)配置规则详解
3)客户端配置映射

(4)服务端详解:

1)基础架构:远程Git仓库;Config Server;本地Git仓库;Service A、Service B;
image.png

(5)Git配置仓库

默认
image.png
1)占位符配置URI
2)配置多个仓库
3)