一分鐘實(shí)現(xiàn)分布式鎖

2018-09-06 18:04 更新

一、緣起

分布式環(huán)境下,多臺(tái)機(jī)器上多個(gè)進(jìn)程對(duì)一個(gè)數(shù)據(jù)進(jìn)行操作,如果不做互斥,就有可能出現(xiàn)“余額扣成負(fù)數(shù)”,或者“商品超賣”的情況,如何實(shí)現(xiàn)簡易分布式鎖,對(duì)分布式環(huán)境下的臨界資源做互斥,是今天將要討論的話題。


二、互斥原理

原理:多個(gè)訪問方對(duì)同一個(gè)資源進(jìn)行操作,需要進(jìn)行互斥,通常是利用一個(gè)這些訪問方同時(shí)能夠訪問到的lock實(shí)施互斥的。


例子1:同一個(gè)進(jìn)程內(nèi),多個(gè)線程的互斥,典型的場(chǎng)景是生產(chǎn)者消費(fèi)者對(duì)同一個(gè)queue進(jìn)行操作時(shí)的互斥
同一進(jìn)程空間
方案:設(shè)定一個(gè)所有線程能夠訪問到的lock實(shí)施互斥
多個(gè)線程互斥

步驟:

(1)多個(gè)線程同時(shí)搶鎖

(2)只一個(gè)線程搶到,未搶到的阻塞,或下次再來搶

(3)搶到鎖的線程操作臨界資源

(4)操作完臨界資源后釋放鎖


例子2:同一個(gè)操作系統(tǒng)上,多個(gè)進(jìn)程的互斥,典型的場(chǎng)景是手機(jī)上多個(gè)APP對(duì)同一個(gè)文件進(jìn)行寫入互斥
同一個(gè)操作系統(tǒng)
方案:設(shè)定一個(gè)所有進(jìn)程能夠訪問到的lock實(shí)施互斥(例如文件inode,OS幫我們做了)
多個(gè)進(jìn)程互斥

步驟:

(1)多個(gè)進(jìn)程同時(shí)搶鎖

(2)只一個(gè)進(jìn)程搶到,未搶到的阻塞,或下次再來搶

(3)搶到鎖的進(jìn)程操作臨界資源

(4)操作完臨界資源后釋放鎖


三、分布式環(huán)境下多進(jìn)程互斥

分布式,跨機(jī)器

分布式環(huán)境下,多臺(tái)機(jī)器上多個(gè)進(jìn)程對(duì)一個(gè)數(shù)據(jù)進(jìn)行操作的互斥,例如同一個(gè)uid=123要避免同時(shí)進(jìn)行扣款。

根據(jù)上面的原理,先找一個(gè)多臺(tái)機(jī)器多個(gè)進(jìn)程可以同時(shí)訪問到的一個(gè)lock,例如redis。 

分布式,跨機(jī)器,互斥

步驟:

(1)多臺(tái)機(jī)器上多個(gè)進(jìn)程對(duì)這個(gè)鎖進(jìn)行爭(zhēng)搶,例如在緩存上同時(shí)進(jìn)行set key=123操作

(2)只有一個(gè)進(jìn)程會(huì)搶到這個(gè)鎖,即只有一個(gè)進(jìn)程對(duì)緩存set key=123能夠成功,不成功的進(jìn)程下次再來搶

(3)搶到鎖的進(jìn)程對(duì)余額進(jìn)行扣減

(4)扣減完成之后釋放鎖,即對(duì)緩存delete key=123

分布式環(huán)境下的互斥,搞定。 


文章完了,希望大伙對(duì)分布式鎖原理極其簡易實(shí)現(xiàn)有個(gè)初步的了解,如果有收獲,幫忙轉(zhuǎn)發(fā)哈,歡迎關(guān)注“架構(gòu)師之路”。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)