2012-05-08 7 views
0

以下のパクソスアルゴリズムに擬似コードを貼り付けて、誰かが正しい方向に向けるかどうか疑問に思っていました。私は以下のアルゴリズムを実装しようとしていますが、私はちょうど "ビュー"が以下を表しているのか混乱しています。私はこのコメントが "過去のビュー数値から値へのマップ"だと言っていますが、誰かが私にこれらの「値」が何であり、どのような「ビュー番号」が何であるかを説明することができたら、Paxosコンセンサスアルゴリズムの「ビュー」とは何ですか?

state: 
    num_h: highest proposal # seen in a prepare 
    num_a, val_a: highest value and proposal # which node has accepted 
    my_num: the last proposal # the node has used in this round of Paxos 
    inst_h: highest view number we have accepted (round number) 
    views: map of past view numbers to values 
    done: leader says agreement was reached, we can start new view 

on each view change, initialize state: 
    num_a = 0 
    num_h = 0 
    my_num = 0 
    val_a =() // empty list 

Paxos Phase 1 
    a node (maybe more than one...) decides to be leader (need not be in current view): 
    my_num = max(num_h, my_num)+1, append node ID // unique proposal number 
    done = false 
    sends prepare(inst_h+1, my_num) to all nodes in {views[inst_h], initial contact   node, itself} 

    if node receives prepare(vid, n): 
    if vid <= inst_h: 
     return OLD_VIEW(vid, views[vid]) // views[vid] is the winner for vid 
    else if n > num_h: 
     num_h = n 
     done = false 
     return PROMISE(num_a, val_a) 
    else: 
     return REJECT() 

Paxos Phase 2 
    if leader gets OLD_VIEW(vid, v): 
    views[vid] = v 
    inst_h = vid 
    view change 
    restart paxos 

    else if leader gets REJECT(): 
    delay and restart paxos 

    else if leader gets PROMISE from majority of nodes in views[inst_h]: 
    if any PROMISE(n_i, v_i) exists such that v_i is not empty: 
     v = non-empty value v_i corresponding to highest n_i received 
    else leader gets to choose a value: 
     v = set of pingable nodes (including self) 
    send ACCEPT(inst_h+1, my_num, v) to all responders 

    else: 
    delay and restart paxos 

    if node gets ACCEPT(vid, n, v): 
    if vid <= inst_h: 
     return OLD_VIEW(vid, views[vid]) 
    else if n >= num_h: 
     num_a = n 
     val_a = v 
     return ACCEPTED() 
    else 
     return REJECT() 

Paxos Phase 3 
    if leader gets OLD_VIEW(vid, v): 
    views[vid] = v 
    inst_h = vid 
    view change 
    restart paxos 
    else if leader gets ACCEPTED from a majority of nodes in views[inst_h]: 
    send DECIDE(inst_h+1, val_a) to all (including self) 
    else: 
    delay and restart paxos 
    if node gets decide(vid, v): 
    if vid <= inst_h: 
     return OLD_VIEW(vid, views[vid]) 
    else: 
     done = true 
     primary is lowest-numbered node in v 
     views[vid] = v 
     inst_h = vid 
     view change 

答えて

1

ビューは、アルゴリズムのラウンドに対応しています。アルゴリズム内のすべてのノードが非同期であり、したがって、グローバル・システム状態のすべてのノードの理解が古くなる可能性があるため、それらはビューと呼ばれます。ノードはビューを使用してアルゴリズムの実行を同期させます。 views = roundsというコメントを見てください。

+0

こんにちはAntti - 私はこのアルゴリズムに関する別の関連する質問をここに掲載しました:http://stackoverflow.com/questions/10558382/how-to-make-sense-of-phase-2-in-paxos-distributed-consensus-アルゴリズムもしあなたがチャンスを得たらそれを見てください。ありがとう。 – user1068636

0

ビューは、ペーパーPaxos Made Practicalで定義されています。 「ビュー」は、クラスタの特定の状態、つまり指定されたリーダーと一緒のマシンのセットです。

ビューを気にする理由は、マシンの状態に応じて(たとえば、クラスタを再構成したい、または1台以上のマシンが故障したため)、クラスタの状態が変わることがあるからです。

各ビューはビュー番号(ビューIDとも呼ばれます)に関連付けられ、ビューが変更されるたびに新しいビューに新しいビュー番号が割り当てられます。特定のビュー番号に関連付けられた値は、単にビュー自体(クラスタ内のマシンのリスト)です。したがって、「再生回数」は次のようになります。

{ view-number = 1 : value = { machine-01, machine-02, machine-03 }, 
    view-number = 2 : value = { machine-02, machine-03, machine-04 }, 
    view-number = 3 : value = { machine-01, machine-02, machine-04 } } 

詳しくは、このホワイトペーパーを参照してください。

関連する問題