新聞中心
一、緣起

創(chuàng)新互聯(lián)服務(wù)項目包括恭城網(wǎng)站建設(shè)、恭城網(wǎng)站制作、恭城網(wǎng)頁制作以及恭城網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,恭城網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到恭城省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
分布式環(huán)境下,多臺機(jī)器上多個進(jìn)程對一個數(shù)據(jù)進(jìn)行操作,如果不做互斥,就有可能出現(xiàn)“余額扣成負(fù)數(shù)”,或者“商品超賣”的情況,如何實現(xiàn)簡易分布式鎖,對分布式環(huán)境下的臨界資源做互斥,是今天將要討論的話題。
二、互斥原理
原理:多個訪問方對同一個資源進(jìn)行操作,需要進(jìn)行互斥,通常是利用一個這些訪問方同時能夠訪問到的lock來實施互斥的。
例子1:同一個進(jìn)程內(nèi),多個線程的互斥,典型的場景是生產(chǎn)者消費(fèi)者對同一個queue進(jìn)行操作時的互斥
方案:設(shè)定一個所有線程能夠訪問到的lock實施互斥
步驟:
(1)多個線程同時搶鎖
(2)只一個線程搶到,未搶到的阻塞,或下次再來搶
(3)搶到鎖的線程操作臨界資源
(4)操作完臨界資源后釋放鎖
例子2:同一個操作系統(tǒng)上,多個進(jìn)程的互斥,典型的場景是手機(jī)上多個APP對同一個文件進(jìn)行寫入互斥
方案:設(shè)定一個所有進(jìn)程能夠訪問到的lock實施互斥(例如文件inode,OS幫我們做了)
步驟:
(1)多個進(jìn)程同時搶鎖
(2)只一個進(jìn)程搶到,未搶到的阻塞,或下次再來搶
(3)搶到鎖的進(jìn)程操作臨界資源
(4)操作完臨界資源后釋放鎖
三、分布式環(huán)境下多進(jìn)程互斥
分布式環(huán)境下,多臺機(jī)器上多個進(jìn)程對一個數(shù)據(jù)進(jìn)行操作的互斥,例如同一個uid=123要避免同時進(jìn)行扣款。
根據(jù)上面的原理,先找一個多臺機(jī)器多個進(jìn)程可以同時訪問到的一個lock,例如redis。
步驟:
(1)多臺機(jī)器上多個進(jìn)程對這個鎖進(jìn)行爭搶,例如在緩存上同時進(jìn)行set key=123操作
(2)只有一個進(jìn)程會搶到這個鎖,即只有一個進(jìn)程對緩存set key=123能夠成功,不成功的進(jìn)程下次再來搶
(3)搶到鎖的進(jìn)程對余額進(jìn)行扣減
(4)扣減完成之后釋放鎖,即對緩存delete key=123
分布式環(huán)境下的互斥,搞定。
【本文為專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】
分享標(biāo)題:一分鐘實現(xiàn)分布式鎖
網(wǎng)站網(wǎng)址:http://fisionsoft.com.cn/article/cohejsd.html


咨詢
建站咨詢
