分散型システム(四)——弱整合性モデル
2356 ワード
本論文は主に分散型システムにおける弱一致モデルについて述べており、本文の内容は全部清華大学分布型課程ウェブサイト、ウェブサイトの住所から来ています.http://thu-cmu.cs.tsinghua.edu.cn/curriculum/dscourse/index.html
以前の分散型システムの整合モデルで紹介した一致モデルについては、順序一貫性モデルを実現するシステムにおいて、このような問題があります.二つの異なるマシンが同じ記憶ページにある二つの異なる変数を操作すると、システムはページごとにマシンに送信しますが、私たちは二つの異なる変数を操作するだけです.全ページのすべての内容が必要ではないので、対応する作業を完了するために弱い一致モデルが必要です.
目的
弱い一致を使用する目的は二つあります.一、送信するデータを減らすためには、保存ページの二ではなく、複数の読み書きが同時に実行できるようにする必要があります.一つのデータのコピーが書かれている場合、この時は、すべての読み取りコピーを利用できないように設定します.そうすると、読み書きの同期ができます.
弱一致性
弱一致性の具体的な実現原則は、分散システムにロックサービスがあると仮定し、プロセスが共有メモリにアクセスしたい時、このロックを獲得すべきです.このように操作が終わったら、プロセスはこのロックを解除します.そうすると、ロック前後のデータが変化するかどうかを比較します.私たちはこの変更を他の保有書類のコピーに放送します.
しかし、新しい問題があります.リリースするたびに、すべてのコピーを更新しなければなりません.たとえば、変数を使用したことがありません.この変数はあるプロセスによって修正されました.この理由に基づいて,Lazy Release Consesstency(LRC)モデルという弱一致モデルを新規に定義した.
LRCモデルの定義は次の通りです.私たちはあるロックを取得する時だけ、このロック内容の更新を行います.しかも、前回のロックを持っているところからしか取得しません.LRCを使って簡単に見ることができます.もし変数を使わないなら、彼らの更新は永遠に得られません.また、頻繁にいくつかの変数を使うなら、私達も毎回これらの変数を持つ保存ページを全面的に更新する必要がありません.このようにすれば、帯域幅を節約する効果があります.
実例
Example 1
Example 2
上記の問題を解決するために、私達はvector timestampの概念を提出しました.これは配列のデータ構造に似ています.ロックの実行時間と操作内容を全部記憶しています.ですから、ロックを取得する時に、以前に持っていたロックを持つユーザーとVTを比較して、損失の更新を補充します.
以前の分散型システムの整合モデルで紹介した一致モデルについては、順序一貫性モデルを実現するシステムにおいて、このような問題があります.二つの異なるマシンが同じ記憶ページにある二つの異なる変数を操作すると、システムはページごとにマシンに送信しますが、私たちは二つの異なる変数を操作するだけです.全ページのすべての内容が必要ではないので、対応する作業を完了するために弱い一致モデルが必要です.
目的
弱い一致を使用する目的は二つあります.一、送信するデータを減らすためには、保存ページの二ではなく、複数の読み書きが同時に実行できるようにする必要があります.一つのデータのコピーが書かれている場合、この時は、すべての読み取りコピーを利用できないように設定します.そうすると、読み書きの同期ができます.
弱一致性
弱一致性の具体的な実現原則は、分散システムにロックサービスがあると仮定し、プロセスが共有メモリにアクセスしたい時、このロックを獲得すべきです.このように操作が終わったら、プロセスはこのロックを解除します.そうすると、ロック前後のデータが変化するかどうかを比較します.私たちはこの変更を他の保有書類のコピーに放送します.
しかし、新しい問題があります.リリースするたびに、すべてのコピーを更新しなければなりません.たとえば、変数を使用したことがありません.この変数はあるプロセスによって修正されました.この理由に基づいて,Lazy Release Consesstency(LRC)モデルという弱一致モデルを新規に定義した.
LRCモデルの定義は次の通りです.私たちはあるロックを取得する時だけ、このロック内容の更新を行います.しかも、前回のロックを持っているところからしか取得しません.LRCを使って簡単に見ることができます.もし変数を使わないなら、彼らの更新は永遠に得られません.また、頻繁にいくつかの変数を使うなら、私達も毎回これらの変数を持つ保存ページを全面的に更新する必要がありません.このようにすれば、帯域幅を節約する効果があります.
実例
Example 1
M0: a1 x=1 r1
M1: a2 y=1 r2
M2: a1 print x r1
まずM 2はロックを持っていたM 0に問い合わせて更新します.xを1に更新しますが、M 1の更新はM 2に見られません.適時xyは同じ保存ページに保存します.Example 2
M0: a1 x=1 r1
M1: a1 a2 y=x r2 r1
M2: a2 print x, y r2
このような実行フローは、出力のx yが1であり、M 2がロック2を取得しただけで、以前の理論ではM 1がロック2を持っていますので、M 1が2で更新されたものをM 2に送ります.M 1はyのみに変更されていますので、M 2はxの更新ができません.上記の問題を解決するために、私達はvector timestampの概念を提出しました.これは配列のデータ構造に似ています.ロックの実行時間と操作内容を全部記憶しています.ですから、ロックを取得する時に、以前に持っていたロックを持つユーザーとVTを比較して、損失の更新を補充します.