api-gateway实践(13)新服务⽹关-断路保护熔断机制参考链接:
新需求列表
1、在线测试
properties在哪打开根据定义,⽣成输⼊界⾯,
点击测试,
验证参数,发起调⽤,返回执⾏结果
2、熔断保护
两个实现类:
NoOpCircuitBreakerImpl,什么也不做的断路器实现
HystrixCircuitBreakerImpl,实现类:
HystrixCircuitBreakerImpl
1. HystrixCommandProperties properties
2. HystrixCommandMetrics metrics
3. AtomicBoolean circuitOpen
4. AtomicLong circuitOpenedOrLastTestedTime:断路器打开或是上⼀次测试时间戳
HystrixCircuitBreakerImpl的⽅法
isOpen 判断断路器的打开/关闭状态
如果打开,直接返回true,表⽰断路器处于打开状态。否则,从度量指标metrics中获取healthcounts统计对象进⼀步判断(该对象记录了⼀个滚动时间窗内的请求,默认时间窗为10秒)
如果请求总数qps在预设的阈值范围内就返回false,表⽰断路器处于未打开状态,默认值20
如果错误百分⽐在阈值范围内就返回false,表⽰断路器处于未打开状态,默认值50
如果上述两个条件都不满⾜,就将断路器设置为打开状态(熔断/短路)。同时,如果从关闭状态切换到打开状态的话,就将时间记录到circuitOpenedOrLastTestedTime中。
allowRequest 判断请求是否被允许
判断是否强⾏打开,是则 return false
判断是否强⾏关闭,是则 isOpen & return true
!isOpen()||allowSingleTest()::断开时的时间戳+配置中的circuitBreakerSleepWindowInMillseconds 是否 ⼩于当前时间,如果是的话,就将当前时间更新到记录断路器打开的时间circuitBreakerOpenedOrLastTestedTime中,并允许该请求。
即设置了断路器打开后的休眠时间(默认为5秒),休眠时间达到之后,将再次允许请求尝试访问,此时断路器处于“”半
开“”,
若此时请求继续失败,则断路器⼜进⼊打开状态,并等待下⼀个休眠窗⼝过去之后再尝试。
若请求成功, 则将断路器重新置于关闭状态。
所以,allowSingleTest()和isOpen()配合,实现了断路器的打开和关闭状态的切换。
markSuccess ⽤来关闭断路器 在“半开”状态时使⽤。若调⽤命令成功,通过调⽤它将打开的断路器关闭,并重置度量指标对象。
命令执⾏的四个结果:成功、失败、超时、拒绝,⽤来更新计时器
3、性能测试
4、调⽤计量
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论