この記事はWeChatの公開アカウント「RememberGo」から転載したもので、著者はWu Qin Curryです。この記事を転載する場合はRememberGo公式アカウントまでご連絡ください。 導入気がつけば1ヶ月も更新していませんでした。一度怠け者になると、ますます怠け者になるだけだ。 最近、分散トランザクションに興味を持ち、いくつかの記事や論文を読みました。この記事は主に私が見た 2 つのプロジェクトを紹介するもので、理論的な知識は含まれていません。
シータの紹介Seata は、Alibaba が提供するオープンソースの分散トランザクション サービスです。現在、AT、TCC、SAGA、XA トランザクション モードをユーザーに提供しており、全体として 2 フェーズ コミット プロトコルを採用しています。 seata-golang の Go バージョンは現在、MySQL の AT モードと TCC モードのみを実装しているようで、作者は現在ほとんど更新していません。 Seata にはいくつかの主要な役割があります。
もちろん、これだけでは分かりにくいかもしれませんので、公式サイトから画像を使って説明しましょう。 上の図からわかるように、これら 3 つの役割の責任は次のとおりです。 TC
TM
RM 簡単に言えば、分散トランザクションに関係するさまざまなサービス(従来の注文シナリオに関係する注文サービス、在庫サービス、マーケティングサービスなど)を管理します。 ps: 個人的には、ここでの RM はマイクロサービスの中間処理層に少し似ていると感じています (専門用語では、これをフロントエンドの bff->backend と呼びます)。
大丈夫。以下に、seata-golang の実装の詳細を示します。 seata-golang の基盤となるレイヤーでは、通信に gRPC を使用します。 シータ-ゴランまず、RM 構造を見てみましょう。 マネージャーに関しては、サポートされている主要なトランザクション モードの実装 (TCC、XA など) を保存し、各モードではこのインターフェイスを実装するだけで済みます。 TC の部分構造を見てみましょう (いくつかのフィールドを削除します)。 TC は現在、データ ストレージとして MySQL と pgsql をサポートしています。つまり、SessionManager インターフェイスを実装し、それを SessionHolder のマネージャーに挿入するだけです。 これら 2 つの基本構造を紹介した後、それらの関係について上で述べたことを覚えていますか? 第 2 段階では、TC は現在のトランザクション ステータスに基づいて、コミットするかロールバックするかを RM に通知します。 ResourceManagerを初期化するとき、 最後に TC の grpc インターフェース branchCommunicate が呼び出されることがわかります。 サーバーに対応しています。 gRPC には 4 つの基本的な通信モードがあることがわかっています。
ストリーミング形式を希望するのも非常に簡単です。 proto メソッド定義内の対応する request|response パラメータの前にストリーム タグを追加するだけで、このインターフェイスがストリーミングされます。ストリームの種類は、ストリームを追加する場所によって異なります。リクエストとレスポンスの両方を追加すると、双方向ストリームになります。 クライアントとサーバーは両方とも、stream.Send を介してリクエストを送信し、stream.Recv を介してデータを受信できます。 RMがBranchCommunicateを呼び出すと、 最後に、ブランチ トランザクションが処理され、manager.BranchCommit が呼び出されます。 同様に、TCがRMによって呼び出されると、 コミットまたはロールバックを通知するために RM に送信されるデータはどこから来るのでしょうか? TCがRMにブランチをコミットするように通知したい場合、 最後はTMですが、これは理解するのが難しくありません。 実際、seat-golang については言及する価値のあることが他にもあります。 たとえば、go リフレクションによって実装された動的プロキシ関数を書くのは面倒です (まったく不要だと思いますが)。 この記事はもう一回書くと長くなるので、dtmについてはこれ以上書きません。ご興味がございましたら、メッセージを残していただければ、DTM を作成するかどうか検討させていただきます。 参照する https://seata.io/zh-cn/docs/overview/what-is-seata.html https://github.com/opentrx/seata-golang |
<<: 2022 年に IT 業界、労働力、ビジネス モデルに影響を与える可能性のあるトップ 10 のトレンド
>>: クラウドファーストのトレンドの中でクラウドインテリジェンスを実現する方法
alpharacks.com は、仮想ホストの再販業者プロモーションを開始しました。プロモーションに...
新しい環境に住むときはいつでも、地元の習慣、特に一部の少数民族の習慣を理解する必要があります。少数民...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスウェブサイトの権威とは何...
Synidcは、米国ロサンゼルスのceraデータセンターでVPSクラウドサーバーサービスを提供してい...
10月18日、易邦電力網は情報筋から、タオバオが史上最大の改訂を完了しようとしており、新バージョンは...
近年、ユーザーは分散型ソフトウェア サービスのオプションを求めるようになっています。オープンソースの...
見出しの頭痛、いつまでたってもうまくいかない話題、次から次へと流れていくホットな話題、人気記事の閲覧...
admin5.comが10月20日に伝えたところによると、国内の有名な共同購入サイトである24qua...
「IDC FutureScape: グローバルデジタルイノベーション2021予測 – 中国の洞察」に...
リンクはお金で売れるので、専門のリンク販売会社によって高品質のリンクが組み込まれています。外部リンク...
デジタル経済の波は止められない勢いで世界を席巻しています。クラウドコンピューティング、5G、AI、ビ...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスAR Zhuifeng ...
henghostの韓国サーバー(独立サーバー)のご紹介:安定したネットワークと十分な帯域幅を備え、韓...
【はじめに】訪問指標はウェブサイト分析の基礎となります。しかし、このような基本的な指標であっても、G...
最近のサイバーセキュリティの進歩により、最新のクラウド アプリケーションに影響を与える新しいルールが...