sentinel

目录

1.对比hystrix

2.初始化监控

3.流控规则

4.降级策略

4.1RT:平均响应时间(秒级)

4.2 异常比例(秒级)

4.3 异常数

4.4 Sentinel热点key

5.系统规则

6.客户自定义限流处理

7.Sentinel服务熔断OpenFeign

8.规则持久化


1.对比hystrix

hystrix:需要手动搭建监控平台,没有一套web界面可以更加细粒度得配置流控、速率控制、服务熔断、服务降级

sentinel:单独一个组件,可以独立出来。直接界面化的细粒度统一配置

2.初始化监控

pom配置:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba.sentinel</artifactId>
</dependency>

yml配置:

spring:
    cloud:
        sentinel:
            transport:
                dashboard: localhost:8080
                port: 8719  #默认8719端口,假如被占用会自动从8719开始依次+1扫描,直接找到未被占用的端口

3.流控规则

流控模式:

直接:api达到限流条件时,直接限流

关联:当关联的资源达到阀值时,就限流自己

链路:只记录指定链路上的流量

阀值类型:

QPS:当调用该api的qps达到阀值的时候,进行限流

线程数:当调用该api的线程数达到阀值的时候,进行限流

warmup:预热/冷启动方式,当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮,通过"冷启动",让通过的流量缓慢增加,在一定时间内主键增加到阀值上限,给冷系统一个预热的时间,避免冷系统被压垮。

4.降级策略

4.1RT:平均响应时间(秒级)

平均响应时间 超过阀值 且 在时间窗口通过的请求>= 5,两个条件同时满足后触发降级。

窗口期过后关闭断路器

RT最大4900,更大的需要通过-Dcsp.sentinel.statistic.max.rt=xxx

4.2 异常比例(秒级)

QPS>=5 且异常比例(秒级统计)超过阀值时,触发降级;时间窗口结束后,关闭降级

sentinel的熔断是没有半开状态的。

4.3 异常数

异常数:当资源近1分钟的异常数超过阀值之后进行熔断。注意由于统计时间窗口是分钟级别的,若timeWindow小于60s,则结束熔断状态后仍可能再进入熔断状态。时间窗口一定要大于60s

4.4 Sentinel热点key

兜底方法分为系统默认和客户自定义

 特殊值配置:参数例外项

5.系统规则

系统保护规则是从应用级别的入口流量进行控制,从单台机器的load,cpu使用率,平均rt,入口qps和并发线程等几个维度监控应用指标,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性

系统规则支持以下模式:

load自适应:(仅对linux/unix机器生效)

cpu usage:

平均RT:

并发线程数:

入口qps:

6.客户自定义限流处理

@SentinelResource 注解方式的埋点不支持private 方法

Sentinel主要三个核心api: SphU定义资源、Tracer定义统计、ContextUtil定义了上下文

@Sentinel配置fallback 和 blockHandler都配置

若blockHandler和fallback都进行了配置,则被限流降级而抛出BlockException时只会进入blockHandler处理逻辑

@SentinelResource(exceptionsToIgnore={IllegalArgumentException.class})

7.Sentinel服务熔断OpenFeign

yml:激活Sentinel对Feign的支持

feign:
    sentinel:
        enable: true
    

8.规则持久化

一旦重启应用,sentinel规则将消失,生产环境需要将配置规则进行持久化

pom配置:

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

yml配置:

spring:
    cloud:
        sentinel:
            port: 8719
               datasource:
                    dsl:
                      nacos: 
                        server-addr: localhost:8848
                        dataId: spring-application-name
                        groupId: DAFAULT_GROUP
                        data-type: json
                        rule-type: flow
                             

nacos:配置内容

[
{
    "resource":"rate/byUrl",
    "limitApp":"default",
    "grade":1,//阀值类型0表示线程数,1表示qps
    "count":1,//单机阀值
    "strategy":0,//流控模式 0直接,1关联,2链路
    "controlBehavior":0,//流控效果 0快速失败 1warmup 2排队等待
    "clusterMode":false//是否集群

}


]

9.安装sentinel

下载sentinel jar包,javar -jar  启动jar,浏览器访问localhost:9000 默认用户密码sentinel

10.应用对接sentinel

应用启动配置:-Dcsp.sentinel.dashboard.server=xxx.xxx.xxx.xxx:9000

-Dproject.name=Sentinel

10.1 sentinel定义资源的方式

抛出异常方式的定义资源:try(Entry entry = SphU.entry("hello")){}catch(

){

}

返回布尔值方式定义资源:

Spho.entry();

异步调用支持:

Spho.asyncEntry("async");

注解方式定义资源;

主流框架的的默认适配;

10.2 和springcloud整合

配置:spring.cloud.sentinel.transport.dashboard=xx.xx.xx.xx:9000

10.3 和feign 整合

@Feignclient(fallback=xxx.class)xxx.class 实现定义的feign接口;

sentinel配置:Get http:xxxxxx/xxx/

10.4整合spring cloud gateway

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值