忻州内厩机械设备有限公司

熱門系統(tǒng)產(chǎn)品
電商交易類產(chǎn)品
渠道/經(jīng)銷商產(chǎn)品
AI人工智能產(chǎn)品
業(yè)務(wù)協(xié)同系統(tǒng)產(chǎn)品
其他產(chǎn)品與服務(wù)
沒有你合適的?
我要定制 >

訂單系統(tǒng)中并發(fā)問題和鎖機制的探討

發(fā)布時間: 2018-11-16 文章分類: 技術(shù)干貨
閱讀量: 0

問題由來

假設(shè)在訂單管理系統(tǒng)開發(fā)方案中(以火車票訂單系統(tǒng)為例),用戶A,用戶B都要預定從成都到北京的火車票,A、B在不同的售票窗口均同時查詢到了某車廂臥鋪中、下鋪位有空位。用戶A正在猶豫訂中鋪還是下鋪,這時用戶B果斷訂購了下鋪。當用戶A決定訂下鋪時,系統(tǒng)提示下鋪已經(jīng)被預訂,請重新選擇鋪位。在這個系統(tǒng)場景中,我們來探討一下,火車票系統(tǒng)是怎樣處理并發(fā)事件以及怎么利用鎖機制來避免重復訂票的。

方案1:

為了避免重復訂票,大部分人會想到在做訂票操作前,去數(shù)據(jù)庫查詢該鋪位是否已經(jīng)被預訂,假設(shè)“鋪位”數(shù)據(jù)庫表增加標記字段FLAG(空閑:0;已預訂:1),如果查詢到鋪位的FLAG字段值為1,那么預訂就不成功,如果為0就成功預訂,并把FLAG置為1。這種方案如果在業(yè)務(wù)量很少的系統(tǒng)中,或許可行。但業(yè)務(wù)量較大時,特別是火車票這樣的業(yè)務(wù)量,就會出現(xiàn)問題。問題在,當用戶A、用戶B同時對同一鋪位預訂時,雖說是“同時”,但對于數(shù)據(jù)庫操作來說一定是有先后順序的,假設(shè)A在查詢該鋪位的FLAG時,值為0,準備預訂并將值設(shè)為1,而與此同時B已經(jīng)預訂成功,并已將FLAG設(shè)為1。而A因為沒有即時查詢到FLAG=1,因此也預訂成功,又將FLAG設(shè)為1。

訂單系統(tǒng)中并發(fā)問題和鎖機制的探討

這樣就造成了重復訂票,在購票高峰期,使用這樣的方案,重復訂票不可避免。

方案2:

我們想到了利用數(shù)據(jù)庫的悲觀鎖來解決這個問題,設(shè)想假如用戶A查詢到想預訂的票,用戶B根本都查詢不到,只有A一個人能看到,那是不是沒有重復訂票的可能了,因為壓根沒人跟他搶。

可以這樣實現(xiàn)這個方案:

select * from table where …… for update skip locked,該語句是查詢用戶指定條件的票信息,并加鎖(for update),如果有記錄已經(jīng)被鎖則自動跳到下一條記錄(skip locked),這樣誰先查詢誰就可以慢慢的考慮要上鋪還是下鋪。但火車票系統(tǒng)是這樣做的嗎?顯然不是,因為這樣用戶體驗太不好,票實際還很多,但確看不到買不到,這顯然不合理。

方案3:

我們又想到了訂單管理系統(tǒng)程序?qū)用鎭斫鉀Q并發(fā)問題,最簡便的方式是利用synchronized來處理,但我們要知道一個大型系統(tǒng)必然是集群方式部署的,synchronized只能解決單節(jié)點環(huán)境的并發(fā)問題,要解決此問題還是必須依賴全局性的鎖機制。

方案4:

既然又回到了在數(shù)據(jù)庫上加鎖,我們又想一下如果我們在查詢時,使用樂觀鎖,但在預訂之前使用悲觀鎖會怎樣呢?例如我們查詢時:

select * from table where ……

用戶A、用戶B都查詢到了相同的票信息(中鋪和下鋪),用戶A或用戶B在預訂時做一次悲觀鎖:

select * from table where …… for update(只對預訂的票做悲觀鎖)

此時后者在預訂時,無法獲取該記錄的鎖,自然就無法預訂,避免了重復預訂的問題。

文章來源:博客園

<數(shù)商云(www.zhimaihui.cn)是國內(nèi)知名企業(yè)級電商平臺提供商,為企業(yè)級商家提供最佳的系統(tǒng)開發(fā)(多種模式電商平臺搭建:B2B/B2B2C/B2C/O2O/新零售等)、供應(yīng)系統(tǒng)搭建電商解決方案服務(wù)>

點贊 | 0

數(shù)商云是一家全鏈數(shù)字化運營服務(wù)商,專注于提供SCM/企業(yè)采購/SRM供應(yīng)商/DMS經(jīng)銷商/渠道商等管理系統(tǒng),B2B/S2B/S2C/B2B2C/B2C等電商系統(tǒng),從“供應(yīng)鏈——生產(chǎn)運營——銷售市場”端到端的全鏈數(shù)字化產(chǎn)品和方案,致力于通過數(shù)字化和新技術(shù)為企業(yè)創(chuàng)造商業(yè)數(shù)字化價值。

添加企業(yè)微信獲取更多資料
添加企業(yè)微信獲取更多資料
相關(guān)文章

評論

剩余-200
發(fā)表
最新資訊

最新資訊

更多 >
推薦閱讀

推薦閱讀

填寫以下信息, 免費獲取方案報價
姓名
手機號碼
企業(yè)名稱
  • 建筑建材
  • 化工
  • 鋼鐵
  • 機械設(shè)備
  • 原材料
  • 工業(yè)
  • 環(huán)保
  • 生鮮
  • 醫(yī)療
  • 快消品
  • 農(nóng)林牧漁
  • 汽車汽配
  • 橡膠
  • 工程
  • 加工
  • 儀器儀表
  • 紡織
  • 服裝
  • 電子元器件
  • 物流
  • 化塑
  • 食品
  • 房地產(chǎn)
  • 交通運輸
  • 能源
  • 印刷
  • 教育
  • 跨境電商
  • 旅游
  • 皮革
  • 3C數(shù)碼
  • 金屬制品
  • 批發(fā)
  • 研究和發(fā)展
  • 其他行業(yè)
需求描述
填寫以下信息馬上為您安排系統(tǒng)演示
姓名
手機號碼
你的職位
企業(yè)名稱

恭喜您的需求提交成功

尊敬的用戶,您好!

您的需求我們已經(jīng)收到,我們會為您安排專屬電商商務(wù)顧問在24小時內(nèi)(工作日時間)內(nèi)與您取得聯(lián)系,請您在此期間保持電話暢通,并且注意接聽來自廣州區(qū)域的來電。
感謝您的支持!

您好,我是您的專屬產(chǎn)品顧問
掃碼添加我的微信,免費體驗系統(tǒng)
(工作日09:00 - 18:00)
專屬顧問圖片
電話咨詢 (工作日09:00 - 18:00)
客服熱線: 4008 868 127
售前熱線: 189 2432 2993
掃碼即可快速撥打熱線