[投稿]分散トランザクション形式を選択する方法(Fescar、TCC、SAGA、補償、最終と一致したメッセージに基づいて、

分散トランザクション(Fescar、TCC、最終的に基づくSAGA、報酬、一貫性のあるメッセージの形式を選択する方法

HTTPS:// blog.csdn.net/zhangjunli/article/details/100015236

 



分散トランザクションの様々な形態の
トランザクションの分散が主流フォーム、などのさまざまながあります。

分散トランザクションメッセージ実装
ベースの分散トランザクション補償実装
ベースの分散トランザクションTCC実装
ベースの分散トランザクションSAGA実装
ベースの2PC分散トランザクションの実装が
されているかとの分析で多くの記事ではこれらのフォーム、 "分散トランザクション「のキーワードは、この記事では、どのようにこれらの形態の詳細に入ると、分散トランザクションの形態に応じて、対応するビジネスを選択する方法に焦点を当てていないだろう、対応する記事を検索します。

単一のトランザクションを選択すると?
私たちは、ネットワークの相互作用と協調ストレージIO消費の消費のために必要な時間を短縮すること、他のデータソースと、追加の調整なしのスタンドアロンでのトランザクションので、可能な単一のトランザクション限り使用する必要があり、条件が許すの下で、我々はよく知っていると信じてビジネス、同じ量のデータを変更する場合には、単一のトランザクションは、より高い性能を持っています。

しかし、データベース・サービス・ロジックは、スタンドアロンデータベースまたは性能因子圧力レベル分割データベースので、垂直解像度およびその他の要因を分離するので、単一のデータベースの後、データは次に場合、複数のデータベースに分散データベースの複数の必要なデータ変更を調整し、分散トランザクションを導入する必要があります。

分散トランザクションの多くのモデルは、その後どのように右のビジネスモデルを選択する方法にありますか?以下は、私たちはこれらの分野での使用シナリオ、パフォーマンス、開発コストを分析します。

達成するために、トランザクションベースのメッセージングを選択するときは?
分散トランザクションまたはロールバックするために実装されたトランザクションベースのメッセージを送信すると、他のデータソースからのデータは、当事者によって開始され、変化するビジネスシナリオに従うことを、トランザクションのイニシエータのビジネスニーズにのみ依存します。

たとえば、ビジネスルールがあるとします。順序が成功すると、ユーザーは、いくつかのポイントを追加します。

このルールでは、トランザクションの信者のためのサービストランザクションオリジネータ、経営統合データソースの注文データソース管理サービス。

この手順から見ることができ、トランザクションメッセージキューに基づいて、次の操作が実装さ:

注文サービスオーダー、作成されたローカル・トランザクションに提出された
アナウンスで注文サービス
メッセージを受信した後、統合サービスプラスポイント
事業開発努力は大きくないが、我々はそのプロセス全体を見ることができますが、比較的簡単です。

オーダーサービスを書かれたのロジックを作成するために、
ロジックの統合を増やすに統合サービスを書くの
トランザクション処理の形はシンプル、小さなパフォーマンス・オーバーヘッドであることがわかります、イニシエータとフォロワーの間のトラフィックスパイクやディップがキューを埋めるために使用することができ、同時にビジネス開発基本的にはスタンドアローンの取引量の間には差が、逆は、書き込み、ビジネス・ロジック・プロセスに必要としません。したがって、トランザクションのメッセージキューの実装に基づいてフォームの当社のスタンドアローントランザクション最優先の使用に加えています。

補償を達成するためにトランザクションを使用する場合は?
しかし、取引メッセージの認識に基づいて、次のシナリオなど、すべてのビジネスシナリオを解決することはできません:注文が完了すると、ユーザーが同時に現金を控除します。

ここでは、トランザクションサービスの管理、注文店のイニシエータはあるが、全体の取引のためではなく、ユーザーが現金で十分な取引を完了するためのお金、この情報管理サービスを持っていることを確実にするためとしても、注文サービスへの決定を提出するだけか。ここでは、トランザクションベースの報酬の導入を達成することができ、次のように、プロセスは次のとおりです。

注文データを作成するが、それは、ローカル・トランザクション・コミットではないでしょう
相当の金額控除するサービスのリモート呼び出しに現金を送るためのサービスを
、上記の手順が成功した後、注文ストアをコミットトランザクションを
、このプロセスの成功よりは正常で、異常なプロセスは、追加の場合はロールバックする必要があります追加するサービスの前に現金の額を控除するリモート呼び出しを送信してください。

ワークロードの開発がよりありながら、実装トランザクションベースのメッセージキューよりも複雑なプロセスを処理するには:

ために作成された注文サービスロジック書かれた
金額を控除して書き込みロジック現金サービスへの
サービスの見返りに、論理現金報酬を書くには
、見ることができるメッセージベースの分散トランザクションの実現に関して、トランザクション処理はより複雑と追加開発関連事業を必要としロールバック方法は、また、サービス間のトラフィック負荷シフト機能を失いました。しかし、唯一ただ、もう少し複雑メッセージングトランザクションベース、そうでない場合は結果整合性のトランザクション・キューベースのメッセージングを介して、あなたは報酬のトランザクションベースのフォームの使用を優先することができます。

(余談:アリGTSも補償で達成されますが、自動コード生成のための補償は、一切業務は、アプリケーション・データ・ソースを引き継ぐグローバル・トランザクションの状態で業務記録の禁止を変更すると同時に、介入しないように。)

TCCが実装トランザクションを使用する場合は
注文が完了すると、ユーザが同時に控除の現金が、取引が完了していない、それは、キャンセルされていない。このよう次のシナリオとして、要件のすべてを実装することができません、まだフォームベースの報酬取引を私たちは、顧客が少ないお金を見ることができないことができます。

その後、我々は、TCCを導入することができ、次のように、そのプロセスは次のとおりです。

オーダサービスは、発注作成
、顧客の現金を凍結する、リモートコール・ツー・現金サービスを送り、注文サービスを
オーダーサービスデータ提出
オーダサービスをリモートコール・ツー・現金サービス、顧客の凍結現金のネットを送っ
正常に処理が完了しているよりも、それが異常なプロセスであれば、あなたが送信する必要があります、現金へのリモート・サービス呼び出し要求は、凍結した金額を撤回します。

ワークロードの開発が多い一方で、より多くのトランザクションベースの報酬実装プロセスよりも複雑なプロセスには:

論理的な順序サービス書かれた順序を作成し
、論理書かれた現金サービス凍結現金
現金サービスロジックの書き込み現金純
現金サービスは現金書き込みロジックを解凍
TCCは、実際にすべてのビジネスシナリオを処理することができる最も複雑な場合、ですが、何でもパフォーマンスを考慮し、または開発の複雑さを考慮して、我々はこのような情勢を回避しようとしてください。

ときに達成するためにSAGA事務を使用するには?
SAGAは、非同期と見られて補償トランザクション・キューを使用して実装することができます。

リクエストが送信された、またはそれ以降の注意を払うクラスの通知を確認してください:それは、のようなすぐに開始剤の最終状態のシーンに復帰することなく、業務に適用されます。

次のようにSAGA書き換え処理で補正トランザクションのシーンは次のとおりです。

オーダサービスは、最終的なステータスが不明オーダーレコードで作成し、トランザクションコミットする
控除のサービスに必要な現金額を、トランザクションの提出
順序サービス注文状況の更新が成功し、トランザクションをコミットし
、その後、現金サービスから控除額が失敗した場合、より多くのプロセスの成功より最後のステップは失敗として注文状況サービスの注文を更新します。

以下を含む、取引を補償よりも、もう少し自分のビジネスをコーディング:

注文サービスは、論理の初期オーダー作成し
た論理の成功のためのサービス会社の受注
オーダーを確認するためのサービスは、論理障害が発生した
現金論理の正味キャッシュ・サービス
論理リターン現金への現金サービスの報酬を
が、パフォーマンス上の利点が補償に関してそこにあるフォームを重要、ローカルのすべて子業務の実行中に、ロック時間を短縮するための呼び出しを実行するために、すべてのサブトランザクションを待たずに、このパフォーマンス上の利点は、ビジネスでより長いトランザクション処理でより明白です。一方、負荷シフト効果と通信キューの使用。

これは、したがって、戻りイニシエータ最終的な結果を全く同期を実行しないための適切な形態、それを補償することができる、高パフォーマンス要件、余分なコーディングビジネスシナリオを気にしません。

しかし、もちろんSAGAも少しTCCに似になるように変更することができ、リソースの予約フォームすることができます。

2PCトランザクション
参加者少なく時間が単一のローカル業務を実行するために適しており、高可用性シナリオの参加者自身が、それ以外の場合は、深刻なパフォーマンスの低下につながる可能性があります。

ない取引がのホットな話題を形成することができるようになります
、私たちが見ることができるの分析を、すべての問題を解決することはできません取引形態があり、我々は特定のビジネスシナリオに基づいて、取引の権利形式を選択する必要があります。時には、さらに良くするために、様々な形態を混ぜて前述したように、取引先の注文を完了する必要があり、統合、財布ミックスシーン:バランス財布に頼る必要があるための成功かどうかは、しかし、ポイントの数に依存しません、したがって、トランザクションに基づく取引形態に基づいて、メッセージ・積分補償を形成するために、より良い性能、符号化された形式のより小さい量を得るために、お金を控除の成功を確実にするために混合することができます。

しかし、取引上の焦点の多くは、このようなTCC単一のフレームワーク、単一信頼できるソースのフレームワーク、SAGA単一のフレームワークなど、特定の単一の観点の枠組みを形成するがある、彼らは簡単に以下の質問につながる、独立しています:

現在、打撃工具は、工具はまた、コードの読み取り処理などの他のテストの導入を伴うため、トランザクションの一種類のみを使用して初期フレームワークので、ので、すべての問題を達成するために、低性能やエレガント十分に得られ、釘のように見られる
別の原因管理フレームワークの形態は、矛盾することができるようTCCやその他のトランザクションベースのメッセージングフレームワークよく統合されていないためのフレームワークとして、良好な協調をもたらすことができません。
ソリューション
問題を解決するためには、EasyTransactionこのSpringベースの分散トランザクションのフレームワークは、2PCトランザクションフォームを除く上記のすべてを達成するために、前述した、および使用上の問題に、最適なソリューションを統一されたインタフェースを提供します。次のようにその主な機能は以下のとおりです。

取引形態、取得トランザクションのすべてのタイプのフレームを複数含むフレーム
より取引形態は混合することができる
フレームのみ書き込み付加サービスデータベースのために消費電力などの機能を有効にする場合、ラインの性能は25バイト
とすることができます大幅に事業開発の作業負荷軽減選挙フレームワーク(注文処理障害への呼び出しを含む)冪等の実現、
サービスコードが侵入せずに完全にすることができ
サポートネストされたトランザクション
の追加の調整を展開することなく、サービスの連携異なるAPPの自己開始されたトランザクション
のトランザクションIDの分散ビジネスはAPPIDは、様々なビジネス分散トランザクションの実装の監視を容易にするために、ID、事業の種類に関連付けることができ
、あなたが興味を持ってETをペアならば、あなたは詳細を表示することができますし、https://github.com/QNJR-GROUP/EasyTransaction例に、これはもはやありません洞察

まとめた
さまざまなビジネスシナリオは、次の順序でトランザクションタイプの選択に対応する個別勧告を可能にする条件下で、トランザクションの異なる形式を導入するために必要とされなければなりません。

スタンドアローントランザクション「トランザクションベースのメッセージ」トランザクション・ベースの報酬「TCCは、トランザクション
による単一トランザクションの過程で明らかにフロントエンドのビジネスの相互作用が変化、個人的なアドバイスを満たすために、フォームのSAGAの必要性の問題に長くなって、そこに複数のサブトランザクションであり、をベースとすることはできません取引形態のメッセージを使用します。
----------------
免責事項:この記事は元の記事CSDNのブロガーが「zhangjunli」で、CC 4.0 BY-SAの著作権契約書に従って、元のソースのリンクと、この文を添付してください、再現。 。
オリジナルリンクします。https://blog.csdn.net/zhangjunli/article/details/100015236

おすすめ

転載: www.cnblogs.com/jinanxiaolaohu/p/12091767.html