Sentinel 简单使用
Sentinel
熔断降级: 削峰填谷,集群流量控制,熔断 实时监控: 控制台,看到接入单台机器秒级数据 SPI扩展点: 简单易用,SPI扩展接口,快速制定逻辑,规则
Docker 安装客户端
# 拉取镜像 docker pull bladex/sentinel-dashboard # 运行实例 docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard
访问地址
账户密码: sentinel
熔断降级
服务之间调用时,调用路径中某一个资源出现了不稳定或者不可用,最终会导致请求发生积压,熔断降级,是为了解决这样的问题。 熔断降级: 当请求时间过长,或者异常比例提升,则对这个资源的请求做限制,让请求快速失败,等避免其他的业务受到影响,造成服务雪崩
@SentinelResource 属性 ‼️
注解方式 不支持 private 方法
/* value : 资源名 blockHandler 限流处理方法 */ @SentinelResource(value = TEST, blockHandler = "methodA",fallback ="methodB" ) @GetMapping("annotation") public String hello(){ return "注解方式"; } /* 方法被限流时,调用此方法 参数需要与 原方法参数一致 */ public String methodA(BlockedException e) { e.printStackTrace(); return "注解方式限流!"; } /* 服务熔断降级处理,参数与原方法一样,最多 最后 加一个 Throwable 参数 */ public String methodB(Throwable e) { System.out.println( e.getMessage()); return " 服务被熔断处理=="+ e.getMessage(); }
流控规则
代码设置 流控规则
/** * 当前类的构造函数执行之后执行此方法 */ @PostConstruct public void initFlowRules() { // 创建存放流控规则的集合 List<FlowRule> rules = new ArrayList<>(); // 创建流控规则 FlowRule rule = new FlowRule(); // 定义资源,表示Sentinel会对哪个资源生效 rule.setResource(HELLO); // 定义流控规则的类型 rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // 定义QPS每秒能通过的请求数 rule.setCount(2); // 将流控规则存放在集合中 rules.add(rule); // 加载流控规则 FlowRuleManager.loadRules(rules); } }
流控规则 FlowRule
同一个资源有多个限流规则,检测时会依次检测
降级规则
资源被降级后,默认行为抛出DegradeException 同一个资源可以有多个降级规则 熔断策略 慢调用比例(SLOW_REQUEST_RATIO):选择慢调用比例作为阈值,需要设置 RT(最大响应时间),请求的响应时间大于,最大响应时间,统计为慢调用,单位统计时长(statlntervalMs)内请求数目大于设置的最小请求数目,并且慢调用比例大于阈值,则接下来的熔断时长内请求会自动熔断,经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求响应时间小于设置慢调用RT则结束熔断,若大于RT则再次熔断。 异常比例(ERROR_RATIO):当单位统计时长(statlntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF_OPEN状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则再次被熔断。异常比率的阈值范围是[0.0,1.0]代表0%-100%。 异常数(ERROR_COUNT): 当单位统计时长内的异常数目超过阈值后会自动进行熔断。进过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求成功完成(没有错误),则结束熔断,否则再次被熔断。 异常降级仅针对业务异常,对Sentinel限流降级本身(BlockException) 不生效
DegradeRule 属性
代码
// 生成 熔断降级规则 @PostConstruct public void initDegradeRules() { //存放熔断降级规则的集合 ArrayList<DegradeRule> rules = new ArrayList<>(); // 创建规则 DegradeRule rule = new DegradeRule(); // 规则名 rule.setResource("degradeDemo"); // 降级类型 rule.setGrade(RuleConstant.DEGRADE_GRADE_RT); // 定义降级熔断时间 单位 s rule.setTimeWindow(5); // 定义慢调用临 界RT(超出该值记为慢调用 单位s) rule.setCount(0.005); // 定义熔断出大最小请求数 rule.setMinRequestAmount(1); // 定义统计时长 单位s rule.setStatIntervalMs(1000); // 定义慢调用比例阔值 rule.setSlowRatioThreshold(0.5); //加入 规则 rules.add(rule); DegradeRuleManager.loadRules(rules); }
动态扩展
通过java代码设置,或者通过控制台手动设置,实际使用中并不方便。 Sentinel的DataSoure接口提供了对接任意数据源的能力。 将规则推送到规则中心,客户端实现 ReadableDataSource接口监听注册中心来实现获取规则变更
底部
上一篇:
多线程四大经典案例
下一篇:
Oject类之equals方法