共同線集。 パヌト2





こんにちは 最近、䞀連の共同線集蚘事を開始したした。 最初の蚘事では、ノンブロッキング線集の問題ずその実装ぞの可胜なアプロヌチに぀いお話したした。 最埌に、アルゎリズムずしお操䜜倉換OTを遞択したこずを思い出させおください。 圌のクラむアントサヌバヌバヌゞョンに぀いおの話も発衚されたした。今日は圌の仕事の詳现を取り䞊げたす。 さらに、OTでのキャンセルの動䜜が異なる理由ず、それがいかに厳しい珟実に盎面するかを孊びたす。



さらに、倚くのアルゎリズムず図がありたす。 興味があるず思いたす。



クラむアントサヌバヌモデル



前回の蚘事の終わりに、OTアプロヌチの実装の難しさを䞭倮サヌバヌで回避できるこずに泚目したした。 ピアツヌピアアルゎリズムずは異なり、サヌバヌを䜿甚するず、すべおの操䜜の共通の順序サヌバヌでの操䜜の順序を入力できたす。 したがっお、い぀でも、サヌバヌ䞊のドキュメントの状態は1぀の番号リビゞョンによっお特城付けられたす。







同時に、任意のクラむアントのドキュメントのステヌタスは、サヌバヌ䞊の特定のリビゞョンず、サヌバヌずただ䞀貫しおいない特定の数のロヌカル操䜜ずしお衚すこずができたす。







サヌバヌからクラむアントぞ



たず、クラむアントがサヌバヌから新しい操䜜を受け取ったずきに䜕が起こるかを調べおみたしょう。 この状況では、すべおが明確です。 すべおの操䜜は、サヌバヌに適甚された順序で凊理されるず想定されおいたす。 このため、操䜜のリビゞョンクラむアントのリビゞョン+ 1がわかりたす。







リビゞョン1は、サヌバヌずこのクラむアントの最新の党䜓的なドキュメントの状態です。 前の蚘事で調べた倉換を思い出しおください。 圌らの助けを借りお、ドキュメントの倉曎のさたざたな方法を「枛らす」こずができたす。







わかりやすくするために、この図ず埌続の図では、Operation3がOp3、Local operation 1がLOp1などの略語を䜿甚したす。 右肩は、サヌバヌで実行されるアクションです。 そしお、巊偎はクラむアント䞊にありたす。 倉換のプロパティを䜿甚したす。これは、前の蚘事の図で説明されおいたす。







このアクションをもう䞀床繰り返したす。







さらに、次の2぀の方向に行動できたす。

  1. クラむアントにOp3 ''操䜜を適甚し、リビゞョンをむンクリメントし、ロヌカル操䜜LOp1、LOp2をLOp1 '、LOp2' 'に眮き換えたす。
  2. ロヌカル操䜜をロヌルバックし、Op3、LOp1 '、LOp2' 'を順番に適甚したす。


どちらのオプションを遞択しおも、結果ずしお、クラむアントのこの状態を取埗したす。







珟時点で䞎えられたすべおの考慮事項に基づいお、すべおが、䞡方の堎合の結果が類䌌するように芋えたす。 そしお、パフォヌマンス䞊の理由から、最初のものが望たしいです。 ただし、2番目の方法を䜿甚したす。 次のいずれかの蚘事で、これがどのように原因であるかを説明したす。 それたでの間、そのたた䜿甚しお続行しおください。



クラむアントからサヌバヌぞ



サヌバヌからクラむアント偎ぞのデヌタ送信を怜蚎した埌、反察方向の操䜜を怜蚎したす。 䞊蚘の䟋ず同じ状態に戻りたしょう。







ご芧のように、操䜜自䜓ずずもに、クラむアントはリビゞョンを送信したす。これは、珟時点ではクラむアントずサヌバヌに共通です。 これにより、サヌバヌが履歎を䜿甚しお、送信された操䜜の基になったリビゞョンを埩元する必芁がなくなりたす。 再び倉換を適甚したす。







ここでは、サヌバヌ䞊でLOp1 ''操䜜を適甚し、それに応じおリビゞョンを増やす必芁があるこずがわかりたす。 さらに、ドキュメントを操䜜する他のクラむアントに倉換された操䜜を送信する必芁がありたす。







クラむアントのステヌタスは倉曎されおいないこずに泚意しおください。 圌が監査を匷化できるようにするために、サヌバヌは確認を送信する必芁がありたす。 通信チャネルはメッセヌゞ配信順序を保持するこずが理解されたす。これは、以前はLOp1 'の監査よりも小さい監査を持぀すべおの操䜜がクラむアントに送信されるこずを意味したす。



さらに、クラむアントがサヌバヌから操䜜を受け取るずきの手順により、すべおの倉換埌、ロヌカル操䜜の最初の倀がサヌバヌ䞊の察応する操䜜ず同じ倀LOp1 'を持぀ようになりたす。







確認メッセヌゞを受信するず、クラむアントは改蚂倀を増やしたす。 このリビゞョンの倀は、送信された操䜜に察応するサヌバヌ䞊のリビゞョンず等しくなりたす。 たた、LOp1 'はクラむアントのロヌカル操䜜のリストから削陀されたす。これは、サヌバヌ䞊にもあるためです。







Local Operation 2で次に䜕が起こりたすか



「ロヌカル操䜜2で次に䜕が起こるのですか」ずあなたは尋ねたす。 䞊蚘のすべおは、最初のロヌカル操䜜で機胜したす。 秒に䜕が起こるか芋おみたしょう。 クラむアントがロヌカル操䜜2を远加するずすぐに、サヌバヌにすぐに送信するず想像しおください。 同時に、これらの操䜜の間のサヌバヌでは、他のクラむアントからの操䜜が「りェッゞ」する可胜性がありたす。







サヌバヌでどの操䜜を䜿甚するかを理解するには、次の問題を解決する必芁がありたす。







理論の芳点から、これを行うこずを劚げるものは䜕もありたせん。 目的の操䜜を行うには、すでに述べた倉換を䜕床も適甚するだけで十分です。







すべおの倉換を指定したせんでした。そうしないず、回路が非垞に倧きくなりたす。 ただし、赀い矢印に察応する操䜜は空同䞀であるこずに泚意しおください。 これは、操䜜LOp2 'がサヌバヌに適甚する必芁がある倉曎であるこずを意味したす。



これらの蚈算を実際的な芳点から芋おみたしょう。 これらの倉換を実行するには、サヌバヌで以䞋を行う必芁がありたす。

  1. チャヌトが始たるリビゞョンを知る。 操䜜ず䞀緒に基本的なリビゞョンを送信できるため、これは難しくありたせん。
  2. このクラむアントの以前のロヌカル操䜜に関する情報を持っおいたす。 䞊の図では、これはLOp1ですが、䞀般的な堎合、それらの数はいく぀でもかたいたせん。 さらに、LOp2の送信時にこれらの操䜜の状態を保持するこずが重芁です。これは、操䜜がサヌバヌから行われるずロヌカル操䜜が倉換され、倉曎に぀ながる可胜性があるこずが䞊で瀺されたためです。


「クラむアントの以前のロヌカル操䜜に関する情報がある」ずいう条件は、以前のすべおのロヌカル操䜜をLOp2ず共に送信するか、サヌバヌ䞊の倉換を䜿甚しおそれらを埩元する必芁があるこずを意味したす。 サヌバヌ䞊の履歎でこのクラむアントからの操䜜を䜿甚するこずはできたせん。既に倉換が行われおいるためです。 前者の堎合、ネットワヌクトラフィックが倧幅に増加し、埌者の堎合、サヌバヌの負荷が増加したす。



Google Docs and Waveで䜿甚されるアルゎリズムは、2぀の悪から遞択できるシンプルで効果的な゜リュヌションを䜿甚しおいたす。 これは、前の操䜜がサヌバヌに正垞に適甚されたこずの確認が受信されるたで、次のロヌカル操䜜を送信しないずいう考え方です。 私たちの堎合、これは、LOp1に関する確認メッセヌゞをサヌバヌから受信した埌にのみLOp2が送信されるこずを意味したす。







同じアプロヌチが䜿甚されおいたす。



たずめ



これらのルヌルが「ラむブ」でどのように機胜するかは、スラむドで確認できたす。



動䜜䞭のクラむアントサヌバヌOT




線集をキャンセル元に戻す



共同線集の可胜性により、ナヌザヌのアクションを取り消すなど、このようなありふれた機胜が非垞に具䜓的になりたす。 これがナヌザヌ偎でどのように芋えるかを芋おください。



ドキュメントのさたざたな郚分を線集する2人の人がいるずしたす。 そのうちの1人が最埌の倉曎を奜たなかったため、キャンセルボタンを抌したした。 システムがロヌカルテキスト゚ディタヌず同じように機胜する堎合、぀たり、すべおの線集の履歎から最埌の倉曎をロヌルバックするず、別のナヌザヌの操䜜がキャンセルされる可胜性がありたす。 この堎合、䞡方が混同されたす。



これは、時間内の最埌の操䜜ではなく、キャンセルを開始したナヌザヌの最埌の操䜜をキャンセルするこずが適切であるこずを意味したす。 この堎合、効果はより期埅され、通垞の効果に近くなりたす。これは、ロヌカルドキュメントを線集するずきに確認できたす。 したがっお、各ナヌザヌは独自の元に戻す/やり盎しスタックを持っおいたす。



ただし、クラむアント操䜜の履歎では、埌者はサヌバヌから受け取った別のナヌザヌからの操䜜である堎合がありたす。 このため、ロヌカルドキュメントを線集するずきに䜿甚される、やり盎しを元に戻す方法を適甚できなくなりたす。キャンセルするず、䞀番䞊のドキュメントがスタックから取埗され、ロヌルバックされたす。 この堎合、䜕らかの方法で操䜜を履歎の「䞭間」から抜出し、次のすべおを倉換する必芁がありたす。







䜿甚するアルゎリズムの重芁な特性は、サヌバヌず既に調敎されおいる操䜜が倉曎されないこずです。 たた、このプロパティに違反するず、アルゎリズムは機胜しなくなりたす。 したがっお、このようなキャンセルの原則は私たちには適しおいたせん。



すでに歎史の奥底に突入しおいる操䜜ドキュメント操䜜のスタックをロヌルバックする必芁がありたす。 このために、1぀の方法がありたす。新しい操䜜を䜜成し、元の効果をキャンセルしたす。 各操䜜に぀いお、反察の結果を生成できるず想定しおいたす。 逆の操䜜は、最初の操䜜の盎埌に発生するドキュメントの状態にのみ正しく適甚できるこずが重芁です。







倉換の助けを借りお、以前の線集で行ったように、クラむアント䞊のドキュメントの珟圚の状態に逆の操䜜を「転送」できたす。







ダむアグラムOp -1  'では、これは必芁な操䜜です。 既存のアルゎリズムを倉曎する必芁はありたせん。操䜜はロヌカルに適甚され、他のサヌバヌず同様にサヌバヌに送信されたす。 サヌバヌも他のクラむアントも、元に戻す操䜜ず通垞の操䜜を区別できたせん。 これはキャンセル操䜜であるずいう情報は、それを䜜成したナヌザヌによっおのみ保存されたす。これは、REDOが正しく機胜するために必芁なためです。



緎習する



理論的には、理論ず実践の間に違いはありたせん。

しかし、実際にはありたす。

ペハネス・ランベルトゥス・アドリアヌナ・ファン・デ・スネプシュヌト



珟時点では、操䜜をキャンセルする機胜を備えたノンブロッキング同時線集を可胜にするアルゎリズムがすでにありたす。 この段階では、ほずんどの理論的な蚘事で、アルゎリズムを構築するタスクは解決されおいるず想定されおいたす。 1行の線集の䟋は、「テストサむト」ずしお䜿甚されたす。ここでは、線集操䜜は2぀だけです。぀たり、文字の挿入ず削陀です。 シンボルに䜕らかのプロパティがあり、それに応じお3番目の操䜜がその倀を倉曎するように芋える䟋を瀺したす。 オペレヌションの総数を蚀及するだけではありたせん。なぜなら、オペレヌションを他のオペレヌションず比范しお倉換できる必芁があるからです。぀たり、Nオペレヌションの堎合、N 2倉換を実装する必芁がありたす。 操䜜が2぀たたは3぀である堎合、これは問題ではありたせん。



これたで、圓瀟補品のカヌネルむンタヌフェむスには、ドキュメントを線集するための50以䞊の機胜が含たれおいたす。 それぞれを個別の操䜜ずしお提瀺する堎合、2500を超える倉換を実装およびテストする必芁がありたすが、これは単に物理的に䞍可胜です。 さらに、新しい機胜を垞に远加しおいるため、この数は増え続けおいたす。



この堎合の自然な解決策は、ナヌザヌのアクションず操䜜の間の1察1の察応を攟棄するこずです。 䞀連の操䜜は最小限にする必芁がありたすが、䞀連の操䜜の助けを借りお、任意のナヌザヌアクションを蚘述できるようになりたす。 さらに、可胜な限り操䜜の数を制限したい堎合、操䜜自䜓はナニバヌサルでなければなりたせん。 事実、倉換の芳点からは、フォントの色やサむズを蚭定する操䜜に違いはありたせん。 文字の挿入ず段萜の挿入に違いがないように、これはすべお1次元のコレクションに貌り付けられたす。 その結果、芁玠の挿入、オブゞェクトのプロパティの削陀および蚭定ずいう3぀の根本的に異なる操䜜が残っおいるこずがわかりたした。



CoWordなどの補品は、文曞党䜓をさたざたな皮類の芁玠文字、キャリッゞ翻蚳、写真などの連続したリストずしお衚したす。 そしお、そのようなドキュメントモデルの堎合、提案された3぀の操䜜で十分です。 しかし問題は、このモデルでは、スタむル、ヘッダヌ、フッタヌ、およびテヌブルを含むオフィスドキュメントを完党に衚瀺できないこずです。



朚のような文曞



リストの代わりに、ドキュメントをその階局構造を反映したツリヌず考えるのが自然です。 簡単に蚀えば、このモデルのドキュメントは次のようになりたす。







スキヌムを簡玠化するために、意図的に芁玠タむプの数を枛らしたしたが、意味は残りたした。 ドキュメントは、2぀のタむプのノヌドを持぀ツリヌの圢匏で衚瀺されたす。

  1. 固定構造ノヌドは緑色でマヌクされおいたす。 䟋ずしお、ルヌト芁玠を取り䞊げたす。 このモデル内のドキュメントには、垞に2぀の子ノヌドがありたす。ブロックのリストずプロパティのセットです。
  2. 可倉数の子ノヌドを含む可胜性のあるコレクションノヌドは、玫色でマヌクされおいたす。 たずえば、ドキュメント内のブロック段萜たたは衚には異なる番号が付いおいる堎合がありたす。 同様に、段萜の文字ず衚の行ず列に぀いお。


このようなドキュメントモデルを䜿甚するず、同じ3぀の基本的な操䜜を䜿甚できたすプロパティの挿入、削陀、および蚭定。 同時に、それが実行されるドキュメントツリヌのノヌドアドレスが各操䜜に远加されたす。 挿入たたは削陀操䜜の堎合、これはコレクションのアドレスである必芁がありたす;プロパティを蚭定する堎合、これはこのプロパティを倉曎するノヌドのアドレスです。



ツリヌ操䜜の倉換



オペレヌションのアドレスは、倉革に圹立ちたす。 Operation1、address1ずOperation2、address2の2぀の操䜜があるずしたす。 ノヌドが保持されおいるノヌドの盞察䜍眮がIncOperation1、address1、Operation2、address2の倀にどのように圱響するかを刀断したしょう。 4぀の異なるケヌスがありたす。



1.ノヌドが䞀臎、address1 = address2。





。

この堎合、倉換はドキュメントがフラットであるかのように行われたす。 アドレスは同じたたです



IncOperation1、address1、Operation2、address2=IncOperation1、Operation2、address1



2. Operation2はノヌドOperation1の祖先に䜜甚し、address2はプレフィックスaddress1です。







Operation2がノヌドOperation1の祖先を削陀するず、結果ずしお空の操䜜が取埗されたす。 削陀しない堎合、Operation1自䜓は倉曎されたせんが、Operation2がコレクションを倉曎するずアドレスが倉曎される堎合がありたす。 たずえば、Operation1が2番目の段萜ぞの文字の挿入であり、Operation2が最初の段萜の削陀である堎合、結果ずしお、同じむンデックスを持぀文字が最初の段萜に挿入されたす。



IncOperation1、address1、Operation2、address2=Operation1、Incaddress1、Operation2



3. Operation1はノヌドOperation2の祖先に䜜甚し、address1はプレフィックスaddress2です。







この堎合、Operation2はOperation1に圱響したせん。



IncOperation1、address1、Operation2、address2=Operation1、address1



4. Operation1ずOperation2はさたざたなノヌドで動䜜したすが、いずれも他のノヌドの祖先ではありたせん。







ここでも、倉換は同じです



IncOperation1、address1、Operation2、address2=Operation1、address1



これらのルヌルにより、任意のペアの操䜜の倉換を取埗できたす。 さらに、ドキュメントのさたざたな郚分に察する操䜜は倉換されないため、生産性にプラスの圱響がありたす。



二次元コレクション



それずは別に、テヌブルに蚀及する䟡倀がありたす。 著者が階局的なドキュメントでOTをレビュヌするいく぀かの出版物に出䌚いたした。 ただし、リストは垞にコレクションノヌドずしお䜿甚されおいたす。 テヌブルに関しおは、それらは垞にセルのリストである行たたは列のリストずしお指定できるず蚀われおいたした。 このアプロヌチは、行の操䜜ず列の操䜜を正しく盞互に倉換できないため、根本的に間違っおいたす。 そしお今、その理由をお話ししたす。



行のリストの圢匏で2行2列のテヌブルを栌玍するずしたす。







1人のナヌザヌがテヌブルの最埌に行を挿入し、2人目のナヌザヌが右偎の列を䞊行しお削陀するずしたす。 最初のナヌザヌの堎合、圌のアクションは、挿入Table、3、{Cell31、Cell32}ずいう1぀の操䜜で蚘述されたす。 2番目の操䜜には、削陀Row1、2、削陀Row2、2の2぀の操䜜が必芁です。 䞊蚘のすべおの倉換ルヌルを適甚するず、結果ずしおこのテヌブルの状態が取埗されたす。







あたり長方圢ではないテヌブルを認めるか、別のアプロヌチを芋぀けたす。 2番目のオプションを遞択したした。 より正確には、テヌブルを別個の2次元タむプのコレクションずしお提瀺したした。 リストずは察照的に、それらに察する操䜜は2぀ではなく4぀です。぀たり、列の挿入ず削陀、および行の同様の操䜜です。 そしお、子芁玠のアドレス-セル-は、単䞀の数倀むンデックスではなく、ペアによっお蚭定されたす。 このアプロヌチにより、行ず列の操䜜を正しく衚珟および倉換し、誀ったテヌブル構造の状況を防ぐこずができたす。



おわりに



これに぀いお私は呌んで、これがすべおであるず曞きたいです。 OTの堎合、「詳现の悪魔」ずいうフレヌズは非垞に正確です。なぜなら、基本的な問題を解決し、アルゎリズムを耇雑にする必芁性が実際にあるからです。 したがっお、リスト操䜜の実際のアルゎリズムでは、2぀ではなく4぀がありたす。 そしお、そのうちの1぀は実行されたせん。 たた、倉換䞭だけでなく、実行時にも操䜜を倉曎できたす。



この蚘事のすべおのニュアンスをカバヌするこずはもはや䞍可胜であり、それらを継続するために残し、この2番目の蚘事を終了したす。



じゃあね



All Articles