日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

淺談分布式鎖( 二 )


淺談分布式鎖


上面/exclusive_lock/lock1節(jié)點,就可以被定義為一個鎖 。
獲取鎖:
  1. 創(chuàng)建排他鎖:需要獲取排他鎖的時候,所有的客戶端都會試圖調用create()接口,在/exclusive_lock節(jié)點下創(chuàng)建臨時子節(jié)點/exclusive_lock/lock1 。zk/etcd會保證在所有的客戶端中,最終只有一個客戶端能夠創(chuàng)建成功,那么就可以為該客戶端獲取鎖 。
  2. watch排他鎖:所有沒有成功獲取鎖的客戶端就要到/exclusive_lock節(jié)點上注冊一個子節(jié)點變更的watcher監(jiān)聽,用于實時監(jiān)聽lock1節(jié)點的變更情況 。
釋放鎖即移除該臨時節(jié)點 。由于/exclusive_lock/lock1是一個臨時節(jié)點(etcd通過租約,通過發(fā)送心跳來續(xù)租),因此需要考慮以下情況:
  1. 已經獲取鎖的client發(fā)生了宕機,那么zk/etcd上整個臨時節(jié)點就會被移除
  2. 正常完成業(yè)務之后,client會主動刪除臨時節(jié)點
無論在什么情況下移除lock節(jié)點,zk/etcd都會通知所有watcher /exclusive_lock的客戶端 。這些客戶端在接受到通知之后,再次重新發(fā)起分布式鎖獲取,即重復獲取鎖過程 。
淺談分布式鎖


共享鎖(shared locks)
共享鎖(讀鎖)表現(xiàn)如下:
進程p1對數(shù)據(jù)d1加上共享鎖,那么當前事務只能對d1進行讀取操作,其他事務也只能對整個數(shù)據(jù)加共享鎖,直到該數(shù)據(jù)對象上的所有共享鎖都被釋放 。
與排他鎖的區(qū)別是,加上排他鎖之后,數(shù)據(jù)只對一個事務可見,而加上共享鎖之后,數(shù)據(jù)對所有事務可見 。
定義鎖:
同樣是通過zk/etcd上的數(shù)據(jù)節(jié)點表示一個鎖,格式可以參考/shared_lock/[hostname]-請求類型-序號 的臨時節(jié)點 。
例如:下圖中/shared_lock/host1-R-001就代表了一個共享鎖
淺談分布式鎖


需要獲取共享鎖時,所有客戶端都會到/shared_lock整個節(jié)點下創(chuàng)建一個臨時順序節(jié)點 。
  1. 如果當前是讀請求,創(chuàng)建/shared_lock/192.168.0.1-R-01節(jié)點
  2. 如果是寫請求,創(chuàng)建/shared_lock/192.168.0.1-W-02節(jié)點
根據(jù)共享鎖的定義,
  1. 不同的事務可以對同一數(shù)據(jù)對象進行讀取操作
  2. 更新操作必須在當前沒有任何事務進行讀寫操作的情況下進行
zk/etcd的讀寫順序:
  1. 創(chuàng)建完節(jié)點,獲取/shared_lock節(jié)點下的所有子節(jié)點,并對該節(jié)點注冊子節(jié)點變更的watcher監(jiān)聽
  2. 確定自己的節(jié)點序號,在所有子節(jié)點中的順序
  3. 對于讀請求:
    1. 如果沒有比自己小的子節(jié)點,或者所有比自己小的子節(jié)點都是讀請求,那么自己已經成功獲取到共享鎖,可以開始業(yè)務邏輯
    2. 如果比自己小的節(jié)點中有寫請求,那么需要進入等待
  4. 對于寫請求:
    1. 如果自己不是序號最小的子節(jié)點,那么就需要進入等待
  5. 接收到watcher通知后,重復步驟1
釋放鎖與排他鎖是一致的:
淺談分布式鎖


例子:
淺談分布式鎖


  1. 主機10.16.0.1先進行讀操作,完成后,將節(jié)點/shared_lock/10.16.0.1-R-000001刪除
  2. 剩余4臺機器均收到節(jié)點移除通知,然后重新從/shared_lock節(jié)點上獲取一份新的子節(jié)點列表
  3. 每個主機判讀自己的讀寫順序 。接著,主機10.16.0.2檢測到自己已經是需要最小的了,于是開始執(zhí)行寫操作,而其他主機發(fā)現(xiàn)沒有輪到自己進行讀取或者更新操作,于是繼續(xù)等待
  4. 繼續(xù)上面循環(huán)
  5. 推薦閱讀