内容:
- 基本的な考え方
- 分散トランザクション理論
- 2PCトランザクションの分散ソリューション(この章)
- 事務のTCC分散ソリューション
- 信頼できる情報源は、業務結果整合性のソリューションを分散します
- 分散トランザクションソリューションを通知するための最善の努力
- 分散トランザクションの包括的なケース分析
3.分散2PCトランザクション・ソリューション(2フェーズ・コミット)
すでにC、TCC、信頼できる情報源結果整合性、最高のための理論に基づいた分散トランザクションの基本的な理論を、学んだように、これらのタイプを通知します。
3.1。2PCは何ですか
2PC即ち、2相コミット、トランザクション全体が二段階プロセス、準備フェーズ(フェーズの準備)であり、位相(commitphase)をコミット、2つの手段二相、Pは、準備フェーズを指すことを、Cは、コミット・フェーズを指します。
例えば:
ジョー・スミスとジョン・ドウ長い時間が全く夕食からの古い友人については、参照、レストランのオーナーは、チケットを支払う必要がありません。この時、ジョー・スミスとジョン・ドウは、現在の状況に文句を言う資金繰りが苦しい不満がある治療に消極的である、そして唯一のAA。ジョー・スミスとジョン・ドウだけが夕食にボスの手配を発券、支払います。しかし、ジョー・スミスとジョン・ドウはけちであるため、 厄介なシーンの形成:
準備段階: ボス張支払要件、ジョー・スミスの支払い。ボスはジョン・ドウの支払い、ジョン・ドウの支払いを求めました。
フェーズコミット: ボスのチケットを、彼らは食事座ってチケットを取得する必要があります。
下に示すように、Oracleなどのリレーショナルデータベース、MySQLサポート二相のコンピュータ部に、コミットプロトコル:
1.準備段階(フェーズを準備): Transaction Managerは、メッセージ、トランザクションを実行するには、ローカルデータベース内の各参加者を用意し、地元アンドゥ/リドゥログを書き込み、この時点でトランザクションを提出しなかった各参加者に送信されました。(アンドゥログデータがロールバックデータベースのため、変更前に記録され、REDOログ・レコード・データは、パネルに提出されたデータファイルを書き込むために、変更されました)
2.(フェーズコミット)の位相を提出し、それは参加者が各参加者に直接ロールバック(ロールバック)メッセージを送信されたメッセージから失敗した場合や、時間の前にトランザクションマネージャが持っていた場合は、そうでない場合は、送信提出(コミット)メッセージ、参加者コミットまたはロールバック操作、およびトランザクション・マネージャを使用して指示に従ってリソースロックトランザクション処理を解放します。注:最終段階でロックリソースを解放する必要があります。
ショー2つの段階2PC下図、サブ2成功と失敗は注意してください。
成功の場合:
失敗:
3.2。ソリューション
3.2.1 XAプログラム
2PC伝統的なプログラムは、Oracleなど、データベースレベルで実装され、MySQLは、標準化されたプロセスモデルとインタフェース規格を開発する必要、産業用ドッキング費の中の不要な統一基準を削減するために、2PCプロトコルをサポートするオープングループについてオープングループの定義分散トランザクション処理モデルのDTP(分散トランザクション処理参照モデル)。
あなたは明確XAその内容やプロセスを与えるために、新規ユーザ登録の統合後は、説明するための例を送信します。
次のように実装プロセスは以下のとおりです。
- アプリケーション(AP)は、2つのユーザーライブラリとライブラリのデータソースとの統合を保持しています。
- アプリケーション(AP)ときに、ユーザ・ポイントとは、リソースのロック、RMはこの時点でトランザクションをコミットしませんでした、TM RM新規ユーザーによるユーザー・ライブラリーに通知し、ユーザーがポイントを追加するためのライブラリRM統合を通知します。
- 長い一方の当事者がトランザクションをロールバックに失敗したように、他のRMによって開始された、ロールバックが完了すると、リソースのロックが解除されるとTMの回答は、実行するために受け取りました。
- TMの回答はファイリングのトランザクションRMの起動、終了したことをコミットし、このすべての時間を、すべての成功を実行するために、受信し、リソースのロックが解除されます。
次のようにDTPのロールモデルが定義されています。
- AP(アプリケーションプログラム):DTPプログラムは、分散トランザクションを使用するようにアプリケーションが、理解されることができます。
- RM(リソース・マネージャ):すなわち、取引参加者が理解されるべきリソースマネージャは、一般的にデータベース・インスタンスを指し、リソースマネージャによって制御されるデータベースは、リソース・マネージャは、トランザクション・ブランチを制御します。
- TM(トランザクションマネージャ):トランザクションを調整し、管理を担当するトランザクションマネージャは、トランザクション・マネージャはグローバルトランザクションは、トランザクションのライフサイクル管理、および様々なRMの調整を制御します。グローバル・トランザクションは、分散トランザクション処理環境で、複数のデータベースは、グローバル・トランザクションのジョブをジョブを完了するために一緒に動作する必要があります。
- TMとRM DTPモデル定義との間のインタフェース仕様の通信はまた、XA 2PCプログラムとして知られているデータベースを実装するためにXAプロトコルに基づいて、データベースにより提供2PCインタフェースプロトコルを理解するための簡単な、XAと呼ばれます。
次のようにこれらの3つの役割の間の相互作用は、次のとおりです。
- TMは、APへのインタフェースをプログラミングするアプリケーションを提供し、APはバックTMおよびロールでトランザクションを提出しました。
- ロールバックなど、開始、終了およびコミットするRM XAインタフェースによってトランザクションミドルウェア、データベースのトランザクションを通知するTM。
要約:
2PCトランザクション全体のプロセスは、3つの役割AP、RM、TMを必要とします。2PC APは、分散トランザクション・アプリケーションの使用を指し、RMがトランザクションのブランチを制御するリソース・マネージャを指す;(TM)全体のグローバル・トランザクションを制御するトランザクションマネージャを指します。
- RMは準備段階で、実際の業務を行いますが、トランザクション、リソースのロックをコミットしません。
- TMは限りRMのいずれかに障害が発生したとして、準備フェーズの応答を実行提出ステージRMを受け入れる、TMは、そうでない場合、TMは、すべてのRMがトランザクションをコミット通知します、すべてのRMのロールバック操作を通知します。提出フェーズが終了するリソースのロックが解除されます。
XAプログラムに関する問題:
あなたは、XAプロトコルをサポートするために、ローカルデータベースを必要とします。
リソースは、ロックが二段、業績不振の終了前にリリースされるまで待つ必要があります。
3.2.2 Seataプログラム
Seataはアリによって開始され、それが分散トランザクションのためのオープンソースのフレームワークである、後でSeataと改名、オープンソースのプロジェクトチームFescarミドルウェア。
従来の2PCの問題は、ミドルウェア、アプリケーション層での作業を完了しているグローバル・トランザクションを駆動するために、リレーショナルデータベースのローカルブランチを調整することにより、その事務にSeataで解決されました。主な利点は、より良い性能で、長時間接続リソースを使用していない、そしてそれは、それが現在のモードAT申し出(すなわち2PC)とTCCモードシーンでマイクロ分散トランザクションサービスが直面する問題を解決するための効率的なビジネス0侵襲的な方法です。分散トランザクションソリューション。
次のようにSeataのデザインのアイデアは、次のとおりです。
で、業務への非侵襲的であるため、非侵襲のビジネス2PCプログラムから開始一つはSeataの設計目標の伝統的な2PC用に基づく進化、および解決の問題は、2PCプログラムが直面しています。
Seataは数含まれている分散トランザクションとして理解されるべきで枝取引のグローバル・トランザクションを。責任はどちらかに成功し、一緒に提出またはロールバック一緒に失敗し、合意の管轄下にグローバル・トランザクション・ブランチ事務を調整することです。また、トランザクションブランチ自体は、通常、ローカル事務のリレーショナルデータベースである図を以下はグローバル・トランザクション・ブランチ取引のグラフです。
従来のモデル2PCと同様、Seata 3つのコンポーネント、分散トランザクション・プロトコル・プロセスを定義します。
- トランザクションコーディネータ(TC):トランザクションコーディネーター、ミドルウェアから独立して、それがグローバル・トランザクション、提出の動作状態を維持し、受信TM命令はグローバル・トランザクションを開始しているロールバック、カルバリの分岐RMとの通信を調整する責任があり、独立した展開の実行を要求しますトランザクションをコミットまたはロールバック。
- トランザクションマネージャ(TM):埋め込みアプリケーションのトランザクション・マネージャー、TMの必要性は、それがグローバル・トランザクションを開くための責任がある、仕事、そして最終的には世界的なTCがコミットまたはロールバックグローバル命令を開始します。
- リソースマネージャ(RM):制御総務支店、支店は、登録、ステータスレポートを担当し、命令トランザクションコーディネータTCを受け、コミットやロールバックドライブブランチ(ローカル)トランザクション。
また取る新規ユーザ登録センド一体型の分散トランザクション処理Seataの例を:
次のように具体的な実施プロセスは以下のとおりです。
- TMの顧客サービスのTCは、グローバル・トランザクションが正常に作成されたグローバル・トランザクションの開放を要求し、グローバルにユニークなXIDを生成します。
- RMは、TCに新しいユーザーのユーザートランザクションサービスの分岐実行ロジックをサービスブランチトランザクションのユーザーを登録し、グローバル・トランザクションに対応するXIDの管轄に含まれています。
- カスタマーサービスブランチは、トランザクションを実行するユーザテーブルにレコードを挿入します。
- リモートコールの統合サービスへの実行ロジック(マイクロサービスコールリンクのコンテキストでXIDを伝搬します)。TCへの分岐トランザクションを登録RM統合サービスは、ブランチは、トランザクションの実行ロジックの統合を高め、グローバルトランザクションに対応するXIDの管轄に含まれています。
- インテグラルサービス実行支店総務、リターンユーザーの実装後に、記録ポイントテーブルにレコードを挿入します。
- カスタマーサービス分岐トランザクションが終了します。
- TCがコミットまたはグローバルXIDをロールバックするためにTMは、解像度を開始します。
- 支配完全XID要求のすべての支店のTCトランザクションのスケジューリングがコミットまたはロールバック。
の伝統的な2PC 2PCとの違いを実感Seata:
アーキテクチャレベルの用語は、伝統的な2PC RMプログラムはデータベース層の上に実際には、RMエッセンスはRMジャーパッケージのSeataを形成XAプロトコルによって達成データベース自体は、アプリケーションのこの側のミドルウェア層として配置されています。
2フェーズ接続をコミット、伝統的な2PCにかかわらず第二相の分解能は、コミットまたはロールバックすることで、フェーズ2の完了が解放されるまで、トランザクションのリソースが維持されなければならないロック。Seataの練習は、フェーズ1は、地元の事務に提出されますので、それは時間フェーズ2ホールドロック、全体的な増加効率を保存します。
私は、読み続けたフォローアップを見ることができ、あなたは良い点賞賛を感じることができ、ご支援ありがとうございました!