服务雪崩:
简单举例 A端依赖B端,当B端出现故障不能正常访问,其上游A服务出现因线程资源耗尽导致的服务不可用状态。因为 B端的上游可能有很多服务,严重的会影响整个服务处于不可用状态,导致服务雪崩。
服务隔离:
系统拆分为多个对立的模块,当某一个模块发生了故障,将故障影响隔离在某个模块内部而不发送故障传播导致大面积故障。 如果整个系统雪崩是由于一个接口导致的,由于这一个接口响应不及时导致问题,那么我们 就有必要对这个接口进行隔离,就是只允许这个接口最多能接受多少的并发,做了这样的限制后,该接口的主机就会空余线程出来接收其他的情况,不会被哪个坏了的接口占用资源过多导致整个服务不可用
服务隔离实现方式:
线程池---每一个方法的调用会占用一个线程资源会有额外的内存消耗,但是相应时间相对较快
信号量 --采用一个全局变量来控制并发量,达到配置最大配置数量不再接受用户请求了
服务降级:
客户端降级:服务调用异常时的友好封装,并不会将异常信息抛给上游会做一下封装。
服务熔断
当服务在一定时间内请求次数达到阈值并且失败几率也达到阈值时开启熔断(直接调用降级方法),熔断是服务自身的一种保护 机制。
当一定时间内请求次数达到阈值并且失败几率也达到阈值时熔断开启,过一定配置时间后会变为半开启状态,此时进来请求如果可以调用成功则关闭熔断,如果失败则继续开启熔断。