• 沒有找到結果。

應用於無線網路之中

第三章 自我穩定分散式著色演算法

3.5 應用於無線網路之中

自我穩定演算法的 Guarded commands 型式所假設的執行環境並不存在於由 網路所構成之分散式系統架構。在將演算法改寫成無線網路中的分散式協定時,

第一個要面臨的挑戰就是節點的區域變數存取問題,我們將網路中的無線節點所 配置的記憶體區分為兩個部分,一部分是記錄自己顏色資訊的區域變數,另一部 分則是記錄鄰居區域變數的快取(cache)之顏色資訊,節點在改變顏色之後會立即 發送更新訊息給鄰居節點。區域變數存取問題可以分成兩部分,首先自我穩定演 算法一般是以直接存取記憶體的方式來取得相鄰節點的共享變數,但網路中節點 的資訊傳遞則必須透過訊息傳遞(message passing)的方式(如單點傳輸、多點傳輸

A B

c(A) = white

*c(A) = Black

Need change!

24

或廣播)。如此一來必須考慮兩個問題:第一個是傳遞延遲造成的資訊不一致 (incoherent)。例如圖 3.2 中的節點 A 已經更新自己的顏色並廣播更新訊息給鄰近 節點,若此時存在一個節點 B 尚未收到更新訊息而根據舊的資訊而啟動先決條 件,可能會使系統沒辦法進入穩定狀態。第二個問題則是訊息的遺失,若在訊息 傳輸的過程中發生碰撞或其他傳輸錯誤,訊息可能無法送達目的節點。自我穩定 分散式系統的錯誤容忍特性可以在節點發生內部運算或記憶體錯誤之後自動將 系統導回正確之狀態,但並未處理通訊錯誤的情形。如果分散式協定不處理此種 情形,最終可能會使系統誤以為進入穩定但其實是不合法的狀態。第二個面臨的 挑戰是節點的同時動作(simultaneous moves)。分散式演算法可以藉由假設集中式 運算模型來排除此問題,不過在網路分散式系統中的節點要實現集中式運算模型 是 非 常 困 難 的 , 因 為節 點 之 間 並 不 存 在 一 個 同 步 的 全 域 時 鐘 (global clock) [Lam78],必須證明網路中沒有節點同時運作才能保證系統的穩定性。

我們的系統假設節點利用多點傳輸(multicast)的方式發送更新訊息給周遭的 節點。傳遞延遲基本上是由網路傳輸環境不良所造成的不可抗拒問題,我們假設 傳輸環境可以保傳遞延遲在固定時間內,不會無限期的延遲。節點間傳遞訊息的 頻道是採用先進先出(FIFO, First in First out),不會有較晚發送的訊息後來居上的 問題。

我們在每個節點上設置了兩個計時器來試圖解決訊息遺失與同步啟動的問 題。第一個計時器 T1用來錯開節點的執行順序。節點在初始化時會產生一隨機 值來設定 T1。當 T1歸零,代表節點可檢查是否有更好的顏色可供改變,並作顏 色改變之對應動作。鄰居在收到更新訊息之後立即檢查訊息中的顏色資訊是否與 快取版本一致,若不一致且沒有改變顏色的意圖則重新產生一隨機值設定T1。每 個節點都有著自己獨立的計時器 T1,此機制可以有效錯開節點的執行順序,並降 低節點發送更新訊息的頻率,若是可以保證相鄰節點的計時器T1不會同時歸零的 話就不會產生同時動作的問題。在訊息遺失方面,若網路環境的 MAC 層沒有辦

25

法解決訊息遺失的問題,我們使用第二個計時器 T2 來定期更新(periodically broadcast)顏色資訊來避免訊息遺失可能所造成的影響。當計時器 T2歸零時,節 點會主動將自己當時的顏色資訊告知鄰居,因此就算顏色資訊在之前傳輸時遺失,

只要訊息遺失的機率不為 1,顏色資訊最終也會正確送往目的地。我們並不讓節 點主動去詢問鄰近節點之資訊,所以定期廣播的設計肩負錯誤更正的作用。

若是無法保證每個節點計時器 T1歸零的時間點皆不同,我們為每個節點賦 予一個唯一的識別碼並引入臨界區間(critical section)機制使相鄰節點間達成區域 性的互斥存取(mutual exclusion)。當節點的計時器 T1逾時,節點會檢查是否存在 更佳的顏色,但不會立即改變決策,而是先發送請求訊息給鄰近節點以要求進入 臨界區域。任何節點收到請求訊息時,若沒有意圖進入臨界區域或識別碼值小於 傳送請求訊息的節點,皆會回覆同意訊息,否則將該請求訊息暫時存到佇列 Q 中,

等待離開臨界區間才釋放這些訊息。傳送請求訊息的節點在收到所有鄰居節點的 同意訊息後,才可以獲准進入臨界區域以改變決策。此時,節點在臨界區域中需 做第二次檢查是否需要改變顏色,若存在更好的顏色即改變並發送更新訊息給鄰 居。在節點離開臨界區域後則一一回覆同意訊息給先前被卡在佇列 Q 中的節點,

如此一來可以有效的將相鄰節點的執行順序錯開。雖然單一節點意圖進入臨界區 間時,最多需要等待所有的鄰近節點同意即可,不過鄰近節點仍有可能被自己鄰 居以外的節點給卡住,而節點等待進入臨界區間的最長時間則與網路中的直徑 (diameter)有關,若網路拓樸是環狀拓樸或線狀拓樸時則剛好等於節點數。

最後關於系統的穩定性方面,原系統若收斂到合法狀態之後會立即停止。但 是因為我們使用定期傳送更新資訊來避免遺失訊息,所以系統的節點仍會不斷啟 動並執行相對應的事件,因此需要將系統的穩定狀態重新定義。新的穩定狀態定 義為若系統中所有節點的計時器 T1都已歸零,且網路中只存在由計時器 T2所觸 發的更新訊息,代表則系統進入穩定狀態。不過在分散式系統中,沒有方法能夠 驗證系統是否進入我們重新定義的穩定狀態。

26

Algorithm 3.3 為我們將 Algorithm 3.2 改寫成在無線網路中所執行的分散式

協定。每個節點上運行的分散式協定一共分成六個事件驅動的程序,節點所發送 的訊息類型可以分成三種,分別是顏色資訊、請求訊息以及准許訊息。我們假設 網路中各個節點的甦醒時間不同,<Procedure 1>啟動節點的參數與計時器作初始 化,並告知周遭鄰居起始顏色資訊。若節點在未開啟前就收到鄰近節點所傳送之 訊息,則立即開啟並執行初始化動作。<Procedure 2>為收到鄰居更新訊息時之對 應動作,*𝐶𝑗代表快取版本的節點 i 所選擇之顏色集合。<Procedure 3>則在計時 器T1歸零時啟動,檢查是否需要改變顏色以及請求進入臨界區間之動作。

<Procedure 4>是收到鄰居所發送之准許訊息時所對應之動作。<Procedure 5>則是 在收到鄰居所發送之請求訊息時,確認是否准許鄰居進入臨界區間。<Procedure 6>是令節點的計時器 T2歸零時定期發送更新訊息。

Algorithm 3.3 Event-driven procedures for each process 𝑝𝑖

On initialization <Procedure 1>

cs.flag  false Q  

N  0

send update message {𝑪𝒊} to all neighbors load T1 with a random value

load T2 with a constant value end

On receiving a update message{𝐂𝐣} from 𝑝𝑗 <Procedure 2>

if *𝑪𝒋 ≠ 𝑪𝒋 and cs.flag = false then load T1 with a random value

27

*𝑪𝒋 = 𝑪𝒋 else

*𝑪𝒋 = 𝑪𝒋 end

When T1 expires <Procedure 3>

Compute the set of best response color 𝐵𝑖(𝐶) if 𝐵𝑖(𝐶) ≠ 𝜙 then

send {𝑟𝑒𝑞𝑢𝑒𝑠𝑡𝑖} messages to all neighbors cs.flag  true

N  |𝑁𝑖|

end-if

end

On receiving a {𝒂𝒄𝒄𝒆𝒑𝒕𝑗} message from 𝑝𝑗 <Procedure 4>

if cs.flag = true then N  N – 1

if N = 0 then //Entering critical section

Compute the set of best response color 𝐵𝑖(𝐶) if 𝐵𝑖(𝐶) ≠ 𝜙 then

choose a color set from 𝐵𝑖(𝐶) randomly send update message {𝐶𝑖} to all neighbors cs.flag  false //leaving critical section

send {𝒂𝒄𝒄𝒆𝒑𝒕 𝑖} messages to all nodes in Q //release blocked messages Q  

28

end-if end-if end-if end

On receiving a {𝒓𝒆𝒒𝒖𝒆𝒔𝒕𝑗} message from 𝑝𝑗 <Procedure 5>

if cs.flag = false

send_back {𝒂𝒄𝒄𝒆𝒑𝒕 𝒊} messages to 𝑝𝑗 else if 𝐼𝐷𝑖 < 𝐼𝐷𝑗

send_back {𝒂𝒄𝒄𝒆𝒑𝒕 𝒊

} messages to

𝑝𝑗 else

Q  Q  {𝑝𝑗}

end-if

end

When T2 expires <Procedure 6>

send update message {𝑪𝒊} to all neighbors load T2 with a constant value

end

29

相關文件