java服务框架高级之微服务保护 Sentinel 限制规则,流控模式,流控效果 线程隔离和熔断降级 授权规则 规则持久化

初识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的持久化,需要修改源码。

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sentinel支持多种持久方式,包括本地文件、Nacos、Zookeeper等。以下是其中一种本地文件的持久方式的配置示例: 1. 首先,在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-file</artifactId> <version>x.y.z</version> </dependency> ``` 其中,`x.y.z`为Sentinel版本号。 2. 在应用程序的配置文件中,添加以下配置项: ``` spring.cloud.sentinel.datasource.ds1.file.data-type=json spring.cloud.sentinel.datasource.ds1.file.data-source=file:${user.home}/sentinel-rules.json ``` 其中,`ds1`为数据源名称,`data-type`表示持久文件的格式,这里使用了JSON格式。`data-source`表示持久文件的路径,这里使用了`${user.home}`表示用户的家目录,`sentinel-rules.json`为规则文件的名称。 3. 在规则文件中添加规则规则文件的默认位置为`${user.home}/sentinel-rules.json`: ``` [ { "resource": "com.example.demo.DemoController:helloSentinel", // 资源名 "limitApp": "default", // 针对的调用来源,若为default则不区分调用来源 "grade": 1, // 限阈值类型,0表示线程数,1表示QPS "count": 10, // 限阈值 "strategy": 0, // 限制行为,0表示直接拒绝,1表示Warm Up,2表示排队等待 "controlBehavior": 0, // 效果,0表示快速失败,1表示Warm Up,2表示排队等待 "clusterMode": false // 是否集群限 } ] ``` 以上就是一个简单的Sentinel规则持久的配置示例。需要注意的是,在实际应用中,可以根据实际需求选择不同的持久方式。同时,还需要根据实际业务场景设置合理的规则,以保证系统的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值