微服务项目中,微服务得服务负载过高,导致运行性能下降,会导致其他调用他们得链条出现问题,从而所有得项目都可以出现问题,这种情况下称之为灾难性得雪崩效应。
造成雪崩得击穿:服务提供者不可用:硬件故障,程序bug,缓存击穿,并发请求量过大..
重试加大流量:用户重试,代码充实逻辑等
服务调用者不可用:同步请求阻塞造成得资源耗尽等。
雪崩效应造成得结果就是:服务链条中某一个服务不可用,导致一系列得服务不可用,最终造成服务逻辑崩溃。
如何防止?降级
超时降级,资源不足时降级,降级后可以配合降级接口返回拖底数据,实现一个fallback方法,当请求后端服务出现问题得时候,可用使用fallback返回得值。
保证服务出现问题整个项目还可以继续运行。
熔断
当失败率达到一个阈值就自动触发降级,熔断器触发的快速失败会进行快速恢复。熔断和降级使用的是同一个注解。
熔断自动恢复机制:当熔断启动后,每隔5秒,常识新的请求发送给Application Service 如果服务器还可以正常运行并返回觉果,则关闭熔断器,服务恢复,如果仍调用失败,就继续返回拖地数据,熔断器持续开启状态。
保证了服务出现问题整个项目还可以继续运行。
降级是出错了返回拖地数据,熔断是出错后开启熔断将不再访问application service。
请求缓存
提供了请求缓存,服务A调用服务B,如果A中添加了请求缓存,第一次请求后走缓存了,就不在访问服务B,即使出现大量请求时,也不会对B产生高负载。
请求缓存,可用使用Spring Cache实现
保证减少对Application Service的调用。
请求合并
提供请求合并,当服务A调用服务B时,设定在5毫秒内所有请求合并到一起,对于服务B的负载就会大大减少,解决了对于服务B负载激增的问题。返回值必须是Future类型才能进行合并。
保证了减少对Application Service的调用。
隔离
隔离分为线程池隔离和信号量隔离,通过判断线程池或信号量是否已满,超出容量的请求直接降级,达到限流的作用。



