《分佈式技術原理與算法解析》學習筆記Day03

分佈式互斥方法

什麼是分佈式互斥?

對於同一個共享資源,當一個程序正在使用的時候,不希望被其他程序打擾,這種排他性的資源訪問方式,叫做分佈式互斥,被互斥訪問的共享資源被稱作臨界資源(Critical Resource).

有什麼方法可以讓分佈式系統裏的程序互斥地訪問臨界資源?

我們一般有三種方法:

  • 集中式算法(霸道總裁)
  • 分佈式算法(民主協商)
  • 令牌環算法(輪值CEO)

集中式互斥算法

我們引入一個協調者程序,每個程序在訪問臨界資源時,先向協調者發送一個請求,如果當前沒有其他程序使用這個資源,協調者直接發送授權信息給請求程序去訪問;否則,協調者會按照先來後到的順序爲請求程序“排個號”。如果有程序使用完資源,則通知協調者,協調者從“排號”的隊列裏取出排在最前面的請求,並給它發送授權消息。拿到授權消息的程序,可以直接去訪問臨界資源。

集中式算法也被稱爲中央服務器算法。

使用該算法,一個程序訪問一次臨界資源,需要完成3次消息交互:

  1. 向協調者發送請求授權信息
  2. 協調者向程序發放授權信息
  3. 程序使用完臨界資源後,向協調者發送釋放授權信息

集中式算法的優點在於直觀、簡單、信息交互量少、易於實現,並且所有程序都只和協調者通信,程序彼此之間無需通信。

集中式算法的缺點在於協調者:

  1. 協調者會成爲系統的性能瓶頸。
  2. 協調者容易引發單點故障,協調者不可用時,會導致整個系統不可用。

分佈式互斥算法

當一個程序要訪問臨界資源時,先向系統中的其他程序發送一條請求信息,在接收到所有程序返回的同意消息後,纔可以訪問臨界資源。其中請求消息包括所請求的資源、請求者ID以及發起請求的時間。

它是一種使用組播和邏輯時鐘的算法。

使用該算法,一個程序訪問一次臨界資源,需要進行2*(n-1)次消息交互:

  1. 向其他n-1個程序發送訪問臨界資源的請求,總共需要n-1次消息交互
  2. 需要接收到其他n-1個程序回覆的同意消息,才能訪問資源,總共需要n-1次消息交互

它的缺點主要包括:

  1. 當系統內需要訪問臨界資源的程序增多時,或者需要訪問的臨界資源數量增多時,容易產生“信令風暴”,也就是程序收到的請求完全超過了自己的處理能力,導致自己正常的業務無法展開。
  2. 一旦某一程序發生故障,無法發送統一消息,那麼其他程序均處於等待回覆的狀態中,使得整個系統處於停滯狀態,導致不可用(一種改進可用性的辦法是如果檢測到一個程序故障,那麼直接忽略該程序,無需再等待它的同意消息)。

分佈式算法提供了一個“先到先得”和“投票全票通過”的公平訪問機制,但是它的通信成本比較高,可用性也比集中式算法低,適用於臨界資源使用頻度較低,且系統規模較小的場景。

令牌環算法

所有程序構成一個環結構,令牌按照順序在程序之間傳遞,收到令牌的程序有權訪問臨界資源,訪問完成後將令牌傳送給下一個程序,如果該程序不需要訪問臨界資源,則直接把令牌傳送給下一個程序。

令牌環算法也被稱作基於環的算法。它非常適合通信模式爲令牌環方式的分佈式系統。

令牌換算法的優點在於單個參與者通信效率高以及可用性比較高。它的缺點在於當參與者對臨界資源使用頻率比較低時,會帶來大量無用通信。

令牌環算法的公平性高,適用於系統規模較小,並且系統中每個程序使用臨界資源頻率高且使用時間較短的場景。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章