導入ビジネス量が増加し続けると、モノリシックアーキテクチャは徐々に膨大なトラフィックに耐えられなくなります。このとき、サービスを分割し、データベースとテーブルを別々のライブラリとテーブルに分割する必要があります。発注システムを例にとると、発注センター、ユーザーセンター、在庫センターなどがあります。これによって生じる問題は、業務が互いに分離していることです。各企業は独自のデータベースを維持しており、データ交換は 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
>>: エッジコンピューティングがエネルギー業界のミッシングリンクである理由
7月11日、ビーチにて。波は楽器の音に合わせて踊り、普洛は帽子をかぶって飛び跳ねながら、「永遠の若さ...
raksmart のサンノゼ データ センターは、自社のコア コンピュータ ルームです。raksma...
ブルガリアの老舗ホスティングプロバイダーであるHostagは、ブルガリアの首都ソフィアの中心部にデー...
SEO においてタイトルとはどういう意味でしょうか? 多くの SEO 実践者は、タイトルは検索エンジ...
みなさんこんにちは。私は次男です。この記事は以前にも投稿されていますが、ネットユーザーからの質問に答...
長い間記事を書いていませんでしたが、A5を離れたことはありません。忙しいときは、SEOに関する記事を...
xxmhost(Red Panda Cloud、2009年設立)は、中国と香港の合弁VPSプロバイダ...
Kickstarter はクラウドファンディングの起業モデルとしてはユニークで、次々とブームを巻き起...
10月31日、アリババクラウドの周景仁CTOは2023年雲啓カンファレンスで、インテリジェント時代を...
少し前、私は突然とても落ち込んでしまい、「検索エンジンがなければ世界はどうなるだろう」と考えていまし...
メタバースは、一般的には現実世界と並行する仮想世界として理解できます。現実世界で人々ができることはす...
海外メディアの報道によると、今年の流行により企業のクラウドコンピューティングへの移行が加速し、世界の...
Servarica は、500G ハード ドライブで年間 12 ドルという低価格の高構成のカナダ V...
モノのインターネットとは、インターネットに接続され、データを交換するすべての物理的なオブジェクトのこ...
2014 年末になっても、業界の「チャンネルが王様」という状況は覆らなかったようです。どの会議でも、...