首頁技術(shù)文章正文

為什么會(huì)有分布式鎖?分布式鎖實(shí)現(xiàn)方案

更新時(shí)間:2023-06-07 來源:黑馬程序員 瀏覽量:

分布式鎖是控制分布式系統(tǒng)之間同步訪問共享資源的一種方式。分布式環(huán)境下會(huì)出現(xiàn)資源競爭的地方都需要分布式鎖的協(xié)調(diào)。

分布式鎖的作用:在整個(gè)系統(tǒng)提供一個(gè)全局、唯一的鎖,在分布式系統(tǒng)中每個(gè)系統(tǒng)在進(jìn)行相關(guān)操作的時(shí)候需要獲取到該鎖,才能執(zhí)行相應(yīng)操作。

服務(wù)以多實(shí)例形式部署,形成集群。每一個(gè)實(shí)例都會(huì)有一個(gè)自己的JVM運(yùn)行環(huán)境,因此即便是同一個(gè)用戶,如果并發(fā)的發(fā)起了多個(gè)請求,由于**請求進(jìn)入了多個(gè)JVM,就會(huì)出現(xiàn)多個(gè)鎖對象(用戶id對象),自然就有多個(gè)鎖監(jiān)視器**。此時(shí)就會(huì)出現(xiàn)每個(gè)JVM內(nèi)部都有一個(gè)線程獲取鎖成功的情況,沒有達(dá)到互斥的效果,并發(fā)安全問題就可能再次發(fā)生了:

JVM鎖的缺點(diǎn)

可見,在集群環(huán)境下,JVM提供的傳統(tǒng)鎖機(jī)制就不再安全了。

那么該如何解決這個(gè)問題呢?

解決這個(gè)問題讓每個(gè)實(shí)例去使用各自的JVM內(nèi)部鎖監(jiān)視器,而是應(yīng)該在多個(gè)實(shí)例外部尋找一個(gè)鎖監(jiān)視器,多個(gè)實(shí)例爭搶同一把鎖。像這樣的鎖,就稱為分布式鎖。

分布式鎖

分布式鎖可以根據(jù)以下幾個(gè)方案實(shí)現(xiàn):

- 基于數(shù)據(jù)庫表

操作數(shù)據(jù)庫需要較大的開銷,性能差

- 基于緩存實(shí)現(xiàn)分布式鎖(redis)

- 基于Zookeeper實(shí)現(xiàn)分布式鎖

- 基于consul實(shí)現(xiàn)分布式鎖

- 基于etcd實(shí)現(xiàn)分布式鎖


分享到:
在線咨詢 我要報(bào)名
和我們在線交談!