天天看點

hystrix熔斷和降級的差別_Hystrix 詳解

學習主題: Hystrix

學習目标:

對應視訊:

http://www.itbaizhan.cn/course/id/85.html

對應文檔:

對應作業 1. 解決災難性雪崩效應-服務熔斷-服務熔斷處理

(1) 熔斷參數circuitBreaker.enabled的作用是什麼?

是否開啟熔斷 預設時TRUE 開啟

(2) 熔斷參數circuitBreaker.requestVolumeThreshold的作用是什麼?

一個統計視窗内熔斷觸發的最小個數/10s 預設20個

10s内請求數大于20個的時候就啟動熔斷器.當請求符合熔斷條件時将觸發getFallback()

(3) 熔斷參數circuitBreaker.sleepWindowInMiliseconds的作用是什麼?

熔斷多少秒後去嘗試請求 5000ms

(4) 熔斷參數circuitBreaker.errorThresholdPercentage的作用是什麼?

失敗率達到多少百分比後熔斷 預設配置下采樣周期為10s,失敗率為50%

請求錯誤大于50% 時就熔斷,然後for循環發起請求,當請求符合熔斷條件時将觸發getFallback()

(5) 熔斷參數circuitBreaker.forceOpen的作用是什麼?

是否強制開啟熔斷 預設 false 不強制

設定為true 時.所有請求都将被拒絕,直接傳回fallback

(6) 熔斷參數circuitBreaker.forceClosed的作用是什麼?

是否強制關閉熔斷 預設 false 不強制

置為true時,将忽略錯誤

hystrix熔斷和降級的差別_Hystrix 詳解
2. 解決災難性雪崩效應-隔離機制-線程池隔離-建立項目

(1) 什麼是線程池隔離?

正常通路時

hystrix熔斷和降級的差別_Hystrix 詳解
如果接口A因為壓力太大而癱瘓或導緻整個 consumer癱瘓
hystrix熔斷和降級的差別_Hystrix 詳解
如果開啟了線程池隔離 ,當接口A 挂了的時候不會影響整個 consumer的運作
hystrix熔斷和降級的差別_Hystrix 詳解
hystrix熔斷和降級的差別_Hystrix 詳解

(2) 線程池隔離的優點是什麼?

1. 使用線程池隔離可以完全隔離依賴的服務.請求線程可以快速放回

2. 當線程池出現問題時,線程池隔離是獨立的,不會影響其他服務和接口

3. 當失敗的服務再次變得可用時,線程池将清理并可立即恢複,而不需要一個長時間的恢複

4. 獨立的線程池提高了并發性

(3) 線程池隔離的缺點是什麼?

線程池隔離的主要缺點是它們增加計算開銷(CPU) ,每個指令的執行涉及到排隊.排程和上下文切換都是在一個單獨的線程上運作的

3. 解決災難性雪崩效應-隔離機制-線程池隔離-線程池隔離處理

(1) @HystrixCommand注解中的threadPoolProperties屬性的作用是什麼?

配置線程池隔離的參數

(2) @HystrixProperty注解的作用是什麼?

配置具體的參數

(3) 線程池隔離參數groupKey的作用是什麼?

服務名(相同服務用同一個名稱,如商品,使用者等等)

(4) 線程池隔離參數commandKey的作用是什麼?

接口(服務下面的接口,如購買商品)

(5) 線程池隔離參數threadPoolkey的作用是什麼?

線程池的名稱:配置全局唯一辨別線程池的名稱,相同線程池名稱的線程池是同一個

(6) 線程池隔離參數coreSize的作用是什麼?

線程池大小: 這是最大的并發執行數量

(7) 線程池隔離參數maxQueueSize的作用是什麼?

最大隊列長度 :設定BlockingQueue 的最大長度

(8) 線程池隔離參數queueSizeRejectionThreshold的作用是什麼?

拒絕請求:設定拒絕請求的臨界值

(9) 線程池隔離參數keepAliveTimeMinutes的作用是什麼?

線程存活時間: 設定存活時間,機關: 分鐘

hystrix熔斷和降級的差別_Hystrix 詳解
4. 解決災難性雪崩效應-隔離機制-信号量隔離-建立項目

(1) 什麼是信号量隔離?

hystrix熔斷和降級的差別_Hystrix 詳解
就是設定可以請求到provider的請求的個數 5. 解決災難性雪崩效應-隔離機制-信号量隔離-信号量隔離處理

(1) 信号量隔離參數execution.isolation.strategy的作用是什麼?

隔離政策配置項 預設 THREAD 隻有兩種THREAD和SEMAPHONE

(2) 信号量隔離參數execution.isolation.thread.timeoutInMiliseconds的作用是什麼?

逾時時間 1000ms

1. 在THREAD模式下,達到逾時時間,自動中斷

2. 在SEMAPHONE模式下,會等待執行完成後,再去判斷是否逾時

(3) 信号量隔離參數execution.isolation.thread.interruptOnTimeout的作用是什麼?

是否打開逾時線程終端 預設為 TRUE

(4) 信号量隔離參數execution.isolation.semaphore.maxConcurrentRequests的作用是什麼?

信号量最大并發度 預設10

(5) 信号量隔離參數fallback.isolation.semaphore.maxConcurrentRequests的作用是什麼?

Fallback最大并發度 預設10

分享/講解/擴充思考

點名提問從第一節課到最後一節課分别學到了什麼,直到同學們把所有的知識點都說出來并且保證無誤。

第244次(Hystrix)

學習主題: Hystrix

學習目标:

對應視訊:

http://www.itbaizhan.cn/course/id/85.html

對應文檔:

對應作業 6. 線程池隔離和信号量隔離的差別

(1) 線程池隔離與信号量隔離有什麼差別?

hystrix熔斷和降級的差別_Hystrix 詳解

(2) 什麼情況下使用線程池隔離?

請求并發量大,并且耗時長(請求耗時長一般是計算量大,或讀資料庫) ; 采用線程隔離政策,這樣的話,可以保證大量的容器(tomcat)線程可用,不會因為服務原因,一直處于阻塞或等待狀态,快速失敗傳回

(3) 什麼情況下使用信号量隔離?

請求并發量大,并且耗時端(請求耗時短可能是計算量小,或讀緩存) :采用信号量隔離政策,因為這類服務的傳回通常會非常的快.不會占用容器線程太長時間,而且也減少了線程切換的一些開銷,提供了緩存服務的效率

7. Feign的服務降級處理-建立項目
hystrix熔斷和降級的差別_Hystrix 詳解
8. Feign的服務降級處理-服務降級處理

(1) 修改業務層代碼,在Feign中配置服務降級。

//fallbackFactory 指定傳回托底資料的類 @FeignClient(name = "eureka-provider",fallbackFactory = ProductServiceuser.class) public interface ProductServiceuser { @RequestMapping(value="/product/findall",method = RequestMethod.GET) public List<Product> findAll(); } @Component public class ProductServiceFallback implements ProductServiceuser { //能夠傳回托底資料的 fallback 方法 @Override public List<Product> findAll() { List<Product> list = new ArrayList<>(); list.add(new Product(-1, "我是托底資料")); return list; } }

(2) 啟動服務測試效果。

hystrix熔斷和降級的差別_Hystrix 詳解
9. 服務降級後的異常記錄

(1) 為什麼要記錄降級後的異常資訊。

根據異常資訊診斷服務為為什麼沒有響應

10. 在項目中開啟可視化的資料監控Hystrix-dashboard

(1) 什麼是Hystrix-dashboard?

HyStrix-dashboard 是一款針對Hystrix進行實時監控的工具,通過Hystrix Dashboard 我們可以在直覺的看到個Hystrix Command的請求響應時間,請求成功率等資料

(2) @EnableHystrix注解的作用是什麼?

啟動熔斷降級服務

(3) @EnableHystrixDashboard注解的作用是什麼?

開啟可視化資料監控 dashboard

11. 搭建Hystrix-dashboard資料監控中心

(1) 建立資料監控中心服務。

hystrix熔斷和降級的差別_Hystrix 詳解

(2) 修改POM檔案,添加actuator啟動器,添加hystrix啟動器、hystrix-dashboard啟動器。

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>

(3) 需改啟動類添加開啟Hystrix與HystrixDashboard。

@EnableFeignClients @EnableDiscoveryClient @SpringBootApplication @EnableHystrix @EnableHystrixDashboard public class SpringBootStarter { public static void main(String[] args) { SpringApplication.run(SpringBootStarter.class,args); } }

(4) 按照啟動順序啟動服務。

hystrix熔斷和降級的差別_Hystrix 詳解
hystrix熔斷和降級的差別_Hystrix 詳解

(5) 通路HystrixDashboard服務,檢視資料。

hystrix熔斷和降級的差別_Hystrix 詳解
12. 建立Turbine聚合伺服器

(1) Turbine的作用是什麼?

Turbine是聚合伺服器發送事件流資料的一個工具,hystrix的監控中,隻能監控單個節點,實際生産中都為叢集,是以可以通過turbine來監控叢集服務

(2) @EnableTurbine注解的作用是什麼?

開啟Turbine

13. 使用Turbine對多個服務進行監控

(1) Turbine預設監聽端口是多少?

9101

(2) @EnableHystrixDashboard注解的作用是什麼?

開啟資料監控中心

14. 使用Turbine監控叢集

(1) 通過Turbine檢視叢集監控。

hystrix熔斷和降級的差別_Hystrix 詳解

分享/講解/擴充思考

點名提問從第一節課到最後一節課分别學到了什麼,直到同學們把所有的知識點都說出來并且保證無誤。