当前位置: 首页 > news >正文

提升微服务稳定性与性能:深入剖析Netflix Hystrix框架

说到 Netflix Hystrix 框架,一定离不开 com.netflix.hystrix.HystrixCommand,这个类是 Netflix 开源的 Hystrix 框架中的一个关键类,用于实现服务的容错和熔断功能。它主要用于将远程服务调用封装成一个独立的命令对象,以便于进行容错处理和监控。

一、核心源码

源码中有几个关键方法,具体方法以及注释看下面的代码:

public abstract class HystrixCommand < R > extends AbstractCommand < R > implements HystrixExecutable< R >, HystrixInvokableInfo< R >, HystrixObservable< R > {/*** 用于【同步】执行命令*/public R execute() {try {return queue().get();}catch(Exception e) {throw Exceptions.sneakyThrow(decomposeException(e));}}/*** 用于【异步】执行命令。*/public Future< R > queue() {return f;}/*** execute() 或 queue()失败的时候,返回兜底数据*/protected R getFallback() {throw new UnsupportedOperationException("No fallback available.");}/*** execute() 和 queue() 被调用的时候,执行的方法*/protected abstract R run() throws Exception;
}
二、HystrixCommand 的主要功能及使用场景
  1. 容错处理:HystrixCommand 通过封装远程服务调用,可以在服务调用失败或超时时执行降级逻辑,避免整个系统的级联故障。它提供了一系列的容错策略,如超时设置、线程池隔离、断路器等,可以根据具体的业务需求进行配置。

  2. 熔断机制:HystrixCommand 通过断路器的机制,可以在服务调用失败率超过一定阈值时自动熔断,避免对不可用的服务进行无效的调用。熔断后,HystrixCommand 会快速失败,并执行预设的降级逻辑,以减少对不可用服务的依赖。

  3. 监控和统计:HystrixCommand 提供了丰富的监控和统计功能,可以实时监控服务调用的成功率、失败率、响应时间等指标,并提供了可视化的仪表盘。这些统计数据可以帮助开发人员了解服务的健康状况,及时发现和解决潜在的问题。

HystrixCommand 的使用场景主要包括:

  1. 微服务架构:在微服务架构中,服务之间的调用是不可避免的。使用 HystrixCommand 可以有效地处理服务调用的容错和熔断问题,提高系统的可用性和稳定性。

  2. 高并发场景:在高并发的场景下,如果某个服务出现故障或响应缓慢,会导致整个系统的性能下降。使用 HystrixCommand 可以通过设置超时时间和线程池隔离等策略,避免因单个服务的故障而影响整个系统的性能。

  3. 服务降级:在一些特殊情况下,为了保证核心功能的可用性,可能需要对某些非关键的功能进行降级处理。使用 HystrixCommand 可以方便地实现服务的降级逻辑,保证核心功能的稳定性。

三、业务场景

多个独立的业务逻辑场景非常适合使用 Netflix Hystrix 框架,它能并发执行所有的业务逻辑,帮我们提升系统的访问速度。

也能方便的监控每个业务逻辑执行时发生的异常、超时等异常,也很方便配置各个业务逻辑的兜底(fallback)等。

具体的业务场景如:多个独立的弹窗、多个独立的展示数据。这种业务场景都是一个页面位置中可能出现多种业务。

四、应用代码示例
4.1 抽象类

定制化自己的 AbstractCustomerCommand 类,这个类能够实现所有业务逻辑通用的逻辑。

也能实现,对每个业务逻辑发生 reject、异常、超时、熔断的时候的监控和日志。

public abstract class AbstractCustomerCommand<R> extends HystrixCommand<R> {private final static Logger logger = LoggerFactory.getLogger(AbstractCustomerCommand.class);public String key;protected AbstractSecondScreenCommand(CommandThreadEnum commandThreadEnum) {}@Overrideprotected R run() throws Exception {long t1 = System.currentTimeMillis();R r = null;try {r = doExecute(t1);} finally {long cost = System.currentTimeMillis() - t1;}return r;}@Overrideprotected R getFallback() {boolean isRejected = isResponseRejected();boolean isException = isFailedExecution();boolean isTimeout = isResponseTimedOut();boolean isCircuit = isCircuitBreakerOpen();// 添加异常情况的日志和监控logger.error("{} fallback happened,isRejected:{},isException:{},isTimeout:{},isCircuit:{}",key, isRejected, isException, isTimeout, isCircuit);Throwable exception = getExecutionException();if (exception != null) {logger.error("{} fallback", key, exception);}return null;}protected abstract R doExecute(long start);/*所有业务逻辑统一逻辑*/public void commonLogic() {}
}
4.2 具体的业务场景类
@Slf4j
public class Case1Command extends AbstractCustomerCommand<User> {// 构造函数public LowPriceAreaCommand() {}@Overrideprotected DisplayCard doExecute(long start) {// 具体业务逻辑}
}
4.3 执行
Case1Command caseCommand = new Case1Command();
// 异步执行
caseCommand.queue();
四、总结

com.netflix.hystrix.HystrixCommand 是 Netflix Hystrix 框架中的核心类,用于实现服务的容错和熔断功能。

它通过封装远程服务调用,提供容错处理、熔断机制和监控统计等功能,适用于微服务架构和高并发场景。通过使用 HystrixCommand,可以提高系统的可用性、稳定性和性能。

http://www.lryc.cn/news/198436.html

相关文章:

  • IT运维管理系统在国有大型企业网络中的应用和可以解决的问题
  • 嵌入式实时操作系统的设计与开发 (线程操作学习)
  • 竞赛 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv
  • 【RTOS学习】同步与互斥 | 队列
  • Python订单生成器+队列+异步提高性能和容错
  • 理德名人故事:全球投资之父-约翰.邓普顿
  • 微前端三:qiankun 协作开发和上线部署
  • HTML三叉戟,标签、元素、属性各个的意义是什么?
  • prometheus获取kubelet接口监控数据
  • 国产主控应用案例:汉王电子血压计-君正开发板
  • 万宾科技智能井盖传感器特点介绍
  • YoloV8改进策略:SwiftFormer,全网首发,独家改进的高效加性注意力用于实时移动视觉应用的模型,重构YoloV8
  • Jupyter Notebook在指定位置打开
  • 树控件的使用
  • C++实现顺序栈类的定义,编写main ()函数验证顺序栈类设计的合理性
  • 手机直播助手软件app哪个好用?
  • 腾讯待办宣布关停,哪款待办事项提醒APP好?
  • 【单片机毕业设计】【hj-006-7】CO、有害混合气体检测 | 空气质量检测 | 有害气体检测
  • wpf主页面解析
  • 三相交错LLC软启动控制程序算法实现---充电桩电源设计实战细节
  • Chrome 115之后的版本,安装和使用chromedriver
  • 潮玩宇宙:收藏、交流与竞技的数字乐园
  • 企拓客app骗局为不实信息,企拓客保持正常经营状态
  • 【性能】JDK和Jmeter的安装与配置
  • 02_单片机及开发板介绍
  • 华测监测预警系统 2.2---任意文件读取漏洞
  • 新版多功能去水印工具微信小程序源码下载+带流量主功能
  • 文章必备| 叶绿体基因组高级分析内容汇总
  • 阿里实习JAVA后端面经总结
  • 利用 NLP 超能力:一步步介绍Hugging Face微调教程