成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

八張架構圖告訴你如何優雅地設置RPC超時重試

開發 架構
今天給大家分享一知識點,是關于我們平時開發系統做 RPC 通信的時候,經常會設置超時和重試兩個參數。

目錄

  • 業務系統架構圖
  • 微服務項目技術難點 1:RPC 的超時機制
  • 微服務項目技術難點 2:RPC 的重試機制
  • 生產項目中 timeout 和 retry 一般設置成多少呢?

今天給大家分享一知識點,是關于我們平時開發系統做 RPC 通信的時候,經常會設置超時和重試兩個參數。

關于這兩個參數要是沒有設置好的話,很可能會導致我們的系統被搞垮,但是可能很多人都不知道這里面的問題,所以今天給大家好好講講。

業務系統架構圖

首先,我們還是先引出一個話題,那就是平時我們開發的系統是什么樣的?其實往簡單了說,就是用 SpringBoot+SSM 開發一套業務代碼,然后用 Nacos+Dubbo 去 RPC 調用別的系統。

這個架構圖非常簡單,如下所示:

微服務項目技術難點 1:RPC 的超時機制

那么在兩個系統進行 RPC 調用的時候,有兩個參數其實是至關重要的,一個是 timeout 超時時間,一個是 retry 重試次數,這個 timeout 超時通常用于什么場景呢?

大家可以想象一個場景,如果說我們不設置 timeout 超時時間,是否可能出現這樣一種情況,就是你調用的那個系統可能故障了,或者是掛了,或者是他的性能突然很慢很慢,導致你調用他好幾秒都沒法返回。

如下圖:

如果要是你調用一個系統時間很久都沒法返回,此時會導致什么問題?

我們要知道,你自己這個系統對外接收請求靠的是線程,假設我們是 通過 SpringBoot 內嵌 Tomcat 對外接收請求的,那么其實 Tomcat 就會開很多線程,每個 Http 請求過來了,每個請求都是要交給一個線程來處理的。

如下圖所示:

那么一個線程拿到了一個請求開始處理之后,他就會去調用別的系統,如果要是調用別的系統這個過程中因為他故障了,導致調用時間超長,好幾秒都沒個響應,這個時候會怎么樣呢?

那還不簡單,這會導致 Tomcat 一個線程一直阻塞好幾秒都沒法去處理別的請求。那么這個時候,如果所有線程都因為調用一個服務被阻塞住了,是不是就導致新的請求過來沒有一個線程可以處理了?

如下圖:

所以說,往往來說,我們對于別的服務 RPC 調用一般都得設置一個超時時間,比如說,設置 timeout=1s,那么意思就是說,我們調用別的系統如果超過 1s 沒有響應,就直接拋個異常就返回了,這樣就可以避免我們的 Tomcat 線程 長時間阻塞了。

如下圖:

微服務項目技術難點 2:RPC 的重試機制

那么除了這個 timeout 超時時間以外,還有另外一個參數是 retry,這個 retry 的意思,就是說如果你 RPC 調用一個服務要是失敗了,此時就可以通過 retry 設置自動做一個重試。

比如說自動可以重試 2 次,那么這個時候如果是因為網絡偶然抖動導致的調用失敗,就可以通過重試 2 次讓他能夠成功完成調用了。

如下圖:

生產項目中 timeout 和 retry 一般設置成多少呢?

好了,現在 timeout 和 retry 兩個參數講完了,下面就可以講這兩個參數設置不當是如何導致系統出現故障的了。

先來說這個 timeout,這個 timeout 設置可一定要慎重啊,因為如果要是設置的不謹慎,可能導致你的系統莫名其妙就直接跨掉了。

比如說,這個 timeout 你要是設置的時間太長了,好比說 5s,10s,那么可能在極端情況下,比如對方系統故障了,你每個請求都要 5s、10s 才能返回,那不就會導致剛才上面說的問題了?

就是 Tomcat 每個線程都得阻塞 5s、10s 才能返回,這就導致你的系統沒法處理新的請求了。

如下圖:

那么如果要是 timeout 設置的太短了呢?比如說設置 timeout=500ms,那好,這可能也有很大問題了。

因為有可能某一天因為搞活動流量比較大,你調用的系統因為壓力比較大,導致他的 CPU 負載很高,然后平時一般請求都是 300~400ms 可以返回,結果今天搞成 500~600ms 了,剛好超過了 timeout 時間。

此時就會導致,你大量的請求即將處理完畢要返回的時候,結果一到 500ms 就超時異常拋出,一到 500ms 就超時異常拋出。

如下圖:

所以說,timeout 超時參數設置,通常是這么設置的,對于你要調用的系統你要看看他平時調用要多久能返回,然后比正常的耗時設置的多個 50% 就可以了。

比如平時一般正常在 100~200ms,偶爾高峰會在 500ms,那你設置個 timeout=800ms 或者 1s 其實都可以。

然后就是 retry 這個參數,這個參數也是不能胡亂設置的,尤其是對于一些調用別的系統寫入數據的接口。

如果你要是對別的服務的寫接口設置了 retry,就可能有這樣一種場景,某一次寫入接口可能耗時稍微長了一些,導致了超時出錯,結果你又 retry 再次重試寫入,就可能導致數據會有重復的問題。

所以說通常都建議 retry 參數對讀接口可以設置一下,但是對寫接口最好是不要設置。

好了,今天關于 RPC 超時和重試參數的分享就到這里了。

責任編輯:姜華 來源: 石杉的架構筆記
相關推薦

2020-06-15 08:54:46

架構圖 EA業務建模

2022-11-11 17:09:55

微服務RPC

2021-01-20 06:02:24

數據分析驅動

2021-11-22 10:38:23

架構運維技術

2024-01-05 07:55:39

Linux虛擬內存

2020-06-22 08:23:42

阿里技術架構圖

2025-06-10 04:11:00

2021-12-06 07:15:47

Pulsar地域復制

2025-01-29 00:00:00

重試器模式裝飾器

2019-03-14 15:59:44

前端開發編程

2021-03-24 10:20:50

Fonts前端代碼

2023-09-19 08:28:32

DiagramsPython工具

2023-07-26 00:40:25

AI工具備忘錄

2020-10-29 07:08:44

架構數據技術

2020-09-09 08:30:42

內網隱蔽端口

2024-11-13 16:37:00

Java線程池

2020-09-04 09:55:25

TikTok程序禁令

2020-07-07 07:30:33

技術IT架構

2015-03-27 14:27:41

戴爾云計算

2022-06-07 08:59:58

hookuseRequestReact 項目
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级二级在线观看 | 久热伊人 | 亚洲欧美日韩一区 | 中文字幕在线视频免费观看 | 天天色天天射天天干 | 中文av电影 | 国产99视频精品免视看9 | 亚洲成人福利在线观看 | 一二区视频 | 天天亚洲| 欧美三级视频在线观看 | 亚洲婷婷六月天 | 男女羞羞的网站 | 成人在线免费网站 | 巨大黑人极品videos精品 | 国产黄色大片 | 99re在线视频观看 | 人人射人人 | 亚洲日本中文 | 亚洲精品一区中文字幕 | 亚洲免费片 | 亚洲区一区二 | 99re视频在线观看 | 国产一区二区在线免费观看 | 免费久久精品视频 | 九九热免费视频在线观看 | 天堂一区二区三区 | 国产精品久久777777 | 中文无吗 | 国产精品国产成人国产三级 | 青青久久 | 中国大陆高清aⅴ毛片 | 精品免费视频一区二区 | 国产成人亚洲精品 | 国产激情毛片 | 天天看片天天干 | 国产99久久久国产精品 | 亚洲系列第一页 | 日本不卡一区 | 亚洲a毛片 | 亚洲欧美自拍偷拍视频 |