インターネット上の分散トランザクションについては、実用的なものよりも理論の方が多いです。今日は、分散トランザクションを体験できる事例を紹介したいと思います。今日は理論についてはあまり話さないようにしましょう。今日の主役はシータです! 分散トランザクションには、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億ドルを超える
>>: 新たな大規模なクラウドコンピューティングの注文、アマゾンとマイクロソフトが再び「戦い」
新年の初めに、10g.bizは米国と香港のcn2 giaラインにベアメタルサーバーを追加し、特別に4...
マンゴーTVの2013年最後の番組「パパ、どこ行くの?」は、年末に大ヒットとなった。有名人の父と息子...
10月23日、Baiduのアルゴリズムが更新されました。今回のBaiduシステムアルゴリズムのアップ...
月収10万元の起業の夢を実現するミニプログラム起業支援プランMetInfo エンタープライズ ウェブ...
資金不足は、多くのチャネル運用学生が直面する共通の問題です。大企業に勤めていない限り、大きな予算を獲...
百度百科事典は19日午後、最新の統計データを発表した。それによると、2012年、百度百科事典の総項目...
12月22日の夜、脱獄チームevad3rsは、待望のiOS 7用の完璧な脱獄ツールをリリースした。し...
Google の「ロボット」がインターネットの隅々までクロールして以来、検索エンジンは人々にとって欠...
2011 年に急成長を遂げた後、共同購入 Web サイトは 2012 年に重要な時期を迎えました。現...
register.com は 3 月下旬にドメイン名登録割引を発表しました。.com ドメイン名の初...
少し前に、Aniu が北京の学者による「SEO の長年にわたる変化」という記事を共有し、私に深い感銘...
知識支払いの時代では、知識の獲得はよりシンプルで便利になりました。学生でも会社員でも、多くの知識ベー...
hostmybytes、設立年は分かりませんでしたが、ドメイン名は2007年に登録され、現在は2名で...
[51CTO.com オリジナル記事] 数年前、CIO/CTO が集まったとき、彼らは「あなたの会社...
エッジは新しいクラウドであると企業が理解し始めたため、2018 年を通じてエッジはホットな話題となり...