当前位置: 首页 > 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,可以提高系统的可用性、稳定性和性能。

相关文章:

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

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

IT运维管理系统在国有大型企业网络中的应用和可以解决的问题

随着国有大型企业业务的快速发展&#xff0c;网络运维管理面临着诸多挑战。本文将从问题概述、解决方案、监控易优势、实际案例和总结等方面阐述IT运维管理系统在国有大型企业网络中的应用和可以解决的问题。​IT运维管理系统&#xff1a;国有大型企业网络的变革者与解决之道 一…...

嵌入式实时操作系统的设计与开发 (线程操作学习)

在aCoral操作系统中&#xff0c;线程退出采用了和Linux一样的方式&#xff0c;线程函数不用死等或显示调用退出相关函数&#xff0c;也就是说用户不用担心函数执行完后的事情。 uc/OS II任务函数与退出 void test(void *ptr){Do_something();while(1); }void test(void *ptr)…...

竞赛 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…...

【RTOS学习】同步与互斥 | 队列

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 同步与互斥 | 队列 &#x1f349;同步与互斥&#x1f366;同步&#x1f366;互斥 &#x1f349;队…...

Python订单生成器+队列+异步提高性能和容错

以下代码实现了一个订单生成器&#xff0c;使用 asyncio 和 aioredis 库实现了高并发地生成订单&#xff0c;并将新增订单异步更新到数据库。具体实现流程如下&#xff1a; 初始化 OrderGenerator 类。传入 Redis 服务器地址和并发数&#xff0c;在初始化函数中设置并发数和一…...

理德名人故事:全球投资之父-约翰.邓普顿

说到约翰‧邓普顿&#xff0c;我们就会想到他的很多标签。比如全球投资之父、史上最成功的基金经理等等。他是邓普顿集团的创始人&#xff0c;一直被誉为全球最具智慧以及最受尊崇的投资者之一。福布斯资本家杂志称他为"全球投资之父"及"历史上最成功的基金经理…...

微前端三:qiankun 协作开发和上线部署

我们先看qiankun怎么上线部署&#xff1a; 我这边用的是yaml 文件在 rancher上部署的&#xff1a; base是基座&#xff0c;这里每个应用都是一个服务&#xff0c;这个还是跟之前一样并没有区别&#xff0c;那如何在一个域名上挂载多个服务呢&#xff1f; 最开始我们主要是在in…...

HTML三叉戟,标签、元素、属性各个的意义是什么?

&#x1f31f;&#x1f31f;&#x1f31f; 专栏详解 &#x1f389; &#x1f389; &#x1f389; 欢迎来到前端开发之旅专栏&#xff01; 不管你是完全小白&#xff0c;还是有一点经验的开发者&#xff0c;在这里你会了解到最简单易懂的语言&#xff0c;与你分享有关前端技术和…...

prometheus获取kubelet接口监控数据

一、前言 k8s集群的kubelet服务内部有自带的cadvisor服务用于收集k8s集群的监控数据&#xff0c;所以可以通过调用kubelet的接口就能获取pod的资源监控数据&#xff0c;在新版本的k8s中&#xff0c;kubelet的监控数据获取端口为10250端口&#xff0c;老版本的是10255端口 二、…...

国产主控应用案例:汉王电子血压计-君正开发板

2023春季新品发布会上汉王科技发布柯氏音法电子血压计产品—汉王电子血压计&#xff0c;继嗅觉检测盒之后再次深度布局大健康领域。 不同于当前市面上使用示波法原理的电子血压计&#xff0c;汉王电子血压计采用血压测量金标准中的柯氏音法&#xff0c;由此引领一场电子血压计领…...

万宾科技智能井盖传感器特点介绍

当谈论城市基础设施的管理和安全时&#xff0c;井盖通常不是第一项引人注目的话题。然而&#xff0c;传统井盖和智能井盖传感器之间的差异已经引起了城市规划者和工程师的广泛关注。这两种技术在功能、管理、安全和成本等多个方面存在着显著的差异。 WITBEE万宾智能井盖传感器E…...

YoloV8改进策略:SwiftFormer,全网首发,独家改进的高效加性注意力用于实时移动视觉应用的模型,重构YoloV8

文章目录 摘要论文:《SwiftFormer:基于Transformer的高效加性注意力用于实时移动视觉应用的模型》1、简介2、相关研究3、方法3.1、注意力模块概述3.2、高效的加性注意力3.3、SwiftFormer 架构4、实验4.1、实现细节4.2、基线比较4.3、图像分类4.4、目标检测和实例分割4.5、语义…...

Jupyter Notebook在指定位置打开

1、在Jupyter Notebook设置文件中修改默认路径 anconda prompt输入&#xff1a; jupyter notebook --generate-config 找到配置文件路径&#xff1a;C:\Users\Lenovo.jupyter 打开文件&#xff0c;修改默认路径&#xff1a; ## The directory to use for notebooks and kernel…...

树控件的使用

目录 1、修改树控件的基础属性&#xff1a; 2、准备图标 &#xff1a; &#xff08;1&#xff09;、ico后缀的图片放入当前文件路径的rc中 &#xff08;2&#xff09;、在Icon中添加资源&#xff0c;导入图片 &#xff08;3&#xff09;、准备HICON图标 &#xff08;4&am…...

C++实现顺序栈类的定义,编写main ()函数验证顺序栈类设计的合理性

C实现顺序栈类的定义&#xff0c;编写main ()函数验证顺序栈类设计的合理性 以下是一个简单的C代码示例&#xff0c;用于实现顺序栈类的定义并编写main()函数来验证其合理性&#xff1a; #include <iostream> using namespace std;const int MAX_SIZE 100; // 定义栈的…...

手机直播助手软件app哪个好用?

手机直播助手软件现在可谓是多如牛毛&#xff0c;从上半年魔棒手机自动直播软件上线以来。几乎全国所有的科技公司都效仿魔棒手机自动直播软件兴起手机直播助手开发热。相对来说&#xff0c;简单的手机直播助手软件没什么技术门槛。但是手机无人直播助手软件要做精做全则很难。…...

腾讯待办宣布关停,哪款待办事项提醒APP好?

如果你之前一直使用微信中的“腾讯待办”小程序来记录待办事项并设置定时提醒&#xff0c;那么你就会发现腾讯待办在2023年10月16日通过其官方微信公众号、小程序发布了业务关停公告&#xff0c;将于2023年12月20日全面停止运营并下架&#xff0c;并且有导出数据的提示。 腾讯…...

【单片机毕业设计】【hj-006-7】CO、有害混合气体检测 | 空气质量检测 | 有害气体检测

一、基本介绍 项目名&#xff1a; 基于单片机的CO、有害混合气体检测系统设计 基于单片机的空气质量检测系统设计 基于单片机的有害气体检测系统设计 项目编号&#xff1a;mcuclub-hj-006-7 单片机类型&#xff1a;STC89C52 具体功能&#xff1a; 1、通过MQ-7检测CO值&#x…...

wpf主页面解析

1、 开头的网址作用 1和2都是引入命名空间的&#xff0c;每一个字符串代表一系列的命名空间&#xff0c;这样就可以不用一个一个引用了。wpf中规定有一个名称空间是可以不加名字的&#xff0c;xmlns不加名字是默认命名空间。 "http://schemas.microsoft.com/winfx/2006/x…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...