カウンターメジャー
countermeasure 分離性の欠如に対処するための設計手法。
Sagaにおける分離性の欠如による異常
更新の消失
あるサーガが加えた変更を他のサーガが取り消す形で書き換えたときに本来あるべき更新の状態が消失してしまう。
ダーティリード
あるサーガが更新している途中のデータを他のサーガが読み取ってしまう。
ファジーリード/ノンリピーテッドリード
サーガがデータを読み取った後に、他のサーガが該当のデータを書き換えて参照されているデータの値がまちまちになってしまう。
設計
Semantic lock
[補償可能トランザクション]は、作成・更新するレコードにフラグをセットする。 フラグによってレコードの状態(ロック中かなど)を管理する。 アプリケーションでロック管理、デッドロックの検出を行う必要がある、
Communitative updates
どんな順序で実行しても影響のない更新操作を交換可能と呼ぶ。 他のサーガの更新結果を上書きしないような処理であるため、更新結果の消失の可能性を排除できる。
Pessimistic view
ダーティリードによるビジネスリスクを最小限に抑えるようにステップの順序を並び替える。
Reread value
楽観的オフラインロックの一種。 値を更新する前に読み直し、変更されていないことを確認してからレコードを更新する。 レコードが書き換えられている場合、サーガを中止する。
Version file
レコードに対して実行された操作を記録し、実行順序をかえられるようにする。 交換不能な操作を交換可能な操作に変更する。
By value
ビジネスリスクに基づいて、利用する並行処理のメカニズムを選択する。 個々のリクエストの性質に基づいてサーガと分散トランザクションを使うか判断する。