高可用服务架构设计(14) - 深入理解hystrix的断路器执行原理以及模拟接口异常时的短路实验
发布日期:2021-06-30 12:35:53
浏览次数:2
分类:技术文章
本文共 1695 字,大约阅读时间需要 5 分钟。
短路器深入的工作原理
1 RequestVolumeThreshold
- number of requests that must be made within a statisticalWindow before open/close decisions are made using stats 在使用统计数据进行打开/关闭决策之前必须在滑动窗口中进行的请求数
可能看起来是这样子的,要求在10s内,经过断路器的流量必须达到20个
然而在10s内,经过短路器的流量才10个,那么根本不会去判断要不要断路!2 ErrorThresholdPercentage
- % of ‘marks’ that must be failed to trip the circuit 必须使电路跳闸的百分比 如果断路器统计到的异常调用的占比超过了一定的阈值,才会触发断路
- default => errorThresholdPercentage = 50 = if 50%+ of requests in 10 seconds are failures or latent then we will trip the circuit default => errorThresholdPercentage = 50 =如果50%以上的请求在10秒内失败或潜伏,那么我们将跳转电路 默认值 50% 比如说在10s内,经过断路器的流量(你,只要执行一个command,这个请求就一定会经过断路器),达到了30个;同时其中异常的访问数量,占到了一定的比例,比如说60%的请求都是异常(报错,timeout,reject),会开启断路
3 状态转换
然后断路器从close状态转换到open状态
4 直接降级
断路器打开,此处请求全被断路,不调用后续服务,直接fallback降级
5 SleepWindowInMilliseconds
-
default => sleepWindow: 5000 = 5 seconds that we will sleep before trying again after tripping the circuit
default => sleepWindow:5000 = 5秒,我们将在电路断路后再次尝试睡眠 -
milliseconds after tripping circuit before allowing retry
在断路后允许重试前的毫秒数 经过了一段时间之后,会half-open,让一条请求经过断路器,看能不能正常调用。如果调用成功了,那么就自动恢复,转到close状态
6 Enabled
- 是否应启用断路器
- 控制断路器是否允许工作,包括跟踪依赖服务调用的健康状况,以及对异常情况过多时是否允许触发短路,默认是true
7 forceOpen
如果设置为true的话,直接强迫打开短路器,相当于是手动短路了,手动降级,默认false
- a property to allow forcing the circuit open (stopping all requests)
- default => ignoreErrors = false
8 forceClosed
- a property to allow ignoring errors and therefore never trip ‘open’ (ie. allow all traffic through) 如果设置为ture的话,直接强迫关闭短路器,相当于是手动停止短路了,手动升级,- - default => ignoreErrors = false 默认false
9 实战
配置一个断路器,流量要求是20,异常比例是50%,短路时间是5s
在command内加入一个判断,如果是productId=-1,那么就直接报错,触发异常执行
写一个client测试程序,写入50个请求,前20个是正常的,但是后30个是productId=-1,然后继续请求,会发现
转载地址:https://javaedge.blog.csdn.net/article/details/95970796 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月20日 05时51分29秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
230.搜索指定数据在那个对象中存在
2019-04-30
231.非UNICODE字段修改未UNICODE字段的可行性分析
2019-04-30
232.列的相关对象查询
2019-04-30
233.查询表结构字典
2019-04-30
248.表的空间
2019-04-30
249.标的外键约束
2019-04-30
259.删除某字段的所有关系——存储过程
2019-04-30
260.删除数据库中的所有外键约束
2019-04-30
261.设置所有表的所有者
2019-04-30
262.生成XMl结构
2019-04-30
263.生成存储过程脚本
2019-04-30
264.生成记录插入SQL语句的触发器
2019-04-30
265.所有的数据库中的触发器及对应的表
2019-04-30
jquery easyui中文培训文档
2019-04-30
XML与Datatable互换的两个函数
2019-04-30
sqlserver常用运维sql
2019-04-30
php中魔术方法详解
2019-04-30
未来已来!清华华智冰的出现是否暗示人工智能即将走向千家万户
2019-04-30
都2021年了,你还在写ES5 ?快醒醒吧,这份ES6超全教程拯救你
2019-04-30
零基础学python第一课, python是什么? 它能做什么?
2019-04-30