導入ビジネス量が増加し続けると、モノリシックアーキテクチャは徐々に膨大なトラフィックに耐えられなくなります。このとき、サービスを分割し、データベースとテーブルを別々のライブラリとテーブルに分割する必要があります。発注システムを例にとると、発注センター、ユーザーセンター、在庫センターなどがあります。これによって生じる問題は、業務が互いに分離していることです。各企業は独自のデータベースを維持しており、データ交換は 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
>>: エッジコンピューティングがエネルギー業界のミッシングリンクである理由
gcorelabs は南米のデータセンター、ブラジルのサンパウロ データセンターを正式に開設しました...
この二日間、Hostyun が、すべてのオリジナル AS9929 ネットワーク シリーズ VPS に...
概要:クラウド ネイティブ セキュリティは本当に違うのでしょうか?それは必須ですか?私の答えは「はい...
SEO が夜更かしや忙しさと同義語である場合。著者は、SEO を楽しみとして捉えることを好みます。S...
コアヒント: このような状況では、検索エンジンは通常、A に低い重みを与え、B に高い重みを与えます...
ダブルイレブンの先行販売初日、李佳琦が人気を集めた。 10月20日夜、「口紅王」李佳琦の生放送ルーム...
2011年以降、インターネット上でSEO最適化のトレーニング機関が数多く設立され、クラスを開設して受...
[[343310]]今日、企業はますますデータ主導型になりつつあります。なぜなら、データは新製品の開...
urpad買収後の新たな動きです。サーバーレンタル事業に着手しました。多角的な展開も必至です。企業は...
1. 工商省は個々のオンラインストアを監督する予定:5年以内に営業許可証を発行するタオバオへの課税は...
今日、私は素晴らしいSEOの王通氏に会い、感動しました。私は5年間医療SEOに従事し、SEOの台頭と...
最近、RT-MartとFeiniu.comが戦略的に投資した新しい小売プロジェクトFaDaoJiaス...
約 1 週間前、香港で 1Gbps 帯域幅の Kamatera の VPS をテストしました。価格が...
1. ウェブサイトの位置づけウェブサイトのポジショニングとは、主に、私たちが属する業界に応じて行うべ...
「効率的な並行性」は、JVM シリーズの最後の記事です。この記事では主に、仮想マシンがマルチスレッド...