1.概述 为什么需要微服务的保护?什么是微服务保护?具体怎么做?
技术栈

  1. sentinel 哨兵; 用来保护微服务对 ,流量控制;隔离和降级;授权 。
  2. jmeter java meter ;java测试仪; Apache 组织开发的基于 Java 的压力测试工具。

专有词
QPS ;Query Per Second ;每秒查询

雪崩问题

在分布式服务中,一次调用可能有多个服务来完成,如果其中一个服务出现问题没有及时处理,会引起多米诺骨牌效应是级联调用失效,导致整个微服务不可用。

解决的方案:

限流:
限流的模式:
直接:/order/orderid 5qps 意思是当一秒超过5次请求的时候对第5次之后的请求进行限流。

关联:/order/query 优先级低

/order/update 优先级高
两个同时进行请求,会在优先级较低的那个请求上 创建限流 ,当达到限流的条件时,较低的那个请求将会限流,从而保证优先级较高的那个正常运行。

  1. **链路**: <br /> /queryOrder <br /> goods <br /> /saveOrder <br />两个路径同时请求,在优先级较低的路径上添加限流,当优先级较高的路径达到限流的要求时,优先级较低的那个将会限流,从而保证优先级较高的正常运行。<br /> 限流的效果:<br />**快速失效**: 直接拒绝请求

warmup: 预热模式 默认的因子是3 除3取整
如果线程数为 10qps 预热时间为 5s 一开始将以10/3=3 (qps)的速度请求,5s之后才会以10qps进行访问

排队等候: (推荐使用可以对性能更好的压榨)
请求1 ==200ms ==> 请求2 ==200ms==>请求3==200ms==>请求4==200ms>==请求5==>请求6==200ms>==请求7==>请求8==200ms>==请求9==>请求10==>请求11==200ms>==请求12==>请求13==200ms>==请求14
5qps 超时时间为2s 前五个请求可以正常放行,后五个添加到队列,当请求的时间超过超时时间时,将会进行限流。之后又会进入到半开状态测试一次。

热点参数:多个请求参数,当标记为热点商品时,可以设置成高QPS,把冷门商品设置成地QPS。
注意事项:热点参数限流对默认的SpringMVC资源无效,需要利用@SentinelResource注解标记资源

服务隔离 ==>服务降级
给服务调用设置最大允许的线程,当超过最大线程时直接进去服务降级。
(老师使用时不是很稳定)

服务熔断==>服务降级
存在3总熔断状态

熔断状态: 关闭 开启 半开

  1. 熔断策略:
  2. 1. 延迟调用策略 超过多少比例的服务调用延迟较高
  3. 1. 异常比例 超过多少比例的服务异常率
  4. 1. 异常数量 超过指定的异常数量
  5. 还需设置熔断的时长 <br />**声明服务降级的方法**:<br />feign.sentinel .enable = true

服务降级类实现fallbackFactory

creat(异常) ==> 代表远程调用出现了什么异常
{
new Feign接口实现类(){
服务降级的方法(){
备用方案或者友好页面提示
(这里可以使用服务降级方法)
}

}

}

授权策略 :设置白名单
设置黑名单

sentinel规则持久化
默认存在内存中
可以通过nacos配置sentinel来进行持久化