1.分布式入門:
分布式中涉及到的技術模組
2.3. 分布式鎖的三種實現方式
(1)redis的set方法,setnx的話還要設定過期時間,不能原子執行,在redis基礎中記錄
(2)基於資料庫的鎖
i.設計的表有唯一鍵
create
table
`distributed_lock`
(`thread_name`
varchar
(300
)not
null
,`method_name`
varchar
(300
)not
null
comment
'被鎖定的方法名,唯一'
,`id`
int(11)
notnull
auto_increment
,primary
key(
`id`),
unique
key`index_method_name`
(`method_name`
)using
btree
)engine
=innodb
auto_increment
=21562
default
charset
=gbk;
ii.對於死鎖的問題,可以設定定時任務,自動清理鎖記錄,此處沒有記錄
eg:
/**
* 加鎖
** @param method,方法為ip+埠+全路徑名+方法名
* @param thread
* @return
*/public
boolean
lock
(string method, string thread)
/** * 加鎖的資料庫操作
* @param method
* @param thread
* @return
*/public
boolean
trylock
(string method, string thread)
加鎖成功**********"
,thread);}
catch
(exception e)
被其他執行緒占用,當前執行緒{}無法獲取"
,method,thread)
; isfailure =
true;}
}return
true;}
/** * 釋放鎖
* @param method
* @param thread
* @return
*/public
boolean
releaslock
(string method,string thread)
鎖釋放成功**********="
,thread);}
catch
(exception e)
釋放失敗,釋放鎖的執行緒為{}"
,method,thread)
; isfailure =
true;}
}return
true;}
/** * 判斷當前執行緒是否已經擁有了當前方法的鎖,解決重入的問題
* @param method
* @param thread
* @return
*/private
boolean
currentthreadisowner
(string method,string thread)
使用示例:
sqllock.
lock
(util.
getmethodname
(request)
,util.
getthreadname
(request));
//重入鎖
sqllock.
lock
(util.
getmethodname
(request)
,util.
getthreadname
(request));
operations.
update()
;//執行業務操作
sqllock.
releaslock
(util.
getmethodname
(request)
,util.
getthreadname
(request)
);
(3)zookeeper,待研究
(4)參考分布式鎖的基本要求:
鎖的本質,只要能被多程序共享,且互斥就可以用於鎖;
1.排他性,(redis的setnx)排他
2.不會發生死鎖(redis 的expire可以設定鎖的過期時間,一段時間不釋放則過期)
手寫的分布式鎖以及用多執行緒測試
3.容錯性(暫不理解)
4.加鎖和釋放鎖為統一程序(設定執行緒的名稱為value,判斷value跟當前執行緒是否相同)
5.可重入性
分布式和集群
1 小飯店原來只有乙個廚師,切菜洗菜備料炒菜全乾。後來客人多了,廚房乙個廚師忙不過來,又請了個廚師,兩個廚師都能炒一樣的菜,這兩個廚師的關係是集群。為了讓廚師專心炒菜,把菜做到極致,又請了個配菜師負責切菜,備菜,備料,廚師和配菜師的關係是分布式,乙個配菜師也忙不過來了,又請了個配菜師,兩個配菜師關係...
分布式和集群
集群可以理解為分布式的子集。不管是分布式還是集群,有以下幾點需要注意 高效能 指可以充分利用系統的所提供的能力。高可用 即相當於乙個節點宕機,有其他節點可以提供相同的服務,給予外界的感覺為系統或者應用一直可用的感覺。需要著重理解 共享磁碟 概念。我們可以想象下,我們的系統是乙個集群或者分布式的,那麼...
分布式和集群
小飯店原來只有乙個廚師,切菜洗菜備料炒菜全乾。後來客人多了,廚房乙個廚師忙不過來,又請了個廚師,兩個廚師都能炒一樣的菜,兩個廚師的關係是集群。為了讓廚師專心炒菜,把菜做到極致,再請了個配菜師負責切菜,備菜,備料 廚師和配菜師的關係是分布式。乙個配菜師也忙不過來了,又請了個配菜師,兩個配菜師關係是集群...