最近看了基于zookeeper和redis兩種分布式鎖的原理以及實現方式:
下文中的鎖:你可以理解為一個標識符,表達兩種狀態,對應值存在已經被鎖,如果對應值不存在,可以競爭寫入,寫入成功獲得鎖。
相同點:
1、作為鎖的標識的第三方組件都是集群:在該功能上,主要為了解決單點問題,實現高可用
2、在原理上根本上來說差異不大:通過網絡爭用鎖,zookeeper通過唯一路徑定位該鎖,redis通過唯一key來定位鎖。為避免死鎖都采用鎖過期機制
不同點:
1、redis實現會用時間戳作為value來判斷鎖版本,阻塞其他請求;也是通過這個時間戳來完成鎖過期機制的。zookeeper通過uuid+epoch+zxid,zookeeper集群自身維護的一個序列號來標識連接客戶端。每一個客戶端線程可以擁有鎖。過期好像是通過客戶端操作,corator是的實現方式如此,zookeeper原生的代碼中沒有這樣的方法。
2、redis就是一個基于網絡高可用高并發的緩存,因此相對于zookeeper直接對比沒有意義,而且zookeeper的誕生是伴隨著paxos算法。因此在分布式一致性采用zookeeper的理由更加充分。