2017-11-03 8 views
2

ステートレスマイクロサービスが多数あり、可変コンテキストを渡すアプリケーションがあります。私は、同じ文脈で並行していくつかのサービスチェーンを開始し、それらが終了するのを待っているケースがあります。各サービスは可変コンテキストを変更できますが、すべてのチェーンが終了した後は、変数コンテキストをマージして競合がないことを確認する必要があります。変数が片側からのみ変更されていることを確認する方法

なお、以下の例に示されています: incorrect example correct example

それは変数の変更の歴史全体を格納することによってこの問題を解決することは可能だが、それは私が避けたいのですが、巨大なデータのオーバーヘッドです。

私が見る別の解決策は、既存のハッシュと新しいデータによる変更履歴のハッシュを計算することができるハッシュ関数を見つけることです。また、ある履歴データが別の履歴データのプレフィックスであるかどうかを確認することもできますハッシュのみ。しかし、私はそのような機能を見つけることができません。

可能な限り少ないデータオーバーヘッドを持つ、適用可能なアルゴリズムを探しています。

答えて

1

あなたが必要とするのは、パラレルデータの変更をマージして競合を検出するために使用できる古いアイディアですVersion clocksです。

可変修正の履歴全体を保存することでこの問題を解決することは可能ですが、避けたいのは膨大なデータオーバーヘッドです。

は、ベクトルクロックを使用すると、全体の履歴を保持していないが、各variableとノードのカウンタが(そのため、各variableは、カウンタのベクトルを持っています)。

+0

正確に私が必要としていたこと、ありがとう! –

0

変数の変更の履歴全体を格納することはあまりにもひどい音ではありません。たとえば、変更情報をキューに入れ、一度に要素のバッチでそのキューを処理し、その結果を1つの場所に入れるサービスを持つことができます。

これは一般的なアプローチです。たとえば、並列作業負荷が大きく、ロックを使用して1つの場所にのみアクセスを同期させることはできません。

その後、キューを処理するワーカーをスケールアウトすることもできます。

関連する問題