SpringCloud概述
SpringCloud 是微服务一站式服务解决方案,即”微服务全家桶”。
它是微服务开发的主流技术栈,且采用名称而非数字版本号。
SpringCloud 和 SpringCloud Alibaba 目前是最主流的微服务框架组合。

SpringCloud官方文档
SpringCloud官网:https://spring.io/projects/spring-cloud/
SpringCloud中文文档:https://www.bookstack.cn/read/spring-cloud-docs/docs-index.md

SpringCloud与SpringBoot依赖关系

SpringCloud总体架构与组件

Eureka 就是一个服务注册与发现框架,这也是分布式微服务的基础
Ribbon 是客户端负载均衡之组件,nginx是将所有请求都集中起来,然后再进行负载均衡
Open Feign 是负载均衡+远程调用,即Ribbon+RestTemplate
Hystrix 总体来说就是一个能进行熔断和降级的库,通过使用它能提高整个系统的弹性
Zuul 微服务网关,Router and Filter : Zuul
Config 分布式配置中心
Bus 消息总线
Eureka服务注册与发现
Eureka基础知识
服务治理

服务注册


Eureka两个组件

单机Eureka
EurekaServer端服务注册中心类似物业公司

EurekaClient端cloud-provider-payment8001将注册进EurekaServer成为服务提供者provider,类似学校对外提供授课服务

EurekaClient端cloud-consumer-order80将注册进EurekaServer成为服务消费者consumer,类似上课消费的各位同学

Eureka自我保护机制

集群Eureka
原理

集群环境构建

将支付服务8001微服务发布到上面2台Eureka集群配置中
将订单服务80微服务发布到上面2台Eureka集群配置中
测试

支付服务提供者8001集群环境构建

负载均衡

测试

actuator微服务信息完善

服务发现Discovery

Eureka自我保护
故障现象

导致原因

- 某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对该微服务的信息进行保存
- 属于CAP里面的AP分支
如何禁止

Zookeeper服务注册与发现
注册中心Zookeeper

服务提供者

服务消费者

Consul服务注册与发现
官方文档
https://www.consul.io/intro/index.html
Consul简介


服务提供者

服务消费者

三个注册中心异同点
CAP理论



AP(Eureka)


CP(Zookeeper/Consul)


Ribbon负载均衡服务调用
官方文档
https://github.com/Netflix/ribbon/wiki/Getting-Started
Ribbon简介

一句话:负载均衡+RestTemplate调用
LB(负载均衡)



Ribbon负载均衡演示
架构说明

Ribbon其实就是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,和eureka结合只是其中的一个实例
Template的使用
getForObject方法/getForEntity方法

postForObject/postForEntity

Get请求方法
POST请求方法
Ribbon核心组件IRule
IRule:根据特定算法从服务列表中选取一个要访问的服务


如何替换

Ribbon负载均衡算法
原理

尝试自写一个本地负载均衡器

OpenFeign服务接口调用
概述

Feign是一个声明式的web服务客户端,让编写web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可

Feign和OpenFeign两者区别

OpenFeign使用步骤

OpenFeign超时控制


OpenFeign日志打印功能

Hystrix断路器
概述



Hystrix简介
https://github.com/Netflix/Hystrix/wiki/How-To-Use


Hystrix重要概念
服务降级

服务熔断

服务限流

Hystrix案例
构建

高并发测试

故障和导致原因

结论

如何解决

服务降级

目前问题:
- 每个业务方法对应一个兜底的方法,代码膨胀
- 统一和自定义的分开

服务熔断
断路器
一句话:家里的保险丝
熔断

实操

原理/总结


服务限流
SpringCloudAlibaba中的Sentinel再行说明。
Hystrix工作流程

服务监控HystrixDashboard
概述

仪表盘9001

断路器演示

zuul路由网关(弃用)
Gateway新一代网关
官方文档
https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/
概述


一句话:Spring Cloud Gateway 使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架

微服务架构中网关的地位

为什么弃用Zuul,选择Gateway

Gateway特性

Gateway与Zuul的区别

Webflex框架

三大核心概念
Route(路由)
路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由
Predicate(断言)
参考的是java8的java.util.function.Predicate开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
Filter(过滤)
指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。
总体

Gateway工作流程


入门配置

通过微服务名实现动态路由

Predicate的使用


常用的Route Predicate

Filter的使用


SpringCloud Config分布式配置中心
分布式系统面临的问题

概述



与GitHub的整合配置
SpringCloud Config默认使用Git来存储配置文件
(也有其它方式,比如支持svn和本地文件,但最推荐的还是Git,而且使用的是http/https访问的形式)
Config服务端配置与测试

Config客户端配置与测试

关于bootstap.yml

Config客户端之动态刷新

SpringCloud Bus 消息总线
概述
分布式自动刷新配置功能
Spring Cloud Bus配合Spring Cloud Config使用可以实现配置的动态刷新



RabbitMQ环境配置

SpringCloud Bus动态刷新全局广播

SpringCloud Bus动态刷新定点通知

通知总结

SpringCloud Stream消息驱动
消息驱动概述

一句话:屏蔽底层消息中间件的差异,降低切换版本,统一消息的编程模型
设计思想

标准MQ


为什么用Stream



为什么Stream可以统一底层差异


Binder


INPUT对应于消费者
OUTPUT对应于生产者
Spring Cloud Stream标准流程套路



编码API和常用注解

案例说明

消息驱动之生产者

消息驱动之消费者

分组消费与持久化

SpringCloud Sleuth分布式请求链路追踪
概述
Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案
在分布式系统中提供追踪解决方案并且兼容支持了zipkin
需要解决的问题

如何解决

搭建链路监控
zipkin
完整的调用链路


Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识
span:表示调用链路来源,通俗的理解span就是一次请求信息
服务提供者

服务消费者(调用方)

原理

- Post link: http://example.com/2021/02/21/SpringCloud/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.
