偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

輕攏慢捻,談微服務(wù)熔斷大總管

開發(fā) 前端
我這篇文章來的晚了些,因?yàn)閔ystrix已經(jīng)進(jìn)入維護(hù)模式。但已經(jīng)有非常多的同學(xué)入坑了,那么本篇文章就是及時(shí)雨。本文將說明熔斷使用的一些注意事項(xiàng),可能會(huì)細(xì)的讓你厭煩。

[[277970]]

我這篇文章來的晚了些,因?yàn)閔ystrix已經(jīng)進(jìn)入維護(hù)模式。但已經(jīng)有非常多的同學(xué)入坑了,那么本篇文章就是及時(shí)雨。本文將說明熔斷使用的一些注意事項(xiàng),可能會(huì)細(xì)的讓你厭煩。

前半段,是理論部分,各種熔斷都適用。后半段,是參數(shù)部分,適合微調(diào)。

那我們開始。

通常來說,皇帝在微服務(wù)里想夜生活過得舒服,能夠大刀闊斧單刀直入,不因私事丟江山,就不得不靠熔斷大總管。

時(shí)過境遷。提到熔斷大總管就不得不說他手下最突出的三位公公:sentinel,或hystrix,也可能是resilience4j。

這三位都是解決一類問題的,如著名的雪崩:A→B→C互相依次調(diào)用,但C項(xiàng)目很可能出現(xiàn)問題(流量過大或者報(bào)錯(cuò)等),引發(fā)線程一直進(jìn)行等待,導(dǎo)致拖垮整個(gè)鏈路層,線程資源耗盡。

 

一、背景

假如是用的spring全家桶系列,在接口調(diào)用上大多會(huì)走這個(gè)路線。我們這里依然是在說hystrix,雖然現(xiàn)在不再受寵。

Feign —-→

Hystrix —-→

Ribbon —-→

Http Client(apache http components/Okhttp)

具體如下圖所示:

 

二、配置

首先來點(diǎn)理論性的東西。好吃不貴。

Ⅰ隔離方式

線程隔離(默認(rèn)):使用一個(gè)線程池來存儲(chǔ)當(dāng)前的請(qǐng)求,線程池對(duì)請(qǐng)求作處理,設(shè)置任務(wù)返回處理超時(shí)時(shí)間,堆積的請(qǐng)求堆積入線程池隊(duì)列。這種方式需要為每個(gè)依賴的服務(wù)申請(qǐng)線程池,有一定的資源消耗,好處是可以應(yīng)對(duì)突發(fā)流量(流量洪峰來臨時(shí),處理不完可將數(shù)據(jù)存儲(chǔ)到線程池隊(duì)里慢慢處理)

信號(hào)隔離:使用一個(gè)原子計(jì)數(shù)器(或信號(hào)量)來記錄當(dāng)前有多少個(gè)線程在運(yùn)行,請(qǐng)求來先判斷計(jì)數(shù)器的數(shù)值,若超過設(shè)置的最大線程個(gè)數(shù)則丟棄改類型的新請(qǐng)求,若不超過則執(zhí)行計(jì)數(shù)操作請(qǐng)求來計(jì)數(shù)器+1,請(qǐng)求返回計(jì)數(shù)器-1。這種方式是嚴(yán)格的控制線程且立即返回模式,無法應(yīng)對(duì)突發(fā)流量(流量洪峰來臨時(shí),處理的線程超過數(shù)量,其他的請(qǐng)求會(huì)直接返回,不繼續(xù)去請(qǐng)求依賴的服務(wù))

Ⅱ熔斷

如果某個(gè)目標(biāo)服務(wù)調(diào)用慢或者大量超時(shí),則此時(shí)熔斷該服務(wù)的調(diào)用,對(duì)于后續(xù)調(diào)用請(qǐng)求,不再繼續(xù)調(diào)用目標(biāo)服務(wù),直接返回,快速釋放資源。如果目標(biāo)服務(wù)情況好轉(zhuǎn),則恢復(fù)調(diào)用。

這個(gè)過程,可以想象成保險(xiǎn)絲的行為。

行為雖然簡(jiǎn)單,但需要調(diào)節(jié)的參數(shù)卻非常多。

使用方式

1.引入依賴

  1. <dependency> 
  2.     <groupId>org.springframework.cloud</groupId> 
  3.     <artifactId>spring-cloud-starter-hystrix</artifactId> 
  4. </dependency> 

2.配置參數(shù)

  1. feign: 
  2.   hystrix: 
  3. #不配置或?yàn)?span id="5gk0f71da" class="keyword">false則不生效 
  4.     enabled: true 
  5. hystrix: 
  6.   command: 
  7.     default
  8.       execution: 
  9.         isolation
  10.           thread: 
  11. #若配置了重試則超時(shí)時(shí)間= (1 + MaxAutoRetries + MaxAutoRetriesNextServer) * ReadTimeout 
  12.             timeoutInMilliseconds: 60000 
  13.   threadpool: 
  14.     default
  15.       coreSize: 10 
  16.       maxQueueSize: 50 
  17.       queueSizeRejectionThreshold: 30 
  18.       keepAliveTimeMinutes: 3 

3.配置fallback

因業(yè)務(wù)處理不同,建議每個(gè)feign client使用不同的fallback

 

到此,hystrix已經(jīng)可以走馬上任,至于干活兒穩(wěn)不穩(wěn)那是后話。

4.配置的其他姿勢(shì)

hystrix到任務(wù)后,發(fā)現(xiàn)有的服務(wù)接口1s內(nèi)就完事兒 ,還有的5s到10幾秒才堪堪返回。一刀切的配置已難以管理諸多服務(wù)&接口。

想必已經(jīng)有人發(fā)現(xiàn),之前配置中混進(jìn)了奇怪的東西——default關(guān)鍵詞。這是對(duì)全局配置,那么對(duì)應(yīng)的肯定有局部的配置。

如:對(duì)服務(wù)的,對(duì)某個(gè)接口的…

  1. hystrix: 
  2.   command: 
  3.     default
  4.       execution: 
  5.         isolation
  6.           thread: 
  7.             timeoutInMilliseconds: 60000 
  8.   threadpool: 
  9. #全局配置 
  10.     default
  11.       coreSize: 10 
  12.       maxQueueSize: 50 
  13.       queueSizeRejectionThreshold: 30 
  14.       keepAliveTimeMinutes: 3 
  15. #對(duì)某個(gè)服務(wù)配置,寫service-id 
  16.     base-rpc: 
  17.       coreSize: 10 
  18.       maxQueueSize: 30 
  19.       queueSizeRejectionThreshold: 20 
  20.       keepAliveTimeMinutes: 3 
  21. #對(duì)某個(gè)接口配置 
  22.     BaseApiClient#searchItemSkuList(PosSkuSearch): 
  23.       coreSize: 10 
  24.       maxQueueSize: 40 
  25.       queueSizeRejectionThreshold: 30 
  26.       keepAliveTimeMinutes: 1 

另外,還可以使用@HystrixCommand注解進(jìn)行配置。

5.配置的動(dòng)態(tài)修改

很多情況下,不能修改個(gè)配置,特別是臨時(shí)修改配置就重啟下服務(wù),能動(dòng)態(tài)刷新就最好了。

于是我們盯上了hystrix使用archaius管理配置的問題。

archaius是Netflix公司開源項(xiàng)目之一,基于java的配置管理類庫(kù),主要用于多配置存儲(chǔ)的動(dòng)態(tài)獲取。

主要功能是對(duì)apache common configuration類庫(kù)的擴(kuò)展。在云平臺(tái)開發(fā)中可以將其用作分布式配置管理依賴構(gòu)件。同時(shí),它有如下一些特性:

動(dòng)態(tài)獲取屬性

高效和線程安全的配置操作

配置改變時(shí)提供回調(diào)機(jī)制

可以通過jmx操作配置

復(fù)合配置

說了這么多那該怎么整呢?以下就是簡(jiǎn)單的示例。

  1. //撈配置 
  2. AbstractConfiguration config = ConfigurationManager.getConfigInstance(); 
  3.  
  4. //提取關(guān)注的部分,比如hystrix.threadpool 
  5. Iterable<String> iterable = () -> config.getKeys("hystrix.threadpool"); 
  6. List<Property> result = StreamSupport.stream(iterable.spliterator(), false).map(t -> new Property(t, config.getString(t, ""))) 
  7.         .sorted(Comparator.comparing(Property::getName)).collect(Collectors.toList()); 
  8.  
  9. //修改配置 
  10. config.setProperty("hystrix.threadpool.base-rpc.coreSize", 20); 
  11.  
  12. //移除配置 
  13. config.clearProperty(hystrix.threadpool.base-rpc.coreSize"); 

三、其他參數(shù)

要是覺得hystrix這么聽話,那就太小看它了。別忘了前面有feign,后面還有ribbon,再往后http client呢!一堆超時(shí)參數(shù),當(dāng)代的八門金鎖陣

1.feign超時(shí)

  1. feign: 
  2.   hystrix: 
  3.     enabled: true 
  4.   client: 
  5.     config: 
  6.       default
  7.         connectTimeout: 5000 
  8.         readTimeout: 5000 
  9.       rpc-pos: 
  10.         connectTimeout: 5000 
  11.         readTimeout: 8000 
  12.       xx-rpc: 
  13.         connectTimeout: 5000 
  14.         readTimeout: 12000 
  15.       order-rpc: 
  16.         connectTimeout: 5000 
  17.         readTimeout: 8000 

feign是暴露給用戶使用的,Spring在處理這一塊的時(shí)候,會(huì)有意識(shí)地使用feign的超時(shí)時(shí)間來設(shè)置后面的ribbon 和http client組件。

2.ribbon超時(shí)

  1. #全局配置 
  2. ribbon: 
  3.   ReadTimeout: 60000 
  4.   ConnectTimeout: 10000 
  5.   #false to only allow get method to retry 
  6.   OkToRetryOnAllOperations: true 
  7.   # Max number of next servers to retry (excluding the first server) 
  8.   MaxAutoRetriesNextServer: 2 
  9.   # Max number of retries on the same server (excluding the first try) 
  10.   MaxAutoRetries: 0 
  11.   # Interval to refresh the server list from the source 
  12.   ServerListRefreshInterval: 5000 
  13.   retryableStatusCodes: 404,500 
  14. #服務(wù)配置 
  15. base-rpc: 
  16.   ribbon: 
  17.     ReadTimeout: 60000 
  18.     ConnectTimeout: 10000 
  19.     #false to only allow get method to retry 
  20.     OkToRetryOnAllOperations: true 
  21.     # Max number of next servers to retry (excluding the first server) 
  22.     MaxAutoRetriesNextServer: 2 
  23.     # Max number of retries on the same server (excluding the first try) 
  24.     MaxAutoRetries: 0 
  25.     # Interval to refresh the server list from the source 
  26.     ServerListRefreshInterval: 5000 
  27.     retryableStatusCodes: 404,500 

當(dāng)feign設(shè)置了超時(shí)時(shí)間,Ribbon會(huì)依據(jù)feign的設(shè)置同步。Ribbon的這個(gè)超時(shí)時(shí)間,用于指導(dǎo)真正調(diào)用接口時(shí),設(shè)置真正實(shí)現(xiàn)者的超時(shí)時(shí)間。

httpclient超時(shí)

  1. feign: 
  2.   hystrix: 
  3.     enabled: true 
  4.   okhttp: 
  5.     enabled: true 
  6.   httpclient: 
  7.     enabled: false 
  8. //連接池最大連接數(shù),默認(rèn)200 
  9.     max-connections: 500 
  10. //每一個(gè)IP最大占用多少連接 默認(rèn) 50 
  11.     max-connections-per-route: 50 
  12. //默認(rèn)連接超時(shí)時(shí)間:2000毫秒 
  13.     connection-timeout: 8000 
  14. //連接池管理定時(shí)器執(zhí)行頻率:默認(rèn) 3000毫秒 
  15.     connection-timer-repeat: 6000 
  16. //連接池中存活時(shí)間,默認(rèn)為5 
  17.     time-to-live: 5 
  18.     time-to-live-unit: minutes 

超時(shí)設(shè)置遵循的基本原則是:依賴方的超時(shí)配置覆蓋被依賴方的配置,而其配置覆蓋的形式,則是使用的Spring Boot 的 AutoConfiguration 機(jī)制實(shí)現(xiàn)的

如:若開啟feign.okhttp.enabled=true,則okhttp的超時(shí)時(shí)間是feign.httpclient.connectionTimeout的值,默認(rèn)2000毫秒

總結(jié):超時(shí)——還是 feign 說了算!

四、hystrix dashboard

能夠?qū)⑦@些狀態(tài)可視化,是非常棒的,需要引入一個(gè)jar包。

  1. <dependency> 
  2.     <groupId>org.springframework.cloud</groupId> 
  3.     <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> 
  4. </dependency> 

下面這張圖,就是針對(duì)后臺(tái)監(jiān)控的一些解釋。

 (圖片來自網(wǎng)絡(luò))

附:配置參數(shù)說明

一、Command Properties

以下屬性控制HystrixCommand,前綴hystrix.command.default

1、Execution

以下屬性控制HystrixCommand.run()如何執(zhí)行。

比較重要的參數(shù),有:

execution.isolation.strategy

execution.isolation.thread.timeoutInMilliseconds

 

2、Fallback

以下屬性控制HystrixCommand.getFallback()如何執(zhí)行。這些屬性適用于ExecutionIsolationStrategy.THREAD和ExecutionIsolationStrategy.SEMAPHORE。

 

3、Circuit Breaker

斷路器屬性控制HystrixCircuitBreaker。

 

4、Metrics

以下屬性與從HystrixCommand和HystrixObservableCommand執(zhí)行捕獲指標(biāo)有關(guān)。

 

5、Request Context

這些屬性涉及HystrixCommand使用的HystrixRequestContext功能

 

二、Command Properties

下列屬性控制HystrixCollapser行為。前綴:hystrix.collapser.default

 

三、ThreadPool Properties

以下屬性控制Hystrix命令在其上執(zhí)行的線程池的行為。

大多數(shù)時(shí)候,默認(rèn)值為10的線程會(huì)很好(通常可以做得更小)前綴:hystrix.threadpool.default 。


 

責(zé)任編輯:武曉燕 來源: 小姐姐味道
相關(guān)推薦

2020-09-26 10:56:33

服務(wù)器熔斷服務(wù)隔離

2018-12-06 14:56:46

微服務(wù)隔離熔斷

2021-06-08 07:04:45

Service Mes微服務(wù)熔斷

2021-09-06 11:34:47

架構(gòu)微服務(wù)Hystrix

2022-01-17 10:55:50

微服務(wù)API網(wǎng)關(guān)

2020-07-28 08:32:57

微服務(wù)API網(wǎng)關(guān)熔斷

2020-04-10 13:04:19

微服務(wù)架構(gòu)RPC

2019-01-31 10:51:04

微服務(wù)DevOps開 發(fā)

2024-06-05 11:29:54

微服務(wù)監(jiān)控工具

2025-03-13 00:55:00

微服務(wù)架構(gòu)系統(tǒng)

2015-09-25 17:54:59

H5游戲

2024-11-29 16:02:17

2018-11-23 09:00:00

微服務(wù)微服務(wù)架構(gòu)日志

2017-08-31 09:39:56

微服務(wù)架構(gòu)演進(jìn)

2021-08-11 13:54:19

微服務(wù)系統(tǒng)架構(gòu)開發(fā)者

2016-08-24 16:23:36

服務(wù)架構(gòu)

2009-09-29 13:48:24

SpringSourcSpring

2022-04-28 09:36:51

微服務(wù)性能云原生

2025-03-27 00:25:55

微服務(wù)架構(gòu)技術(shù)

2021-01-22 17:56:30

微服務(wù) 微服務(wù)架構(gòu)應(yīng)用程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)