| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Sentinel 熔断与限流 -> 正文阅读 |
|
[Java知识库]Sentinel 熔断与限流 |
概述功能同Hystrix 解决:服务雪崩,服务降级,服务熔断,服务限流 安装Sentinel控制台
登录账号密码均为sentinel 测试准备
由于sentienl采取懒加载的策略,所以需要先执行一次访问http://localhost:8401/testA 查看sentienl控制台 此时sentinel8080正在监控微服务8401 流控规则概述流控模式直接(默认)为testA增加流控,其默认是 直接–快速失败 当设置每秒访问量QPS为1后,快速连续访问testA会报错 同样的如果设置的是线程数,则只能最多同时处理阈值线程数的请求 关联效果:当与A关联的资源B达到阀值后,就限流A自己 为A增加流控,关联B,仍是设置A的配置 利用Jmeter(参照Hystrix中Jmeter的使用)对testB进行高并发访问 此时再访问testA,返回失败 链路如果A,B同时会调用资源C,那么对C设置链路流控,就可以针对某个服务A或B进行限制 1.7.0的Sentinel链路有大问题,等下次用更高版再试试 流控效果快速失败字面意思 Warm Up(预热)阈值除以coldFactor(默认值为3),经过预热时长后才会达到阈值 默认coldFactor为3,即请求 QPS 从 threshold / 3 开始,经预热时长逐渐升至设定的 QPS 阈值。 例,阀值为10+预热时长设置5秒。系统初始化的阀值为10 / 3 约等于3,即阀值刚开始为3;然后过了5秒后阀值才慢慢升高恢复到10 就不测试了,, 排队等待也是字面意思,但匀速排队,阈值必须设置为QPS 降级规则官网:熔断降级 · alibaba/Sentinel Wiki · GitHub Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。 当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。 Sentinel的断路器没有半开状态 Sentinel 提供以下几种熔断策略:
新版Sentinel可以设置(直接在图形化界面设置)以上参数,较旧版更多 慢调用比例(RT)添加方法用于测试
Sentinel添加降级 简单的来讲,如果在RT时间(200ms)内没有处理完请求,则熔断时间窗口时间(1s) Jmeter配置10个线程每秒发送一次请求 测试,按照上述配置, 永远一秒钟发送10个线程(大于5个了)调用testD,我们希望200毫秒处理完本次任务,如果超过200毫秒还没处理完,在未来1秒钟的时间窗口内,断路器打开(保险丝跳闸)微服务不可用,保险丝跳闸断电了 后续停止Jmeter,没有这么大的访问量了,断路器关闭(保险丝恢复),微服务恢复 异常比例当单位统计时长内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,熔断 异常数旧版异常数是按照分钟统计的 新版Sentinel将可以自己设置统计时长,熔断时长,最小请求数,异常数 热点key限流官网:热点参数限流 · alibaba/Sentinel Wiki (github.com) 热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。 测试这里必须要用@SentinelResource为方法建立资源才能实现热点限流(虽然不知道为什么) 其中value参数为资源名(自定义),blockHandler参数为兜底的方法名
配置热点限流 其中参数索引就是需要监控方法的第几个参数,下标从零开始 此时快速访问http://localhost:8401/testHotKey?p1=abc&p2=33,就会出错 而快速访问http://localhost:8401/testHotKey,则没有问题 高级选项期望参数当它是某个特殊值时,它的限流值和平时不一样 例如,下面就允许当参数值为5时,限流阈值为200 系统规则官网:系统自适应限流 · alibaba/Sentinel Wiki · GitHub 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。 简单来讲就是不再具体到每个方法,而是针对整个系统设定阈值 总共可以设置五种参数
@SentinelResource基本使用其中value参数为资源名(自定义),blockHandler参数为兜底的方法名
此时在设置限流规则时,对于资源名可以使用URL参数,也可以使用value参数 存在缺陷 1 系统默认的,没有体现我们自己的业务要求。(已解决) 2 依照现有条件,我们自定义的处理方法又和业务代码耦合在一块,不直观。 3 每个业务方法都添加一个兜底的,那代码膨胀加剧。 4 全局统一的处理方法没有体现。 自定义限流处理逻辑创建CustomerBlockHandler类用于实现自定义限流处理逻辑
然后只需要配置blockHandlererClass参数(类名)和blockHandler参数(方法名)即可
服务熔断sentinel整合ribbon+openFeign+fallback Ribbon系列@SentinelResourc的两个注解@blockHandler和@fallback blockHandler是作为sentinel限流、降级等无法访问时的兜底方法 fallback是作为java代码运行时抛出异常的兜底方法(没有fallback之前时返回404) 简单的来讲,blockHandler所设置的方法替换了sentinel原来默认的限流之后的策略,而fallback所设置的方法替换了原来运行时错误而返回的404页面 Feign系列按前面openFeign来就行 规则持久化一旦我们重启应用,sentinel规则将消失,生产环境需要将配置规则进行持久化 将限流配置规则持久化进Nacos保存,只要刷新8401某个rest地址,sentinel控制台的流控规则就能看到,只要Nacos里面的配置不删除,针对8401上sentinel上的流控规则持续有效 实现
在Nacos中添加配置 其中Data ID即是上面YML中添加的配置 JSON格式的配置内容,就是希望持久化的配置,各标签意义如下: resource:资源名称; limitApp:来源应用; grade:阈值类型,0表示线程数,1表示QPS; count:单机阈值; strategy:流控模式,0表示直接,1表示关联,2表示链路; controlBehavior:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待; clusterMode:是否集群。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 15:40:35- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |