Java高階架構面試知識點:基於 Hystrix 訊號量機制實現資源隔離
Hystrix裡面核心的一項功能,其實就是所謂的 資源隔離,要解決的最最核心的問題,就是將多個依賴服務的呼叫分別隔離到各自的資源池內。避免說對某一個依賴服務的呼叫,因為依賴服務的介面呼叫的延遲或者失敗,導致服務所有的執行緒資源全部耗費在這個服務的介面呼叫上。一旦說某個服務的執行緒資源全部耗盡的話,就可能導致服務崩潰,甚至說這種故障會不斷蔓延。
Hystrix 實現資源隔離,主要有兩種技術:
- 執行緒池
- 訊號量
預設情況下,Hystrix 使用執行緒池模式。
前面已經說過執行緒池技術了,這篇文章就來說說訊號量機制實現資源隔離,以及這兩種技術的區別與具體應用場景。
訊號量機制
訊號量的資源隔離只是起到一個開關的作用,比如,服務 A 的訊號量大小為 10,那麼就是說它同時只允許有 10 個 tomcat 執行緒來訪問服務 A,其它的請求都會被拒絕,從而達到資源隔離和限流保護的作用。
執行緒池與訊號量區別
執行緒池隔離技術,並不是說去控制類似 tomcat 這種 web 容器的執行緒。更加嚴格的意義上來說,Hystrix 的執行緒池隔離技術,控制的是 tomcat 執行緒的執行。Hystrix 執行緒池滿後,會確保說,tomcat 的執行緒不會因為依賴服務的介面呼叫延遲或故障而被 hang 住,tomcat 其它的執行緒不會卡死,可以快速返回,然後支撐其它的事情。
執行緒池隔離技術,是用 Hystrix 自己的執行緒去執行呼叫;而訊號量隔離技術,是直接讓 tomcat 執行緒去呼叫依賴服務。訊號量隔離,只是一道關卡,訊號量有多少,就允許多少個 tomcat 執行緒透過它,然後去執行。
適用場景:
- 執行緒池技術,適合絕大多數場景,比如說我們對依賴服務的網路請求的呼叫和訪問、需要對呼叫的 timeout 進行控制(捕捉 timeout 超時異常)。
- 訊號量技術,適合說你的訪問不是對外部依賴的訪問,而是對內部的一些比較複雜的業務邏輯的訪問,並且系統內部的程式碼,其實不涉及任何的網路請求,那麼只要做訊號量的普通限流就可以了,因為不需要去捕獲 timeout 類似的問題。
訊號量簡單 Demo
業務背景裡,比較適合訊號量的是什麼場景呢?
比如說,我們一般來說,快取服務,可能會將一些量特別少、訪問又特別頻繁的資料,放在自己的純記憶體中。
舉個例子。一般我們在獲取到商品資料之後,都要去獲取商品是屬於哪個地理位置、省、市、賣家等,可能在自己的純記憶體中,比如就一個 Map 去獲取。對於這種直接訪問本地記憶體的邏輯,比較適合用訊號量做一下簡單的隔離。
優點在於,不用自己管理執行緒池啦,不用
care timeout
超時啦,也不需要進行執行緒的上下文切換啦。訊號量做隔離的話,效能相對來說會高一些。
假如這是本地快取,我們可以透過 cityId,拿到 cityName。
寫一個
GetCityNameCommand
,策略設定為
訊號量。
run()
方法中獲取本地快取。我們目的就是對獲取本地快取的程式碼進行資源隔離。
在介面層,透過建立
GetCityNameCommand
,傳入 cityId,執行
execute()
方法,那麼獲取本地 cityName 快取的程式碼將會進行訊號量的資源隔離。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69964492/viewspace-2768759/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hystrix- 基於 Hystrix 訊號量機制實現資源隔離
- Java高階架構面試知識點整理:基於 Hystrix 執行緒池技術實現資源隔離Java架構面試執行緒
- 高階 Java 面試通關知識點整理Java面試
- 高階前端知識架構前端架構
- java知識點-高階Java
- JAVA高階面試必過知識點彙總Java面試
- 未雨綢繆:Java高階架構進階必學之⑥大知識要點附視訊學習資料Java架構
- Spring Cloud構建微服務架構-Hystrix依賴隔離SpringCloud微服務架構
- Java 基礎面試知識點Java面試
- JVM知識點總覽:高階Java工程師面試必備JVMJava工程師面試
- 精通介面隔離原則,輕鬆實現高內聚、低耦合架構架構
- 學習Java基礎知識,打通面試關~十三鎖機制Java面試
- Java基礎面試知識點總結Java面試
- 億級流量架構之資源隔離思路與方法架構
- mysql隔離機制MySql
- (小白學JAVA之)Java高階特性知識點梳理Java
- [java併發程式設計]基於訊號量semaphore實現限流器Java程式設計
- 基於hadoop_yarn的資源隔離配置HadoopYarn
- Android高階知識點Android
- Java如何實現消費資料隔離?Java
- 架構知識點(一)架構
- 架構知識點(三)架構
- 基於三層架構的增刪改查Get知識點架構
- 高階 Java 必須突破的 10 個知識點!Java
- 高階Java必須突破的10個知識點!Java
- 架構師JavaEE高階知識點,符合您的口味,成就您的未來!架構Java
- 網頁高階知識點(二)網頁
- Docker實踐(5)—資源隔離Docker
- Java常見知識點彙總(⑮)——Jvm架構JavaJVM架構
- Java常見知識點彙總(⑧)——分派機制Java
- java面試知識點總結Java面試
- Java 面試知識點總結Java面試
- Java進階必備:優雅的告訴面試官訊息中介軟體該如何實現高可用架構?【石杉的架構筆記】Java面試架構筆記
- 深入理解微服務架構spring的各個知識點(面試必問知識點)微服務架構Spring面試
- Java基礎知識面試題Java面試題
- java基礎知識點Java
- 進階高階IoT架構-教你如何簡單實現一個訊息佇列架構佇列
- 十二、java知識點——類載入機制(硬貨)Java