服务降级模式
1、快速失败
快速失败模式是指在服务降级处理逻辑中不提供任何处理,直接抛出一个异常。
2、静默失败
静默失败即当进行服务降级处理时返回空的结果,针对返回值类型,返回的可能是null、空List或者空Map等。
3、返回默认值
4、返回组装的值
当我们的执行结果返回的是一个包括多个字段的复杂对象时,就可以通过服务请求中的值及一些默认值来组装这个返回结果。比如从cookie、服务请求的参数及header、之前成功返回的结果中获取返回结果需要的值。
如果是继承HystrixObservableCommand且返回多个值,当服务降级时仅希望返回为出错之前的结果。
5、返回远程缓存
返回远程缓存是指在服务处理失败的情况下再发起一起远程请求,不过这次请求的是一个缓存,比如读取Redis中的缓存结果。
当使用远程缓存时,需要重新封装为Command进行调用。执行fallback的线程一定要与主线程区分开,否则可能会造成主线程休眠,线程池被消耗光。
6、主/从降级模式
如果从模式仅仅是用来作为主服务失败时的辅助处理,那么最好的方式是将主模式和从模式使用门面模式重新构建一个新的命令。
注意:由于主/从命令都是采用线程池隔离方式执行的,那么所构建的门面命令则可以使用信号量隔离方式,避免了系统多余的开销。
代码示例:
请求缓存
Hystrix提供的请求缓存可以在CommandKey/CommandGroup相同的情况下,直接共享命令执行的结果,降低依赖调用次数,在高并发和CacheKey命中率高场景下可以提升服务性能。
1、清除缓存
2、判断是否是从缓存中返回
HystrixCommand中提供了isResponseFromCache()方法,判断是否从请求缓存中返回。
也可以使用注解:
@CacheResult:标记返回结果需要进行缓存,该注解要与@HystrixCommand注解一起使用。
@CacheKey:用来标记如果构建缓存的值。
@CacheRemove:用来标记在方法执行完毕后清除指定的缓存。
领取专属 10元无门槛券
私享最新 技术干货