公司企业做网站怎么做,精美网页赏析,建设银行秋招网站,wordpress 标签描述sentinel是阿里巴巴研发的一款微服务组件#xff0c;主要为用户提供服务保护#xff0c;包括限流熔断等措施
#xff08;一#xff09;主要功能
流量控制#xff08;限流#xff09;#xff1a;比如限制1s内有多少请求能到达服务器#xff0c;防止大量请求打崩服务器…sentinel是阿里巴巴研发的一款微服务组件主要为用户提供服务保护包括限流熔断等措施
一主要功能
流量控制限流比如限制1s内有多少请求能到达服务器防止大量请求打崩服务器
熔断降级当下级服务响应慢或者不可用时熔断服务快速失败保护上游服务
二使用方法
去Releases · alibaba/Sentinel · GitHub下载对应的jar包 在jar包所在的目录cmd运行命令
java -Dserver.port8090 -Dcsp.sentinel.dashboard.serverlocalhost:8090 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.8.jar然后通过8080端口即可访问sentinel的控制台 账号密码均为sentinel 然后去项目中添加依赖
dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-transport-simple-http/artifactIdversionx.y.z/version
/dependency
同时修改服务的application.yml
spring:cloud:sentinel:transport:dashboard: localhost:8090 # 指定 Sentinel Dashboard 地址port: 8719 # 客户端监控端口用于与 Sentinel Dashboard 通信dashboard的地址必须和sentinel控制台的地址一致连接控制台 port端口号是服务与sentinel的通信端口是独立的不能和运行服务的端口一样 在项目的代码中使用
SentinelResource注解
常用参数
value指定资源名在控制台中可看 blockHandler触发限流规则时会调用哪个方法一般会写一个兜底方法方法参数要和设置了限流的方法一致但可以加一个BlockException fallback触发异常时调用哪个兜底方法和上面的很像但是上面是用于触发限流后用的这个是用于触发异常用的方法参数可以加一个Throwable 三限流规则
限流主要是阻止大量请求同时打到服务器上 资源名 与SentinelResource的value对应 针对来源 就是调用这个controller发送请求的来源你要限流哪些来源的默认全部 阈值类型QPS每秒通过多少个多少个就是单机阈值的数量并发线程数通常配合线程池使用 是否集群多服务器的情况下会用也要设置一个阈值 比如设置全局阈值12比如进来100个请求有三个服务器它们总共只能处理12个请求 如果设置的单机均摊12进来100个请求就会每个服务器都能处理12个请求总共36
继续看
流控模式分为3种直接、关联和链路
直接没什么好说的就是对单一资源进行限流 关联就是a资源关联b资源当b资源访问量大触发限流时a也会被限流 链路就是当同一个方法会被多种渠道调用时只对部分渠道进行限流 流控效果分三种快速失败、warm up和排队等待
快速失败就是触发限流后后面的请求全部丢弃报错 warm up就是冷启动需要设置启动时间n前n秒内处理量大概为阈值的1/3后面再逐步提高处理量达到阈值 排队等待就是触发限流后后面的请求不会丢弃而是排队等待前面的执行完后它再执行需要设置排队时间超过这个时间请求还未被处理的话丢弃
ps只有快速失败支持关联和链路其它两种不支持 四熔断规则
当a服务调用b服务时b服务可能会卡住执行很久也可能会异常这时a要及时熔断切断与b的联系保护自己
又有一个问题怎么判断服务有问题去熔断呢熔断之后怎么恢复连接呢
答判断熔断主要根据熔断策略符合条件即熔断。恢复连接的话当a、b服务间断开的时长达到熔断时长后服务会切换到半开状态a会向b发送一个或几个请求如果这些请求正常执行那就取消熔断恢复运行如果这些请求有问题满足熔断条件就会继续保持熔断 熔断策略有三种慢调用、异常比例和异常数
选择慢调用
最大RT最大的响应时间超过这个时间判定为慢调用 比例阈值当n%的调用是慢调用时触发熔断 熔断时长熔断多久 最小请求数要触发熔断起码要有多少个请求低于这个数值不会熔断 统计时长统计时长
选择异常比例
其他不变没用最大RT比例阈值改为当n%的调用是异常时触发熔断
选择异常数
其他不变比例阈值改为异常数 五热点规则
就是可以对方法的具体参数进行限流 当用户调用这个方法携带了3个参数你可以设置热点来对具体的第几个参数进行限流 六总结
sentinel是服务保护的重要组件起到限流、熔断等作用
首先下载sentinel的jar包用命令运行用浏览器打开sentinel的控制台
然后去项目中添加对应依赖修改代码添加SentinelResource并写对应的兜底方法
RestController
public class UserController {GetMapping(/user)SentinelResource(value getUser, // 资源名用于控制台设置规则fallback fallbackMethod, // 业务异常兜底方法blockHandler blockHandlerMethod // 流控、熔断时的处理方法)public String getUser(RequestParam(required false) String name) {if (error.equals(name)) {throw new RuntimeException(模拟业务异常);}return 用户 name;}// fallback 方法处理业务异常如运行时异常public String fallbackMethod(String name, Throwable e) {return fallback业务处理异常返回兜底用户;}// blockHandler 方法处理被 Sentinel 限流、降级、熔断的情况public String blockHandlerMethod(String name, BlockException ex) {return blockHandler服务被限流或熔断返回默认用户;}
}其实代码部分很少主要用控制台对限流规则、熔断规则进行配置即可