国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

一個update語句執(zhí)行要10s,大廠的架構真無語!

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-01-29 10:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


一、問題描述

2022年7月2x日,窗外夕陽將落不落,余暉灑落在街道上,遠處的熱浪仿佛在說:嘿,歡迎來到烤箱中的瑞士卷—成都!

“嘿!”,我回過神來看到一只潔白纖細的手落在我的肩膀上,眼光從窗外收回順著手臂快速扭跟過去,然后看到臉色暗淡夾雜著些許痘痘的測試妹紙一臉的嚴肅!“昨天晚上上線后,這個后臺執(zhí)行更新信息非常緩慢,這里肯定有問題!”

基于 Spring Boot + MyBatis Plus + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數(shù)據(jù)權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

二、問題分析

“好的,我排查一下”。三步并作兩步回到工位,掀開MacBook Pro的蓋子、打開顯示器的電源、輸入鏈路日志跟蹤系統(tǒng)地址、復制traceId、查看日志…… 這一套操作熟悉得令人心疼。

排查日志初步發(fā)現(xiàn)實際調(diào)用了兩次,第一次執(zhí)行時間接近10s,調(diào)用超時,第二次執(zhí)行時間接近5s。你肯定也想到了,RPC調(diào)用retry設置了值。對RPC配置檢查之后確實設置的是retry=1,實際項目中,增、刪、改等操作不應設置retry。

通過調(diào)用鏈排查發(fā)現(xiàn)update執(zhí)行非常耗時。聰明的你一定也第一時間懷疑update語句有性能問題。把update語句拿出來:

updatetableseta=#{1},b=#{2},...whereid=#{0}(id主鍵)

這下傻眼了,根據(jù)主鍵id更新怎么可能要執(zhí)行10s?

masaga?!!

為了驗證我的猜想,command + 空格、鍵入idea并回車、打開對應的工程、定位到對應的方法處、迅速瀏覽一遍并思索片刻之后,真相大白!

06f25d70-9f73-11ed-bfe3-dac502259ad0.jpg

服務B執(zhí)行完update語句之后,事務commit之前,還有兩個異步通知任務,使用的是spring的@Async注解,自定義的線程池,跟蹤日志中的線程標志,排查過程中發(fā)現(xiàn)有的異步任務居然由原線程執(zhí)行!進一步分析日志發(fā)現(xiàn)這種現(xiàn)象并不是一直發(fā)生,有時又是由異步線程執(zhí)行。開始排查線程池,線程池果然設置了callRunner的失敗策略。

所以,由原線程執(zhí)行時,事務的范圍如下:

06fe1174-9f73-11ed-bfe3-dac502259ad0.jpg

定位到原因之后,修改線程池參數(shù)為常見策略,初始和最大線程數(shù)相同,隊列數(shù)9999,保證線程池的線程充足性。

修復

灰度

招呼測試妹紙測試

自信滿滿,悠閑喝水

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數(shù)據(jù)權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

三、梅開二度

“在高并發(fā)場景下,復現(xiàn)了這個問題,你快看一下”!測試妹紙對我投來鄙視的眼光犀利的說道:“修復好了,再喊我回歸哈,拜拜~”。

奇怪,為什么這么平常的一個update語句,怎么會執(zhí)行這么長時間呢?難道出發(fā)了框架的bug導致事務提交延遲?不對不對,這個方向想偏了~也沒有其他地方在更新這個表了呀?不可能有表鎖,更不可能有行鎖呀……

masaga?!!

根據(jù)表鎖以及行鎖的思路,為了驗證我的內(nèi)心OS猜想,立即使用 show processlist 進行了連接查詢,果然有重大發(fā)現(xiàn),除了服務B有連接之外,還有服務A的連接。而服務A又是服務B的上游系統(tǒng)!系統(tǒng)架構如下:

070c7a52-9f73-11ed-bfe3-dac502259ad0.jpg

執(zhí)行順序如下:

順序 服務 執(zhí)行動作 關鍵點
1 服務A 執(zhí)行update語句 數(shù)據(jù)庫 行鎖 lock
2 服務A 調(diào)用服務B RPC 調(diào)用
3 服務B 執(zhí)行update語句 數(shù)據(jù)庫 行鎖 waiting
4 服務A 調(diào)用服務B超時 RPC timeout
5 服務A 再次調(diào)用服務B RPC retry
6 服務A 調(diào)用調(diào)用服務B再次超時 RPC timeout
7 服務A PRC調(diào)用超時異常 數(shù)據(jù)庫 事務回滾 行鎖 unlock
8 服務B 執(zhí)行 數(shù)據(jù)庫 行鎖 競爭

不被人信任的滋味很難受!為了重新贏回測試妹紙對我的信任,這次的bug修復只需成功不許失敗!

四、解決方案

知道病根之后,問題就很簡單了。

最理想的方案

對微服務架構進行重構,但這樣做帶來的收益不高,現(xiàn)在手上還有優(yōu)先級更高的事情要做。

07185eda-9f73-11ed-bfe3-dac502259ad0.jpg
最實際的方案

是將服務A對服務B的調(diào)用和服務A的事務分離出來。這樣就不存在鎖競爭的問題了。

072741ca-9f73-11ed-bfe3-dac502259ad0.jpg

五、總結

看到了這里,你心里是不是已經(jīng)在想:我靠,大廠的系統(tǒng)架構真的很垃圾,我都是關著燈的~(走錯片場~)

其實這個系統(tǒng)變成這樣是有歷史原因的,如果當初的開發(fā)者能夠采用DDD的思想或者能夠明白微服務的對象高內(nèi)聚思想,或許今天就不會發(fā)生在我身上這場研發(fā)與測試之間的信任危機。

夕陽落下,夜晚籠罩著大地。路旁的小貓咪悠然站了起來,張大嘴巴打個哈欠的同時伸了個懶腰,然后走向3號門口,等待著心地善良的加班兒投食貓糧。“驗證通過,早點下班”。不遠處傳來測試妹紙的聲音,夾雜著中央空調(diào)吹出的風聲。



審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • macbook
    +關注

    關注

    0

    文章

    500

    瀏覽量

    42936
  • 線程
    +關注

    關注

    0

    文章

    509

    瀏覽量

    20828
  • 系統(tǒng)架構

    關注

    1

    文章

    73

    瀏覽量

    24222

原文標題:一個update語句執(zhí)行要10s,大廠的架構真垃圾!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    感知、決策規(guī)劃與執(zhí)行控制:智能系統(tǒng)的三層核心架構解析

    智能系統(tǒng)與復雜環(huán)境的每次成功交互,都依賴于感知、決策規(guī)劃與執(zhí)行控制三基礎層面的精密協(xié)作。這三大功能模塊構成了帶有動態(tài)反饋與雙向信息流
    的頭像 發(fā)表于 01-24 15:00 ?370次閱讀
    感知、決策規(guī)劃與<b class='flag-5'>執(zhí)行</b>控制:智能系統(tǒng)的三層核心<b class='flag-5'>架構</b>解析

    條件的執(zhí)行語句

    銷毀,因此條件執(zhí)行是無效的。 因此,保持if和else語句盡可能簡單是十分有益處的,因為這樣編譯器可以 集中處理它們。關系表達式應該寫在起。 下面的例子展示編譯器如何使用條件執(zhí)行
    發(fā)表于 12-12 08:25

    10BASE-T1S會是未來車載總線的第選擇嗎?

    導讀近年來,關于10BASE-T1S與CANXL誰能登頂未來總線“哥”寶座的討論熱度持續(xù)攀升。今日,讓我們同深入剖析10BASE-T1S總線技術,探尋它究竟是否具備成為未來汽車總線
    的頭像 發(fā)表于 12-08 11:48 ?1758次閱讀
    <b class='flag-5'>10BASE-T1S</b>會是未來車載總線的第<b class='flag-5'>一</b>選擇嗎?

    藍牙中心設備,同時連接10外設,通信帶寬能達到20k/s

    經(jīng)典藍牙(1.2/2.0+EDR)速率 1-3Mbps,主從架構最多連 7 從設備約 80kbps(10KB/s)以上僅支持最多 7
    發(fā)表于 11-17 15:48

    使用evn工具執(zhí)行pkgs --update時出現(xiàn)如下報錯,怎么解決?

    # pkgs --update [Use Github server - auto decision based on IP location] fatal: destination path
    發(fā)表于 09-19 08:02

    ubuntu 22.04 執(zhí)行pkgs--update 失敗的原因?

    ubuntu 22.04 使用pkgs —update 失敗,我的源碼是從gitee , git 是可以正常使用的
    發(fā)表于 09-15 06:09

    紅魔10S Pro+體驗報告

    深耕專業(yè)電競領域多年,紅魔始終以硬核性能和前沿配置拓寬移動游戲體驗的邊界。不久前推出的紅魔10S Pro+搭載性能增強的驍龍 8至尊版移動平臺,實現(xiàn)了性能與能效的大幅提升,并在AI游戲體驗上帶來重磅
    的頭像 發(fā)表于 08-08 16:59 ?2467次閱讀

    Unicore標準NEMA語句GSA及說明

    本文介紹和芯星通的NEMA語句說明。
    的頭像 發(fā)表于 07-16 11:39 ?688次閱讀
    Unicore標準NEMA<b class='flag-5'>語句</b>GSA及說明

    在使用EZ-USB? FX3? 設備時,上電后相機開始正常工作,但延時10s左右播放器才能夠顯示圖像數(shù)據(jù)?為什么?

    在使用EZ-USB? FX3? 設備時,上電后相機開始正常工作,但延時10s左右播放器才能夠顯示圖像數(shù)據(jù)?這是由于固件中的某些設置問題嗎?
    發(fā)表于 07-16 07:08

    驅動下代E/E架構的神經(jīng)脈絡進化—10BASE-T1S

    隨著“中央+區(qū)域”架構的演進,10BASE-T1S憑借其獨特優(yōu)勢,將成為驅動下代汽車電子電氣(E/E)架構“神經(jīng)系統(tǒng)”進化的關鍵技術。
    的頭像 發(fā)表于 07-08 18:17 ?797次閱讀
    驅動下<b class='flag-5'>一</b>代E/E<b class='flag-5'>架構</b>的神經(jīng)脈絡進化—<b class='flag-5'>10BASE-T1S</b>

    基礎篇3:掌握Python中的條件語句與循環(huán)

    塊 else: # 所有前面的條件表達式都為假時執(zhí)行的代碼塊 示例 以下是簡單的示例,演示了如何使用條件語句來決定是否打印不同的消息: 復制代碼 age = 18 if ag
    發(fā)表于 07-03 16:13

    淺談wsl --update` 命令行選項無效的解決方案

    PS C:\Users\Administrator> wsl --update >> 命令行選項無效: --update
    的頭像 發(fā)表于 06-27 10:28 ?1.1w次閱讀

    《ESP32S3 Arduino開發(fā)指南》第三章 C/C++語言基礎

    訪問數(shù)組中的某個元素,則需要使用以下語句。數(shù)組名稱[下標] 需要注意的是,數(shù)組下標是從0開始編號的。例如,將數(shù)組a中的第一個元素賦值為
    發(fā)表于 06-10 09:20

    詳解TIA Portal SCL編程語言中的IF語句

    IF 語句是編程中最基本和最重要的控制結構之,它的主要作用是根據(jù)條件決定程序的執(zhí)行路徑,IF 語句是編程中實現(xiàn)邏輯判斷和決策的基礎。
    的頭像 發(fā)表于 05-24 15:01 ?1879次閱讀
    詳解TIA Portal SCL編程語言中的IF<b class='flag-5'>語句</b>

    CPU的各種指令和執(zhí)行流程

    、數(shù)據(jù)傳輸?shù)裙δ堋?b class='flag-5'>要深入理解CPU的指令,我們需要從多個維度進行分析,尤其是指令的構成、分類、執(zhí)行流程以及與不同架構的關系。
    的頭像 發(fā)表于 04-18 11:24 ?2629次閱讀