分散トランザクションとは何ですか? 回答: 大規模な操作はさまざまな小規模な操作で構成されていることを意味します。これらの小さな操作は、異なるサーバーに分散されます。分散トランザクションでは、これらの小さな操作がすべて成功するか、すべて失敗するかを保証する必要があります。本質的に、分散トランザクションは、異なるデータベース間でのデータの一貫性を確保するように設計されています。 分散トランザクションの原因は何ですか? 1 データベースシャーディング データベースの単一テーブル内のデータが数千万に達すると、データベースとテーブルを分割して、元の 1 つのデータベースを複数のデータベースに分割することを検討する必要があります。たとえば、操作がデータベース 01 とデータベース 02 の両方を操作し、データの一貫性を保証する必要がある場合は、分散トランザクションを使用する必要があります。 2 アプリケーションSOA いわゆる SOA はサービス指向ビジネスを意味します。たとえば、電子商取引プラットフォームで注文を行うと、在庫を減算するために在庫サービスが呼び出され、注文データを更新するために注文サービスが呼び出されます。この場合、注文データベースと在庫データベースが関係します。データの一貫性を確保するには、分散トランザクションが必要です。 要約: 実際、上記の 2 つのシナリオは、最終的には複数のデータベースを操作し、データの一貫性を確保して、分散トランザクションを生成することを目的としています。 分散トランザクションソリューション 1. 2フェーズコミット(2PC) XA は、Tuxedo によって提案された分散トランザクション プロトコルです。 XA は、トランザクション マネージャーとローカル リソース マネージャーの 2 つの部分に大まかに分かれています。ローカル リソース マネージャーは、多くの場合、データベースによって実装されます。たとえば、Oracle、MySQL、およびその他のデータベースはすべて XA インターフェイスを実装しており、トランザクション マネージャーはグローバル スケジューラとして各ローカル リソースのコミットとロールバックを担当します。 分散トランザクションを実装する XA の原則は次のとおりです。 要約する 2 フェーズ コミットはアトミック操作を提供するように見えますが、いくつかの欠点があります。
2. 3相コミット(3PC) 3PC は実際には 2PC に基づいて CanCommit ステージを追加します。これは 2PC のバリエーションであり、タイムアウト メカニズムを導入します。トランザクション参加者がコーディネータからのコミット要求を受信できない場合、自動的にローカル コミットが実行され、コーディネータの単一障害点の問題が効果的に解決されます。ただし、パフォーマンスとデータの一貫性の問題は根本的に解決されていません。 3PCはCanCommit、PreCommit、DoCommitの3つの段階に分かれています。 CanCommit ステージ これは 2PC の準備フェーズと非常によく似ています。コーディネーターは参加者にコミット要求を送信し、参加者は送信できる場合は Yes 応答を返し、そうでない場合は No 応答を返します。
事前コミットフェーズ コーディネーターは、参加者の応答に基づいて、トランザクションの PreCommit 操作を実行するかどうかを決定します。応答に応じて、次の 2 つの可能性があります。
doCommitフェーズ このフェーズは実際のトランザクションをコミットするために使用され、次の 2 つの状況に分けることができます。
概略図は以下のとおりです。 要約する 2PC と比較すると、3PC はコーディネータと参加者の両方にタイムアウトを設定しますが、2PC ではコーディネータのみにタイムアウト メカニズムがあります。この最適化により、参加者が独自のタイムアウト メカニズムを持ち、タイムアウト後にリソースを解放するためのローカル コミットを自動的に行うため、参加者がコーディネーター ノードと長時間通信できない場合にリソースを解放できないという問題が解決されます。このメカニズムにより、トランザクション全体のブロック時間と範囲も間接的に削減されます。しかし、データの一貫性の問題はまだ解決されていません。つまり、参加者がPreCommitリクエストを受信して最終指示を待つときに、コーディネーターがこの時点で参加者と正常に通信できない場合、参加者はトランザクションを送信し続け、データの不整合が発生します。 3. 補償取引(TCC) TCC (Try-Confirm-Cancel) は補償取引とも呼ばれます。実際のところ、これは 2PC や 3PC と同様に、分散トランザクションの単なる実装です。これは 3 つの操作に分かれています。
TCC トランザクションの処理フローは 2PC 2 フェーズ コミットの処理フローと似ていますが、2PC は通常 DB レベルであるのに対し、TCC は基本的にアプリケーション レベルの 2PC であり、ビジネス ロジックを通じて実装する必要があります。その利点は、アプリケーション自体がデータベース操作の粒度を定義できるため、ロックの競合と送信スループットが削減されることです。 ただし、これはアプリケーションに非常に影響を及ぼし、ビジネス ロジックの各ブランチで、試行、確認、キャンセルの 3 つの操作を実装する必要があります。 TCC の回路図は次のとおりです。 4. メッセージトランザクション + 最終的な一貫性 いわゆるメッセージ トランザクションは、メッセージ ミドルウェアに基づく 2 フェーズ コミットです。本質的には、ミドルウェアの特別な使用法です。ローカル トランザクションとメッセージ送信を分散トランザクションに配置して、ローカル操作が成功し、外部メッセージ送信が成功するか、または両方が失敗することを保証します。オープンソースの RocketMQ はこの機能をサポートしています。具体的な原則は次のとおりです。 手順は次のとおりです。
メッセージ ミドルウェアに基づく 2 フェーズ コミットは、同時実行性の高いシナリオでよく使用されます。分散トランザクションをメッセージ トランザクション (サービス A のローカル操作 + メッセージの送信) + サービス B のローカル操作に分割します。サービス B の操作はメッセージによって実行されます。メッセージ トランザクションが成功する限り、サービス A は成功し、メッセージが送信される必要があります。このとき、サービス B はローカル操作を実行するためのメッセージを受信します。ローカル操作が失敗した場合、サービス B の操作が成功するまでメッセージは再送信されます。このようにして、A と B の分散トランザクションが偽装されて実現されます。 上記の手順では異常な状況が発生する可能性があり、現在分析中です。
|
<<: エッジコンピューティングはネットワーク攻撃対象領域を拡大させる可能性がある
>>: クラウド2.0時代のクラウドコンピューティング大手間の競争は加速している
フレンドリー リンクを交換するのが容易ではない 10 の状況: 熟練したウェブマスターは、フレンドリ...
数日前、Baidu 検索で突然、一時的なエラーが発生しました。このエラーは長くは続きませんでしたが、...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています1 日には...
Baidu の製品は、ウェブマスターにとって常に無視できない製品でした。数か月前、Baidu は B...
1. コンテンツコンテンツといえば、誰もが迷わずオリジナルと言うのではないでしょうか。皆さんはオリジ...
5月3日、筆者は「ウェブマスターは『百度の重み』に執着するのをやめるべきだ」と題する記事を掲載した。...
多くのウェブマスターが毎日コンピュータの電源を入れて最初にすることは、自分のウェブサイトのエントリ数...
先ほど「SEO最適化作業トラフィックの準備」についてお話しましたが、今日は実装を開始する方法について...
マーケティング理論家がネットワーク マーケティングについてどれほど深く書いても、次の事実を受け入れな...
著者 |ルー・アイフェイDocker は過去 2 年間、論争に満ちてきました。たとえば、昨年末、K8...
古いインフラストラクチャと新しいインフラストラクチャが時間と空間を移動し、新旧の相互作用を生み出しま...
[[389544]]業界の専門家は、クラウド コンピューティング テクノロジーにより、組織が大規模な...
2014年5月25日、IDG Capitalが全額出資し、創業邦が共催した第11回IDGキャンパス起...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています基本的に、...
中国の情報化の発展に伴い、IDC業界は今や発展の黄金期に入っている。オンラインゲーム、情報決済、仮想...