写这篇主要是看网上资料不怎么全面,防止自己遗忘。。。。
1、官网 (下载地址)
https://github.com/alibaba/Sentinel/releases
2、能干嘛
解决服务中各种问题:
服务雪崩
服务降级
服务熔断
服务限流
3、安装启动sentinel
进入下载完成的sentinel 路径
登录的账号密码都是 sentinel
4、springcloud 中 yml配置sentinel
server: port: 8301 spring: application: name: mmren-edu-micro-sentinel-1 cloud: nacos: server-addr: alex.com:8848 sentinel: transport: # 默认为8719,如果发现该端口被占用,每次尝试默认端口+1,直到找到未被占用的端口为止 port: 8719 # sentinel监控地址必须配置 dashboard: localhost:8888
5、测试sentinel ,测试类
@RestController @Slf4j public class RateLimitController { // 测试QPS // 线程数的测试 @GetMapping("testA") public String testA() { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } return "测试TestA"; } @GetMapping("testB") public String testB() { log.info("1秒处理一个请求,排队处理......"); //log.info("TestB运行中....."); return "测试TestB"; } @GetMapping("testD") public String testD() { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } //log.info("TestB运行中....."); return "测TestD中RT配置"; } @GetMapping("testC") public String testD1() { int i = 10 / 0; //log.info("TestB运行中....."); return "测TestC中异常比例配置"; } @GetMapping("testE") public String testE() { int i = 10 / 0; log.info("测TestE中异常输配置"); return "测TestE中异常输配置"; } @GetMapping("testHotkey") @SentinelResource(value = "testHotkey", /*defaultFallback = "hotkeyHandler"*/blockHandler = "handler") public String testHotkey( @RequestParam(value = "p1",required = false) String p1, @RequestParam(value = "p2",required = false) String p2) { return "测试热点key限流"; } public String handler(String p1, String p2, BlockException e) { return "fdsfdsfdsf " + e.getMessage(); } public String hotkeyHandler() { return "触发降级方法!"; } }
顺便说一下sentinel 是懒加载,启动完成后需要再访问才会在界面上显示
sentinel 怎么玩之 配置
流控模式--直接(默认)
限流配置:
访问超过每秒访问一次,默认返回结果:
线程数测试: 每秒访问的线程只能有一个
流控模式--关联
jemter模拟并发密集访问testB
1、添加线程组
2、添加http请求
启动后访问testA 会发现A这边被限制了,但是testB是没有被限制的
被关联的资源是不会被限制的
流控效果--预热
阈值类型只有QPS才有流控效果
公式:阈值除以coldFactor(默认值为3),经过预热时长后才会达到阈值
一致访问testB,前五秒出现的限制,5秒后一直能正常访问
应用场景:
如:秒杀系统在开启瞬间,会有很多流量上来,很可能把系统打死,预热方式就是为了保护系统,可慢慢的把流量放进来,慢慢的把阈值增长到设置的阈值。
流控效果--排队等待
QPS阈值设置为每秒1个,不管你访问评率多少,每秒只会处理一个,其他在后面排队处理