• springcloud22:sentinal的使用


    • sentinal对比(分布式系统的流量防卫)
      监控保护微服务
      Hystrix 需要自己去手工搭建监控平台,没有一套web界面可以进行细粒度化的配置,流控,速率控制,服务熔断,服务降级…
      整合机制:sentinal
      单独一个组件可以独立出来,支持界面化的细粒度统一配置。配置+注解

    • sentinal的使用

    • 页面使用增加流控模式:

      • QPS:每秒请求数(访问多次则会报错)
        模式:直接快速失败:报错Blocked by Sentinel (flow limiting)
        此时一秒请求一次,不会出问题,一秒请求多次,会被限流
        在这里插入图片描述
        此时直接调用默认错误信息,我们如何改进?
      • 线程数(允许访问,但是只有一个线程可以处理)
        模式:直接快速失败
        此时线程数为1,即两个服务请求到,如果第一个请求还未被线程处理完成第二个请求就来,此时会报错在这里插入图片描述
      • 前两个流控模式都为直接模式
        流控模式更改为关联:即A与B关联,即B达到阈值,则A会被限制(支付接口达到阈值,限流下订单的接口)
        此时:快速访问B,而A报错Blocked by Sentinel (flow limiting)
        在这里插入图片描述
      • 前三个流控效果都为快速失败 流控模式为直接模式
        流控效果改为预热一开始 单击阈值为10/3(默认)=3,在经过预热时长5秒钟之后,再更改为阈值10(前五秒钟为3,后五秒钟为10)
        在这里插入图片描述
      • 流控效果:排队等待
        只允许一个一个的进来,每秒只处理一个,可以等待(请求以均匀的速度通过)
    • 页面增加降级规则:(sentinel熔断无半开状态)

      • RT:平均响应时间(超出阈值且时间窗口内通过的请求大于等于5),两个条件满足后触发降级
      • 异常比例:QPS大于等于5且异常比例超过阈值,触发降级
      • 异常数:异常数(分钟统计)超过阈值后,触发降级
        在这里插入图片描述
      • 举例:RT使用
        一秒钟五个请求平均响应时间>阈值且处理任务的时间大于阈值,触发降级,时间窗口期内不能用,时间窗口期过了之后,恢复。(以下例子为200ms以内处理完成,搞定就ok,搞不定未来一秒钟内降级,下一秒内不可用,过完一秒即可用)
        在这里插入图片描述
      • 举例使用异常比例
        一秒钟五个请求平均响应时间>阈值且处理任务的时间大于一秒内的异常比例超过阈值,则触发降级,时间窗口结束,关闭降级
        程序出错。单独访问直接报错500,如果一秒钟请求五次以上,达到降级,则直接报错Blocked by Sentinel (flow limiting)
      • 举例使用异常数:
        近一分钟的异常数超过阈值后进行熔断(时间窗口大于60s)
    • 热点key限流

      • 是什么?会统计传入参数中的热点参数,根据传递的参数来进行 限流@SentinelResource声明兜底方法
        在这里插入图片描述
        在这里插入图片描述
        配置完成后,如果第0个角标的参数访问时违背规则,然后降级,利用我们配置的兜底方法,即只要带参数第0个角标违背就降级,但是如果只带第二个参数随便访问
      • 参数例外项:希望设置的角标参数为特定值时有定制情况
        在这里插入图片描述
        如果第一个参数等于5时,限流阈值变为200
        注意:sentinelResource是控制台配置的错误,而runtimeexception没有兜底正常异常
    • 系统规则
      系统自适应限流:对应用的整体维度进行限流
      在这里插入图片描述

      • load:系统超过装载率
      • CPU使用率
      • 平均处理时间
      • 并发线程数
      • 全局QPS
    • @SentinelResource

      • 按资源名称限流(返回兜底方法)
        此时关闭服务,流控规则消失(临时流控规则)
        按URL限流(返回自带默认,不会走自己的handler)
        总结:因为注解中的value对应资源名,故资源名可以走默认方法而URL不会走自定义方法
        可以用资源名来配置流控,也可以用URL配置流控(不会走自定义兜底方法),配置了流控规则后,如果违背了有定义的blockHandler则用,如果没有,则用默认的处理。
      • 上述出现问题:耦合+默认自定义+代码膨胀
        客户自定义限流处理:
        自定义类CustomerBlockHandler
    • sentinal服务熔断
      注册到Nacos
      sentinel整合了ribbon+openfeign+fallback
      riibbon:负载均衡

    • 例子:
      84订单利用ribbon负载均衡,然后调用服务9003,9004
      84订单本身服务熔断(ribbon+Restemplate)

    • 以上目的是:进一步加深sentinelresource的属性,fallback管理运行异常,blokHandler管配置违规

    • falback 能够管理运行时异常(java异常)相当于服务降级

    • blockHandler只负责sentinel的配置异常,不负责运行时异常

    • 整合sentinel+Feign = ribbon + RestTemplate

    • sentinel框架的持久化

      • 将配置规则配到nacos中
        nacos和sentinel整合(sentinel的配置保存到nacos中)
        即可直接将sentinel的配置写入nacos中保存,然后sentinel中的规则就会有
  • 相关阅读:
    11月千言最新评测推荐,覆盖中文对话、视频语义理解、可信AI等前沿方向
    AI :微软推出 AutoGen 框架,帮开发者创建基于大语言模型的复杂应用
    机器人中的数值优化(十三)——QP二次规划
    算法+数据结构=程序,程序员怎样才能学好算法?
    思考型人格分析,思考型人格的职业发展方向
    百度echarts区域阴影实现
    Frechet distance距离计算原理及python实现
    阿里云服务器的登录方法
    语义化版本 2.0.0
    通关算法题之 ⌈数组⌋ 上
  • 原文地址:https://blog.csdn.net/qq_44724899/article/details/128052235