记一次线上并发问题
問題背景:
最近因為經(jīng)濟下滑,導致公司沒有以前那么多的借款人,借款金額少,投資人就需要搶。
以下代碼只是例子,不代表真實代碼。
public void updateTenderRealAmount(Long id){
xxx.update(id);
xxx.selectById(id);
// 一堆邏輯判斷
// 更新整個對象
xxx.update(xxx)
}
按照邏輯:
A事務先來,B事務再來,正常邏輯
A開啟事務,B等待
A提交,B進入,B提交
事實:
A進方法,數(shù)據(jù)庫開啟行鎖,
B進方法,等待行鎖,A釋放行鎖,B更新
A 查詢 拿到B更新的數(shù)據(jù)
更新? 數(shù)據(jù)出錯。
排查線上代碼,發(fā)現(xiàn)從Controller 調(diào)服務 不走事務,
但是從服務直接調(diào)其他服務又會走事務
查詢問題發(fā)現(xiàn),使用dubbo2.8.4 并不是官方發(fā)布,我們從2.8.4換成2.5.10
問題解決
轉(zhuǎn)載于:https://juejin.im/post/5c7a0d41f265da2d9c3889d8
總結(jié)
- 上一篇: flask中的CBV和FBV
- 下一篇: 开发直播APP软件一定要了解的H.264