Hystrix 原理

Hystrix是什么?

Hystrix是Netflix开源库,这是一个针对分布式系统的延迟和容错库。

在这里插入图片描述

Hystrix 供分布式系统使用,提供延迟和容错功能,隔离远程系统、访问和第三方程序库的访问点,防止级联失败,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。

Netflix称,在分布式环境中,不可避免会造成一些服务的失败。Hystrix 库旨在控制分布式服务中提供更大容限和服务失败之间的相互关系。Hystrix 通过隔离访问远程系统、服务和第三方库的点,阻止级联故障,从而使复杂的分布式系统更具弹性。

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

简单说,在日益庞大的微服务系统中,Hystrix的作用就是来避免当某个服务发生故障时,形成发散型的影响,导致越来越多的服务故障。

Hystrix有什么?

资源隔离

包括线程池隔离和信号量隔离,限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。

Hystrix隔离模式–信号量模式

当 n 个并发请求去调用一个目标服务接口时,都要获取一个信号量才能真正去调用目标服务接口,但信号量有限,默认是 10 个(通过maxConcurrentRequests参数配置),如果并发请求数多于信号量个数,就有线程需要进入队列排队,但排队队列也有上限,默认是 5,如果排队队列也满,则必定有请求线程会走 fallback 流程,从而达到限流和防止雪崩的目的。

Hystrix隔离模式–线程池模式

当 n 个请求线程并发对某个接口请求调用时,会先从 hystrix 管理的线程池里面获得一个线程,然后将参数传递给这个线程去执行真正调用。线程池的大小有限,默认是 10 个线程(maxConcurrentRequests参数配置),如果并发请求数多于线程池线程个数,就有线程需要进入队列排队,但排队队列也有上限,默认是 5,如果排队队列也满,则必定有请求线程会走 fallback 流程。

线程池模式可以支持异步调用,支持超时调用,支持直接熔断,存在线程切换,开销大。

两种模式的对比

在这里插入图片描述

通过二者的对比,我们可以发现信号量模式比较适用于一些业务逻辑比较复杂的访问,而线程池的适用性比较普遍,特别是对外的服务访问

降级机制

什么是降级?

当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。

降级机制有哪些?

超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据。

服务融断

服务熔断是什么?

一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施,所以很多地方把熔断亦称为过载保护。

为什么需要服务熔断?

很多时候刚开始可能只是系统出现了局部的、小规模的故障,然而由于种种原因,故障影响的范围越来越大,最终导致了全局性的后果。 适用场景:防止应用程序直接调用那些很可能会调用失败的远程服务或共享资源

缓存

缓存在高并发的环境下使用,能够有效地减少服务器的压力, 使用Hystrix返回结果缓存,后续请求可以直接调用缓存数据。

缓存的使用

开启请求缓存:在实现HystrixCommand或HystrixObservableCommand时,通过重载getCacheKey()方法来开启请求缓存

清理失效缓存功能:Hystrix中,可以通过HystrixRequestCache.clear()方法来进行缓存的清理,适用于对缓存数据进行更新的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「深度」无人机实名制政策特稿|市场看好、资本关注,“反黑飞”正在崛起

从政策和需求来看,“反黑飞”越来越重要,市场也正在不断崛起。 对于大多数人来说,今天是最适合明目张胆“装嫩”的六一儿童节。不过,在无人机厂商和无人机玩家的眼里,今天是无人机实名制政策正式实施的日子。 近年来&…

在navicat中新建数据库

前言: 在本地新建一个名为editor的数据库; 过程: 1.; 2.选择:utf8mb4 -- UTF-8 Unicode字符集,原因在于:utf8mb4兼容utf8,且比utf8能表示更多的字符。,而且它支持表情符号…

MASA Stack 第三期社区例会

MASA Blazor 0.5.0发版内容功能Autocomplete:支持通过设置AutoSelectFirst参数开启自动选择第一项的功能,支持CacheItems参数,增强使用上下键的用户体验。BottomNavigation::一个替代侧边栏的新组件。它主要用于移动应…

MySQL添加用户、删除用户与授权

MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 1.1 登录MYSQL: >mysql -u root -p >密码 1.2 创建用户: mysql> insert into mysql.user(Host,User,Password) values("lo…

[转]高并发架构设计之--「服务降级」、「服务限流」与「服务熔断」

目录 服务降级 1 、简介 2 、使用场景 3 、核心设计 3.1 分布式开关 3.2 自动降级分类 3.3 配置中心 3.4 处理策略 3.5 降级分类 3.6 服务降级要考虑的问题 4 、高级特性 4.1 分级降级 4.2 降级权值 5 、总结与展望 服务限流 一、为什么要做服务限流设计&…

【Linux】【Services】【nfs】nfs安装与配置

1. 概念 1.1. NFS:Network File System,传统意义上,文件系统在内核中实现。 1.2. RPC:Remote Procedure Call protocol,远程过程调用,函数调用(远程主机上的函数) 1.3. 端口&#xf…

SpringBoot获取ApplicationContext

2019独角兽企业重金招聘Python工程师标准>>> 有两种方法: 创建Component实现ApplicationContextAware接口,SpringBoot会自动调用这个类的setApplicationConext()方法。鼓励使用这种方式。SpringApplication.run(MyApplication.class, args)这…

SkiaSharp 之 WPF 自绘 投篮小游戏(案例版)

此案例主要是针对光线投影法碰撞检测功能的示例,顺便做成了一个小游戏,很简单,但是,效果却很不错。投篮小游戏规则,点击投篮目标点,就会有一个球沿着相关抛物线,然后,判断是否进入篮…

zuul集成ribbon完成服务通信和负载均衡

目录 Zuul2服务通信 超时相关 默认超时配置 自定义超时配置 负载均衡 Zuul2服务通信 描述:zuul2通过Ribbon完成客户端负载均衡以及与服务器群集进行通信。 zuul2的通信是集成Ribbon实现的,在Origin中集成Ribbon基本配置(例如IClientCo…

时任上海来伊份互联网事业群总裁王戈钧 :传统企业(线上+线下)移动互联网改造...

2017年12月22日-23日,第13届信息化领袖峰会暨2017中国数字化贡献人物颁奖盛典在上海盛大开幕。本次峰会由上海市经济和信息化委员会指导,上海市国有资产信息中心、上海市计算机用户协会、上海市信息服务业行业协会、上海大数据联盟、上海市高等教育学会支…

Linux系统时间\硬件时间(date、tzselect、clock、hwclock、ntpdate)

1、系统时间和硬件时间 在Linux中有硬件时钟与系统时钟两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。所有Linux相关指令与函数都是读取系统时钟的设定。因为存在两种不同的时钟,那么它们…

C#------如何判断输入的是否为纯数字

private void Btn_OK_Click(object sender, EventArgs e){IDormitoryAdminCardService aservice new DormitoryAdminCardService();string text this.CardNoEdit.Text;//判断是否输入的是纯数字string pattern "^[0-9]*$";Regex regex new Regex(pattern);if (re…

【.NET6+Modbus】Modbus TCP协议解析、仿真环境以及基于.NET实现基础通信

接下来的内容,我会以从头开发一个简单的基于modbus tcp通信的案例,来实现一个基础的通信功能。有关环境:开发环境:VS 2022企业版运行环境:Win 10 专业版.NET 环境版本:.NET 6【备注】 源码在文末 1、新建一…

源码深度剖析Eureka与Ribbon服务发现原理

本文基于 spring cloud dalston,同时文章较长,请选择舒服姿势进行阅读。 Eureka 与 Ribbon 是什么?和服务发现什么关系? Eureka 与 Ribbon 都是 Netflix 提供的微服务组件,分别用于服务注册与发现、负载均衡。同时&a…

3月6日云栖精选夜读:如何实现32.5万笔/秒的交易峰值?阿里交易系统TMF2.0技术揭秘...

交易平台遇到的挑战 2017双11,交易峰值达到了32.5万笔/秒,这给整个交易系统带来了非常大的挑战。 一方面,系统需要支撑全集团几十个事业部的所有交易类需求:要考虑如何能更快响应需求、加快发布周期;如何能为新小业务提…

std的find和reverse_iterator联合使用

上代码&#xff1a; // test2013.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include<iostream> #include<vector> #include<map> #include<string> using namespace …

论如何提升学习的能力

为啥要学习如果有一件事情是能改变你自己的&#xff0c;我想这件事情必然就是学习&#xff0c;我的人生重要的转折点也是从学习这件事情始发的&#xff0c;那么&#xff0c;我们就从这里开始。学习不仅仅是为了找到答案&#xff0c;而是为了找到方法&#xff0c;找到一个可以找…

linux下svn常用指令

windows下的TortoiseSVN是资源管理器的一个插件&#xff0c;以覆盖图标表示文件状态&#xff0c;几乎所以命令都有图形界面支持&#xff0c;比较好用&#xff0c;这里就不多说。主要说说linux下svn的使用&#xff0c;因为linux下大部分的操作都是通过命令行来进行&#xff0c;所…

CSS布局解决方案(终结版)

前端布局非常重要的一环就是页面框架的搭建&#xff0c;也是最基础的一环。在页面框架的搭建之中&#xff0c;又有居中布局、多列布局以及全局布局&#xff0c;今天我们就来总结总结前端干货中的CSS布局。 居中布局 水平居中 1&#xff09;使用inline-blocktext-align&#xff…

基于ABP和Magicodes实现Excel导出操作

前端使用的vue-element-admin框架&#xff0c;后端使用ABP框架&#xff0c;Excel导出使用的Magicodes.IE.Excel.Abp库。Excel导入和导出操作几乎一样&#xff0c;不再介绍。文本主要介绍Excel导出操作和过程中遇到的坑&#xff0c;主要是Excel文件导出后无法打开的问题。一.Mag…