SpringCloud

五大组件

请添加图片描述

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进行远程调用时均匀的将请求分配到各台服务器

重要特点
  1. Ribbon默认的负载均衡策略是轮询算法,按注册表挨个分发请求
流程原理

首先Ribbon会从Eureka Client获取到服务的注册列表,就可以获悉服务在哪台服务器上,监听哪个端口,之后Ribbon就可以通过负载均衡算法从中选择一台机器

Hystrix

作用

Hytrix是启到服务熔断,隔离,降级作用的一个框架

重要特点

服务熔断:就是终止请求,既然服务已经故障了,后续产生的业务也没必要继续请求浪费时间了
服务降级:服务虽然不可用了,但是我们也要进行一些额外相关的操作,比如执行一次,就在数据库保存一条记录,后面可以根据记录手动恢复
注:服务熔断后,Hytrix依旧会间隔时间发起请求,检测服务是否恢复

常用配置
  1. circuitBreaker.requestVolumeThreshold
    默认值为20,一段时间内请求达到数量才会计算百分比,才可能打开断路器
  2. circuitBreaker.sleepWindowInMilliseconds
    默认值为5000,即每过5秒,检测断路器是否开启
  3. circuitBreaker.errorThresholdPercentage
    默认50%,即错误百分比达到此阈值才会开启断路器
  4. 综上配置: 每过5s检测一次,当达到20个请求,且失败比达到50%,断路器就会打开,此时再次调用此服务,直接返回失败,5s后再次检测该条件,判断断路器应该打开还是关闭

GetWay

作用
  1. 反向代理
  2. 鉴权
  3. 流量控制
  4. 熔断
  5. 日志监控等
重要特点

为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。

三大核心概念

1. Route 路由:
构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由
2. Predicate 断言
可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
3. Filter 过滤
指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改

流程原理

web请求,可以通过一些匹配条件(predicate),定位到真正的地址端口(uri),同时在请求前后进行一些增强处理(filter)

如何实现统一鉴权?

创建拦截器,实现GlobalFilter和Ordered两个接口,第一个实现具体拦截逻辑,第二个为拦截优先级,越小优先级越高

可以做负载均衡吗?

  1. 开启自动负载均衡 discovery.locator.enabled=true,通过服务名称进行访问
    注意:如果我们配置了discovery.locator.enabled= true,并且配置了路由routes规则之后,会根据predicates断言地址匹配对应的服务,就不会走自动路由配置。
  2. 手动负载均衡,配置routes路由

发生跨域怎么办?

  1. 可以通过Nginx做静态资源及反向代理服务器解决跨域,静态请求发送给前端,动态请求发送给网关
  2. 添加响应头,因为所有请求都会经过getway网关,所以可以在请求响应过程中,通过网关给请求添加响应头,解决跨域

Config

作用
  1. 集中配置管理
  2. 分环境部署,动态配置更新
重要特点

配置集中管理免去了各个服务单独维护配置的麻烦,可以统一修改,也免去了本地代码配置维护的安全性问题

流程原理

服务启动时根据所在分支,读取相应的配置文件,对应关系维护在docker-compose文件里

参考博客:https://blog.csdn.net/weixin_45498245/article/details/109514463

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值