五大组件
Eureka
作用
Eureka server:注册中心,有一个注册列表,保存各个服务所在的机器IP及端口号
Eureka client:将服务信息注册到Eureka Server中
重要特点
心跳续约
默认Eureka clinet 间隔30s向服务端发送心跳续约,如3次都没有续约超出90s,服务端注册列表会进行更新,同步给其他服务,心跳续约间隔及过期时间可通过以下参数配置
eureka:
instance:
lease-expiration-duration-in-seconds: 90 # 90秒即过期
lease-renewal-interval-in-seconds: 30 # 30秒一次心跳
服务列表拉取
服务启动时会检测参数 eureka.client.fetch-registry ,如果为true就会拉取Eureka Server存储的服务列表只读备份,然后缓存在本地。并且每隔30秒会重新拉取更新。可以通过以下参数配置:
eureka:
client:
registry-fetch-interval-seconds: 5 # 每隔5秒拉取一次服务列表
Feign
作用
可以通过@FeignClient,@PostMapping等注解实现微服务间的远程调用,不用创建麻烦的网络连接,复杂的请求
流程原理
Feign实现原理是使用了动态代理,你添加了@FeignClient注解,容器扫描到就会创建相应的动态代理类,内部会根据接口上的@PostMapping等注解来动态构建你的请求地址,最后针对地址发起请求,解析响应结果
Ribbon
作用
Ribbon起到负载均衡的作用,会在Feign进行远程调用时均匀的将请求分配到各台服务器
重要特点
- Ribbon默认的负载均衡策略是轮询算法,按注册表挨个分发请求
流程原理
首先Ribbon会从Eureka Client获取到服务的注册列表,就可以获悉服务在哪台服务器上,监听哪个端口,之后Ribbon就可以通过负载均衡算法从中选择一台机器
Hystrix
作用
Hytrix是启到服务熔断,隔离,降级作用的一个框架
重要特点
服务熔断:就是终止请求,既然服务已经故障了,后续产生的业务也没必要继续请求浪费时间了
服务降级:服务虽然不可用了,但是我们也要进行一些额外相关的操作,比如执行一次,就在数据库保存一条记录,后面可以根据记录手动恢复
注:服务熔断后,Hytrix依旧会间隔时间发起请求,检测服务是否恢复
常用配置
- circuitBreaker.requestVolumeThreshold
默认值为20,一段时间内请求达到数量才会计算百分比,才可能打开断路器- circuitBreaker.sleepWindowInMilliseconds
默认值为5000,即每过5秒,检测断路器是否开启- circuitBreaker.errorThresholdPercentage
默认50%,即错误百分比达到此阈值才会开启断路器- 综上配置: 每过5s检测一次,当达到20个请求,且失败比达到50%,断路器就会打开,此时再次调用此服务,直接返回失败,5s后再次检测该条件,判断断路器应该打开还是关闭
GetWay
作用
- 反向代理
- 鉴权
- 流量控制
- 熔断
- 日志监控等
重要特点
为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。
三大核心概念
1. Route 路由:
构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由
2. Predicate 断言
可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
3. Filter 过滤
指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改
流程原理
web请求,可以通过一些匹配条件(predicate),定位到真正的地址端口(uri),同时在请求前后进行一些增强处理(filter)
如何实现统一鉴权?
创建拦截器,实现GlobalFilter和Ordered两个接口,第一个实现具体拦截逻辑,第二个为拦截优先级,越小优先级越高
可以做负载均衡吗?
- 开启自动负载均衡 discovery.locator.enabled=true,通过服务名称进行访问
注意:如果我们配置了discovery.locator.enabled= true,并且配置了路由routes规则之后,会根据predicates断言地址匹配对应的服务,就不会走自动路由配置。- 手动负载均衡,配置routes路由
发生跨域怎么办?
- 可以通过Nginx做静态资源及反向代理服务器解决跨域,静态请求发送给前端,动态请求发送给网关
- 添加响应头,因为所有请求都会经过getway网关,所以可以在请求响应过程中,通过网关给请求添加响应头,解决跨域
Config
作用
- 集中配置管理
- 分环境部署,动态配置更新
重要特点
配置集中管理免去了各个服务单独维护配置的麻烦,可以统一修改,也免去了本地代码配置维护的安全性问题
流程原理
服务启动时根据所在分支,读取相应的配置文件,对应关系维护在docker-compose文件里
参考博客:https://blog.csdn.net/weixin_45498245/article/details/109514463