日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

轻拢慢捻,微服务熔断大总管

發(fā)布時間:2025/3/16 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 轻拢慢捻,微服务熔断大总管 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文經(jīng)授權(quán)轉(zhuǎn)載自微信公眾號:小姐姐味道

我這篇文章來的晚了些,因為hystrix已經(jīng)進入維護模式。但已經(jīng)有非常多的同學入坑了,那么本篇文章就是及時雨。本文將說明熔斷使用的一些注意事項,可能會細的讓你厭煩。

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

那我們開始。

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

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

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

一、背景

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

Feign —-→

具體如下圖所示:

二、配置

首先來點理論性的東西。好吃不貴。

Ⅰ隔離方式

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

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

Ⅱ熔斷

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

這個過程,可以想象成保險絲的行為。

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

使用方式

1.引入依賴

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId> </dependency>

2.配置參數(shù)

feign:hystrix: #不配置或為false則不生效enabled: true hystrix:command:default:execution:isolation:thread: #若配置了重試則超時時間= (1 + MaxAutoRetries + MaxAutoRetriesNextServer) * ReadTimeouttimeoutInMilliseconds: 60000threadpool:default:coreSize: 10maxQueueSize: 50queueSizeRejectionThreshold: 30keepAliveTimeMinutes: 3

3.配置fallback

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

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

4.配置的其他姿勢

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

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

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

hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 60000threadpool: #全局配置default:coreSize: 10maxQueueSize: 50queueSizeRejectionThreshold: 30keepAliveTimeMinutes: 3 #對某個服務(wù)配置,寫service-idbase-rpc:coreSize: 10maxQueueSize: 30queueSizeRejectionThreshold: 20keepAliveTimeMinutes: 3 #對某個接口配置BaseApiClient#searchItemSkuList(PosSkuSearch):coreSize: 10maxQueueSize: 40queueSizeRejectionThreshold: 30keepAliveTimeMinutes: 1

另外,還可以使用@HystrixCommand注解進行配置。

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

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

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

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

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

三、其他參數(shù)

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

1.feign超時

feign:hystrix:enabled: trueclient:config:default:connectTimeout: 5000readTimeout: 5000rpc-pos:connectTimeout: 5000readTimeout: 8000xx-rpc:connectTimeout: 5000readTimeout: 12000order-rpc:connectTimeout: 5000readTimeout: 8000

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

2.ribbon超時

#全局配置 ribbon:ReadTimeout: 60000ConnectTimeout: 10000#false to only allow get method to retryOkToRetryOnAllOperations: true# Max number of next servers to retry (excluding the first server)MaxAutoRetriesNextServer: 2# Max number of retries on the same server (excluding the first try)MaxAutoRetries: 0# Interval to refresh the server list from the sourceServerListRefreshInterval: 5000retryableStatusCodes: 404,500 #服務(wù)配置 base-rpc:ribbon:ReadTimeout: 60000ConnectTimeout: 10000#false to only allow get method to retryOkToRetryOnAllOperations: true# Max number of next servers to retry (excluding the first server)MaxAutoRetriesNextServer: 2# Max number of retries on the same server (excluding the first try)MaxAutoRetries: 0# Interval to refresh the server list from the sourceServerListRefreshInterval: 5000retryableStatusCodes: 404,500

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

httpclient超時

feign:hystrix:enabled: trueokhttp:enabled: truehttpclient:enabled: false //連接池最大連接數(shù),默認200max-connections: 500 //每一個IP最大占用多少連接 默認 50max-connections-per-route: 50 //默認連接超時時間:2000毫秒connection-timeout: 8000 //連接池管理定時器執(zhí)行頻率:默認 3000毫秒connection-timer-repeat: 6000 //連接池中存活時間,默認為5time-to-live: 5time-to-live-unit: minutes

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

如:若開啟feign.okhttp.enabled=true,則okhttp的超時時間是feign.httpclient.connectionTimeout的值,默認2000毫秒

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

四、hystrix dashboard

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

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

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

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

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

一、Command Properties

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

1、Execution

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

2、Fallback

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

3、Circuit Breaker

斷路器屬性控制HystrixCircuitBreaker。

4、Metrics

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

5、Request Context

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

二、Command Properties

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

三、ThreadPool Properties

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

End

這貨,說不更新,還真不更新了。但我們的遺留系統(tǒng),有很多模塊在用著,所以我還是把它的細節(jié)參數(shù)給摳出來了。這應(yīng)該是絕版吧,因為hystrix是絕更了。

本文只適合收藏,不適合分享。分享出去,會等于拿著大喇叭告訴別人,你正在給某個遺留系統(tǒng)填坑呢。


在 GitHub 更新中,歡迎關(guān)注,歡迎star。

直面Java第262期:volatile是如何解決有序性問題的?

深入并發(fā)第009期:到底什么是Java內(nèi)存模型?

- MORE | 更多精彩文章 -

如果你喜歡本文,

請長按二維碼,關(guān)注?Hollis.

轉(zhuǎn)發(fā)至朋友圈,是對我最大的支持。

好文章,我在看

總結(jié)

以上是生活随笔為你收集整理的轻拢慢捻,微服务熔断大总管的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 曰女同女同中文字幕 | 久婷婷 | 国产一区二区视频在线 | 91丨九色丨蝌蚪丨丝袜 | 永久免费av无码网站性色av | 一区二区三区视频免费观看 | 中国少妇初尝黑人巨大 | 亚洲涩色 | 国模少妇一区二区三区 | 久久久久久国产免费a片 | 日本做爰全过程免费看 | 亚洲精品中文字幕乱码三区 | 美女被草出水 | 女人的洗澡毛片毛多 | 一道本不卡视频 | 韩日成人| 天天插插 | 久久蜜桃精品 | 一区中文字幕 | 爱爱网视频 | 国产精品三区四区 | 国产jk精品白丝av在线观看 | 国产一国产精品一级毛片 | 久久国产精品久久久久久 | 日本中文字幕有码 | 日韩wwww | 日本va视频 | 毛片基地站 | 99久热在线精品996热是什么 | 黄色aa级片| 生活片一级片 | 成人久久精品人妻一区二区三区 | 欧美啪啪一区 | 国产成人三级在线 | 天天拍天天射 | 偷拍亚洲精品 | 麻豆视频一区 | 国产欧美精品久久 | jav中文字幕 | 中文不卡av| 日韩精品一区二区三区网站 | 中文字幕第二页 | 久久艹综合 | 国产精品久久久久久久久久久久久 | 一区二区三区手机在线观看 | 欧美情趣视频 | 成人免费区一区二区三区 | 午夜a视频 | 日韩精品乱码久久久久久 | 国产麻豆视频 | 日本三级久久久 | 国产私密视频 | 欧美成人免费播放 | 777在线视频| 四虎一国产精品一区二区影院 | 囯产精品久久久久久 | 国产亚洲欧美精品久久久久久 | 884aa四虎影成人精品一区 | 在线观看你懂得 | 91亚洲一线产区二线产区 | 伊朗做爰xxxⅹ性视频 | 日韩欧美第一区 | 黄色99视频 | 国产91精品一区 | 国产欧美一区二区三区在线老狼 | 四虎影院一区二区 | 亚洲国产专区 | 97成人免费视频 | 99re在线观看视频 | 免费成人小视频 | 亚洲精品在线不卡 | 糖心logo在线观看 | 美女久久久久久久久久 | 国产wwwwwww | 色婷婷av一区二区三区在线观看 | 日本男男激情gay办公室 | 顶臀精品视频www | 亚洲偷怕 | 涩涩视频在线观看免费 | 性视频一区 | 日本在线加勒比 | 已满十八岁免费观看全集动漫 | 在线色播 | 日韩av在线网址 | 日本特黄视频 | 国内视频一区二区 | 欧美激情免费在线观看 | 日本东京热一区二区 | 色爽交| 99国产精品一区二区 | 日本波多野结衣在线 | 亚洲美女激情视频 | 人妻互换一区二区三区四区五区 | 精品人妻无码一区 | 国产一级片黄色 | 亚洲爆爽| 欧美精品久久久久a | 麻豆影视 | 欧美日韩高清一区二区 国产亚洲免费看 |