一次線上事故對(duì)“本地文件隊(duì)列異步使用”的思考

事故描述

事故現(xiàn)象是部分服務(wù)http請(qǐng)求無響應(yīng)渣叛。事故從發(fā)生到恢復(fù)丈秩,接近3個(gè)小時(shí),事故過程中重啟應(yīng)用服務(wù)淳衙,只能堅(jiān)持幾分鐘到十幾分鐘蘑秽,在真正發(fā)現(xiàn)問題前通過不斷重啟服務(wù)實(shí)例來支撐饺著,慶幸的是核心服務(wù)沒有出現(xiàn)無響應(yīng)的事故。

最終分析為AMQ出現(xiàn)故障肠牲,現(xiàn)象是MQ客戶端sendMessage后等待響應(yīng)幼衰,但一直在等待,AMQ監(jiān)控端口ok缀雳,控制臺(tái)也可以打開渡嚣,由于緊急沒有具體分析,直接重啟AMQ服務(wù)肥印,切換master识椰,通過驗(yàn)證服務(wù)全部恢復(fù)。

這次故障大部分服務(wù)都使用了AMQ深碱,但除了一個(gè)核心服務(wù)沒受到明顯影響外腹鹉,其他使用AMQ的服務(wù)都不同程度的收到了影響,服務(wù)不可用敷硅。

<strong>
事后通過分析這個(gè)核心服務(wù)正式使用了本地文件隊(duì)列避免了事故放大功咒,逃過一劫,當(dāng)時(shí)如果這個(gè)核心服務(wù)也受到影響就可想而知了绞蹦,事故間期正直商戶業(yè)務(wù)高峰期力奋,客戶估計(jì)要炸了,公司也會(huì)受到很大的損失坦辟。
</strong>

<strong>
此次事故比較嚴(yán)重刊侯,就是因?yàn)槭褂昧?strong>本地文件隊(duì)列有效隔離故障,使得影響面不大锉走。假設(shè)(當(dāng)然不希望發(fā)生了)核心業(yè)務(wù)沒有使用本地文件隊(duì)列來隔離故障滨彻,整個(gè)下單、收銀服務(wù)將不可用挪蹭,商戶無法營業(yè)亭饵,損失應(yīng)該是數(shù)量級(jí)的。
</strong>

此次事故也證明了我當(dāng)時(shí)的這個(gè)架構(gòu)思路的正確性梁厉,主要體現(xiàn)在隔離和降級(jí)辜羊。

說說這個(gè)核心服務(wù)使用“本地文件隊(duì)列”

我開發(fā)出來這個(gè)組件在這個(gè)團(tuán)隊(duì)使用一直很穩(wěn)定效果也很好。

實(shí)際上這個(gè)團(tuán)隊(duì)使用“本地文件隊(duì)列”的姿勢(shì)并不是我期望的词顾,本身使用方法并沒有明顯不妥八秃,只是會(huì)延遲消息的消費(fèi),但這中方法可以很好的且有效的隔離故障肉盹。

就是在發(fā)送AMQ消息的方法上添加了@AsyncExecutable昔驱,所以在入AMQ前先入隊(duì)“本地文件隊(duì)列”,然后“本地文件隊(duì)列”消費(fèi)者再把消息生產(chǎn)到AMQ上忍。

這里正是利用率“本地文件隊(duì)列”的優(yōu)點(diǎn)骤肛,比較可靠纳本,只依賴于本地文件系統(tǒng),不會(huì)有網(wǎng)絡(luò)故障的特性腋颠,近似不會(huì)被阻塞繁成。

在事故分析中,實(shí)際上AMQ對(duì)該核心服務(wù)也受到影響淑玫,但由于采用了“本地文件隊(duì)列”作為一級(jí)隊(duì)列巾腕,有效的隔離了對(duì)AMQ的網(wǎng)絡(luò)依賴,所以沒有放大事故混移。事故中“本地文件隊(duì)列”中消息被積累祠墅,沒有被消費(fèi),重啟服務(wù)后才被消費(fèi)歌径,原因后面再分析。

再說說此次事故中服務(wù)不可用的原因

  1. AMQ出現(xiàn)故障亲茅,現(xiàn)象是MQ客戶端sendMessage后等待響應(yīng)回铛,但一直在等待。
  2. AMQ Client消息的生產(chǎn)和Tomcat共用worker線程
  3. AMQ Client消息的生產(chǎn)沒有超時(shí)機(jī)制
  4. AMQ Client消息的生產(chǎn)采用同步發(fā)送克锣,異步發(fā)送有一些問題場景不太合適茵肃。

所以基于以上信息,AMQ消息的生產(chǎn)阻塞了Tomcat worker線程袭祟,最終導(dǎo)致worker線程被耗光而服務(wù)不可用验残。

在事故中通過線程堆棧信息和Tomcat線程使用數(shù)統(tǒng)計(jì)也確定了線程很快被耗光而請(qǐng)求被阻塞。

另一個(gè)服務(wù)中采用了異步線程池來生產(chǎn)AMQ消息巾乳,但拒絕策略采用了CallerRunsPolicy, 也是線程池線程很快被耗光而再耗光Tomcat worker線程您没,最終導(dǎo)致服務(wù)不可用。

事故產(chǎn)生的原因就是代碼中沒有有效做網(wǎng)路調(diào)用的隔離和降級(jí)胆绊。

上面提到的核心服務(wù)也受到影響氨鹏,參考《本地文件隊(duì)列-異步隔離》,也是因?yàn)?strong>“本地文件隊(duì)列”拒絕策略采用了CallerRunsPolicy压状,最終導(dǎo)致線程池線程很快被耗光仆抵,而使用“本地文件隊(duì)列”消費(fèi)調(diào)度主線程,消費(fèi)調(diào)度主線程被阻塞而無法消費(fèi)“本地文件隊(duì)列”消息并生產(chǎn)到AMQ种冬。但這里和其他服務(wù)不同的是镣丑,主業(yè)務(wù)和AMQ的消息生產(chǎn)是隔離的,主業(yè)務(wù)生產(chǎn)消息到“本地文件隊(duì)列”就返回娱两,并不直接依賴AMQ莺匠。

本文中提到了使用本地文件隊(duì)列的隔離姿勢(shì)。

后面再介紹使用本地文件隊(duì)列的降級(jí)姿勢(shì)谷婆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慨蛙,一起剝皮案震驚了整個(gè)濱河市辽聊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌期贫,老刑警劉巖跟匆,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異通砍,居然都是意外死亡玛臂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門封孙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迹冤,“玉大人,你說我怎么就攤上這事虎忌∨葆悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵膜蠢,是天一觀的道長堪藐。 經(jīng)常有香客問我,道長挑围,這世上最難降的妖魔是什么礁竞? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮杉辙,結(jié)果婚禮上模捂,老公的妹妹穿的比我還像新娘。我一直安慰自己蜘矢,他們只是感情好狂男,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著硼端,像睡著了一般并淋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上珍昨,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天县耽,我揣著相機(jī)與錄音,去河邊找鬼镣典。 笑死兔毙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的兄春。 我是一名探鬼主播澎剥,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼赶舆!你這毒婦竟也來了哑姚?” 一聲冷哼從身側(cè)響起祭饭,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叙量,沒想到半個(gè)月后倡蝙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绞佩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年寺鸥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片品山。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胆建,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肘交,到底是詐尸還是另有隱情笆载,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布酸些,位于F島的核電站宰译,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏魄懂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一闯第、第九天 我趴在偏房一處隱蔽的房頂上張望市栗。 院中可真熱鬧,春花似錦咳短、人聲如沸填帽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篡腌。三九已至,卻和暖如春勾效,著一層夾襖步出監(jiān)牢的瞬間嘹悼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工层宫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杨伙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓萌腿,卻偏偏與公主長得像限匣,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毁菱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器围苫,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 為什么這里如此黑暗 因?yàn)槟惚旧碡憹?我能做什么 做你喜歡的事 我想消失 如果消失能帶來光明的話 怎么才能改變這個(gè)世...
    方成學(xué)長閱讀 254評(píng)論 0 1
  • 激素皮膚捆姜。只要當(dāng)你用過兩次含有糖皮質(zhì)激素類的產(chǎn)品。何為糖皮質(zhì)就是激素類的一個(gè)統(tǒng)稱吏够。就好像我去檢測報(bào)告好了,我糖皮質(zhì)...
    Rbaobao閱讀 759評(píng)論 0 0
  • 在這個(gè)繁華的世界中,我們每天都過著三點(diǎn)一線的生活怔揩。重復(fù)著昨天,我不知道明天是什么脯丝,明天又該干什么商膊!當(dāng)早上的陽光射進(jìn)...
    王雅蕾閱讀 358評(píng)論 0 1
  • 1晕拆、別認(rèn)慫,自己連兩個(gè)人都搞不定還搞定反抗材蹬? 2.以后沒事別干別的实幕,要讀,死里讀堤器。 3.多想想業(yè)務(wù)的事情昆庇,別那么不...
    智囊團(tuán)閱讀 156評(píng)論 0 0