鎖與分布式鎖

分布式

現(xiàn)在最流行的就是分布式概念,分布式的好處顯而易見,多臺服務器各自為政但相互通信,部署不同功能的代碼,功能互相不重合,比如登陸功能在登陸服務器上,購物和買單又在其他的服務器上。但是這也使得系統(tǒng)變得更加復雜,也就是解決了一個問題又引入一個新的問題。對應這個新的問題又引入了新的概念來解決它。其中一個概念就是分布式鎖

為什么需要分布式鎖

為什么需要鎖

了解分布式鎖之前我們先了解,編程的世界其實與我們現(xiàn)實生活的世界的一些規(guī)則以及運行方式差不多。只是用不同的方式來實現(xiàn)這些規(guī)則罷了。畢竟藝術(編程)來源于生活嘛。

現(xiàn)實生活中鎖是為了讓自己獨占某種東西的一種工具,比如門鎖,車鎖,電腦鎖等等,編程中的鎖其實也是這個意思,我先將想要的東西鎖住不給別人用,這類東西一般是編程中共享的變量,等我用完了,我再將鎖解開給別人用。但是現(xiàn)實世界中人是自私的,如果是私人物品,比如私家車,一般用完也不會給你解鎖讓你用(捂臉!)。

在分布式出現(xiàn)之前,編程中的鎖一般是指單機環(huán)境中的線程鎖,也就是一個進程中如果存在多個線程同時操作共同的變量,那么讓先進來的線程鎖住這個變量,當前線程出來之后再解鎖給后面的線程使用。

分布式鎖

分布式概念出現(xiàn)后,就有了多機環(huán)境,在多機環(huán)境下,比如后臺庫存服務器上需要往數(shù)據(jù)庫加數(shù)據(jù),而購物功能服務器此時需要對同一個商品進行減一個數(shù)據(jù)。由于在不同的服務器上,此處普通的鎖是無法作用的,就需要一個數(shù)據(jù)中心這樣的一個概念,來接受各方的請求,然后統(tǒng)一處理,在數(shù)據(jù)中心中完成加鎖的操作,然后再統(tǒng)一發(fā)到后方數(shù)據(jù)庫。此時的鎖就是分布式鎖,而此時的數(shù)據(jù)中心一般就是redis。
基于 redis 的 setnx()、get()、getset()方法可以簡單的做分布式鎖,但是實際應用中還需要考慮節(jié)點突然掛掉,執(zhí)行時間不夠等特殊情況,還需要考慮用lua腳本來實現(xiàn)原子性

其實再怎么分布式都得有一個中心來分發(fā)消息,比如分發(fā)任務需要有一個任務分配器等,這個就有點像網(wǎng)絡拓撲中的二叉樹,不管有分幾個節(jié)點,都會有一個根結點

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容