2012-05-11 35 views
1

我已經貼僞代碼這裏的Paxos算法:如何理解Paxos分佈式一致性算法中的階段2?

What is a "view" in the Paxos consensus algorithm?

,並想知道如果有人能在正確的方向指向我。

該算法說每個節點都有一個「狀態」,其中包含節點應該跟蹤的一堆信息。

假設我們有兩個節點:節點#1和節點#2。在最簡單的情況下,節點#2加入節點#1並且它們都播放paxos。 2連接1後,節點#1和節點#2的狀態究竟發生了什麼? 「視圖」數據結構何時發生變化以及它包含什麼?如果有人可以向我解釋這個簡單的兩個節點播放paxos的情況,那麼我想我可以找出多個節點的情況。

我目前的瞭解(我敢肯定是不正確的)如下:

  1. 節點#2將消息發送到連接節點#1。
  2. 節點#1從節點#2接收要求加入的消息。
  3. 節點#1假設領導和踢入相1,計算my_num = MAX(0,0)+ 1 = 1
  4. 節點#1發送的所有節點在視圖中[0](它是空的)製備(1, 1)
  5. 節點#1發送初始接觸點(節點#2)製備(1,1)
  6. 節點#1發送節點#1(自身)製備(1,1)
  7. 節點#2接收準備(1,1)。它設置它的num_h = 1並返回給leader PROMISE(0,{empty list})
  8. 節點#1接收prepare(1,1)並設置它的num_h = 1並返回自身PROMISE(0,{empty list}) 。

現在我們得到逐步2

這是我很困惑。

節點#1是領導者並且它接收兩個PROMISE(0,{空列表})消息。根據該算法,如果領導者在視圖[0]中獲得大部分承諾,則可以爲「v」設置值並將接受消息發送給所有響應者。

我很困惑的是目前領導者的觀點[0]是空的,那麼如何計算一個空列表的大部分?

另外,讓我們假設領導者已經收到了大部分承諾並且設置了v =可設置節點(包括self)。 pingable節點究竟是什麼?它只是節點#1和節點#2?

希望所有/任何幫助,肯定會獎勵那些幫助。

+0

也許僞代碼列表不是很好。我查看了Wikipedia上的Paxos頁面,它看起來比僞代碼更清晰......無論如何,僞代碼中的視圖從來都不是一個集合。視圖是從視圖編號到該視圖中所選值的映射。我認爲大多數聲明僅僅意味着節點在本地執行的當前階段收到足夠的PROMISE。看起來僞代碼實際上試圖以某種方式決定一組節點。但Paxos可以用來決定任何值,而不僅僅是節點集合。僞代碼是專門針對特定問題的嗎? –

+0

我在下面評論。 – user1068636

+0

您是否閱讀過[原文?](http://research.microsoft.com/en-us/um/people/lamport/pubs/lamport-paxos.pdf)它非常容易遵循且非常有趣;不像任何其他計算機科學研究你會讀過。隨後的論文提出了簡化和/或擴展Paxos的一些改動,但閱讀原始論文會讓你牢牢掌握它背後的原則。 – erickson

回答

0

僞代碼並不專門針對特定問題。實際上,這位教授說,如果我們不想要,我們不需要使用僞代碼,並且說我們可以看看其他Paxos論文(即paxos變得簡單,實時製作paxos等),以指導實施該算法。也許你是對的,我應該看維基百科來實現這個算法。所以視圖[...]只是一個散列圖,節點可以選擇任何它想要的值。如果我理解正確,你說大多數聲明只是檢查它是否收到「足夠」的PROMISE消息。但是知道我們是否有足夠的唯一方法是節點跟蹤其組成員是誰。這意味着我需要一個不同的數據結構。

另外,由於您發表了評論,所以我無法給您獎勵積分。如果你發佈答案,那麼我可以給你點數。