日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
微服務(wù)架構(gòu)下請(qǐng)求調(diào)用失敗了怎么辦?

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

十余年的寬甸網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整寬甸建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“寬甸網(wǎng)站設(shè)計(jì)”,“寬甸網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

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

  • 調(diào)用的執(zhí)行是服務(wù)提供者,即使服務(wù)消費(fèi)者本身正常,服務(wù)提供者也可能因CPU、網(wǎng)絡(luò)I/O、磁盤(pán)、內(nèi)存、網(wǎng)卡等各種原因調(diào)用失敗,還可能因本身程序執(zhí)行問(wèn)題比如GC暫停導(dǎo)致失敗
  • 調(diào)用發(fā)生在兩臺(tái)機(jī)器間,所以要經(jīng)過(guò)網(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ā)生問(wèn)題都可能導(dǎo)致用戶調(diào)用最終失敗。

一個(gè)系統(tǒng)的問(wèn)題會(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í)行完成就被丟棄
  • 太長(zhǎng),可能導(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ò)問(wèn)題或個(gè)別服務(wù)提供者節(jié)點(diǎn)有問(wèn)題,若能換個(gè)節(jié)點(diǎn)再次訪問(wèn)說(shuō)不定就成功。

假如一次服務(wù)調(diào)用失敗概率1%,那連續(xù)兩次服務(wù)調(diào)用失敗概率0.01%,失敗率降低到原來(lái)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)用超過(guò)100ms后,服務(wù)消費(fèi)者就會(huì)立即發(fā)起第二次服務(wù)調(diào)用,而不會(huì)再等待第一次調(diào)用返回結(jié)果。

雙發(fā)

假如一次調(diào)用不成功概率1%,那連續(xù)兩次調(diào)用都不成功的概率就是0.01%,一個(gè)簡(jiǎn)單的提高服務(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)如果沒(mé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)用還沒(méi)有返回結(jié)果,那么大概率可以認(rèn)為這次請(qǐng)求屬于慢請(qǐng)求,再次發(fā)起調(diào)用理論上返回要更快。

在實(shí)際線上服務(wù)運(yùn)行時(shí),P999由于長(zhǎng)尾請(qǐng)求時(shí)間較長(zhǎng)的緣故,可能要遠(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)問(wèn)題時(shí),大部分請(qǐng)求響應(yīng)時(shí)間都會(huì)超過(guò)P90,導(dǎo)致請(qǐng)求量幾乎翻倍,給服務(wù)提供者造成更大的壓力。

可設(shè)置成15%

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

熔斷

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

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

原理

把客戶端的每次服務(wù)調(diào)用用斷路器封裝,通過(guò)斷路器監(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)閉、打開(kāi)、半打開(kāi)

  • Closed態(tài)

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

  • Open態(tài)

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

  • Half Open態(tài)

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

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

若失敗,斷路器繼續(xù)保持開(kāi)啟態(tài),并等待下個(gè)周期重新進(jìn)入半打開(kāi)態(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)入打開(kāi)態(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)入打開(kāi)態(tài),否則,重置為關(guān)閉態(tài)。

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

 
 
 
 
  1. HystrixCommandProperties.circuitBreakerErrorThresholdPercentage()

斷路器何時(shí)進(jìn)入半打開(kāi)態(tài)時(shí)間間隔通過(guò)如下參數(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到來(lái),滑動(dòng)窗口就往前滑動(dòng),丟棄最舊桶,把最新桶包進(jìn)來(lái)。

任意時(shí)刻,Hystrix都會(huì)取滑動(dòng)窗口內(nèi)所有服務(wù)調(diào)用的失敗率作為斷路器開(kāi)關(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ì)于長(zhǎng)尾請(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ò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系 JavaEdge公眾號(hào)。


網(wǎng)頁(yè)標(biāo)題:微服務(wù)架構(gòu)下請(qǐng)求調(diào)用失敗了怎么辦?
分享地址:http://www.dlmjj.cn/article/dpsijio.html