初识Sentinel

雪崩问题:

 解决雪崩问题的常见方式有四种:

1.超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待

2.舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。

但是服务出现故障后还是会分配原来的线程数,就造成浪费

3.熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。

4.流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。(主要是预防)

服务保护技术对比:

 认识Sentinel

Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址:https://sentinelguard.io/zh-cn/index.html

 sentinel官方提供了UI控制台,方便我们对系统做限流设置。大家可以在GitHub下载。

GitHub - alibaba/Sentinel: A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)

放到非中文目录下,然后运行:java -jar sentinel-dashboard-1.8.6.jar

然后访问:localhost:8080 即可看到控制台页面,默认的账户和密码都是sentinel

微服务整合sentinel

 

限制规则

簇点链路

其含义是限制 /order/{orderId}这个资源的单机QPS为1,即每秒只允许1次请求,超出的请求会被拦截并报错。 

流控模式

 流控模式-关联

 哪个需要限流,就在哪个进行高级流控设置

流控模式-链路

 

 

流控效果

流控效果-warm up 

流控效果-排队等待

 

热点参数限流

 

 所以我们要在对应的方法上加上@SentinelResourse("hot")注解

 在热点规则新增热点规则

 这种情况对热度不同商品设置不同限流比较好用

隔离和降级

Feign整合Sentinel

 

 ​​​​​​​

 

 

 线程隔离

线程池隔离和信号量隔离的优缺点:

 

 线程隔离(舱壁模式)

 

熔断降级

 断路器熔断策略有三种:慢调用、异常比例、异常数

熔断策略-慢调用 

 

熔断策略-异常比例、异常数 

 

 

授权规则 

授权规则可以对调用方的来源做控制,有白名单和黑名单两种方式。

 

 

自定义异常结果

 

 

 

 规则持久化

规则管理模式

 

 

 

 

推荐使用push模式 

实现push模式

1.引入依赖

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

2.配置nacos地址

在order-service中的application.yml文件配置nacos地址及监听的配置信息:

spring:
  cloud:
    sentinel:
      datasource:
        flow:
          nacos:
            server-addr: localhost:8848 # nacos地址
            dataId: orderservice-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: flow # 还可以是:degrade、authority、param-flow 

二、修改sentinel-dashboard源码

SentinelDashboard默认不支持nacos的持久化,需要修改源码。

 

 

 

 

 

 

 

 

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐