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

微服務(wù)架構(gòu)下請(qǐng)求調(diào)用失敗了怎么辦?

開發(fā) 架構(gòu)
微服務(wù)下的一次用戶調(diào)用可能會(huì)被拆成多系統(tǒng)間服務(wù)調(diào)用,任一次服務(wù)調(diào)用若發(fā)生問題都可能導(dǎo)致用戶調(diào)用最終失敗。

微服務(wù)帶來的不安因素

 

相比單體架構(gòu),微服務(wù)架構(gòu)下的服務(wù)調(diào)用從同一機(jī)器內(nèi)的本地調(diào)用變成不同機(jī)器間遠(yuǎn)程調(diào)用,由此也帶來如下不確定因素:

  • 調(diào)用的執(zhí)行是服務(wù)提供者,即使服務(wù)消費(fèi)者本身正常,服務(wù)提供者也可能因CPU、網(wǎng)絡(luò)I/O、磁盤、內(nèi)存、網(wǎng)卡等各種原因調(diào)用失敗,還可能因本身程序執(zhí)行問題比如GC暫停導(dǎo)致失敗
  • 調(diào)用發(fā)生在兩臺(tái)機(jī)器間,所以要經(jīng)過網(wǎng)絡(luò)傳輸,而網(wǎng)絡(luò)不可控,丟包、延遲或抖動(dòng)都可能導(dǎo)致調(diào)用失敗。

所以針對(duì)服務(wù)調(diào)用失敗需特殊處理。

 

超時(shí)

 

微服務(wù)下的一次用戶調(diào)用可能會(huì)被拆成多系統(tǒng)間服務(wù)調(diào)用,任一次服務(wù)調(diào)用若發(fā)生問題都可能導(dǎo)致用戶調(diào)用最終失敗。

一個(gè)系統(tǒng)的問題會(huì)影響所有調(diào)用這個(gè)系統(tǒng)所提供服務(wù)的服務(wù)消費(fèi)者,導(dǎo)致服務(wù)雪崩。

所以針對(duì)服務(wù)調(diào)用都要設(shè)置超時(shí)時(shí)間,避免所依賴服務(wù)一直未返回結(jié)果,將服務(wù)消費(fèi)者阻死。

超時(shí)時(shí)間的設(shè)定

 

  • 太短,可能有些服務(wù)調(diào)用還未及時(shí)執(zhí)行完成就被丟棄
  • 太長,可能導(dǎo)致服務(wù)消費(fèi)者被拖死

需按服務(wù)提供者線上真實(shí)的服務(wù)水平,取99.9%或99.99%的調(diào)用都在多少ms內(nèi)返回為準(zhǔn)。

 

重試

 

雖設(shè)超時(shí)時(shí)間可及時(shí)止損,但服務(wù)調(diào)用結(jié)果畢竟失敗。大部分情況調(diào)用失敗都因網(wǎng)絡(luò)問題或個(gè)別服務(wù)提供者節(jié)點(diǎn)有問題,若能換個(gè)節(jié)點(diǎn)再次訪問說不定就成功。

假如一次服務(wù)調(diào)用失敗概率1%,那連續(xù)兩次服務(wù)調(diào)用失敗概率0.01%,失敗率降低到原來1%。所以經(jīng)常還要設(shè)置一個(gè)服務(wù)調(diào)用超時(shí)后的重試次數(shù)。

假如某服務(wù)調(diào)用超時(shí)時(shí)間設(shè)為100ms,重試次數(shù)設(shè)為1,當(dāng)服務(wù)調(diào)用超過100ms后,服務(wù)消費(fèi)者就會(huì)立即發(fā)起第二次服務(wù)調(diào)用,而不會(huì)再等待第一次調(diào)用返回結(jié)果。

 

雙發(fā)

 

假如一次調(diào)用不成功概率1%,那連續(xù)兩次調(diào)用都不成功的概率就是0.01%,一個(gè)簡單的提高服務(wù)調(diào)用成功率的辦法就是每次服務(wù)消費(fèi)者要發(fā)起服務(wù)調(diào)用的時(shí)候,都同時(shí)發(fā)起兩次服務(wù)調(diào)用,可

  • 提高調(diào)用的成功率
  • 兩次服務(wù)調(diào)用,哪個(gè)先返回就采用哪次返回結(jié)果,平均響應(yīng)時(shí)間也要比一次調(diào)用更快

這就是雙發(fā)。

但這樣一次調(diào)用會(huì)給后端服務(wù)兩倍壓力,要消耗的資源也加倍,所以“魯莽”雙發(fā)不可取。

更為聰明的雙發(fā),即

“備份請(qǐng)求”(Backup Requests)

 

服務(wù)消費(fèi)者發(fā)起一次服務(wù)調(diào)用后,在給定的時(shí)間內(nèi)如果沒有返回請(qǐng)求結(jié)果,那么服務(wù)消費(fèi)者就立刻發(fā)起另一次服務(wù)調(diào)用。

注意該設(shè)定時(shí)間通常要比超時(shí)時(shí)間短得多,比如超時(shí)時(shí)間取P999,那么備份請(qǐng)求時(shí)間取的可能是P99或P90,因?yàn)槿粼赑99或者P90時(shí)間內(nèi)調(diào)用還沒有返回結(jié)果,那么大概率可以認(rèn)為這次請(qǐng)求屬于慢請(qǐng)求,再次發(fā)起調(diào)用理論上返回要更快。

在實(shí)際線上服務(wù)運(yùn)行時(shí),P999由于長尾請(qǐng)求時(shí)間較長的緣故,可能要遠(yuǎn)遠(yuǎn)大于P99和P90。

比如一個(gè)服務(wù)的P999是1s,而P99只有200ms、P90只有50ms,這樣的話,如果備份請(qǐng)求時(shí)間取的是P90,那么第二次請(qǐng)求等待的時(shí)間只有50ms。

備份請(qǐng)求要設(shè)置一個(gè)最大重試比例,以避免在服務(wù)端出現(xiàn)問題時(shí),大部分請(qǐng)求響應(yīng)時(shí)間都會(huì)超過P90,導(dǎo)致請(qǐng)求量幾乎翻倍,給服務(wù)提供者造成更大的壓力。

可設(shè)置成15%

  • 盡量體現(xiàn)備份請(qǐng)求的優(yōu)勢(shì)
  • 不會(huì)給服務(wù)提供者額外增加太大的壓力

 

熔斷

 

前面手段在服務(wù)提供者偶發(fā)異常時(shí)很有效,但若服務(wù)提供者故障,短時(shí)間內(nèi)無法恢復(fù),都不能提高服務(wù)調(diào)用成功率,還會(huì)因重試給服務(wù)提供者帶來更大的壓力而加劇故障。

就需服務(wù)消費(fèi)者能夠探測(cè)到服務(wù)提供者發(fā)生故障,短時(shí)間內(nèi)停止請(qǐng)求,給服務(wù)提供者故障恢復(fù)時(shí)間,待服務(wù)提供者恢復(fù)后,再繼續(xù)請(qǐng)求。

原理

 

把客戶端的每次服務(wù)調(diào)用用斷路器封裝,通過斷路器監(jiān)控每次服務(wù)調(diào)用。

若某段時(shí)間內(nèi),服務(wù)調(diào)用失敗次數(shù)達(dá)到一定閾值,斷路器就會(huì)被觸發(fā),后續(xù)服務(wù)調(diào)用直接返回,不會(huì)再向服務(wù)提供者發(fā)起請(qǐng)求。

熔斷后,一旦服務(wù)提供者恢復(fù)

 

服務(wù)調(diào)用如何恢復(fù)

 

Hystrix的斷路器包含三種狀態(tài):關(guān)閉、打開、半打開

  • Closed態(tài)

正常情況下的斷路器處關(guān)閉狀態(tài),偶發(fā)的調(diào)用失敗也不影響

  • Open態(tài)

當(dāng)服務(wù)調(diào)用失敗次數(shù)達(dá)到閾值,斷路器就會(huì)處開啟狀態(tài),后續(xù)服務(wù)調(diào)用直接返回,不會(huì)向服務(wù)提供者發(fā)起請(qǐng)求

  • Half Open態(tài)

當(dāng)斷路器開啟,每隔一段時(shí)間,會(huì)進(jìn)入半打開態(tài),這時(shí)會(huì)向服務(wù)提供者發(fā)起探測(cè)調(diào)用,以確定服務(wù)提供者是否恢復(fù)正常。

若調(diào)用成功,斷路器就關(guān)閉

若失敗,斷路器繼續(xù)保持開啟態(tài),并等待下個(gè)周期重新進(jìn)入半打開態(tài)。

 

Hystrix會(huì)把每次服務(wù)調(diào)用都用HystrixCommand封裝,實(shí)時(shí)記錄每次服務(wù)調(diào)用狀態(tài),包括成功、失敗、超時(shí)還是被線程拒絕。

當(dāng)一段時(shí)間內(nèi)服務(wù)調(diào)用的失敗率高于閾值,Hystrix的斷路器就會(huì)進(jìn)入進(jìn)入打開態(tài),新的服務(wù)調(diào)用直接返回,不會(huì)向服務(wù)提供者發(fā)起調(diào)用。

再等待設(shè)定時(shí)間間隔后,Hystrix的斷路器又會(huì)進(jìn)入半打,新的服務(wù)調(diào)用又可重新發(fā)給服務(wù)提供者。若一段時(shí)間內(nèi)服務(wù)調(diào)用失敗率依然高于閾值,斷路器會(huì)重新進(jìn)入打開態(tài),否則,重置為關(guān)閉態(tài)。

決定斷路器是否打開失敗率閾值通過如下參數(shù):

  1. HystrixCommandProperties.circuitBreakerErrorThresholdPercentage() 

斷路器何時(shí)進(jìn)入半打開態(tài)時(shí)間間隔通過如下參數(shù):

  1. HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds() 

斷路器關(guān)鍵在于

 

統(tǒng)計(jì)一段時(shí)間內(nèi)服務(wù)調(diào)用的失敗率

 

滑動(dòng)窗口算法

 

 

 

 

默認(rèn)情況下,滑動(dòng)窗口包含10個(gè)桶,每個(gè)桶時(shí)間寬度1s,每桶記錄這1s所有服務(wù)調(diào)用成功、失敗、超時(shí)的及被線程拒絕的次數(shù)。當(dāng)新1s到來,滑動(dòng)窗口就往前滑動(dòng),丟棄最舊桶,把最新桶包進(jìn)來。

任意時(shí)刻,Hystrix都會(huì)取滑動(dòng)窗口內(nèi)所有服務(wù)調(diào)用的失敗率作為斷路器開關(guān)狀態(tài)的判斷依據(jù),這10個(gè)桶內(nèi)記錄的所有失敗的、超時(shí)的、被線程拒絕的調(diào)用次數(shù)之和除以總的調(diào)用次數(shù)就是滑動(dòng)窗口內(nèi)所有服務(wù)的調(diào)用的失敗率。

 

總結(jié)

 

對(duì)非冪等,即同一服務(wù)調(diào)用重復(fù)多次返回結(jié)果不同的,不可重試,比如大部分上行請(qǐng)求都是非冪等。

雙發(fā)是在重試基礎(chǔ)上進(jìn)行一定優(yōu)化,減少超時(shí)等待時(shí)間,對(duì)于長尾請(qǐng)求場(chǎng)景很有效。采用雙發(fā)后,服務(wù)調(diào)用的P999能大幅減少,是提高服務(wù)調(diào)用成功率的有效手段。

熔斷能很好解決依賴服務(wù)故障引起的連鎖反應(yīng),對(duì)于線上存在大規(guī)模服務(wù)調(diào)用尤其是對(duì)非關(guān)鍵路徑的調(diào)用,即使調(diào)用失敗也對(duì)最終結(jié)果影響不大的情況下,更應(yīng)引入熔斷。

參考

  • https://martinfowler.com/bliki/CircuitBreaker.html
  • https://github.com/Netflix/Hystrix/wiki/How-To-Use
  • 本文轉(zhuǎn)載自微信公眾號(hào)「 JavaEdge」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系 JavaEdge公眾號(hào)。

 

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

2010-03-04 09:06:35

Windows 7Apache安裝

2009-11-03 08:56:02

linux死機(jī)操作系統(tǒng)

2022-12-19 11:31:57

緩存失效數(shù)據(jù)庫

2022-07-05 11:48:47

MySQL死鎖表鎖

2024-07-01 09:55:13

2022-07-05 14:19:30

Spring接口CGLIB

2011-11-16 10:02:48

DNSDNS記錄DNS記錄消失

2011-11-18 10:52:00

2022-10-14 08:18:07

Guavaweb應(yīng)用

2018-01-30 09:25:04

2022-09-05 09:02:01

服務(wù)器CPU服務(wù)

2024-07-08 11:30:35

2023-07-11 08:55:26

系統(tǒng)白名單AO

2023-12-25 08:22:02

2018-01-30 15:08:05

2021-01-05 10:48:38

RedisAOF日志RDB快照

2024-08-06 08:08:14

2020-07-10 08:46:26

HTTPS證書劫持網(wǎng)絡(luò)協(xié)議

2009-01-19 09:19:58

局域網(wǎng)遠(yuǎn)程控制服務(wù)器

2020-02-24 11:02:37

斷網(wǎng)網(wǎng)絡(luò)故障
點(diǎn)贊
收藏

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