做视频的素材怎么下载网站,北京网站制作费用,站长百科 wordpress,商标logo图案大全图片简介
随着微服务的流行#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 sentinel相当于hystrix的升级版#xff0c;加入了web界面#xff0c;能够实时在线的改变流…简介
随着微服务的流行服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 sentinel相当于hystrix的升级版加入了web界面能够实时在线的改变流量策略。
Sentinel 分为两个部分
核心库Java 客户端不依赖任何框架/库能够运行于所有 Java 运行时环境同时对 Dubbo / Spring Cloud 等框架也有较好的支持。控制台Dashboard基于 Spring Boot 开发打包后可以直接运行不需要额外的 Tomcat 等应用容器。
安装
官方下载架包后运行命令 java -Dserver.port8858 -Dcsp.sentinel.dashboard.serverlocalhost:8080 -Dproject.namesentinel-dashboard -jar sentinel-dashboard.jar 访问localhost:8858 即可进入控制台界面账户密码都为sentinel
sentinel控制台使用
https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel 按照文档配置后访问localhost:8080可以看到如下画面。如果没有左边的服务名可以尝试注销账号重新登陆。
流控规则 流控模式
直接API达到限流条件时直接限流。关联当关联的资源达到阈值时就限流自己。链路只记录指定链路上的流量指定资源从入口资源进来的流量如果达到阈值就进行限流)【API级别的针对来源】。
流控效果
快速失败直接失败抛异常。Warm up根据Code Factor冷加载因子默认3的值从阈值/codeFactor经过预热时长才达到设置的QPS阈值。排队等待匀速排队让请求以匀速的速度通过阈值类型必须设置为QPS否则无效。
熔断降级规则 RT平均响应时间秒级
平均响应时间 超出阈值 且 在时间窗口内通过的请求5两个条件同时满足后触发降级。窗口期过后关闭断路器。RT最大4900更大的需要通过-Dcsp.sentinel.statistic.max.rtXXXX才能生效。
异常比列秒级
QPS 5且异常比例秒级统计超过阈值时触发降级;时间窗口结束后关闭降级 。
异常数(分钟级)
异常数(分钟统计超过阈值时触发降级;时间窗口结束后关闭降级。
热点key
何为热点热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据并对其访问进行限制。比如 商品 ID 为参数统计一段时间内最常购买的商品 ID 并进行限制 用户 ID 为参数针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流会统计传入参数中的热点参数并根据配置的限流阈值与模式对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制仅对包含热点参数的资源调用生效。
下面的代码中参数p1,p2就是热点。deal_testHotKey为被sentinel限流后的兜底方法。
GetMapping(/testHotKey)SentinelResource(value testHotKey,blockHandler deal_testHotKey)public String testHotKey(RequestParam(value p1,required false) String p1,RequestParam(value p2,required false) String p2){return testHotKey;}public String deal_testHotKey(String p1, String p2, BlockException e){return deal_testHotKey 兜底方法;}下面设置会统计/testHotKey携带参数0p1的次数如果在统计窗口1s内有超过单机阈值1条带有参数p1的请求则会限流。
注意这里的blockHandler对应的兜底方法只能在sentinel限流的时候才会触发程序异常并不会走兜底方法。
参数例外项
普通 - 超过1秒钟一个后达到阈值1后马上被限流我们期望p1参数当它是某个特殊值时它的限流值和平时不一样特例 - 假如当p1的值等于5时它的阈值可以达到200 注意参数的值应该是基本类型or String
系统规则了解
系统保护规则是从应用级别的入口流量进行控制从单台机器的 load、CPU 使用率、平均 RT、入口 QPS 和并发线程数等几个维度监控应用指标让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。
系统保护规则是应用整体维度的而不是资源维度的并且仅对入口流量生效。入口流量指的是进入应用的流量EntryType.IN比如 Web 服务或 Dubbo 服务端接收的请求都属于入口流量。
系统规则支持以下的模式
Load 自适应仅对 Linux/Unix-like 机器生效系统的 load1 作为启发指标进行自适应系统保护。当系统 load1 超过设定的启发值且系统当前的并发线程数超过估算的系统容量时才会触发系统保护BBR 阶段。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores * 2.5。 CPU usage1.5.0 版本当系统 CPU 使用率超过阈值即触发系统保护取值范围 0.0-1.0比较灵敏。 平均 RT当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护单位是毫秒。 并发线程数当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。 入口 QPS当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。
SentinelResource兜底方法配置
可以另外创建一个类来进行兜底方法的配置
public class CustomerBlockHandler {public static CommonResult handlerException(BlockException exception){return new CommonResult(4444,用户自定义全局Exception: ,new Payment(2020L,serial003));}public static CommonResult handlerException2(BlockException exception){return new CommonResult(4444,用户自定义全局Exception: ,new Payment(2020L,serial003-2));}
}controller通过blockHandlerClass指定类名blockHandler指定选定的兜底方法。 GetMapping(/byResource)SentinelResource(value byResource,blockHandlerClass CustomerBlockHandler.class,blockHandler handlerException)public CommonResult byResource(){return new CommonResult(200,按资源名称访问限流测试OK,new Payment(2020L,serial001));}整合nacos进行持久化存储
默认情况下当我们在Sentinel控制台中配置规则时控制台推送规则方式是通过API将规则推送至客户端并直接更新到内存中。一旦我们重启应用规则将消失。
配置
引入依赖
dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-nacos/artifactId
/dependency修改application.yml:
spring:cloud:sentinel:datasource:ds1:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-sentinelgroupId: DEFAULT_GROUPdata-type: jsonrule-type: flow在nacos中添加配置
[{resource: /rateLimit/byUrl,limitApp: default,grade: 1,count: 1,strategy: 0,controlBehavior: 0,clusterMode: false}
]相关参数解释 resource资源名称 limitApp来源应用 grade阈值类型0表示线程数1表示QPS count单机阈值 strategy流控模式0表示直接1表示关联2表示链路 controlBehavior流控效果0表示快速失败1表示Warm Up2表示排队等待 clusterMode是否集群。
之后可以发现Sentinel控制台已经有了如下限流规则