分散データの整合性/分散トランザクションの概要

1. 簡単な紹介

1. 分散トランザクション/分散データの一貫性問題の根本原因: ストレージ リソースの分散、複数のリソースの書き込み、書き込みの成功を保証できない 2. 分散
トランザクション モデル:
 1) AP: アプリケーション、アプリケーション プログラム
 2) RM: リソース マネージャー、リソース マネージャー
 3) TM: Transation Manager、トランザクションマネージャー
 注: トランザクションは、グローバルトランザクションとブランチトランザクションに分類できます。

2. 一般的なソリューション

1. 2 フェーズ コミット
 1) 実装のアイデア:
  a) 準備フェーズ: トランザクション マネージャー (TM) は、ブランチ トランザクションを準備し、トランザクション ログを記録し、準備結果をトランザクション マネージャーに通知するようにリソース マネージャー (RM) に通知します。
  b) コミット/ロールバック フェーズ: 最初のフェーズでは、すべての RM が成功を返し、次に TM がすべての RM にコミット コマンドを送信します。いずれかの RM が失敗を返した場合、TM はコミット コマンドをすべての RM に送信しますすべての RM RM がロールバック コマンドを送信します
 。 2) 欠点
  a) 同期ブロッキング: 準備段階に含まれる RM リソースは、すべてのコミットまたはロールバックが行われるまでロックされます。 b
  ) 保守的すぎる: 失敗するとロールバックされます (著者はこれに問題はないと考えています)
  c) TM 単一障害点: 第 2 段階での TM 障害により、第 1 段階でロックされたリソースが解放されなくなります。 d
  ) スプリット ブレインによるデータの不整合: ローカル ネットワークの異常など。第 2 段階では、一部の RM 通知が発生します。到着する可能性もあれば到着しない可能性もあります。
2. 3 段階の提出
 1) 実装アイデア
  a) 問い合わせ段階: TM はすべての RM に実行可能かどうかを尋ねます
  。 b) 準備段階: 最初の段階ですべての RM が実行可能であると回答した場合、次に、コミットを除くすべての操作をすべての RM で実行します (2 フェーズ コミットの最初のフェーズと同じ)。それ以外の場合は、トランザクション中断要求をすべての RM に送信します。 c)
  コミット/ロールバック フェーズ: 2 フェーズ コミットの 2 番目のフェーズと同じです。
 2) 2 フェーズ コミットと比較した利点:
  a) 照会ステージが増加し、できるだけ早く操作を実行できないことがわかり、その後の動作を中止できます。
  b) タイムアウト メカニズムを導入します。タイムアウトが発生すると、両方の TM RM はデフォルトでトランザクションの送信を続行し、ステータスを成功と見なします。トランザクションの送信が成功する可能性は失敗する可能性よりもはるかに高いためですが、このアプローチではデータの不整合が生じる可能性があるため、タイムアウトが発生した場合の追跡可能性のために必要なログまたはアラームを追加する必要があります。
3. TCC 補償計画 (Try-confirm-Cancel)
 1) Try: 主にデータ検証やリソース予約を行うステージ
 2) 確認: 実際の実行タスクを確認し、Try ステージで予約したリソースのみを操作する
 3)キャンセル:実行をキャンセルし、Tryで予約されたリソースを解放する
 フェーズ   メッセージ ミドルウェアの信頼性メカニズム クラスを使用して、データの整合性配信、つまりトランザクション メッセージとトランザクション レビューを実現します   。メッセージ確認の場合、アップストリームはメッセージ確認を受信するか、最大再試行回数に達するまで再試行を続ける必要があります。



3. Seata、分散トランザクションフレームワーク

1. Seata は 4 つのトランザクション モードを提供します: AT、Sega、TCC (報酬スキーム)、XA (2 フェーズ)
2. AT モード
 1) 実装アイデア:
  a) フェーズ 1:ビジネス データロールバック ログは、同じコミットに記録されます。ローカル トランザクション
、ローカル ロックと接続リソースを解放します。つまり、ロックの粒度を減らします。   b) 第 2 段階:非同期にコミットしますグローバルコミット: この時点ですべてのブランチ トランザクションが送信されていることを示し、ロールバック ログは非同期キューを通じてクリーンアップできますロールバック最初のステージのロールバック ログを通じて逆に補正されます
  。 注: AT モードを使用する場合、RM はローカル トランザクション用のリレーショナル データベース
 2) 分離
  a) 書き込み分離: 最初の段階では、ローカル ロックの取得 -> ビジネス操作 -> グローバル ロックの取得 -> ローカル コミット ローカル ロックの解放 -> グローバル ロックの解放 注: a) グローバル ロックの
  取得
  ロック ロックが複数回再試行に失敗した場合、トランザクションはロールバックされ、ローカル ロックが解放されます。
  b) グローバル ロックとローカル ロックの間のデッドロック問題は、グローバル ロック タイムアウトを取得することで解決されます。
  d) 読み取り分離: デフォルトの読み取りコミットされず、結果整合性
3、Saga モデルに依存
 1) 実装アイデア: ロング トランザクション ソリューション。ビジネス プロセス内のロング トランザクションを複数のローカル ショート トランザクションに分割します。ビジネス プロセスの各参加者は、参加者の 1 人がトランザクションを実行したときに、ローカル ショート トランザクションに実際の送信を送信します。失敗した場合、以前に成功した参加者は補償メカニズムを通じて補償されます。
 2) 補償回復方法
  a) 逆方向回復: 前回の実行結果を 1 つずつ元に戻す
  b) 順方向回復: 失敗したトランザクションを再試行
 3) 利点と欠点
  c) 利点: 1 段階の直接コミット、高パフォーマンス、非同期実行
  d) 欠点:アトミック性と分離性はサポートしていません。
 3) 調整モード:
  a) イベント オーケストレーション (分散): セガの意思決定と実行順序のロジックがセガの各参加者に分散され、イベントを交換します。 b) コマンド調整 (集中): セガの決定を集中します
  。 - Sega コントロール クラスの作成および実行シーケンス ロジック。コマンド/応答方式で各サービスと通信し、何を実行するかを指示します。 操作 4.
Seata ファイル ストレージ モード
 1) スタンドアロン モード: デフォルトでは、グローバル トランザクション セッション情報ローカル ファイルに保存され、パフォーマンスが高くなります。
 2) db ストレージ モード: 高可用性モード。グローバル トランザクション セッション情報は db を介して共有され、パフォーマンスは比較的劣ります。グローバル トランザクション セッション情報は、グローバル トランザクション、ブランチ トランザクション、およびグローバル ロックで構成されます。
3. Seata 設定
 1) registry.conf
  a) registry: レジストリのアドレスを設定します。 b) config: Seata 設定ファイル  2) ファイル
  のアドレスを設定します。
conf: Seata の構成、プロトコル、サーバー、モニタリングを含む

関連する推奨事項:
1.登録センターの選択の比較
2.構成センターの選択の比較
3.ゲートウェイの選択の比較
4.リモート コールの選択の比較
5.分散データの整合性
6.メッセージ キューの選択の比較
7.監視ツールの選択のコントラスト
8.完全なリンク トラッキングの比較モデルの選択

おすすめ

転載: blog.csdn.net/qq_21033663/article/details/109543979