新聞中心
分布式鎖,再深一點(diǎn)??!
作者:58沈劍 2020-09-01 07:36:29
系統(tǒng)
Linux
分布式 在分布式環(huán)境下,怎么訪問臨界資源,是互聯(lián)網(wǎng)的一大難題。分布式鎖就是一種解決方法。

創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站與策劃設(shè)計(jì),扎魯特旗網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:扎魯特旗等地區(qū)。扎魯特旗做網(wǎng)站價(jià)格咨詢:18980820575
一、起因
分布式環(huán)境下,多臺(tái)機(jī)器上多個(gè)進(jìn)程對(duì)一個(gè)數(shù)據(jù)進(jìn)行操作,必然引起數(shù)據(jù)不一致的情況,比如“商品超賣”。那么在分布式環(huán)境下,怎么訪問臨界資源,是互聯(lián)網(wǎng)的一大難題。分布式鎖就是一種解決方法。
二、互斥原理
原理:多個(gè)訪問方對(duì)同一個(gè)資源進(jìn)行操作,需要進(jìn)行互斥,通常是利用一個(gè)這些訪問方同時(shí)能夠訪問到的lock來(lái)實(shí)施互斥的。
場(chǎng)景一
在同一個(gè)進(jìn)程內(nèi),多個(gè)線程的互斥,我們可以通過加鎖來(lái)進(jìn)行串行化訪問。
步驟:
- 多個(gè)線程同時(shí)搶鎖
- 只一個(gè)線程搶到,未搶到的阻塞,或下次再來(lái)?yè)?/li>
- 搶到鎖的線程操作臨界資源
- 操作完臨界資源后釋放鎖
畫外音:鎖是進(jìn)程內(nèi)的一個(gè)數(shù)據(jù)結(jié)構(gòu),將臨界資源的沖突轉(zhuǎn)變?yōu)閷?duì)鎖結(jié)構(gòu)的沖突。
場(chǎng)景二
在分布式環(huán)境下,進(jìn)程內(nèi)的鎖結(jié)構(gòu)就無(wú)法作用于進(jìn)程外了,所以多進(jìn)程情況下怎么進(jìn)行臨界資源的保護(hù)呢?
結(jié)合進(jìn)程內(nèi)鎖的機(jī)制,我們可以得出幾點(diǎn)條件:
- 需要有一個(gè)特殊的數(shù)據(jù)結(jié)構(gòu),每個(gè)進(jìn)程都能訪問
- 同時(shí)只能一個(gè)進(jìn)程訪問成功
- 訪問成功的進(jìn)程可以訪問臨界資源
畫外音:?jiǎn)栴}的關(guān)鍵在于找到同時(shí)只有一個(gè)進(jìn)程訪問成功的外部存儲(chǔ)結(jié)構(gòu)。
三、分布式鎖
既然分布式鎖的核心是選擇合適的外部存儲(chǔ),那怎么選擇“合適”的存儲(chǔ)介質(zhì)和存儲(chǔ)模型就是我們思考的核心了。
那分布式鎖用關(guān)系型存儲(chǔ)還是KV存儲(chǔ)?
從鎖的角度來(lái)看,我們對(duì)它要求不多,KV存儲(chǔ)足夠。這樣我們第一想到的就是Redis方案了,那是不是Redis方案就是最優(yōu)方案呢?
Redis:?jiǎn)尉€程高性能的內(nèi)存KV存儲(chǔ)方案。
- 滿足所有進(jìn)程都能訪問的數(shù)據(jù)結(jié)構(gòu)
- 單線程滿足只有一個(gè)進(jìn)程能訪問成功(setnx命令)
- 業(yè)務(wù)上保證set成功的進(jìn)程進(jìn)行臨界資源操作
步驟:
- 多臺(tái)機(jī)器上多個(gè)進(jìn)程對(duì)這個(gè)鎖進(jìn)行爭(zhēng)搶,例如在緩存上同時(shí)進(jìn)行set key=123操作
- 只有一個(gè)進(jìn)程會(huì)搶到這個(gè)鎖,即只有一個(gè)進(jìn)程對(duì)緩存set key=123能夠成功,不成功的進(jìn)程下次再來(lái)?yè)?/li>
- 搶到鎖的進(jìn)程對(duì)臨界資源進(jìn)行操作
- 扣減完成之后釋放鎖,即對(duì)緩存delete key=123
從功能上,Redis完美的實(shí)現(xiàn)了分布式鎖,那再深入一點(diǎn)。
- MySQL能不能實(shí)現(xiàn)分布式鎖?
- ZooKeeper實(shí)現(xiàn)分布式鎖和Redis實(shí)現(xiàn)的本質(zhì)區(qū)別是什么?
- 不同的架構(gòu)選型,我們應(yīng)該怎么選擇?
網(wǎng)站標(biāo)題:分布式鎖,再深一點(diǎn)??!
當(dāng)前地址:http://www.5511xx.com/article/dhhgood.html


咨詢
建站咨詢
