インターネット上の分散トランザクションについては、実用的なものよりも理論の方が多いです。今日は、分散トランザクションを体験できる事例を紹介したいと思います。今日は理論についてはあまり話さないようにしましょう。今日の主役はシータです! 分散トランザクションには、CAP、BASE など、多くの理論が関係しています。多くの友人はこれらの理論を見るとすぐに落胆するので、今日は理論については話しません。デモを見て、コードを通じて分散トランザクションがどのようなものかを簡単に体験してみましょう。 1. Seataとは何ですか?Seata は、高性能で使いやすい分散トランザクション サービスを提供することを目的としたオープン ソースの分散トランザクション ソリューションです。 Seata は、ユーザーに AT、TCC、SAGA、XA トランザクション モードを提供し、ユーザー向けのワンストップ分散ソリューションを作成します。 Seata は次の 4 つのトランザクション モードをサポートしています。
Seata には 3 つのコアコンセプトがあります。
このうち、TC は別途展開されるサーバーであり、TM と RM はアプリケーションに組み込まれたクライアントです。 これらの概念を理解するだけで十分です。意味がわからなくても、Seata は使えます。これらを理解すれば、Seata の動作原理をよりよく理解できるようになります。 2. Seataサーバーを構築するまずはSeataサーバーを構築しましょう。 Seataダウンロードアドレス:
最新バージョンは1.4.2ですので、最新バージョンを使用します。 このツールを Windows または Linux にデプロイしても大きな違いはないため、便宜上、ここでは Windows に直接デプロイします。 まずバージョン 1.4.2 の zip アーカイブをダウンロードし、ダウンロード後に解凍して、conf ディレクトリ内の 2 か所を構成します。 1. まずfile.confファイルを設定します TC のストレージ モードは、file.conf で設定されます。 TC には 3 つの保存モードがあります。
トラブルを回避するために、ここではファイル モードに設定し、トランザクション セッション情報がメモリ内で読み書きされ、永続性がローカル ファイルに書き込まれるようにします (以下を参照)。 db または redis モードを設定する場合は、次の関連情報を必ず入力してください。詳細は以下の通りです。 他に注意する必要があるのは、独自のデータベースのバージョン情報です。データベース接続を変更する場合は、実際の状況に応じて変更してください。 Seata は、MySQL5.x および MySQL8.x に対応するデータベース ドライバーを提供します (lib ディレクトリ内)。ドライバーを変更するだけです。 2. registry.confファイルを再構成する registry.conf は主に Seata の登録センターを構成します。皆さんもよくご存知のEurekaを使用しており、構成は以下のとおりです。 ご覧のとおり、サポートされている構成センターは多数あります。私たちはユーレカを選びます。構成センターを選択した後は、構成センターに関連する情報を変更することを忘れないでください。 これで設定は完了ですが、まだ開始しないでください。まだ Eureka レジストリが必要です。 3. プロジェクト構成次にプロジェクトを構成します。 Seata は非常に古典的なデモを公式に提供しています。このデモを直接見てみましょう。 公式ケースダウンロードアドレス: https://github.com/seata/seata-samples ただし、ここでは多くのケースが混在しており、乱雑に見える可能性があります。さらに、ダウンロードする依存関係が多数あるため、依存関係のダウンロードが失敗する可能性が非常に高くなります。したがって、以下に示すように、公式アカウントのバックグラウンドで 商品を注文する場合です。簡単に説明しましょう:
この事例から何がわかるでしょうか? ユーザーが注文をしたい場合、ビジネス内のインターフェースが呼び出され、ビジネス内のインターフェースは独自のサービスを呼び出します。サービスでは、まずグローバル分散トランザクションが開始され、次にストレージ内のインターフェースが feign を通じて呼び出されて在庫が差し引かれ、次に order 内のインターフェースが feign を通じて呼び出されて注文が作成されます (注文を作成すると、order は注文を作成するだけでなく、ユーザーのアカウントの残高も差し引きます)。在庫を差し引いて注文の作成が完了すると、ユーザーの残高と在庫数量が正しいかどうかが確認されます。ユーザー残高がマイナスの場合、または在庫数量がマイナスの場合、トランザクションはロールバックされます。それ以外の場合は、トランザクションはコミットされます。この事件の具体的な構造は次の通りです。 このケースは典型的な分散トランザクションの問題です。ストレージと注文のトランザクションは異なるマイクロサービスに属していますが、同時に成功または失敗することを期待しています。 誰もがこの事件が何であるか理解したので、それを実行してみましょう。 まず、seata という名前のデータベースを作成し、上記のコードにある all.sql データ スクリプトを実行します。 次に、上記のプロジェクトを idea で開き、各プロジェクトの application.properties ファイルのデータ接続情報を以下のように変更します (Eureka は変更する必要はありません)。 Eureka を除く他の 4 つは変更する必要があります。OK、設定が完了しました。 4. テストを開始するまずはユーレカを起動します。 次に、他のサービスを開始することを忘れないでください。まず、2 番目のセクションで構成したサービスである Seata Server を起動します。 bin ディレクトリで、Windows の場合はダブルクリックし、Linux の場合は起動スクリプトを実行します。 最後に、残りの 4 つのサービスを個別に起動します。起動が完了すると、Eureka で関連情報を表示できます。 ご覧のとおり、すべてのサービスが登録されています。 次に、ビジネスで提供されている 2 つのテスト インターフェイスにアクセスします。 最初のテスト インターフェースは次のとおりです。 このインターフェースに対応するコードは、
このインターフェースを調整したら、データベースに移動して対応するデータを表示できます。 2 番目のテスト インターフェイスは次のとおりです。 このインターフェースに対応するコードは、
これは分散トランザクションの例です。 ご興味があれば、こちらの公式事例もご覧ください。ここでは物事が非常に単純であることがわかります。次のメソッド (
購入メソッドには、グローバル トランザクションを開始するための このプロジェクトの残りのコードはマイクロサービスの通常のコードなので、詳細には触れません。 5. 実施原則Seata におけるこの分散トランザクションの原理について少しお話ししましょう。まずは写真を見てみましょう: この図は上記のケースを非常にわかりやすく説明しています。一般的なプロセスは次のとおりです。
具体的には、上記のケースでは、トランザクションの送信は 2 つの段階に分かれており、プロセスは次のようになります。 フェーズ1:
branch_id と xid は、それぞれブランチ トランザクション (つまり、ストレージ自体のトランザクション) とグローバル トランザクション ID を表します。 rollback_info は、逆補正 (ロールバック) の基礎として使用される前の画像と次の画像の内容を保存します。このフィールドの値は JSON です。この JSON のより重要な部分を皆さんと共有したいと思います。
上記の手順 1 ~ 10 は、データ送信の最初の段階です。 第二段階を見てみましょう。 第 2 段階では、コミットまたはロールバックの 2 つの可能性があります。 上記のケースを例に挙げてみましょう。
注文時に在庫が差し引かれ、注文が作成されます。最終チェック中に、在庫がマイナスであるか、ユーザー アカウントの残高がマイナスであることが判明し、注文に問題があることが示されます。この時点では、例外がスローされ、注文がロールバックされる必要があります。それ以外の場合は、データが送信される必要があります。 具体的な操作は以下のとおりです。 ロールバック:
提出する:
つまり、トランザクションが正常にコミットされた場合、undo_log テーブルにはレコードは存在しません。テーブル内のレコードを確認したい場合は、トランザクションがコミットされる前に DEBUG を通じて確認することができます。6. まとめここまで話しましたが、シータの話はこれで終わりでしょうか?ダメダメ! ATモードのみです!さらに 3 つのモードがあり、それについては次の記事で紹介します。 まあ、これは単純な分散トランザクションです。まずは体験してみましょう!タイトルが「5 分で分散トランザクションを体験する」なのは、記事の中で原則も共有しているからです。ケースを実行して体験するだけであれば、5 分もあれば十分でしょう。信じられないなら、試してみてください! |
<<: ガートナー:世界のパブリッククラウド支出は2022年に4,800億ドルを超える
>>: 新たな大規模なクラウドコンピューティングの注文、アマゾンとマイクロソフトが再び「戦い」
[51CTO.com からのオリジナル記事] 企業にとってデジタル変革の重要性は自明です。データと人...
百度がアルゴリズムの革新、特に「原点回帰計画」の立ち上げ以降、ウェブサイト自体の価値を重視しているこ...
SD-WAN がリモート ユーザーがクラウドベースのアプリケーションにアクセスするための主な方法にな...
元のタイトル: パーソナライズされたコンテンツ推奨エンジン Outbrain が、中小規模のウェブサ...
SEO 導入は完全にナンセンス負け犬である私は、高等教育も受けておらず、恵まれた家庭環境もありません...
Cloudcone がブラックフライデーのプロモーションを開始し、このフラッシュセールが正式に始まり...
ここ数ヶ月、CHIAマイニングにより、世界中のソリッドステートドライブの価格が急騰しました。ハードド...
「コンテンツマーケティング」は、現在のネットワークマーケティング業界ではホットな話題です。誰もが独創...
WeChat マーケティングはますます人気が高まっており、オフラインのビジネスでも試さずにはいられま...
「ウェブサイトの最適化とは何か」「それは簡単なのか」「将来性はあるか」などと聞かれるたびに、どう答え...
現在、OVH は専用サーバーを最大 40% 割引で提供しており、VPS はすべて 50% オフとなっ...
背景: Kubernetes は、クラウドネイティブ時代のプラットフォームの基盤およびリソース マネ...
Hostodo は、ロサンゼルス、ダラス、マイアミのデータ センターで利用できるハイエンド VPS ...
2018年2月に香港クラウドデータセンターのMaxthon Hostingの高帯域幅VPS(Maxt...
6月28日の事件と「ブラックフライデー」事件は、ウェブマスター界隈で大きな話題となった。この2日間、...