分布式租約機制

2021-10-08 02:58:07 字數 1900 閱讀 1994

租約(lease)在分布式中一般描述如下:

如果頒發者的時鐘比接收者的時鐘慢,則當接收者認為 lease 已經過期的時候,頒發者依舊認為 lease 有效。接收者可以用在 lease 到期前申請新的 lease 的方式解決這個問題。

如果頒發者的時鐘比接收者的時鐘快,則當頒發者認為 lease 已經過期的時候,接收者依舊認為 lease 有效,頒發者可能將 lease頒發給其他節點,造成承諾失效,影響系統的正確性。對於這種時鐘不同步,實踐中的通常做法是將頒發者的有效期設定得比接收者的略大,只需大過時鐘誤差就可以避免對 lease 的有效性的影響。

伺服器發出lease後,會保證在lease的有效期內不改變資料。這樣收到lease的client在有效期內可以放心地使用資料。在這個有效期內,client快取的資料和伺服器上的資料是一致的。

存在的問題和解決辦法:

1)伺服器修改元資料時,需要阻塞所有的讀請求,此時伺服器不能發出新的lease。以防止新發出的lease保證的資料與伺服器剛才修改的資料不一致。

解決方法:讀請求到來時,直接返回資料,不頒發lease

2)伺服器需要等待直至所有的client的lease都過期後,再才頒發新「修改」後的lease。因此,此時伺服器上的資料修改了,生成了乙個新的lease版本,需要等到client上所有的老lease過期後,該新lease版本才能頒布給client。

解決方法:伺服器主動通知持久lease的client放棄當前的lease,並請求新lease

通過乙個例子來討論這個問題:在乙個 primary-secondary 架構的系統中,有三個節點 a、b、c 互為副本,其中有乙個節點為 primary,且同一時刻只能有乙個 primary 節點。另有乙個節點 q 負責判斷節點 a、b、c的狀態,一旦 q 發現 primary 異常,節點 q 將選擇另乙個節點作為 primary。假設最開始時節點 a為 primary,b、c 為 secondary。節點 q 需要判斷節點 a、b、c 的狀態是否正常。

2.2.1 通過心跳無法很好判斷節點狀態

節點 a、b、c 可以週期性的向 q 傳送心跳資訊,如果節點 q 超過一段時間收不到某個節點的心跳則認為這個節點異常。這種方法的問題是假如節點 q 收不到節點 a 的心跳,除了節點 a 本身的異常外,也有可能是因為節點 q 與節點 a 之間的網路中斷導致的。在工程實踐中,更大的可能性不是網路中斷,而是節點 q 與節點 a 之間的網路擁塞造成的所謂「閃斷」,「閃斷」往往很快可以恢復。另一種原因甚至是節點 q 的機器異常,以至於處理節點 a 的心跳被延遲了,以至於節點 q 認為節點 a 沒有傳送心跳。假設節點 a 本身工作正常,但 q 與節點 a 之間的網路暫時中斷,節點 a 與節點 b、c 之間的網路正常。此時節點 q 認為節點 a 異常,重新選擇節點 b 作為新的 primary,並通知節點 a、b、c 新的 primary 是節點 b。由於節點 q 的通知訊息到達節點 a、b、c 的順序無法確定,假如先到達 b,則在這一時刻,系統中同時存在兩個工作中的 primary,乙個是 a、另乙個是 b。假如此時 a、b 都接收外部請求並與 c 同步資料,會產生嚴重的資料錯誤。上述即所謂「雙主」問題。

2.2.2 雙主問題的解決

由中心節點向其他節點傳送 lease,若某個節點持有有效的 lease,則認為該節點正常可以提供服務。如節點 a、 b、 c 依然週期性的傳送 heart beat 報告自身狀態,節點 q 收到 heart beat後傳送乙個 lease,表示節點 q 確認了節點 a、b、c 的狀態,並允許節點在 lease 有效期內正常工作。節點 q 可以給 primary 節點乙個特殊的 lease,表示節點可以作為 primary 工作。一旦節點 q 希望切換新的 primary,則只需等前乙個 primary 的 lease 過期,則就可以安全的頒發新的 lease 給新的primary 節點,而不會出現「雙主」問題。

本文將lease機制的本質及在分布式系統中的主要應用梳理出來了,希望對讀者在分布式系統中使用lease機制有幫助。

分布式鎖 3 分布式鎖租約續期

redis分布式鎖在加鎖的時候,我們一般都會給乙個鎖的過期時間 ttl 這是為了防止加鎖後client宕機,鎖無法被釋放的問題。但是所有這種姿勢的用法都會面臨同乙個問題,就是沒發保證client的執行時間一定小於鎖的ttl。雖然大多數程式設計師都會樂觀的認為這種情況不可能發生,但是各種異常情況都會導...

分布式事務機制

事務定義 作為單個邏輯單元執行的一組操作,要麼全成功,要麼全失敗。事務特性 原子性 一致性 隔離性 永續性 事務型別 單機事務 保證單資料來源一致性 分布式事務 保證多資料來源一致性 事務實現 分布式 分布式事務用於在分布式系統中保證不同節點之間的資料一致性。xa分布式事務協議是分布式事務最具代表性...

ElasticSearch分布式機制

1 使用場景 大型分布式日誌分析系統elk elasticsearch logstash kibana 大型電商商品搜尋系統 站內搜尋 網盤搜尋引擎等。2 elasticsearch的儲存結構 elasticsearch是檔案儲存,是面向文件型資料庫,一條資料在這裡就是乙個文件,用json作為文件序...