學習主題: 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時,将忽略錯誤
2. 解決災難性雪崩效應-隔離機制-線程池隔離-建立項目(1) 什麼是線程池隔離?
正常通路時
如果接口A因為壓力太大而癱瘓或導緻整個 consumer癱瘓 如果開啟了線程池隔離 ,當接口A 挂了的時候不會影響整個 consumer的運作(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的作用是什麼?
線程存活時間: 設定存活時間,機關: 分鐘
4. 解決災難性雪崩效應-隔離機制-信号量隔離-建立項目(1) 什麼是信号量隔離?
就是設定可以請求到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) 線程池隔離與信号量隔離有什麼差別?
(2) 什麼情況下使用線程池隔離?
請求并發量大,并且耗時長(請求耗時長一般是計算量大,或讀資料庫) ; 采用線程隔離政策,這樣的話,可以保證大量的容器(tomcat)線程可用,不會因為服務原因,一直處于阻塞或等待狀态,快速失敗傳回
(3) 什麼情況下使用信号量隔離?
請求并發量大,并且耗時端(請求耗時短可能是計算量小,或讀緩存) :采用信号量隔離政策,因為這類服務的傳回通常會非常的快.不會占用容器線程太長時間,而且也減少了線程切換的一些開銷,提供了緩存服務的效率
7. Feign的服務降級處理-建立項目 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) 啟動服務測試效果。
9. 服務降級後的異常記錄(1) 為什麼要記錄降級後的異常資訊。
根據異常資訊診斷服務為為什麼沒有響應
10. 在項目中開啟可視化的資料監控Hystrix-dashboard(1) 什麼是Hystrix-dashboard?
HyStrix-dashboard 是一款針對Hystrix進行實時監控的工具,通過Hystrix Dashboard 我們可以在直覺的看到個Hystrix Command的請求響應時間,請求成功率等資料
(2) @EnableHystrix注解的作用是什麼?
啟動熔斷降級服務
(3) @EnableHystrixDashboard注解的作用是什麼?
開啟可視化資料監控 dashboard
11. 搭建Hystrix-dashboard資料監控中心(1) 建立資料監控中心服務。
(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) 按照啟動順序啟動服務。
(5) 通路HystrixDashboard服務,檢視資料。
12. 建立Turbine聚合伺服器(1) Turbine的作用是什麼?
Turbine是聚合伺服器發送事件流資料的一個工具,hystrix的監控中,隻能監控單個節點,實際生産中都為叢集,是以可以通過turbine來監控叢集服務
(2) @EnableTurbine注解的作用是什麼?
開啟Turbine
13. 使用Turbine對多個服務進行監控(1) Turbine預設監聽端口是多少?
9101
(2) @EnableHystrixDashboard注解的作用是什麼?
開啟資料監控中心
14. 使用Turbine監控叢集(1) 通過Turbine檢視叢集監控。
分享/講解/擴充思考
點名提問從第一節課到最後一節課分别學到了什麼,直到同學們把所有的知識點都說出來并且保證無誤。