導入ビジネス量が増加し続けると、モノリシックアーキテクチャは徐々に膨大なトラフィックに耐えられなくなります。このとき、サービスを分割し、データベースとテーブルを別々のライブラリとテーブルに分割する必要があります。発注システムを例にとると、発注センター、ユーザーセンター、在庫センターなどがあります。これによって生じる問題は、業務が互いに分離していることです。各企業は独自のデータベースを維持しており、データ交換は RPC 呼び出しを通じてのみ行うことができます。 ユーザーが再度注文を行う場合、注文ライブラリ、在庫ライブラリ、ユーザーライブラリ アカウントに対して同時に操作を実行する必要があります。ただし、現時点ではローカルデータの一貫性のみを保証でき、他のサービスを呼び出す操作が成功するかどうかは保証できません。したがって、注文プロセス全体のデータの一貫性を確保するには、分散トランザクションが必要になります。 分散トランザクションソリューションの概要分散トランザクションを実装するためのソリューションとしては、XA プロトコルに基づく 2PC や 3PC、ビジネス層に基づく TCC、メッセージ キュー + メッセージ テーブルを適用して実装される最終的な一貫性ソリューションなど、さまざまなものがあります。
XA プロトコルに基づいて実装された分散トランザクションは、トランザクション マネージャーとローカル リソース マネージャーの 2 つの部分に分かれています。ローカル リソース マネージャーは、Oracle、MYSQL などのデータベースによって実装されることが多く、これらのデータベースは XA インターフェイスを実装しており、トランザクション マネージャーはグローバル スケジューラーとして機能します。 2 フェーズ コミット (2PC) はビジネスにほとんど影響を与えません。その最大の利点は、ユーザーにとって透明性があることです。ユーザーは、ローカル トランザクションと同様に XA プロトコルに基づく分散トランザクションを使用できるため、トランザクションの ACID 特性を厳密に保証できます。 2PC の欠点も明らかです。これは、強力な一貫性を備えた同期ブロッキング プロトコルです。トランザクションの実行中は、必要なすべてのリソースをロックする必要があります。これは一般に、固定トランザクションと呼ばれます。したがって、一定の実行時間を持つ短いトランザクションに適しており、全体的なパフォーマンスは比較的劣ります。 トランザクション コーディネーターがクラッシュしたり、ネットワーク ジッターが発生すると、参加者はリソースをロックした状態のままになったり、一部の参加者のみが正常に送信したりして、データの不整合が発生します。したがって、高い同時実行パフォーマンスが最も重要となるシナリオでは、XA プロトコルに基づく分散トランザクションは最適な選択ではありません。
3 フェーズ コミット (3PC) は、2 フェーズ コミット (2PC) の改良版です。これは、2 フェーズ コミット プロトコルのブロッキング問題を解決するために使用されます。コーディネータがクラッシュすると、参加者は最終的な選択を行うことができず、ブロックされたままになり、リソースがロックされます。 2PC では、コーディネータのみにタイムアウト メカニズムがありますが、3PC では、コーディネータと参加者の両方にタイムアウト メカニズムが導入されています。コーディネーターが失敗した場合、参加者は永久にブロックされることはありません。さらに、最終送信フェーズの前に各参加ノードのステータスが一貫していることを確認するために、第 1 フェーズと第 2 フェーズの間に準備フェーズが挿入されます (以下を参照)。 3PC は、コーディネータの障害後に参加者がブロックされる問題を解決するためにタイムアウト メカニズムを使用しますが、余分なネットワーク通信が追加され、パフォーマンスが低下するため、推奨されません。
いわゆる TCC プログラミング モードも、2 フェーズ コミットのバリエーションです。違いは、TCC がビジネス レイヤーでコードを記述して 2 フェーズ コミットを実装することです。 TCC はそれぞれ Try、Confirm、Cancel の略です。一つの業務運営は、これら3つの方法に対応している必要があります。 次の単一在庫控除を例に挙げます。試行段階では在庫を取得し、確認段階では実際に在庫を減らします。在庫の減額が失敗した場合、キャンセル ステージがロールバックされ、在庫が解放されます。 TCC では、各メソッドがトランザクションを直接コミットするため、リソース ブロッキングの問題はありません。例外が発生すると、Cancel を使用してロールバックし、補正します。これはしばしば補償取引と呼ばれます。 元々は 1 つの方法でしたが、現在は 3 つの方法のサポートが必要です。 TCC はビジネスに非常に侵襲的であり、このモデルはうまく再利用できないため、開発量の急増につながることがわかります。ネットワークの変動やその他の要因も考慮する必要があります。リクエストが確実に配信されるように再試行メカニズムが用意されているため、インターフェースのべき等性を考慮する必要があります。
メッセージ トランザクションは、実際にはメッセージ ミドルウェアに基づく 2 フェーズ コミットであり、ローカル トランザクションとメッセージ送信を同じトランザクションに配置して、ローカル操作とメッセージ送信が同時に成功することを保証します。 発注時に在庫を差し引く原理図:
メッセージ ミドルウェアに基づく 2 フェーズ コミット ソリューションは、通常、同時実行性の高いシナリオで使用され、パフォーマンスが大幅に向上する代わりに、強力なデータ一貫性が犠牲になります。ただし、この方法を実装するにはコストと複雑さが比較的高く、実際のビジネス状況によって異なります。
分散トランザクションシートSeata は、2 フェーズ コミットから進化した分散トランザクション ソリューションでもあり、AT、TCC、SAGA、XA などのトランザクション モードを提供します。
Seata トランザクション管理には、3 つの重要な役割があります。
シータ実施原則(1)XAモードSeata の XA モデルは若干調整されていますが、基本的には同じです。 RMフェーズIの作業:
TC フェーズ II 作業:
RMフェーズII作業:
XA モード 【XAモードの実装】シータのスターターはXAモードの自動組み立てを完了しました。実装は非常に簡単です。手順は次のとおりです。 1. application.yml ファイルを変更し、XA モードを有効にします。 2. グローバル トランザクションを開始するエントリ メソッドに @GlobalTransactional アノテーションを追加します。 (2)ATモードAT モードも段階的にコミットされるトランザクション モデルですが、XA モデルのリソース ロック期間が長いという欠点を補っています。 フェーズ 1 RM の作業:
ステージ 2 提出時の RM の作業:
フェーズ 2 ロールバック中の RM の作業:
ATモード 実行フローは以下のとおりです。 (3)TCCモードTCC モードは AT モードと非常によく似ています。各ステージは独立したトランザクションです。違いは、TCC が手動コーディングを通じてデータ復旧を実現することです。次の 3 つの方法を実装する必要があります。
TCC 動作モデル図: TCC モード 【TCC空ロールバックと営業停止】ブランチ トランザクションの試行フェーズがブロックされると、グローバル トランザクションがタイムアウトし、2 番目のフェーズでキャンセル操作がトリガーされる可能性があります。 try 操作が実行される前に cancel 操作が実行されます。この場合、キャンセル操作はロールバックできず、空のロールバックを意味します。 空ロールバックされた業務に対して、引き続きtry laterを実行すると、確定もキャンセルもできなくなるため、業務停止となります。ハングを回避するために、空のロールバック後の try 操作を防止する必要があります。 (4)佐賀パターンSaga モードは、SEATA が提供するロング トランザクション ソリューションです。また、次の 2 つの段階に分かれています。
Saga モードの利点:
欠点:
(5)モデル比較 参考文献と謝辞
|
<<: 2023 年に信頼できるクラウド コンピューティング サービスのトップ 5
>>: エッジコンピューティングがエネルギー業界のミッシングリンクである理由
自動化された分析ワークフローは、企業がより多様な方法でデータを操作して予測を行うのに役立ちます。 O...
6月24日、国家発展改革委員会、科学技術部、工業情報化部、国家ラジオテレビ総局、中国サイバースペース...
昨夜、私は百度販売に携わっている大学の同級生とチャットをしました。彼はフォーラムで「百度が含まれない...
2018 年の発展を振り返ると、エンタープライズ クラウドと最新のデータ センターは 2019 年に...
どのような種類のウェブサイトであっても、ユーザー エクスペリエンスは重要ですが、B2B ウェブサイト...
写真からわかるように、このウェブサイトは Baidu によって完全に K されました。3 日が経ちま...
ネットショッピングを頻繁にする人なら、ダブルイレブンという言葉はよく知っているはずです。過去のネット...
2003 年に設立されたホスティング会社である Xenspec は、CoreSite のシカゴ デー...
週末に退屈していたので、Hostwinds のプロモーション用仮想ホストを見つけました。まず、このブ...
BandwagonHost CN2 GIA VPS は、密かに「LIMITED EDITION」限定...
まず、LAMP 環境は、Web サイトの構築に常に非常に人気があります。次に、Ubuntu システム...
今日は小さな温度計から始めましょう。先週の夜、小規模なO2Oサロンに参加した後、屈強な男性が私を呼び...
あらゆる分野、さまざまなメインキーワードには、一定のパターンがあると言えます。つまり、最初のいくつか...
スペインのバルセロナデータセンターにあるginernetの特別なVPSをご紹介します。比較的、一般の...
最近はトラフィックを増やすツールが多すぎます。インターネットで検索すれば、トラフィックを増やすソフト...