分散式事務鎖模式之一:租用Lease

banq發表於2021-01-15

分散式系統中群集節點需要對某些資源的獨佔訪問權。但是同時會造成其他節點操作崩潰;其實這些節點可以對資源實現短暫的連線然後斷開,這樣它們不會無限期地保持對資源的訪問。
應用案例:
  • Google的[chubby]服務以類似方式實現了限時租賃機制
  • [zookeeper]會話使用與複製租約相似的機制進行管理。
  • Apache kafka[KIP-631] 提出使用時間限制的租賃管理組成員資格和Kafka經紀人的故障檢測。
  • [etcd]提供了有時間限制的租賃工具,客戶可以使用該工具來協調其活動以及組成員身份和故障檢測。
  • dhcp協議允許連線的裝置租用IP地址。具有多個DHCP伺服器的故障轉移協議的工作方式與此處說明的實現類似。

本文使用程式碼演示了這種模式的實現,點選標題見原文。
原理:
群集節點可以在有限的時間段內請求租約,租約在一段期限後會到期。如果節點想要延長訪問許可權,則可以在租約到期之前再更新租約。
使用Consistent Core實現租約機制以提供容錯能力和一致性。有與租賃相關的“生存時間time to live”的值。
群集節點可以在Consistent Core建立一個包含租借lease的key,這個租借在領導者和追隨者之間複製以提供容錯能力。擁有租借lease的節點負責定期重新整理它。 客戶使用HeartBeatConsistent Core中重新整理time to live值。
租借lease是在伺服器中的所有Consistent Core節點上建立的,但只有領導者跟蹤lease的超時,其他跟從者未跟蹤超時。這樣做是因為我們需要領導者使用自己的單調時鐘來決定租借何時到期,然後讓追隨者知道租借何時到期。這樣可以確保像Consistent Core中的其他任何決定一樣,節點也就租約到期達成共識。

 

相關文章