博客
关于我
Hystrix 实战经验分享
阅读量:458 次
发布时间:2019-03-06

本文共 1618 字,大约阅读时间需要 5 分钟。

一、背景

Hystrix是一款由Netflix开源的容错框架,具有服务降级、服务熔断、依赖隔离以及监控功能。尽管官方已不再维护,但它仍然在许多项目中得到应用。本文将结合实际项目经验,分享Hystrix的使用经验与心得。

二、经验总结

2.1 资源隔离策略的选择

Hystrix提供两种资源隔离策略:线程池和信号量。选择哪种策略需要根据业务场景综合评估。通常推荐使用线程池隔离,但在特定场景下可能会选择信号量隔离。例如,在使用缓存时,信号量隔离可能更合适,因为它减少了线程切换的开销。

2.2 线程池大小与超时时间设置

线程池大小和超时时间的设置对系统性能至关重要。Hystrix官方建议使用以下公式进行设置:

  • 线程池大小 = 服务TP99响应时长(单位秒) × 每秒请求量 + 冗余缓冲值
  • 超时时间(单位毫秒) = 1000 / 每秒请求量
例如,某服务TP99响应时长为200ms,每秒接收30个请求,则线程池大小为10,超时时间为300ms。

2.3 注解叠加

在实际开发中,可能会遇到多个注解同时作用于同一方法的情况。例如,结合缓存注解和Hystrix注解时,需要注意注解的执行顺序。通过@Order注解可以保证Hystrix注解在最内层执行,避免缓存异常导致方法被熔断。另外,远程调用中的异常处理也需要谨慎对待,避免异常被“吞噬”。

2.4 服务的异常处理

在Hystrix命令中,异常处理需要特别注意以下几点:

  • 非系统调用异常(如参数校验失败)不应影响熔断逻辑。建议将这些异常抛出HystrixBadRequestException。
  • 远程调用的异常处理需谨慎。建议在try-catch中记录日志后,将异常重新抛出,以便Hystrix统计网络异常等信息。

2.5 fallback方法

Hystrix的fallback方法用于服务优雅降级,但需要注意以下几点:

  • fallback方法的访问级别和参数需与依赖服务一致。
  • fallback方法的逻辑应尽量轻量,避免远程调用。
  • 对于写操作的远程调用不建议使用fallback降级。

2.6 groupKey、commandKey、threadPoolKey

在Hystrix中,这三个Key具有重要作用:

  • groupKey:用于对命令分组,便于数据统计和监控。默认值为方法所在类名。
  • commandKey:用于标识具体命令,默认值为方法名。
  • threadPoolKey:用于指定线程池,默认值为groupKey。如果需要单独指定线程池,建议通过threadPoolKey来实现。

2.7 参数优先级

Hystrix默认提供四种参数优先级:

  • 全局默认值:如execution.isolation.thread.timeoutInMilliseconds默认值为1000ms。
  • 动态全局默认参数:通过hystrix.command.default配置。
  • 实例初始值:配置在注解中。
  • 动态实例参数:通过hystrix.command.HystrixCommandKey配置。
优先级关系为:动态实例参数 > 实例初始值 > 动态全局默认参数 > 全局默认值。

2.8 基于配置中心实现参数动态配置

Hystrix默认通过Archaius实现动态参数配置。在分布式项目中,建议结合配置中心进行统一管理。通过自定义扩展实现,可以实现基于SPI机制或Archaius的动态属性获取。

例如,可以定义CustomDynamicProperty实现类,并通过SPI注册到HystrixDynamicProperties中。同时,配置中心需要监听配置修改并触发相应的更新回调。

写在最后

以上内容是对Hystrix使用经验的总结,结合实际项目中的实战经验,希望对开发者有所帮助。通过合理配置隔离策略、线程池设置、注解管理以及动态参数配置,可以更好地利用Hystrix的优势,提升系统的容错能力和性能。

转载地址:http://bvwbz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现intersection交集算法(附完整源码)
查看>>
Objective-C实现intro sort内省排序算法(附完整源码)
查看>>
Objective-C实现inversions倒置算法(附完整源码)
查看>>
Objective-C实现isalpha函数功能(附完整源码)
查看>>
Objective-C实现islower函数功能(附完整源码)
查看>>
Objective-C实现isPowerOfTwo算法(附完整源码)
查看>>
Objective-C实现isupper函数功能(附完整源码)
查看>>
Objective-C实现ItemCF算法(附完整源码)
查看>>
Objective-C实现ItemCF算法(附完整源码)
查看>>
Objective-C实现iterating through submasks遍历子掩码算法(附完整源码)
查看>>
Objective-C实现jaccard similarity相似度无平方因子数算法(附完整源码)
查看>>
Objective-C实现Julia集算法(附完整源码)
查看>>
Objective-C实现k nearest neighbours k最近邻分类算法(附完整源码)
查看>>
Objective-C实现k-Means算法(附完整源码)
查看>>
Objective-C实现k-nearest算法(附完整源码)
查看>>
Objective-C实现Knapsack problem背包问题算法(附完整源码)
查看>>
Objective-C实现knapsack背包问题算法(附完整源码)
查看>>
Objective-C实现knapsack背包问题算法(附完整源码)
查看>>
Objective-C实现knight tour骑士之旅算法(附完整源码)
查看>>
Objective-C实现KNN算法(附完整源码)
查看>>