日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

又一批长事务,P0故障谁来背锅?

發布時間:2025/3/16 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 又一批长事务,P0故障谁来背锅? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原創:小姐姐味道(微信公眾號ID:xjjdog),歡迎分享,轉載請保留出處。

最近幾周,發生過多起因為事務問題引起的服務報錯。現象為數據庫連接池連接占滿,數據庫連接長時間等待,最終導致請求線程hang住,服務大面積報錯。這個時候,服務資源、數據庫資源大量空閑,但就是進行不下去,影響是比較惡劣的。

誰來背鍋?當然是架構師。因為這次所有的服務都活著,沒運維什么事。

面試時,大家可能都會碰到關于事務相關的問題,升級版的可能是分布式事務的問題。在互聯網行業中,一句馬馬虎虎的補償事務就能蒙混過關,畢竟都是些短小精悍的接口。

但在很多企業級應用中,這行不通。我們必須直面慘淡的現實。

為什么要用長事務?

在許多業務非常復雜的后臺系統,經常頻繁操作DB,為了保證數據的一致性,能夠在出錯時回滾數據,通常會使用事務。

就拿最簡單的單機數據庫事務來說。

在事務操作期間,如果持續時間過長,只有等事務結束之后,DB連接才會釋放,此類長時間占用DB連接的事務操作,稱為長事務。一旦外部有大量請求,并發調用此操作,那么將會有大量的DB連接被持有而沒有被釋放掉,直到連接池爆滿。

這個時候,如果有其他請求到來,那十有八九是以失敗告終。

也就是說,連接資源被少數長事務操作占用。在這種情況下,即使是最簡單接口查詢,都不能夠正常進行。

幾粒老鼠屎,壞了一鍋粥。

一些魔幻的反應

當你去排查這種問題的時候,可能會陷入僵局。jstack顯示,多數請求其實是阻塞在tomcat的線程池上,而且是一些訪問速度非常快的請求被阻塞。

比如,tomcat的200個線程,有180個阻塞在耗時不到1ms的/status接口上。

很多人就一臉懵逼。經驗失靈。

jstack此時的輸出結果,欺騙了我們。真正造成阻塞的,是那額外的20多個線程。

有哪些改善?

保證事務的短小是一個基本要求,包括但不限于:

應控制慢查詢的調用頻率,盡量減少慢查詢。很多情況下,這條規則是自欺欺人的,需要業務做一些妥協。

事務內不應包含任何RPC調用,減少事務的粒度。通常,一些RPC調用,包括其他非事務資源的調用,耗時非常不可控。如果把它們也納入事務的范圍之內,勢必會加劇資源的占用。事務內不應包含其他容易超時或者長時間阻塞的服務,如HTTP調用、IO操作。

次優先級服務如消息隊列,不應該放在事務內,避免因為消息隊列不可用引起的服務不可用。給類似消息隊列的組件,設置一個合理的超時時間的非常有必要的,否則它就會一直等在那里。但即使是這樣,也盡量不要把它們納入到事務操作之內。

跨庫、跨類型(如Redis),不應該放在同一事務中,可避免交叉影響。

你可以看到上面的這些描述,有些和我們所追求的數據一致性是相悖的。這不奇怪,依然是CAP原理的權衡。有些業務選擇的是寧可卡死不再響應,也不能進入異常數據;有些則首先讓業務運行下去,臟數據會通過補償事務進行修正。

一切看你的選擇。

設計總有人背鍋,補償總有人做出犧牲。

解決方式

那么如何來快速解決大事務造成的服務不可用問題呢?

除了擴容,其實是無解。重啟大法也不見得好用。因為被阻斷的請求,會以更兇猛的態勢再次來襲。

你可能會想到調大連接池的大小。但在實踐中得知,也不好用,大事務請求會迅速將連接池占滿。

但我們可以提前進行防御。

以Spring為例,事務的使用方式大多數是使用@Transactional注解來控制的,或者是聲明式事務方式。我建議以以下方式進行預防和發現:

1) 重新掃描或者Review業務代碼,排查事務中是否有以上提到的各種情況。然后將除DB操作外的其他操作移動到事務之外。

2) 每個事務操作都給予足夠重視,對于執行復雜度和時間復雜度不確定的事務,添加超時報警,及時發現引起的原因。

同時,還需要加強監控,輔助進行問題排查。

1) ?業務可以考慮定時將數據庫連接池的信息進行打印,通過看日志的方式進行初步排查。

2) 使用jstack查詢執行棧,找出阻塞的點。

3) 排查并聯系下游服務,找出主要原因

xjjdog傾向于使用監控快速發現問題。如圖,通過連接池監控,可以看到數據庫連接池連接數長時間保持在高位不釋放,同時等待的線程數急劇增加。發生此種現象多數可以考慮是否是以上原因引起。

發生問題時,應及時(多次)使用jstack定位到線程的阻塞位置,然后排查下游服務是否有問題,或者是否存在慢查詢。

最好的情況是服務已經進行了對代碼的梳理,那么引起的原因大概率只剩下了慢查詢。針對慢查詢,druid數據庫連接池,提供了sql的聚合,能夠查看是每一類查詢語句的具體執行情況。如圖,短時間內SQL請求飆升,最大執行時長上升,連接池占滿:

具體是哪一句SQL所引起的,一目了然。

End

長事務問題的危險級別屬于高危型,通常會造成嚴重的后果,可以通過觀察監控,防范于未然。

最優的解決方式,當然是業務模型的改進。但這東西第一涉及到開發成本,第二涉及到跨部門協作。

出錢的老板,無法聽懂你這些夢話。

在一些公司內部,這兩者都是讓人抓狂的事情,還不如痛痛快快背個鍋,來得實在。

作者簡介:小姐姐味道??(xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。

有道無術,術可成;有術無道,止于術

歡迎大家關注Java之道公眾號

好文章,我在看??

總結

以上是生活随笔為你收集整理的又一批长事务,P0故障谁来背锅?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 手机看片1024日韩 | 97人妻精品视频一区 | 91色区| 色妺妺视频网 | 天天射天天 | 国产一区午夜 | 91久久久久 | 一级美女视频 | 男女爱爱网站 | 国产中年熟女高潮大集合 | 欧美在线观看一区二区三区 | 成年人网站av | 182tv午夜| 波多野结衣影片 | 青青啪啪| 亚洲一区二区中文 | 五月天啪啪 | 亚洲色图27p| 一级黄色a | 欧美亚洲国产视频 | 视频在线观看91 | 视频免费在线 | 538在线精品视频 | 精品国内自产拍在线观看视频 | 国产又粗又猛又爽又黄91 | 亚洲一二三四视频 | 日日夜夜免费 | 亚洲网址在线观看 | 精品视频一区在线观看 | 超碰凹凸 | 天天5g天天爽免费观看 | 一区二区三区免费网站 | 中文字幕有码无码人妻av蜜桃 | 91麻豆视频在线观看 | 中国一区二区视频 | 亚洲国产精品视频一区 | 日日操夜夜草 | 精国产人伦一区二区三区 | 狠狠一区 | 美味的客房沙龙服务 | 三级视频网站在线观看 | 性欧美成人播放77777 | 欧美性xxxxx| 亚洲黄色大全 | 国产成人av免费 | av网在线播放 | 中文字幕亚洲高清 | 亚洲一区二区三区网站 | xxxx久久 | 不卡欧美 | 天天操天天干天天 | 老女人性生活视频 | 精品精品精品 | 天堂中文网 | 久久无吗视频 | 一区二区三区日 | 99re久久| 天天躁日日躁aaaaxxxx | 久久久久女人精品毛片九一 | 日韩中文一区 | 操白虎逼 | 国产精品乱码久久久久久 | 日韩精品免费一区二区在线观看 | 欧美在线三区 | 亚洲欧美一区二区三区 | 手机免费av片 | 一区二区三区小视频 | 天天操天天干天天爱 | 永久在线免费观看 | 亚洲精品欧美日韩 | 男女日批在线观看 | 在线视频 日韩 | h视频在线看 | 欧美成人乱码一区二区三区 | 国产美女被遭强高潮免费网站 | 尤物网在线 | 天天操一操 | 成年人免费在线 | 综合国产在线 | 在线免费观看视频网站 | 伊人网站 | 性生交大片免费看l | 欧美日韩三级在线观看 | 日韩网站在线 | 91久久一区二区 | 国产精品一级黄片 | 91看片黄 | 亚洲一二三不卡 | 亚洲精品二 | 亚洲成在线 | 国产精品无 | 麻豆网址 | 久久久久亚洲av成人网人人网站 | 性做爰视频免费播放大全 | 欧美xxxx精品 | 国产黄色网 | 在线免费国产视频 | 国产三级自拍 | 婷婷激情五月综合 |