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.pswp.cn/news/283994.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283994.shtml
英文地址,請注明出處:http://en.pswp.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…