两小时入门Sentinel _

📅 2026/6/30 3:24:12
两小时入门Sentinel _
Sentinel 具有以下特征:丰富的应用场景Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景例如秒杀即突发流量控制在系统容量可以承受的范围、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控Sentinel 同时提供实时的监控功能。可以在控制台中看到接入应用的单台机器秒级数据甚至 500 台以下规模的集群的汇总运行情况。广泛的开源生态Sentinel 提供开箱即用的与其它开源框架/库的整合模块例如与 Spring Cloud、Dubbo、gRPC 的整合。只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。完善的 SPI 扩展点Sentinel 提供简单易用、完善的 SPI 扩展接口。可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。服务保护技术对比限流中间件的原理是在太有东西了我这里简单列了一下他们之间的一些区别SentinelHystrix隔离策略信号量隔离线程池隔离/信号量隔离熔断降级策略基于慢调用比例或异常比例基于失败比率实时指标实现滑动窗口滑动窗口基于 RxJava规则配置支持多种数据源支持多种数据源扩展性多个扩展点插件的形式基于注解的支持支持支持限流基于 QPS支持基于调用关系的限流有限的支持流量整形支持慢启动、匀速排队模式不支持系统自适应保护支持不支持控制台开箱即用可配置规则、查看秒级监控、机器发现等不完善常见框架的适配Servlet、Spring Cloud、Dubbo、gRPC 等Servlet、Spring Cloud Netflix请求限流簇点链路就是项目内的调用链路链路中被监控的每个接口就是一个资源。默认情况下sentinel会监控SpringMVC的每一个端点Endpoint因此SpringMVC的每一个端点Endpoint就是调用链路中的一个资源。流控、熔断等都是针对簇点链路中的资源来设置的因此我们可以点击对应资源后面的按钮来设置规则点击资源/order/{orderId}后面的流控按钮就可以弹出表单。表单中可以添加流控规则如下图所示其含义是限制 /order/{orderId}这个资源的单机QPS为1即每秒只允许1次请求超出的请求会被拦截并报错。流控模式在添加限流规则时点击高级选项可以选择三种流控模式直接统计当前资源的请求触发阈值时对当前资源直接限流也是默认的模式关联统计与当前资源相关的另一个资源触发阈值时对当前资源限流链路统计从指定链路访问到本资源的请求触发阈值时对指定链路限流关联模式统计与当前资源相关的另一个资源触发阈值时对当前资源限流高优先级资源触发阈值、对低优先级资源限流使用场景比如用户支付时需要修改订单状态同时用户要查询订单。查询和修改操作会争抢数据库锁产生竞争。业务需求是有限支付和更新订单的业务因此当修改订单业务触发阈值时需要对查询订单业务限流。当/write资源访问量触发阈值时就会对/read资源限流避免影响/write资源。也就是说满足下面条件可以使用关联模式两个有竞争关系的资源一个优先级较高一个优先级较低链路模式只针对从指定链路访问到本资源的请求做统计判断是否超过阈值。例如有两条请求链路/test1 -》 /common/test2 -》 /common如果只希望统计从/test2进入到/common的请求则可以这样配置注意Sentinel默认只标记Controller中的方法为资源如果要标记其它方法需要利用SentinelResource注解示例javaSentinelResource(goods) public void queryGoods() { System.err.println(查询商品); }Sentinel默认会将Controller方法做context整合导致链路模式的流控失效需要修改application.yml添加配置yamlspring: cloud: sentinel: web-context-unify: false # 关闭context整合流控效果流控效果是指请求达到流控阈值时应该采取的措施包括三种快速失败达到阈值后新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。warm up预热模式对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化从一个较小值逐渐增加到最大阈值。排队等待让所有的请求按照先后次序排队执行两个请求的间隔不能小于指定时长warm upwarm up也叫预热模式是应对服务冷启动的一种方案。请求阈值初始值是 threshold / coldFactor持续指定时长后逐渐提高到threshold值。而coldFactor的默认值是3例如设置QPS的threshold为10预热时间为5秒那么初始阈值就是 10 / 3 也就是3然后在5秒后逐渐增长到10预热模式的QPS超过阈值时会拒绝新的请求QPS阈值是逐渐提升的可以避免冷启动时高并发导致服务宕机。排队等待当请求超过QPS阈值时快速失败和warm up 会拒绝新的请求并抛出异常。而排队等待则是让所有请求进入一个队列中然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成如果请求预期的等待时间超出最大时长则会被拒绝。例如QPS 5意味着每200ms处理一个队列中的请求timeout 2000意味着预期等待超过2000ms的请求会被拒绝并抛出异常请求会进入队列按照阈值允许的时间间隔依次执行请求如果请求预期等待时长大于超时时间直接拒绝热点参数限流之前的限流是统计访问某个资源的所有请求判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求判断是否超过QPS阈值。例如以下示例代表的含义是对hot这个资源的0号参数第一个参数做统计每1秒相同参数值的请求数不能超过5