分散トランザクションにおける3つの一般的なソリューション

分散トランザクションにおける3つの一般的なソリューション

[[320529]]

目次

  • 1. 分散トランザクションへの序章
  • 2. 柔軟なトランザクションソリューションアーキテクチャ
  • 1. 信頼性の高いメッセージに基づく最終的な一貫性ソリューションの概要
  • (II)TCC取引補償ソリューション
  • (III)最善の努力による通知
  • 3. 信頼性の高いメッセージに基づく最終的な一貫性ソリューションの詳細な説明
  • (I)メッセージ送信の一貫性
  • (II)メッセージの一貫性を確保するための回避策
  • (III)従来のMQメッセージ処理フローと特徴
  • (IV) ビジネスインターフェースのメッセージ繰り返しと冪等性設計
  • (V) ローカルメッセージサービスソリューション
  • (VI) 独立メッセージサービスソリューション
  • (VII) メッセージサービスサブシステムの設計と実装

1. 分散トランザクションへの序章

トランザクション: トランザクションは、一連の操作で構成される信頼性の高い独立した作業単位です。トランザクションには、原子性、一貫性、独立性、永続性という ACID プロパティがあります。

ローカル トランザクション: トランザクションがリソース マネージャーによってローカルに管理される場合、そのトランザクションはローカル トランザクションと呼ばれます。ローカル トランザクションの利点は、厳密な ACID プロパティをサポートし、効率的で信頼性が高く、状態をリソース マネージャー内でのみ維持でき、アプリケーション プログラミング モデルがシンプルであることです。ただし、ローカル トランザクションには分散トランザクションの処理機能がなく、分離の最小単位はリソース マネージャーによって制限されます。

グローバル トランザクション: トランザクションがグローバル トランザクション マネージャーによってグローバルに管理される場合、そのトランザクションはグローバル トランザクションになります。トランザクション マネージャーは、グローバル トランザクションの状態と参加リソースを管理し、リソースの一貫したコミットとロールバックを調整する役割を担います。

TX プロトコル: アプリケーションまたはアプリケーション サーバーとトランザクション マネージャー間のインターフェイス。

XA プロトコル: グローバル トランザクション マネージャーとリソース マネージャー間のインターフェイス。 XA は、X/Open 組織によって提案された分散トランザクション仕様です。この仕様は主に、グローバル トランザクション マネージャーとローカル リソース マネージャー間のインターフェイスを定義します。主流のデータベース製品はすべて XA インターフェースを実装しています。 XA インターフェイスは、トランザクション マネージャーと複数のリソース マネージャー間の通信ブリッジとして機能する双方向システム インターフェイスです。 XA が必要な理由は、分散システムでは理論上 2 台のマシンが一貫した状態に到達できないため、調整のために単一のポイントが導入されるためです。グローバル トランザクション マネージャーによって管理および調整されるトランザクションは、複数のリソースとプロセスにまたがる場合があります。グローバル トランザクション マネージャーは通常、XA 2 フェーズ プロトコルを使用してデータベースと対話します。

AP: アプリケーション。DTP (Data Tools Platform) を使用するプログラムとして理解できます。

RM: リソース マネージャー。DBMS またはメッセージ サーバー管理システムになります。アプリケーションはリソース マネージャーを通じてリソースを制御し、リソースは XA によって定義されたインターフェイスを実装する必要があります。リソース マネージャーは、実際のリソースの制御と管理を担当します。

TM: トランザクション マネージャー。トランザクションの調整と管理、AP へのプログラミング インターフェイスの提供、リソース マネージャーの管理を担当します。トランザクション マネージャーは、グローバル トランザクションを制御し、トランザクションのライフサイクルを管理し、リソースを調整します。

2 フェーズ コミット プロトコル: グローバル トランザクションで複数のリソースを調整するために XA が使用するメカニズム。一貫性の問題を解決するために、TM と RM の間に 2 フェーズ コミット ソリューションが採用されています。 2 ノード送信では、コーディネーター (TM) がすべての参加ノード (RM) の操作結果を制御し、これらのノードに最終送信を送信するかどうかを指示する必要があります。 2 フェーズ コミットの制限は、プロトコル コスト、準備フェーズの永続コスト、グローバル トランザクション状態の永続コスト、複数の潜在的な障害ポイントによって生じる脆弱性、および一連の分離および回復の問題を引き起こす準備後および送信前の障害です。

データ一貫性理論

BASE 理論: BA は、パーティション障害をサポートする基本的なビジネス可用性を指します。 S は柔軟な状態を表し、短期間の同期が許可されることを意味します。 E は最終的な一貫性を意味します。データは最終的には一貫性がありますが、リアルタイムでは一貫性がありません。原子性と耐久性は基本的に保証されなければなりません。可用性、パフォーマンス、およびサービスの低下を防ぐために、一貫性と分離の要件は削減することしかできません。

CAP 定理: 共有データ システムの場合、同時に存在できる CAP は最大 2 つです。いずれの 2 つにも、適用可能なシナリオがそれぞれあります。実際のビジネス システムは通常、ACID と CAP が混在しています。分散システムで最も重要なことは、高度に抽象化された絶対的なシステム特性を追求するのではなく、ビジネス ニーズを満たすことです。 C は一貫性を意味し、すべてのユーザーが同じデータを見ることができることを意味します。 A は可用性を表し、データの利用可能なコピーが常に見つかることを意味します。 P はパーティション耐性を表し、ネットワークの中断などの障害に耐えることができます。

柔軟なトランザクションにおけるサービス モデル

クエリ可能な操作: サービス操作には、グローバルに一意の識別子と、操作の一意で確定的な時間があります。

べき等操作: 繰り返し呼び出しによって生成されるビジネス結果は、単一の呼び出しによって生成される結果と同じです。 1 つ目は、業務処理を通じてべき等性を実現すること、2 つ目は、システムがすべてのリクエストと処理結果をキャッシュし、最後に、重複したリクエストを検出した後、以前の処理結果を自動的に返すことです。

TCC 操作:

試行フェーズ: ビジネス操作を実行し、すべてのビジネス チェックを完了し、一貫性を実現しようとします。準分離を実現するために必要なビジネスリソースを確保します。

確認フェーズ: チェックなしで実際にビジネスを実行します。試行フェーズで予約されたビジネス リソースのみが使用されます。確認操作も冪等性を満たす必要があります。

キャンセル フェーズ: ビジネスの実行をキャンセルし、試行フェーズで予約されたビジネス リソースを解放します。キャンセル操作は冪等性を満たす必要があります。

TCC と 2PC (2 フェーズ コミット) プロトコルの違い

TCC は、リソース層ではなくビジネス サービス層に配置されます。 TCC には個別の準備段階はありません。 Try 操作には、リソース操作と準備機能の両方があります。 TCC の Try 操作では、ビジネス リソースを柔軟に選択し、粒度をロックできます。 TCC の開発コストは 2PC よりも高くなります。実際、TCC も 2 段階操作ですが、TCC は 2PC 操作と同等ではありません。

補償可能な操作

実行フェーズ: 業務処理が実際に実行され、業務処理の結果が外部から見えるようになります。

補償フェーズ: 正のビジネス操作のビジネス結果を相殺または部分的にキャンセルし、補償操作は冪等性を満たします。

制約: 補償業務はビジネスの観点から実行可能であり、ビジネス実行結果の分離不足や補償の不完全さによって生じるリスクとコストは制御可能です。

実際、TCC の確認操作とキャンセル操作は補償操作と見なすことができます。

2. 柔軟なトランザクションソリューションアーキテクチャ

電子商取引分野などのインターネット シナリオでは、従来のトランザクションによってデータベースのパフォーマンスと処理機能にボトルネックが生じています。柔軟なトランザクションには、基本的な可用性と柔軟な状態という 2 つの特性があります。いわゆる基本的な可用性とは、分散システムに障害が発生した場合に、ある程度の可用性の損失が許容されることを意味します。柔軟な状態とは、データベースの読み取り/書き込み分離のマスター/スレーブ同期遅延など、システム全体の可用性に影響を与えない中間状態をシステムが持つことが許可されていることを意味します。柔軟なトランザクションの一貫性は、最終的な一貫性を指します。

1. 信頼性の高いメッセージに基づく最終的な一貫性ソリューションの概要

実装: ビジネス トランザクションが送信される前に、ビジネス処理サービスはリアルタイム メッセージング サービスにメッセージの送信を要求します。リアルタイム メッセージング サービスでは、メッセージを実際に送信するのではなく、メッセージ データを記録するだけです。ビジネス トランザクションが送信されると、ビジネス処理サービスはリアルタイム メッセージング サービスへの送信を確認します。リアルタイム メッセージング サービスは、送信指示の確認を受け取った後にのみ、実際にメッセージを送信します。

メッセージ: ビジネス トランザクションがロールバックされた後、ビジネス処理サービスはリアルタイム メッセージング サービスへの送信をキャンセルします。メッセージ送信状態確認システムは、送信またはロールバックが確認できていないメッセージを定期的に検出し、業務処理サービスにメッセージの状態を問い合わせます。ビジネス処理サービスは、メッセージ ID またはメッセージの内容に基づいて、メッセージが有効かどうかを確認します。パッシブ側の処理結果は、アクティブ側の処理結果に影響を与えません。受動側のメッセージ処理操作はべき等操作です。

コスト: 信頼性の高いメッセージ システムを構築するためのコスト。メッセージを送信するには 2 つの要求が必要であり、ビジネス処理サービスではメッセージ ステータス クエリ インターフェイスを実装する必要があります。

利点: メッセージ データは独立して保存および拡張されるため、ビジネス システムとメッセージ システム間の結合が減少します。最終的な一貫性の時間に非常に敏感であるため、ビジネスの受動的な側面の実装コストが削減されます。 JMS 標準を実装するすべての MQ ミドルウェアと互換性があり、ビジネス データの信頼性を確保しながらビジネスの究極の一貫性を確保し、理想的には準リアルタイムの一貫性を実現します。

(II)TCC取引補償ソリューション

実装: 完全なビジネス アクティビティは、メイン ビジネス サービスといくつかの従属ビジネス サービスで構成されます。メインビジネスサービスは、ビジネスアクティビティ全体の開始と完了を担当します。ビジネスサービスからTCC型のビジネスオペレーションを提供します。ビジネス アクティビティ マネージャーは、ビジネス アクティビティの一貫性を制御します。ビジネスアクティビティの操作を登録し、ビジネスアクティビティが送信されると、すべての TCC タイプの操作の確認操作を確認します。ビジネス アクティビティがキャンセルされると、すべての TCC タイプ操作のキャンセル操作を呼び出します。

コスト: TCC 操作の実装には、ビジネス活動の終了時に行う確認操作とキャンセル操作の実行コストなど、コストが高くなります。事業活動のコストを記録します。

使用範囲: 強力な分離性と厳格な一貫性要件を備えたビジネス活動。口座処理や手数料の請求など、実行時間が短い業務に適しています。

特徴: 特定のサービスフレームワークと結合されておらず、リソース層ではなくビジネスサービス層に配置されているため、ビジネスリソースのロック粒度を柔軟に選択できます。 TCC では、各サービス リソースはローカル トランザクションで操作されます。データは短時間ロックされ、スケーラビリティに優れています。独立して展開される SOA サービス向けに設計されていると言えます。

(III)最善の努力による通知

実装: ビジネス アクティビティのアクティブ側は、処理を完了した後、ビジネス アクティビティのパッシブ側にメッセージを送信し、メッセージが失われることがあります。ビジネス アクティビティの受動的な側は、タイミング戦略に従ってビジネス アクティビティの能動的な側に問い合わせて、失われたビジネス メッセージを回復します。

制約: パッシブ側の処理結果は、アクティブ側の処理結果に影響を与えません。

コスト: ビジネスクエリおよび校正システムの構築にかかるコスト。

適用範囲: ビジネスの最終的な一貫性に対する時間的感度が低い。企業間をまたいだビジネス活動。

機能: ビジネス処理が完了すると、ビジネス アクティビティのアクティブ パーティは、ビジネス アクティビティのパッシブ パーティに通知メッセージを送信します。アクティブなパーティは、時間階層化された通知ルールを設定し、通知が失敗した後にルールに従って通知を繰り返すことができます。 N 回の通知の後は、それ以上の通知は行われません。アクティブ側は、オンデマンド校正クエリ用の校正クエリ インターフェイスをパッシブ側に提供し、ユーザーが失われたビジネス メッセージを回復できるようにします。

適用範囲:銀行通知、加盟店通知。

3. 信頼性の高いメッセージに基づく最終的な一貫性ソリューションの詳細な説明

(I)メッセージ送信の一貫性

分散システムにおけるメッセージ ミドルウェアの中心的な役割は、非同期通信、アプリケーションの分離、および同時バッファリング (トラフィック ピーク シェービングとも呼ばれます) です。分散環境では、ネットワークを介して通信を実行する必要があり、データ転送に不確実性が生じます。これが CAP 理論におけるパーティション フォールト トレランスです。

メッセージ送信の一貫性とは、メッセージを生成するビジネス アクションがメッセージの送信と一貫していることを意味します。つまり、ビジネス操作が成功した場合、このビジネス操作によって生成されたメッセージは送信される必要があり、そうでない場合は失われます。

処理方法1

  1. パブリックvoid completeOrderService() {
  2. // 注文を処理する
  3. 注文.process();
  4. //会計元の伝票メッセージを送信する
  5. パイプ.sendAccountingVouchetMessage();
  6. }

上記の状況では、業務処理が成功した場合、実行されたメッセージが送信される前にアプリケーションが失敗し、メッセージが送信できず、メッセージが失われ、受注システムと会計システム間でデータの不整合が発生します。メッセージシステムやネットワークに異常がある場合、メッセージを送信できず、データの不整合が発生する可能性があります。

解決策2

  1. パブリックvoid completeOrderService() {
  2. //会計元の伝票メッセージを送信する
  3. パイプ.sendAccountingVouchetMessage();
  4. // 注文を処理する
  5. 注文.process();
  6. }

上記の 2 つの操作の順序が逆になると、状況はさらに制御不能になります。メッセージの送信後に業務注文が失敗し、注文システムと業務システム間でデータの不整合が発生する可能性があります。では、JMS 標準の XA プロトコルは送信の一貫性を保証できるのでしょうか?

JMS プロトコル標準 API には、XA で始まる多くのインターフェイスがありますが、これらは実際には、前述の XA プロトコル (2 フェーズ コミット プロトコルに基づく) をサポートするグローバル トランザクション インターフェイスです。

  1. XAConnection.クラス
  2. XAConnectionFactory.クラス
  3. XAQueueConnection.クラス
  4. XAQueueConnectionFactory.クラス
  5. XASession.クラス
  6. XATopicConnection.クラス
  7. XATopicConnectionFactory.クラス
  8. XATopicSession.クラス

JMS の XA シリーズのインターフェースは、分散トランザクションのサポートを提供できます。ただし、XA 分散トランザクションを使用すると、多くの制限が生じます。

ビジネス オペレーションに必要なリソースは XA プロトコルをサポートする必要がありますが、すべてのリソースが XA プロトコルをサポートしているわけではありません。

2 フェーズ コミット プロトコルのコスト。

グローバル ロックなどの永続コスト、高コスト、低パフォーマンスなどの DTP モデルの制限。

XA プロトコルの使用は、柔軟なトランザクションの本来の目的に反します。

(II)メッセージの一貫性を確保するための回避策

メッセージの送信: アクティブなパーティがアプリケーションを通じてメッセージをメッセージ ミドルウェアに送信し、メッセージのステータスが「確認待ち」としてマークされます。

メッセージ ミドルウェアは、メッセージを受信した後、メッセージをメッセージ ストレージに保存しますが、受動側のメッセージ配信には影響しません。

メッセージ ミドルウェアはメッセージの永続化結果を返し、アクティブ パーティは返された結果に基づいてビジネス操作を実行する方法を決定します。

失敗: 業務処理を放棄して終了し、必要に応じて処理結果を上位層に返します。

成功: ビジネス操作処理を実行します。

ビジネス操作が完了すると、ビジネス操作の結果がメッセージミドルウェアに返されます。

メッセージ ミドルウェアは、ビジネス操作構造を受信すると、ビジネス結果に応じてそれを処理します。

失敗: メッセージ ストアからメッセージを削除しています。終了しています。

成功: メッセージ ストレージ内のメッセージ ステータスを「保留中」に更新し、メッセージ配信を実行します。

前の肯定的なプロセスが成功すると、メッセージはパッシブ アプリケーションに配信されます。

ただし、上記の処理フローでは、どのリンクでも問題が発生する可能性があります。

(III)従来のMQメッセージ処理フローと特徴

従来の MQ キュー処理ではメッセージの一貫性を実現できません。

メッセージ配信の本質はメッセージの消費であり、これは洗練することができます。

(IV) ビジネスインターフェースのメッセージ繰り返しと冪等性設計

未確認メッセージは、ルールに従って再配信することによって処理されます。上記のプロセスでは、メッセージを繰り返し送信すると、ビジネス処理インターフェイスが繰り返し呼び出されます。メッセージ消費プロセス中にメッセージが繰り返し送信される主な理由は、コンシューマーがメッセージを正常に受信して処理した後、メッセージ ミドルウェアが配信ステータスを時間内に更新しないことです。メッセージを繰り返し送信することが許可されている場合、コンシューマーはビジネス インターフェイスのべき等設計を実装する必要があります。

(V) ローカルメッセージサービスソリューション

実装のアイデア:

アクティブアプリケーションシステムは、業務オペレーションを通じて業務データの操作を完了します。メッセージを送信する準備をするとき、メッセージのコピーの 1 つをアクティブ アプリケーション システムに保存し、別のコピーをリアルタイム メッセージング サービスに送信します。

パッシブ アプリケーション システムは、リアルタイム メッセージング システム内のメッセージを監視します。パッシブ アプリケーションがメッセージ処理を完了すると、アクティブ アプリケーション インターフェイスを呼び出してメッセージ確認を完了します。

アクティブ側はメッセージの確認を受け取った後、メッセージ データを削除します。

メッセージ クエリ サービスが、メッセージを受信して​​から指定された時間内に ACK 確認メッセージが返されないことを検出した場合、メッセージ回復システムはメッセージを再送信します。

アドバンテージ:

メッセージの適時性は比較的高い

アプリケーション設計の観点から、メッセージ データの信頼性が実現されます。メッセージ データの信頼性は MQ ミドルウェアに依存しないため、MQ ミドルウェアの特性への依存が弱まります。

このソリューションは軽量で実装が簡単です。

欠点:

特定のビジネス シナリオにバインドされ、強い結合があり、共有できません。

メッセージ データはビジネス データと同期され、ビジネス システムのリソースを占有します。

ビジネス システムでリレーショナル データベースを使用する場合、メッセージ サービスのパフォーマンスはリレーショナル データベースの同時実行パフォーマンスによって制限されます。

(VI) 独立メッセージサービスソリューション

実装のアイデア:

事前送信メッセージ: アクティブ アプリケーション システムはメッセージを事前送信し、そのメッセージはメッセージ サービス サブシステムによって保存されます。ストレージに障害が発生すると、業務を遂行できなくなります。返却保管が成功したら業務操作を実行します。

ビジネス オペレーションの実行: ビジネス オペレーションが正常に実行された場合、ビジネス オペレーションの正常な実行のステータスがメッセージ サービス サブシステムに送信されます。メッセージ サービス サブシステムは、メッセージ フラグを「送信可能」状態に変更します。

リアルタイム メッセージング サービスにメッセージを送信: メッセージのステータスが変更されると、メッセージはすぐにリアルタイム メッセージング サービスに送信されます。次に、メッセージはメッセージ サービスのコンシューマーによって監視され、消費されます。

メッセージ ステータス サブシステム: スケジュールされたタスク システムに相当します。メッセージ サービス サブシステム内でタイムアウトが確認されたメッセージを定期的に検索し、また、アクティブなアプリケーション システム内で正常に処理されなかったタスクを定期的に検索し、対応する処理を実行します。

メッセージの消費: メッセージが消費されると、ACK がリアルタイム メッセージング サービスに送信され、その後、リアルタイム メッセージング サービスによってメッセージが削除されます。同時に、メッセージ サービス サブシステムが呼び出され、メッセージが「消費済み」状態に変更されます。

メッセージ回復サブシステム: コンシューマーがメッセージを返すときに、ネットワークの中断やその他の理由によりメッセージが時間内に確認されない場合、メッセージ回復サブシステムは、メッセージ サービス サブシステムで確認されていないメッセージを定期的に見つける必要があります。パッシブ アプリケーション システムのインターフェイスはべき等であるため、未確認メッセージをリアルタイム メッセージング サービスに入れてやり直します。

アドバンテージ:

メッセージ サービスは独立して展開、保守、拡張されます。

メッセージ ストレージは、必要に応じてさまざまなデータベースと統合できます。

メッセージ サービスは同じ使用シナリオで使用できるため、重複するサービスを構築するコストが削減されます。

分散サービス アプリケーションの設計と開発の観点から、メッセージ データの信頼性が実現されます。メッセージ データの信頼性は MQ ミドルウェアに依存しないため、MQ ミドルウェアの特性への依存が弱まります。

ビジネス システムとメッセージ システム間の結合が軽減され、システムの拡張と保守に役立ちます。

欠点:

メッセージを送信するには 2 つのリクエストが必要です。

アクティブアプリケーションシステムでは、業務運用状況の検証および照会インターフェースを実装する必要があります。

(VII) メッセージサービスサブシステムの設計と実装

サンプルメッセージデータテーブル:

<<:  Kafka はなぜこんなに速いのでしょうか?

>>:  Kata Containersの創設者が安全なコンテナ技術を紹介します

推薦する

電子商取引のショッピングガイドウェブサイトは見込みが限られていると言われている。ほとんどの商品は淘宝網から来ている。

ショッピングガイドウェブサイト、誰のカーニバルですか?ショッピングガイドウェブサイトの運営者は、自分...

vietnix: ベトナムの VPS は 80% オフ、年間 113 元、100M 帯域幅、無制限トラフィック

ベトナムのサーバー販売業者vietnix(~)は現在、ベトナムの仮想ホストとベトナムのVPSを特別低...

百度はアルゴリズムを更新し、データ収集法に違反する5種類のウェブサイトの取り締まりに重点を置く

【はじめに】昨日、小湘宇文はA5に「百度サーバー問題、ウェブサイトのスナップショットは実はオンライン...

電子商取引時代のオンラインプロモーションにおいて中小企業が勝利するにはどうすればいいのでしょうか?

1998年の「電子商取引の年」以来、電子商取引は世界中で急速に発展してきました。世界各国は、この新し...

コンテンツの最適化は、エンタープライズWebサイトのコンテンツマーケティングの鍵です。

ウェブサイトのマーケティングでは、コンテンツの最適化が鍵となり、さまざまなマーケティング手法の強力な...

SEM - 独自のブランドワードを配置する必要がありますか?

Zeng Penghui の SEM ブログを読んでいる友人が今朝、SEM について私とチャットしま...

コスト効率の高い米国VPS、優れたネットワークを備えた安価でコスト効率の高い米国VPS

コスト効率の高いアメリカの VPS、皆さんが言いたいのは、コスト効率の高いアメリカの VPS、または...

Qihoo 360 は国内検索エンジン市場における Baidu の優位性に挑戦できるか?

昨年、大いに盛り上がった第3四半期の戦争は、人々に国内検索エンジンに対する新たな認識を与えました。Q...

5年間ウェブサイトを運営してきた老ウェブマスターの悲しい経験

私がウェブマスターになってからちょうど5年が経ちました。この5年間、ウェブサイトを運営する上で多くの...

SEO 最適化を学ぶにはどうすればいいですか?

最近、弟をseowhyにトレーニングに行かせました。私の親友がそれを知ったとき、彼はとても困惑してい...

5月9日のBaiduアップデート問題の概要

5月以降、ほとんどのウェブサイトで大幅な調整が行われていますが、最も顕著なのはキーワードスナップショ...

両方の長所を兼ね備えたハイブリッドクラウド

パンデミックが人々に何かを教えてくれたとすれば、それは、これから何が起こるかは決して分からないという...

Baidu のアルゴリズムはウェブサイトのユーザーエクスペリエンスをどのように判断するのでしょうか?

私たちの SEO の観点からすると、最高の SEO とは優れたユーザー エクスペリエンスを提供するこ...

Yunwu Internet VPS の簡単なレビュー - 1g メモリ/2g スワップ/64g ハードディスク/50m 無制限

HostCat のウェブマスター、つまり私が Yunwu Internet のボスと初めて知り合った...

Google がハミングバード アルゴリズムを発表: 外国貿易ウェブサイトは春を迎えるのか、それとも厳しい冬を迎えるのか?

9月26日、Googleはハミングバードアルゴリズムを発表しました。これは、検索語句の90%に影響を...