0
点赞
收藏
分享

微信扫一扫

微服务Ⅴ Sentinel

zhyuzh3d 2022-04-05 阅读 75

目录

雪崩问题

在微服务调用链路中的某个服务故障,引起整个链路中的所有服务都不可用

例如服务A调用服务D,D出现故障,不会返回响应信息,tomcat一直等待响应,不会断开AD的连接,导致A的Tomcat资源耗尽,导致整个链路上的服务都不可用
在这里插入图片描述

解决方式

  1. 超时处理:请求超过一定时间没有响应就返回错误信息,不会无休止等待;只能缓解,如果进入该服务的请求大于释放的速度,还是会出现问题
  2. 舱壁模式:限定每个业务能使用的线程数,避免整个tomcat资源耗尽,因此也叫线程隔离;资源仍会损耗,一个服务挂了还分配线程给他
  3. 熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求
  4. 流量控制:限制业务访问的QPS,避免服务因流量突增而故障(预防

搭建

安装sentinel

  1. https://github.com/alibaba/Sentinel/releases/tag/1.8.1下载sentinel-dashboard-1.8.1.jar
  2. 控制台cd Program Files
  3. java -jar sentinel-dashboard-1.8.1.jar
  4. 访问localhost:8080 账号密码:sentinel

如果需要可改配置:
在这里插入图片描述

微服务整合sentinel

  1. 在子pom引入sentinel依赖

    <!--引入sentinel-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            </dependency>
    
  2. 配置服务地址

    spring:
      cloud:
        sentinel:
          transport:
            dashboard: localhost:8080 #sentinel服务地址
    
  3. 向服务发起请求,sentinel实施监控
    在这里插入图片描述

限流规则

添加限流

流控模式

在这里插入图片描述

直接

对当前资源限流

关联

写优先级大于读,当写操作达到一定阈值时,对读限流
在这里插入图片描述

链路

针对从指定链路访问到本地资源的请求限流

比如 查询订单 和 创建订单 都要查商品,此时就是两个链路访问同一资源,就可以对其中一条链路(查询订单)限流

在这里插入图片描述

流控效果

快速失败

超出阈值的请求会被立即拒绝并抛出异常

预热模式

超出阈值的请求立即拒绝抛异常,但是阈值会动态变化、不断增加

针对服务器冷启动。初始阈值为最大三分之一,可设置预热时长,逐渐增加到最大
在这里插入图片描述

排队等待

让所有的请求按先后顺序排队执行,可设置两个请求间最大时长,超过这个最大时间就直接拒绝;实现流量整形

热点参数限流

在这里插入图片描述
在这里插入图片描述

举报

相关推荐

0 条评论