複製されたシステムにおける整合性レベルの選択の自動化(2014)

著者:ChengLi

ジャーナル:usenix

要約:ターゲットのセマンティクスに従って整合性メソッドを自動的に選択できるSIEVEシステムが提案されています。静的および動的に分析でき、自動分類の負荷は非常に低くなります。

はじめに:多くの一貫した方法:すべてプログラマーが操作を指定する必要があります。次に、強い一貫性と弱い一貫性のどちらかを選択できます。

操作と一貫性を関連付ける別の方法があります。達成する整合性レベルを並べ替えて割り当てます。(強いトランザクションの一貫性)、(弱い一貫性)

短所:これらの戦略の問題は、アプリケーションプログラマーに多大な負担をかけることです。各操作のセマンティクスと、さまざまな操作へのさまざまな整合性レベルの割り当てが、ユーザーが認識する全体的なセマンティクスにどのように影響するかを理解する必要があります。

以前の作業は、レプリケーションモデルをアプリケーションからレプリカ状態に変更することでした。ただし、この状況には2つの問題があります。1つは、各アプリケーション操作をジェネレーターと交換可能なシャドウ操作に変換する必要があることです。

第二に、第二に、どのシャドウ操作がアプリケーションの特定の不変条件を破壊する可能性があるかを正しく識別し、それらが強力な一貫性の下で実行されるように適切にマーク(赤)する必要があります。

SIEVEは自動的に調整できるように設計されています。ただし、保持する必要があるのは、アプリケーションの不変条件と、同時更新をマージする方法に関する少量のセマンティック情報です。

SIEVEによって解決された2つの主な課題:

1.弱い一貫性の収束を確実にする方法

SIEVEは、各アプリケーションを交換可能な形式に自動的に変換できます。CRDTSタイプは主な交換可能なタイプであり、プログラマーは開発中にシンボルを使用してそれらをマークできます。この操作のシャドウ操作は動的に生成できます。

2. SIEVEは、プログラム分析を使用して、弱い整合性セマンティクスの下で実行されたときにアプリケーション固有の不変条件に違反する可能性のあるスワップシャドウ操作を識別し、強い整合性の下で実行します(RED操作)。

SIEVEをより正確かつ軽量にするため。実行時の静的チェックと動的チェックの2つの方法を設計しました。静的なアプローチは次のとおりです。一連の抽象フォームが生成され、実行時にシャドウ操作が発生する可能性があることを示します。そして、フォーム内の各(エントリ)の論理条件(最も弱い前提条件)を決定し、この論理条件の下で不変条件が破棄されないようにします。次に、この情報はディクショナリに格納され、実行時にディクショナリが検索され、条件が評価されて、各シャドウ操作が弱い整合性の下で実行できるかどうかが判断されます。

2背景:

以前に提案された赤と青の一貫性、赤(強い一貫性)、青(弱い一貫性)。赤の操作は完全に相互に関連しています。つまり、すべてのコピーで同じ相対順序で実行されるため、2つの赤の操作が同時に実行されることはありません。(シリアル化可能な操作、逐次一貫性に沿って)たとえば、a、b。最初にAが発生し、次にbが発生する必要があります。逆に、青の操作は、因果関係を維持している限り(因果関係の一貫性に対応、他の操作と比較して並べ替えることができます

操作を青色でマークできるための前提条件は、操作が交換条件を満たす必要があることです。

交換スペースを増やすために、オペレーションを生成オペレーション(悪影響なし)とシャドウオペレーションに分割しました。例:元の状況、S + u = S '、uは操作です。Sは前の状態で、S 'は次の状態です。

ここで、uはguとhu(S)に分解されます。ここで、guは生成操作であり、hu(S)はシャドウ操作です。任意の状態SについてS + gu = SおよびS + huS)= S + uが満たされる必要があります

3一般的な概要:

1.赤と青の整合性を使用するには、プログラマーがスワップシャドウ操作を生成し、青にすることができる操作と赤にする必要がある操作を特定する必要があります。私たちの目標は、これら2つのタスクを可能な限り自動化することです。(プログラマーはあまりにも関与しています)

最初の課題として、交換可能な複製データ型(CRDT)の豊富な文献(CRDT型)から多くの情報を借りました。

2層アーキテクチャが設計されています。2つの利点があります。1つは、状態の変化を引き起こすアクションを自動的に認識できることです。

2番目の課題は、交換可能な自動ラベル付けの運用上の問題を解決することです。(赤い線の部分)を介して、シャドウ操作の互換性(安全)を確保できます。この問題は、2つのクラスの問題(赤と青)として要約できます。

2つの方法があります。1つは動的ソリューションです(シャドウ操作がいつ生成されるか、シャドウ操作が不変式のセキュリティプロパティを満たしているかどうかを実行時に決定します。これにより、実行時のオーバーヘッドが増加します)。もう1つは静的スキームです(初期操作タイプ、パラメーター、および初期状態のどの組み合わせを適用して、不変のセーフシャドウ操作を生成するかを決定します)。

2つの方法の組み合わせにより、負荷分散を実現できます。静的に、CRDT操作のさまざまな可能な組み合わせに対応するテンプレートのセットを生成します。これらのCRDT操作にはシャドウ操作が含まれ、各テンプレートが変更されずに安全であるための最も弱い前提条件です。次に、実行時に、単純な辞書ルックアップを実行して、シャドウ操作が属するテンプレートを判別します。これにより、対応する最も弱い前提条件を取得して、それが満たされているかどうかを判別できます。(辞書を調べる方法)

 

この図はアーキテクチャ図を示しています。プログラマーはアプリケーションコードを一連のトランザクションに書き込み、これらのトランザクションは永続的な状態で保存されます。プログラマーは、CRDTのIDとアプリケーションの不変条件(セキュリティ)も提供する必要があります。静的アナリストの側では、一連のトランザクションからシャドウテンプレートが作成されました。これらのテンプレートは、CRDTライブラリ内の関数のさまざまな呼び出しシーケンスを表します。

運用フェーズ:

コードロジックとランタイムチェッカーを実行します。データベースと対話し、レプリケーション層と対話します。アプリケーションサーバーは、トランザクションを実行するときに、シャドウオペレーションクリエーターでジェネレーターguオペレーションを実行します。エフェクトをデータベースに直接送信する代わりに、CRDTライブラリ呼び出しシーケンスで構成されるシャドウオペレーションhuS)を生成しますシャドウ操作は、弱い前提条件でフィードされることによってチェックされます。どの静的テンプレートが属するか(パターンマッチングなど)、および不変のセキュリティの最も弱い条件は何かを判断するため。

4.シャドウ操作を生成する方法

アプリケーションコードを交換可能なシャドウ操作に自動的に変換する方法を紹介します。

4.1CRDTSを使用する

さまざまな観察手法を使用して、プログラマーの介入を減らしながらセマンティクスを維持することができます。1.マルチアプリケーションは、サービスのすべての永続状態がSQLコマンドを介してアクセスされるリレーショナルデータベースに格納される2層モデルの下で構築されます。2. crdtsを使用して、すべての副作用操作を交換可能な操作にカプセル化します。

SQLポート(狭い)は、CRDTを制限する(スループットを制限する)ボトルネックです。

タプル(c、d)の追加と削除は、シャドウ操作(CRDTの追加と削除操作)と見なすことができます。CRDTマージメソッドを変更するだけで済みます。変換は必要ありません。

更新するとデルタが増加するか、後で前のデルタを更新する可能性があるためです。この記事では、CRDTSフォームを提供しています。形式は@ [ CRDTName ] [ TableName | DataFieldName ]です。

この例は、注釈付きのSQLテーブル作成ステートメントです。AUSET(append-update Set)は、追加と更新の操作のみを許可するCRDTセットであり、同じアイテムの同時挿入と削除を除外します(制限の少ないCRDTセットもあります)。NUMDELTAに関連付けられたobjCountフィールドは、常にデルタ値が現在の値に加算または減算されることを想定しています。デフォルトでは、コメントが提供されていない場合、対応するテーブルまたはフィールドを控えめに読み取り専用としてマークします。

4.2実行時に、シャドウ操作を作成します

新しいユーザー要求が到着すると、元の操作が呼び出されます(シャドウ操作が使用されない場合と同様)。違いは、データベース内のコマンドを実行するためのすべての呼び出しが、変更されたJDBCドライバーによってインターセプトされてCRDT操作シーケンスを構築することです。これらのCRDT操作シーケンスは元の操作にあります進行中にシャドウ操作を形成します。さらに、スキーマアノテーションを使用することにより、SIEVEは各データベース更新を適切なマージセマンティクスにマップし、特定のテーブルに対する操作を対応するCRDTタイプに対する適切な操作に置き換えます。

例えば。上記のfig2の例は、更新が呼び出されたときにシャドウ操作を作成するためにobjCountを更新しています。クエリを呼び出してsを検索し、結果s 'を返します。delta = s'-sの場合、主キーpkとdeltaを使用して、CRDTのシャドウ操作を形成できます。pkを読み取り、デルタを追加します。最後に、元の操作が送信要求をデータベースに送信すると、ツールはCRDT操作の累積シーケンスを含むシャドウ操作を出力します。

5.分類シャドウ操作(赤と青のシャドウ操作に分割)

静的分析には、前提条件とフォローアップ条件(不変条件)が必要です。スケーラビリティの問題が発生する可能性があります。(図の前提条件はハッシュの値を見つけることなので、それは誤りです)。

これはビルド操作です。前提条件は、xが負であってはならないということです。入力値sが負の場合(不変の安全ケース)、前提条件が満たされていないことを意味します。したがって、この操作は非常に一貫しています(赤い操作)。

この操作により、3つのシャドウ操作を生成できます。空のシーケンス、x + 10、x-10。x-10のみが前提条件を偽にすることができます。他の2つのケースでは、最も弱い前提条件が真です。

2番目の難しさはループの生成です。

 fig3では、aはソースコード、bは静的分析によって生成されたテンプレートです。

多くの前提条件は、以前はプログラマーによって指定されていました。

2つのケースが考慮されます。CRDT操作によって呼び出される2セットの制御フローパスのみを考慮する必要があります。ループ内のコードの1つは実行されません。もう一方は、ループを実行して繰り返しを排除するためのすべての可能な制御フローパスを備えています。反復。この条件は、ループの個々の反復ごとに実行時に検証できます。独立性プロパティが与えられると、この検証はループの実行全体に対して有効になります。現在のフレームワークでは、反復的な独立性プロパティは手動で検証されます。(まだ自動化されていません)

5.1テンプレートの生成

ジェネレーター操作によって取得される各コードパスの役割について推論することにより、分析が簡略化されます。トランザクションのシーケンシャルパスセットを抽出し、ループの繰り返しを排除するアルゴリズムが必要です。主な方法は、ブランチに分割し、ループを、ループ内で実行できるすべての繰り返されないブランチの組み合わせに置き換えることです。

原則は次のとおりです。トランザクションごとに、パスを抽象化します。これは、トランザクション内のすべての制御フロー情報をエンコードする正規表現です。fig3(a)の抽象パスコードは234 | 6 2 )です。∗     数字はステートメント識別子を表し、|は二項演算子です。つまり、両側のステートメントは次のようになります。代替ブランチ。・2つの連続したステートメントを接続します。∗はループ内の繰り返しを意味します。(中の番号は行番号を表します)。ループを排除するには、2つの方法で5.1を再帰的に呼び出す必要があります。除去が連続した方法になるまで。ループを解除する方法は2つあります。1つはループ全体を解除する方法、もう1つはループをループ本体に配置する方法です。|操作を選択し、2つのパス抽象化を繰り返しました。1つは左の操作のみで、もう1つは右の操作のみです。

一歩近づき、*と|を削除します。最初のケースに示されているように、外側のループが実行され、if条件が満たされ、次に内側のループに入ります。方法がある場合のみ。条件が満たされない場合、それは他のことだけです。パスを抽象化し、操作をcrdtシャドウ操作と(読み取り専用、操作なし)に変換し、最後にすべてのCRDT操作をシャドウ操作テンプレートを表す関数にパックします。

最後に、<key、value>のディクショナリが生成され、キーはテンプレート識別子を表します。値は、その値がテンプレートの最も弱い前提条件であることを示します。テンプレートの一意の識別子は、正規表現の制限された形式のCRDT操作署名使用し可能なパスのセットをエンコードます

5.2ランタイム評価

実行時に、シャドウ操作が赤か青かを評価する方法。各シャドウ操作(静的分析中に作成された辞書)に一致するテンプレートを見つける必要があります。さらに、ループが原因で繰り返されるコードセグメントを排除することで、可能なコードパスの数を減らすことができます。

最初のルックアップテンプレート:

このルックアップを実行する際の課題は、たどったパスに対応するシャドウ操作の識別子を決定する必要があることです。辞書の識別子とパスが一致した状態で、検索ツリーを通過します。

弱い前提条件チェック:

最後に、特定のシャドウ操作に対応するテンプレートの最も弱い前提条件が見つかったら、シャドウ操作(コード転送のCRDTパラメーターに基づいて(辞書内の前提条件を評価しますこれは、前提条件の変数をインスタンス化された(変換された)値に置き換え、最終的な式をtrueまたはfalseとして評価するだけで実現できます。最も弱い前提条件がtrueと評価された場合、シャドウ操作は青としてマークされ、そうでない場合、シャドウ操作は赤としてマークされます。このステップの後、シャドウ操作はコピーレイヤーに渡され、コピーレイヤーはさまざまな戦略を使用して、分類に従ってシャドウ操作をコピーします。

 

 

おすすめ

転載: blog.csdn.net/zhuiyunzhugang/article/details/111246178