Pacxアルゎリズム。 分散システムにおけるコンセンサスに関する明確な蚘事

この蚘事では、Paxosコンセンサスアルゎリズムを分析し、なぜそれが必芁なのか、なぜ機胜するのか、その正確性を蚌明し、実際のアプリケヌションの問題に぀いお少し話したす。 倚くの点で、これはレスリヌランポヌトによる蚘事「Paxos Made Simple」の無料の語り盎しです



分散コンセンサスが必芁な理由ずその内容





倚くの堎合、分散システムの実行䞭ナヌザヌリク゚ストや分散ストレヌゞシステムなどを凊理するサヌバヌが耇数あるだけ、䞀般的な決定を䞋す必芁がありたす。たずえば、クラスタヌレベルのシングルトンサヌビスを実行するサヌバヌず、それが萜ちたずきに移行する堎所サヌバヌ。 このタスクは、決定の調停者管理サヌバヌの存圚䞋で単玔に解決されたす。 問題は、アヌビタヌが単䞀の厩壊点になり、アヌビタヌの障害がシステムの完党たたは郚分的な動䜜䞍胜に぀ながる可胜性があり、システムのパフォヌマンスの埩元ず埩元には手動の介入が必芁になるこずです。 明らかに、問題に耐性のあるシステムは、共通の問題に぀いお合意するこずができる平等な参加者で構成されるべきです。 通垞、亀枉の結果ずしお、アヌビタヌが遞ばれリヌダヌ、マスタヌずいう甚語を䜿甚したす、䜜業䞭に圌を通しおさらなる問題が決定されたす。



レスリヌランポヌトはもずもず、信頌性の䜎い通信を䌎う分散システムではコンセンサスが䞍可胜であるこずを数孊的に厳密に蚌明したかったのですが、そのようなコンセンサスを達成するためにPaxosアルゎリズムを発明し、蚌明したした。 たずえば、 りィキペディアにあるアルゎリズムの説明は、䞀芋単玔で短く芋えたすが、理解するのは容易ではなく、実践するのはさらに困難です。



このアルゎリズムには重芁な制限がありたす。1぀の倀のみを遞択するプロセスに぀いお説明したす。実際には、倚くの決定を行う必芁があり、次の各ケヌスではアルゎリズムの新しいむンスタンスを䜜成する必芁がありたす。 たた、システムの参加者はビザンチン様匏で行動しないず想定されたす。 玄束を守り、虚停のデヌタを提䟛しないでくださいストヌリヌはわかりたせんが、ビザンチンの評刀はたあたあだったず感じおいたす



遞択ず圹割に぀いお



コンセンサスアルゎリズムのコンテキストでの「遞択」゜リュヌションの遞択、䟡倀の遞択の抂念は、日垞ずは異なりたす。 実生掻で長所ず短所を比范する堎合、コンセンサスアルゎリズムの堎合、同等のオプションから遞択が行われたす。 任意の倀/゜リュヌションが適切であり、䞻なこずは、倚くの提案されたもののどれを決定するこずです。



これは、3人ずあなたの友人がピッツェリアに来お、ピザ党䜓が同じくらいたたは悪いであり、3぀泚文する倧きなピザを遞択しようずするず、りェむタヌだけがあなたに近づき、メニュヌを困惑しお芋続けるのず比范できたす。 隣接するテヌブルがあるため、「ペペロヌネをもう持っお、遅らせないで、他のすべおよりも悪くない」-これは提案であり、提案者を提案したした。 あなたの䞀人が圌の話を聞いお、「OK、ペパロニにしたしょう」ず考えおいたす。 圌は受け入れ者であり、 申し出を 受け入れたずころです。 別のテヌブルの埌ろから圌らは叫ぶ「圌らはあなたに䞉床目のこずを蚀う-マルガリヌタを取り、私たちにすでに泚文を受け取らせる」-これはもう䞀぀の申し出であり、そしお「䞉床目のあなた」は提案番号であり、マルガリヌタは文の倀倀。 その埌、りェむタヌは、オファヌを受け入れた人に質問し始めたす。 圌はよりleanせおおり、あなたの倧倚数が同じ申し出を受け入れた堎合「私はあなたに3回目を蚀いたす—マルガリヌタ」、この申し出は遞ばれたず呌ばれ 、倧倚数がりェむタヌに通知した堎合、りェむタヌは知っおいたす 遞択した倀に぀いお孊習し、泚文を受け入れるこずができるようになりたす。 しかし、3番目の文を受け入れた人の1人がスマヌトフォンに匕っかかっおおり、りェむタヌの質問に応答したせん。



倀が遞択されたしたが、それを認識するこずは䞍可胜です-珟実の䞖界に残っおいる2人の友人は矛盟した答えを䞎えたす。 次の亀枉ラりンドが始たり、おそらく新しい提案が受け入れられ、スマヌトフォンにこだわった参加者はHabrを読み続けたす。 したがっお、正しいコンセンサスアルゎリズムは、次に遞択された倀が遞択された倀ず初めお䞀臎するようなネゎシ゚ヌションルヌルを定矩したす。



もう䞀床芋おください、これは非垞に重芁で絶察に玠晎らしい瞬間ですシステムの状態受け入れられた倀はノヌド間で分配されたす-各受信者は受け入れた提案に぀いおのみ知っおおり、䞀般的な倀が遞択されおいたすが、知るこずが䞍可胜であり、知るこずさえできない状況が発生する可胜性がありたす䜕かが遞択されおいるかどうか。 この堎合、亀枉は継続されたす。 しかし、Paxosは、受け入れ倀のほずんどによっお遞択された次の倀が、遞択された最初の倀ず䞀臎するようなものです。 䞀床遞択するず、遞択は倉曎されたせん。


そこで、甚語ず圹割を理解したした。



  1. 提䟛 - 提案を行いたす。
  2. Acceptors-オファヌを受け入れ、受け入れられたもの numberずvalue を蚘憶したす。 この堎合、ホストは最初に受け取った提案を受け入れ、遞択がすでに行われおいおも埌続の提案を受け入れたす。
  3. 認識 -どの提案が遞択されたかを確認したすほずんどの参加者に受け入れられたした。


実際には、圹割を組み合わせるこずができたす。たずえば、サヌバヌを盞互にリヌダヌずしお遞択するこずに぀いお話し合う堎合、各サヌバヌはリヌダヌずしお自らを提䟛し、オファヌ独自のオファヌを含むを受け入れ、最終的に誰を芋぀ける必芁がありたす遞ばれたした。



ほずんどに぀いお



過半数は「半分以䞊」、぀たり 2N + 1からのN + 1および2Nからも以䞊。



倚数による受け入れの芁件は明らかです倀の遞択が少数の受け入れ者正確には半分以䞋による受け入れを必芁ずする堎合、同時に耇数の異なる倀を遞択するのを劚げるものはありたせん。 コンセンサスは埗られたせん。 倚数掟を構成する2぀のセットが空でない亀差点を持っおいるず䟿利です。



この堎合、すべおの受信者が遞択に参加する必芁はありたせん。残りの受信者が誀動䜜しおいる可胜性があり、受信者ずの通信が切断されおいる可胜性がありたす。 したがっお、2N + 1人の参加者のシステムは、N人の倱敗に耐えるこずができたす。



グロヌバル時間分散システム



オファヌ番号に぀いおはすでに蚀及したした。 各提案には番号がありたす。 ランポヌトの説明では、これは次のような自然数です。



  1. 番号は䞀意であり、各オファヌには独自の番号がありたす。
  2. 入札者は、埌続のオファヌごずに倧きな数倀を䜿甚したす。


次の䟋えは、アルゎリズムを理解するのに圹立ちたした番号は基本的に提案のタむムスタンプであり、タむムスタンプはa同時に2぀の文を䜜成発行できないように蚭蚈された分散システムのグロヌバル合成時間を蚭定したす、b2぀の提案のどちらが「埌で」行われたかを理解できたす。 いく぀かの提案を受け入れたホストは、受け入れられた提案より「早い」「過去から」の提案された提案を無芖したす。



実際には、オファヌ番号は、特定のサヌバヌのオファヌカりンタヌの倀ずサヌバヌ識別子のペアで構成されたす。



正しいアルゎリズムを構築したす



番号mおよび倀vの提案が倧倚数のホストによっお受け入れられた堎合、倀vが遞択されたす。 その埌、埌続の遞択倀ほずんどの受信者が受け入れるは、遞択されたvず䞀臎するはずです。



この芁件は、 vの倀が遞択された埌、アクセプタヌがvに等しい倀のオファヌのみを受け入れる堎合に満たすこずができたす。



アクセプタヌは、オファヌ偎が提䟛するものを受け入れたす。したがっお、番号n> mのすべおのオファヌのすべおのオファヌ偎が以前に遞択した倀vのみを提䟛する堎合、前述の芁件が順番に満たされたす。



垰玍法によっお最埌のステヌトメントを蚌明しおいるず仮定し、垰玍遷移を行うために䜕が欠けおいるかを理解しようずしたす。



文m、v -が遞択されたした。 倧倚数のホストで構成されるCが倚数あり、これらの各ホストはオファヌm、vを受け入れたした。 たた、垰玍法の仮説から、 mからn-1たでの範囲の数字を持぀すべおの文の倀はv *であるこずがわかりたす。 次に、数倀nの文の倀もvにする必芁がありたす。



ホストの倧郚分で構成されるセットSが存圚し、このセットからホストが受け入れる最埌の文最倧数がn未満の意味を芋぀けるこずができるず仮定したす。 この「最倧」文の数をkずしたしょう。 セットSには、セットCから少なくずも1぀の受信aが含たれおいるため、数kは、受信aによっお最埌に受け入れられたオファヌの数以䞊になり、受け入れられたaの最埌の文の数は、 m 倀が遞択された瞬間以䞊になりたす。 。 k> = mであるため、*により、文kの倀は以前に遞択されたvであり 、これを䜿甚しお文n、vを生成したす。 したがっお、集合Sの存圚を保蚌できる堎合、これは誘導遷移を提䟛したす。


厳密な数孊蚀語では、Lamportによっお次のように定匏化されたした。誘導遷移が発生するには、次の䞍倉匏が満たされる必芁がありたす。



任意のvおよびnに぀いお、文n、vが䜜成発行されるず、受信者の過半数で構成されるセットSが存圚し、2぀のうちの1぀が真になりたす。aセットSの受信者は、 n未満の数たたはb vは、セットSからの受信者によっお受け入れられたすべおのオファヌの䞭で、 n未満の最倧数を持぀オファヌの倀です。


䞊蚘のセットSの存圚を保蚌するために、提案nを行うこずを蚈画しおいる人は、瞬間nたでに受け入れる最埌の文の数ず倀を受け入れる人の倧倚数から芋぀けなければなりたせん。



問題が䜕であるかを確認しおください申し出人は、最埌に受け取った申し出の数ず意味を受け入れる人に尋ねるこずができたすが、回答を送信するこずにより、受信者が次の申し出を受け入れ、申し出人が受け取った回答が叀くお圹に立たなくなる可胜性がありたす これを避けるために、Lamportはこれを考え出したした。入札者に最埌に受け入れられたオファヌの意味を尋ねるだけでなく、 nより小さい数のオファヌを受け入れないように䟝頌しおください。 受信者からの応答ずしお、オファヌ偎は、1最埌に受け入れられたオファヌの倀ず数、2 n未満の数のオファヌを受け入れないずいう玄束を受け取りたす。 その埌、応答ずしお受信した最埌に受け入れられた提案に関する情報は叀くならず、回答が倧倚数の受信者から受信される堎合、これらの受信者は所望のセットSを圢成したす。 セットSが圢成されるずすぐに、オファヌ偎はオファヌn、vを䜜成したす ここでvは、䞊蚘で説明したように、セットSから瞬間nたでホストによっお受け入れられた最埌の文最倧数のオファヌの倀です。



したがっお、正しいコンセンサスアルゎリズムを取埗したした。提案は2段階で行われたす。



  1. 準備段階
    1. 申し出人は、時間nで  nを申し出るこずを蚈画しおいるずいう発衚を送信したす。
    2. アナりンスを受信した受信者は、 n未満の番号最倧n のオファヌ、および最埌に受け入れられたオファヌ数ず倀を受け入れない、たたは最埌に受け入れられたオファヌの数がnより倧きい堎合、たたはnがホストが別の入札者を受け入れないこずをすでに玄束しおいるずいう提案。
  2. 提案
    1. 倧倚数の受信者から回答を受け取った提案者は、最倧オファヌ番号を持぀応答から倀をオファヌ倀vずしお遞択し、オファヌn、vを送信したす。
    2. 申し出n、vを受け取った受信者は、もちろん、他の申し出人がn *より小さい番号の申し出を受け入れないこずを玄束しおいない堎合、それを受け入れる矩務がありたす n *> n 。


倀が遞択されたこずを知るためには、認識しおいる人は、同じオファヌ数ず倀がほずんどの受信者によっお受け入れられたこずを確認する必芁がありたす。



実甚的な問題



メッセヌゞングは​​非同期であり、通信は信頌できないため、オファヌ偎が必芁な数の玄束を埅たずに少なくずもいく぀かの回答を受け取るかどうかは䞍明であり、オファヌ偎は次のオファヌを行うこずで再詊行したす。 これはすべお長い間繰り返すこずができたす。



アルゎリズムは、合意に達するこずを保蚌したせん。 たずえば、ある提䟛者は倚数掟から1未満の数のオファヌを受け入れないずいう玄束を受け取り、2番目の提䟛者は倚数掟から2未満の数のオファヌを受け入れないずいう玄束を受け取りたす。 最初の文は遞択できなくなりたした。 圌のオファヌが遞択されないこずを理解するず、最初の入札者は、3未満のオファヌを受け入れないずいう玄束を倧倚数から受け取ろうずしたす。珟圚、2番目のオファヌは受け入れられたせん。 そのため、2぀の申し出人が無限に、倧倚数の受信者を䞀方たたは他方に説埗しお、コンセンサスに達する可胜性をブロックするこずができたす。 これは、アルゎリズムにランダムな遅延を導入するこずで修正できたす。もちろん、提䟛するサヌビスが1぀だけであるこずを確認するこずをお勧めしたす。 これを行うには、耇数の決定を行う必芁がある堎合、提案ずしお次の倀を遞択するずきに、前のステップアルゎリズムの前のむンスタンスで遞択したリヌダヌを䜿甚したす。



しかし、ここで新たな問題が発生したす。リヌダヌを遞択した堎合、背埌にある残りのノヌドが新しい遞挙を開始し、他のリヌダヌを遞択するこずを劚げるものは䜕もありたせん。 さらに、前のリヌダヌはこれに぀いお䜕も知らないかもしれず、圌がここで担圓しおいるずいう仮定に基づいお行動し続けるでしょう。



別の耇雑な問題は、䞍正なビザンチン様匏の振る舞いであり、このためにシステムの芁玠にマルりェアを含める必芁はありたせん。 たずえば、受信者は玄束を芚えおおく必芁がありたす。これにより、ディスクに保存されるため、ディスク䞊のデヌタ砎損オペレヌタによるファむルの倱敗たたは䞍正確な削陀によるがビザンチンの動䜜に぀ながりたす。 実際には、メモリ内のデヌタでさえ砎損する可胜性があり、同じ悲しい結果になりたす。 コヌドの゚ラヌは、ビザンチンの動䜜を匕き起こす可胜性もありたす。



Google開発者による「Paxos Made Live-An Engineering Perspective」ずいうPaxosアルゎリズムのこれらの問題やその他の問題に぀いお、ChubbyプロゞェクトZookeeperの䌁業内類䌌物での分散コンセンサスの実装経隓に぀いお語る゚キサむティングな蚘事で読むこずができたす。



したがっお、Paxosアルゎリズムは特効薬ではなく、フォヌルトトレラントな分散システムに関する知識のほんの小さな玠晎らしい基本的なブリックです。



All Articles