高并发的场景下,A服务会调用B,C,D服务。由于B服务的异常导致所有工作线程卡在那里,导致A服务没有任何其他工作线程去调用C,D服务,导致A不再能响应任何服务。
Hystrix是隔离、熔断以及降级的一个框架。啥意思呢?说白了,Hystrix会搞很多个小小的线程池,比如订单服务请求库存服务是一个线程池,请求仓储服务是一个线程池,请求积分服务是一个线程池。每个线程池里的线程就仅仅用于请求那个服务。
一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施,所以很多地方把熔断亦称为过载保护。
依旧看上图,如果“积分服务”都挂了,每次调用都要去卡住几秒钟干啥呢?有意义吗?当然没有!**所以我们直接对积分服务熔断不就得了,比如在5分钟内请求积分服务直接就返回了,不要去走网络请求卡住几秒钟,这个过程,就是所谓的熔断!
客户端从整体网站请求负载考虑,当某个服务熔断或者关闭之后, 服务将不再被调服。此时在客户端,我们可以准备一个FallbackFactory,返回“一个默认的值”,整体的服务水平下降但足,好歹能用, 比直接挂掉强。
依旧看上图,**那人家又说,兄弟,积分服务挂了你就熔断,好歹你干点儿什么啊!别啥都不干就直接返回啊?**没问题,咱们就来个降级:每次调用积分服务,你就在数据库里记录一条消息,说给某某用户增加了多少积分,因为积分服务挂了,导致没增加成功!这样等积分服务恢复了,你可以根据这些记录手工加一下积分。这个过程,就是所谓的降级。
SpringCloud - 服务雪崩 vs 服务熔断 vs 服务降级
原文:https://www.cnblogs.com/frankcui/p/14386604.html