位置:编程技术网 > 研发管理 > 正文 >

微服务架构下请求调用失败了怎么办?

2021年01月12日 16:12来源:未知手机版

四川地震新闻,busybox是什么,张国荣谭咏麟之争

前面手段在服务提供者偶发异常时很有效,但若服务提供者故障,短时间内无法恢复,都不能提高服务调用成功率,还会因重试给服务提供者带来更大的压力而加剧故障。

就需服务消费者能够探测到服务提供者发生故障,短时间内停止请求,给服务提供者故障恢复时间,待服务提供者恢复后,再继续请求。

原理

把客户端的每次服务调用用断路器封装,通过断路器监控每次服务调用。

若某段时间内,服务调用失败次数达到一定阈值,断路器就会被触发,后续服务调用直接返回,不会再向服务提供者发起请求。

熔断后,一旦服务提供者恢复

服务调用如何恢复

Hystrix的断路器包含三种状态:关闭、打开、半打开

Closed态

正常情况下的断路器处关闭状态,偶发的调用失败也不影响

Open态

当服务调用失败次数达到阈值,断路器就会处开启状态,后续服务调用直接返回,不会向服务提供者发起请求

Half Open态

当断路器开启,每隔一段时间,会进入半打开态,这时会向服务提供者发起探测调用,以确定服务提供者是否恢复正常。

若调用成功,断路器就关闭

若失败,断路器继续保持开启态,并等待下个周期重新进入半打开态。

Hystrix会把每次服务调用都用HystrixCommand封装,实时记录每次服务调用状态,包括成功、失败、超时还是被线程拒绝。

当一段时间内服务调用的失败率高于阈值,Hystrix的断路器就会进入进入打开态,新的服务调用直接返回,不会向服务提供者发起调用。

再等待设定时间间隔后,Hystrix的断路器又会进入半打,新的服务调用又可重新发给服务提供者。若一段时间内服务调用失败率依然高于阈值,断路器会重新进入打开态,否则,重置为关闭态。

决定断路器是否打开失败率阈值通过如下参数:

HystrixCommandProperties.circuitBreakerErrorThresholdPercentage() 

断路器何时进入半打开态时间间隔通过如下参数:

HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds() 

断路器关键在于

统计一段时间内服务调用的失败率

滑动窗口算法

本文地址:http://www.reviewcode.cn/yanfaguanli/185722.html 转载请注明出处!

今日热点资讯