2つの分散トランザクションソリューション

## 1. 2PC
2PCは2フェーズコミットプロトコルで、トランザクションプロセス全体を2つのフェーズに分割します。準備フェーズとコミットフェーズ、2は2つのフェーズ、Pは準備フェーズ、Cです。提出フェーズを指します。

以下に示すように、コンピュータ内のOracleやMySQLなどの一部のリレーショナルデータベースは、2フェーズサブミッション契約をサポートしています。

  1. 準備フェーズ:トランザクションマネージャは、準備メッセージを各参加者に送信します。各データベース参加者は、トランザクションをローカルで実行し、ローカルの元に戻す/やり直しログを書き込みます。このとき、トランザクションはコミットされません。(元に戻すログには、データベースのロールバックに使用される変更前のデータが記録され、やり直しログには、トランザクションのコミット後にデータファイルを書き込むために使用される変更されたデータが記録されます)

  2. コミットフェーズ:トランザクションマネージャは、パーティシパントの実行エラーまたはタイムアウトメッセージを受信すると、ロールバックメッセージを各パーティシパントに直接送信します。それ以外の場合は、コミットメッセージを送信します。マネージャの命令は、コミットまたはロールバック操作
    実行し、トランザクション処理中に使用されたロックリソースを解放します。注:ロックリソースは最終段階で解放する必要があります。

次の図は、成功と失敗の2つのケースがある2PCの2つのフェーズを示しています。

成功:image.png

失敗:image.png

## 2. TCC補正メカニズム
TCCは実際に使用される補正メカニズムであり、核となる考え方は、各操作に対して、対応する確認および補正(キャンセル)操作を登録する必要があるということです。これは3つの段階に分かれています。

  • 試用段階は主にビジネスシステムの検出とリソースの予約を行うことです
  • 確認フェーズは主にビジネスシステムの確認と送信を行うためのものです。試行フェーズが正常に実行されて確認フェーズが開始されると、デフォルトの確認フェーズにエラーは発生しません。つまり、Tryが成功する限り、Confirmも成功する必要があります。
  • キャンセルフェーズは主に、ビジネス実行エラーの状態で実行されたビジネスをキャンセルし、ロールバックして予約済みリソースを解放する必要があります。image.png

例:AがBに送金したい場合、おそらく次のようになります。

我们有一个本地方法,里面依次调用 
1、首先在 Try 阶段,要先调用远程接口把 B和 A的钱给冻结起来。 
2、在 Confirm 阶段,执行远程调用的转账的操作,转账成功进行解冻。 
3、如果第2步执行成功,那么转账成功,如果第二步执行失败,则调用远程冻结接口对应的解冻方法 (Cancel)。 

利点: 2フェーズサブミッションと比較して、ユーザビリティはより強力です

短所:データの一貫性が低下します。TCCはアプリケーションレイヤーの補正メソッドに属しているため、プログラマーは実装時に多くの補正コードを記述する必要があります。シナリオによっては、一部のビジネスプロセスがTCCで適切に定義および処理されない場合があります。

## 3.メッセージの最終整合性
メッセージの最終整合性は業界で最も使用されるべきであり、その核となる考え方は、分散トランザクションをローカルトランザクションに分割して処理することです。次のフローチャートでこれらの詳細の一部を確認できます。image.png

基本的な考え方は次のとおりです。

メッセージプロデューサーは、追加のメッセージテーブルを作成し、メッセージ送信ステータスを記録する必要があります。メッセージテーブルとビジネスデータは1つのトランザクションで送信する必要があります。つまり、データベースに存在する必要があります。次に、メッセージはMQを介してメッセージのコンシューマーに送信されます。メッセージの送信に失敗した場合は、再試行されます。

メッセージコンシューマはこのメッセージを処理し、独自のビジネスロジックを完了する必要があります。このとき、ローカルトランザクション処理が成功した場合は処理が成功したことを示し、処理が失敗した場合は実行を再試行します。これがビジネスの失敗である場合は、ビジネス補償メッセージをプロデューサーに送信して、ロールバックやその他の操作を実行するようプロデューサーに通知できます。

プロデューサーとコンシューマーは定期的にローカルメッセージテーブルをスキャンし、未処理または失敗したメッセージを再度送信します。信頼できる自動調整ロジックがある場合でも、このソリューションは非常に実用的です。

利点:非常に古典的な実装であり、分散トランザクションを回避し、結果整合性を実現します。

短所:メッセージテーブルがビジネスシステムに結合されるパッケージ化されたソリューションがない場合、対処する多くの雑用があります。

元の記事を15件公開 賞賛0件 訪問77件

おすすめ

転載: blog.csdn.net/xrzi2015/article/details/105518978