關(guān)注服務(wù)質(zhì)量--重試

在當(dāng)前主流的微服務(wù)架構(gòu)體系中,由于存在大量的遠(yuǎn)程服務(wù)調(diào)用碗旅,會存在各種各樣的穩(wěn)定性問題,包括但不僅限于網(wǎng)絡(luò)擁堵祟辟,服務(wù)宿主機(jī)系統(tǒng)抖動侣肄,服務(wù)配置下發(fā)導(dǎo)致的額外開銷等等。為了盡可能的提升服務(wù)質(zhì)量,我們常常需要在各種存在風(fēng)險(xiǎn)的遠(yuǎn)程調(diào)用中僚纷,采用適當(dāng)?shù)闹卦嚥呗裕裉炀秃唵斡懻撓轮卦囅嚓P(guān)的問題怖竭。

重試策略

所謂重試策略陡蝇,首先關(guān)注的是兩個參數(shù):1.重試次數(shù);2.調(diào)用間隔登夫。
兩個參數(shù)都很重要,首先來說重試次數(shù)恼策,如果對重試次數(shù)不加限制,在出現(xiàn)下游系統(tǒng)故障蹋凝,或者恰好命中下游系統(tǒng)bug的情況下,可能出現(xiàn)在相當(dāng)一段時間內(nèi)的重試都會以失敗告終鳍寂,這時候的重試不僅沒有起到提升對外服務(wù)質(zhì)量的效果情龄,反而會對當(dāng)前服務(wù)和下游服務(wù)都造成非常大的不必要負(fù)荷。
其次是重試調(diào)用間隔的問題骤视,常見的調(diào)用間隔策略包括:

  • 固定時間 每兩次重試調(diào)用之間的間隔固定
  • 指數(shù)增長 每兩次重試調(diào)用之間的時間間隔指數(shù)增長

在此基礎(chǔ)上,為了盡可能降低請求尖刺睹逃,會適當(dāng)引入一定的隨機(jī)策略。

代碼實(shí)踐

知道了重試需要關(guān)注的兩個方面之后沉填,我們來簡單看下在golang語言中佑笋,關(guān)于重試策略的一些實(shí)際代碼實(shí)現(xiàn)。
首先看下繼承自Hystrixhystrix-go蒋纬,它來源于Spring Cloud中重試組件的設(shè)計(jì)實(shí)現(xiàn)坚弱。在使用上关摇,提供了較為完善的位置選項(xiàng),能夠滿足不同的重試策略的配置输虱,同時借助gochannel特性,同時對外提供了同步和異步的API。為了保證下游服務(wù)的負(fù)載艰猬,同時引入的熔斷策略作為保護(hù)。
另外還有一個非常優(yōu)秀的重試策略的庫實(shí)現(xiàn)backoff冠桃,值得一提的是,這個庫關(guān)于重試指數(shù)策略的部分食听,借鑒了Google對于JAVAhttp client的相關(guān)實(shí)現(xiàn)算法,旨在自適應(yīng)的調(diào)整合適的適配下游負(fù)載的重試間隔葬项。
具體到現(xiàn)實(shí)的RPC調(diào)用中,grpc官方提供了retrymiddleware民珍,來支持最基礎(chǔ)的重試功能盗飒。
上面幾個庫都支持了對于重試條件的支持,即根據(jù)請求返回的報(bào)錯逆趣,來決定要不要繼續(xù)進(jìn)行重試。

更進(jìn)一步

由于重試存在潛在的請求放大的風(fēng)險(xiǎn)宣渗,針對于此,GoogleSRE實(shí)踐給出了一些實(shí)踐建議

  • 針對每個失敗請求部蛇,設(shè)置重試次數(shù)的上限,比如最多重試3次涯鲁。
  • 針對整個客戶端的調(diào)用,設(shè)置最大的重試與請求的比例抹腿。即重試請求最大不會超過某個時間窗口內(nèi)的請求數(shù)的10%,即寫放大指數(shù)最大就是110%警绩。
  • 客戶端記錄一段時間內(nèi)的重試次數(shù),判斷在最近的時間窗口內(nèi)肩祥,如果出現(xiàn)了大量的服務(wù)都需要重試的情況,可以判斷當(dāng)前服務(wù)端處于過載狀態(tài)混狠,服務(wù)端也可以通過狀態(tài)碼直接返回“拒絕重試”的狀態(tài),而這個狀態(tài)會被帶到請求鏈路中拋到上層贡避,避免更高層服務(wù)調(diào)用的重試。

另外刮吧,關(guān)于重試的時機(jī)選擇,目前大多數(shù)的實(shí)現(xiàn)都是等前一個調(diào)用返回失敗請求或者超時之后才進(jìn)行下一步重試杀捻。對于重試請求的時機(jī)蚓庭,Google有一篇文章談到了一些優(yōu)化措施,比如客戶端可以根據(jù)過去一個時間窗口內(nèi)的請求時長的pct999彪置,判斷大多數(shù)正常請求的耗時分布,當(dāng)請求耗時已經(jīng)達(dá)到這個閾值(在各個場景下拳魁,這個值都小于超時閾值),不必等請求返回而直接重試姚糊,這種策略叫做backup requests。在超時出現(xiàn)比較多的場景下授舟,這種提早重試策略能夠提升服務(wù)的響應(yīng)速度,所帶來的代價就是可能出現(xiàn)的一些額外請求肠槽。

最后擎淤,在微服務(wù)中對于重試的實(shí)踐中嘴拢,具體在哪層操作重試?有的是在最外層請求包裝重試席吴,優(yōu)點(diǎn)在于直接對最外層服務(wù)負(fù)責(zé),請求方法指數(shù)最方便控制孝冒,缺點(diǎn)在于單次重試開銷較大;有的是在各個服務(wù)請求處就近重試庄涡,有點(diǎn)在于請求重試開銷較小,有利于提升各個服務(wù)的服務(wù)質(zhì)量指標(biāo)捣域,缺點(diǎn)在于可能出現(xiàn)多層嵌套重試的情況宴合,如果重試次數(shù)限制有問題的話,容易出現(xiàn)請求放大的問題卦洽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市阀蒂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酗失,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件规肴,死亡現(xiàn)場離奇詭異夜畴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贪绘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來均函,“玉大人亿虽,你說我怎么就攤上這事经柴。” “怎么了墩朦?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長牛哺。 經(jīng)常有香客問我劳吠,道長,這世上最難降的妖魔是什么痒玩? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮奴曙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘草讶。我一直安慰自己,他們只是感情好坤溃,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布嘱丢。 她就那樣靜靜地躺著,像睡著了一般越驻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伐谈,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音诵棵,去河邊找鬼。 笑死嘶窄,一個胖子當(dāng)著我的面吹牛怀跛,可吹牛的內(nèi)容都是我干的柄冲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼漓拾,長吁一口氣:“原來是場噩夢啊……” “哼戒祠!你這毒婦竟也來了骇两?” 一聲冷哼從身側(cè)響起低千,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤馏颂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后救拉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡近上,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年壹无,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斗锭。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖岖是,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情实苞,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布聪轿,位于F島的核電站,受9級特大地震影響陆错,放射性物質(zhì)發(fā)生泄漏灯抛。R本人自食惡果不足惜音瓷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纵竖。 院中可真熱鬧,春花似錦磨确、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邓了。三九已至,卻和暖如春骗炉,著一層夾襖步出監(jiān)牢的瞬間蛇受,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工兢仰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人把将。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像察蹲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洽议,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345