实例隔离和熔断隔离的区别
刚使用CSE开发微服务时,用户往往区分不太清负载均衡里的实例隔离,和降级策略里的熔断,有什么区别。
概念区分:
熔断降级策略里的隔离相当于只是一个检测机制,用来检测服务错误状态,用来启动熔断降级措施的,可以看一下hystrix的定义https://github.com/Netflix/Hystrix/wiki/Configuration;
负载均衡策略的隔离是把某个有问题的微服务实例隔离出去,暂时不调用它;
效果差异:
熔断降级里面的隔离触发后调用的是熔断降级的逻辑,所以他们之间的效果差异就是熔断降级和LB的实例隔离的差异;
1. 生效级别的差异
熔断降级里面的效果,直白点说是服务-接口级的,一旦某个服务A的某个接口OP1触发了熔断,那么这个接口在一段时间内都不能被调用,也就是这个服务的任意一个实例的OP1接口都不会被调用了,但是服务A的实例的OP2、3之类的接口是可以被调用的。
而LB里面的实例隔离,是服务A下面的实例a1有问题,那么a1完全不会接收到请求(OP1、OP2……等所有a1实例的接口都没有请求),但是a2、a3……实例仍然会被调用。
2. 生效后的效果差异
熔断降级生效后,服务的某个接口被熔断,无法调用,请求会走到降级逻辑来处理(除非你把降级关了),我们默认提供的降级逻辑有returnnull和throwexception,默认是throwexception。换言之你在默认降级逻辑里拿不到真实应答的。
而LB 的实例隔离触发了,只是某个实例不能被调用,但是其他实例还可以继续用,所以只要你不是所有的实例都被隔离了,理论上还是能够正常调用和处理业务。
- 点赞
- 收藏
- 关注作者
评论(0)