spring cloud 微服务熔断
服务降级的分类
自动降级
超时、失败次数、故障、限流
A:配置好超时时间
B:不稳的的api调用次数达到一定数量进行降级
C:调用的远程服务出现故障
(dns、http服务错误状态码、网络故障、Rpc服务异常),直接进行降级。
人工降级
秒杀、双十一大促降级非重要的服务
服务熔断介绍
什么是服务熔断?
为了防止整个系统的故障,而采用了一些保护措施.一般是某个服务异常引起的,相当于“保险丝”,当某个异常条件被触发,直接熔断整个服务,不是等到此服务超时(判断指定在请求次数失败率超过指定的熔断条件如20次请求50%失败,就会将整个服务关闭,然后调用退路方法
)
A调B,B很慢的话,A也很慢。熔断让A不再调用B,而改成调用C ( 退路方法)
服务降级-超时降级
修改Hystrix对请求超时的判断时间
》》默认为两秒
》》也可以修改
注解配置 方法上
@HystrixCommand(commandProperties = {@HystrixProperty(name =“execution.isolation.thread.timeoutInMilliseconds” ,value =“2000” )})
属性配置 application.propertieshystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=2000
服务熔断和服务降级的异同
(1)相同点:
》从可用性和可靠性触发,为了防止系统崩溃
》最终让用户体验到的是某些功能暂时不能用
(2)不同点:
》服务熔断一般是下游服务故障导致的,而服务降级一般是从整体系统负荷考虑,由调用方控制
》触发原因不同
熔断状态机模型
状态机有3个状态:
》Closed:关闭状态(断路器关闭),所有请求都正常访问。
》Open:打开状态(断路器打开),所有请求都会被降级。Hystrix会对请求情况计数,当一定时间内失败请求百分比达到阈值,则触发熔断,断路器会完全打开。默认失败比例的阈值是50%,请求次数最少不低于20次。
》 Half Open:半开状态,不是永久的,断路器打开后会进入休眠时间(默认是5S)。随后断路器会自动进入半开状态。此时会释放部分请求通过,若这些请求都是健康的,则会关闭断路器,否则继续保持打开,再次进行休眠计时
服务熔断的配置
在发送请求一方的配置文件配置三个参数
#错误率,默认50%
hystrix.command.default.circuitBreaker.errorThresholdPercentage=50
#滑动窗口的大小,默认为20
hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
#过多长时间,熔断器再次检测是否开启,默认为5000,即5s钟
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5000
每当20个请求中,有50%失败时,熔断器就会打开,此时再调用此服务,将会直接返回失败,不再调远程服务。直到5s钟之后,重新检测该触发条件,判断是否把熔断器关闭,或者继续打开。
达到熔断之后,那么后面它就直接不去调该微服务
推荐阅读
-
spring-cloud入门之eureka-server(服务发现)
-
spring-cloud入门之eureka-client(服务注册)
-
SpringCloud之服务注册与发现Spring Cloud Eureka实例代码
-
详解spring cloud构建微服务架构的网关(API GateWay)
-
spring cloud 使用Hystrix 实现断路器进行服务容错保护的方法
-
Spring Cloud之服务监控turbine的示例
-
Spring Cloud微服务架构的构建:分布式配置中心(加密解密功能)
-
spring cloud 使用Eureka 进行服务治理方法
-
详解spring cloud整合Swagger2构建RESTful服务的APIs
-
Spring Cloud Gateway 服务网关快速实现解析