nacos中namespace / group / data id 的关系
sentinel哨兵
Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
组成
核心库:(Java 客户端)不依赖任何框架/库,能够运行在所有 Java 运行时环境, 对 Spring Cloud有较好的支持
控制台:(Dashboard)基于 Spring Boot 开发,打包后可以直接运行, 不需要额外的 Tomcat 等
应用容器
启动
流控
/t1关联/t2
warm up 冷加载
在前 3 秒,如果访问 /t2 的 QPS 超过 3, 会直接报错,在 3 秒后 访问
/t2 的 QPS 超过 3, 小于等于 9, 是正常访问
当你的请求停止后,会从QPS=9回到QPS=3,当再次高并发请求时,3秒后回到QPS=9
排队等待
熔断降级
熔断
就跟保险丝一样,连接两个模块,熔断他,同时也可以再连接
一个服务常常会调用别的模块,复杂链路上的某一环不稳定,就可能会层层级联,最终导致整个链路都不可用。因此我们需要对不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩。
慢调用比例
eg:一秒内有6个请求并且响应时间都超过了200ms,那么会熔断,请求被阻断,等待熔断时长5秒后,才恢复正常。之所以都超过200ms,是因为比例阈值为1,也就是一秒内大于200ms的请求占最小请求数的100%
异常比例
异常数
熔断,降级,限流三者的关系
- -熔断强调的是服务之间的调用能实现自我恢复的状态
- -限流是从系统的流量入口考虑, 从进入的流量上进行限制, 达到保护系统的作用
- -降级, 是从系统业务的维度考虑,流量大了或者频繁异常, 可以牺牲一些非核心业务,保
- 护核心流程正常使用
-熔断是降级方式的一种
-降级又是限流的一种方式
-三者都是为了通过一定的方式在流量过大或者出现异常时, 保护系统的手段
热点规则
当输入该请求中id=10时,单独设置QPS=5,如果请求其他id,如id=1,按照单机阈值1,也就是QPS=1,会流控。
http://localhost:10006/news?id=10&type=%E6%95%99%E8%82%
SentinelResource注解
controller层
测试热点数据id=10, http://localhost:10006/news?id=10&type=%E6%95%99%E8%82%
@GetMapping("/news") @SentinelResource(value = "news", blockHandler = "newsBlockHandler") public Result queryNews(@RequestParam(value = "id", required = false) String id, @RequestParam(value = "type", required = false) String type) { log.info("到 DB 查询数据库.... "); return Result.success("返回 id= " + id + " 新闻 fromDB"); } //热点 key 限制异常处理方法 public Result newsBlockHandler(String id, String type, BlockException exception) { return Result.success("查询 id= " + id + " 新闻 触发热点 key 限制保护.. sorry"); }
当请求QPS>=5,请求被阻断
\