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.