SpringCloud熔断器Hystrix —或者叫保险丝?或者叫备胎模式??
熔断
–借话
在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,
这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。
–借图
–图解
是这样子的
B是A的服务调用者 CD是B服务的调用者
刚开始只是A服务有问题 但是问题不大,可能马上等会会就会恢复正常,但是B不管这些还非得一直调用
结果导致自身也出问题,最终因为项目的一个模块出错导致整个项目崩溃。
Hystrix
而熔断器的作用是干啥的呢?
在服务的调用者调用服务时提供端出现错误一定几率(默认50%)后切断后来的请求,转为开路状态(OPEN),给服务提供者一定时间恢复
一定时间(默认5秒)过后,转为半开路状态(HALF-OPEN),下次请求会发送,并跟踪其返回结果,如果成功闭路(CLOSED),失败则开路
开路期间所有请求会直接失败,(开路期间是直接失败,即使是高可用(多个服务提供者)也是直接失败而不是指向另一个服务)
我测试的时候确实是这样,可能有更高级的配置。
开路(OPEN):所有请求直接失败
半开路(HALF-OPEN) :发送下次请求,并检测其是否失败
闭路(CLOSED):请求正常通过
用起来很简单零编码(真香…)在之前的基础上不用添加依赖(Feign中依赖了Hystrix所以不需要额外引入依赖)
因为熔断只熔断调用端,所以只需要在调用端配置一下
feign:
hystrix:
enabled: true
Fallback
看名字是个回调专业人士称降级处理,就是在调用服务产生异常以后的执行
调用的Service只是一个接口没有实现,而这次只需要实现它,加上注解,
注意并不是左右的操作都应该这样,如果只是查询操作 可以查询实现准备好的数据
但是如果是增删改那就不能了。
测试
让ucenter报错,然后webbase使用降级处理