Spring Cloud Hystrix隔离、熔断、降级与实践
为什么服务要进行隔离、熔断、降级?当服务出现异常时可以和其他服务隔离开来,不影响其他服务
隔离:将请求封装在HystrixCommand中,然后这些请求在一个独立的线程中执行,每个依赖服务维护一个小的线程池(或信号量),
在调用失败或超时的情况下可以断开依赖调用或者返回指定逻辑
熔断:当HystrixCommand请求后端服务失败数量超过一定比例(默认50%), 断路器会切换到开路状态(Open).
这时所有请求会直接失败而不会发送到后端服务,断路器保持在开路状态一段时间后(默认5秒),
自动切换到半开路状态(HALF-OPEN),这时会判断下一次请求的返回情况, 如果请求成功,
断路器切回闭路状态(CLOSED),否则重新切换到开路状态(OPEN)
降级:服务降级是指当请求后端服务出现异常的时候, 可以使用fallback方法返回的值
基本的容错模式
1.主动超时:Http请求主动设置一个超时时间,超时就直接返回,不会造成服务堆积
2.限流:限制最大并发数
3.熔断:当错误数超过阈值时快速失败,不调用后端服务,同时隔一定时间放几个请求去重试后端服务是否能正常调用,
如果成功则关闭熔断状态,失败则继续快速失败,直接返回。(此处有个重试,重试就是弹性恢复的能力)
4.隔离:把每个依赖或调用的服务都隔离开来,防止级联失败引起整体服务不可用
5.降级:服务失败或异常后,返回指定的默认信息