分散トランザクション - 信頼性の高いメッセージ最終一貫性ソリューション

分散トランザクション - 信頼性の高いメッセージ最終一貫性ソリューション

[[405809]]

みなさんこんにちは。私はバスケットボールが大好きなプログラマーのウルフキングです。

よく言及される ACID など、トランザクションはおそらく誰にとっても馴染み深いものでしょう。ただし、分散トランザクションのその後の内容については、まず ACID について説明し、次に分散トランザクションとは何かを紹介し、最後に信頼性の高いメッセージに基づく分散トランザクション ソリューションに焦点を当てます。

取引とは何か

厳密に言えば、トランザクションには、ACID と呼ばれる原子性、一貫性、独立性、耐久性が必要です。

  1. アトミック性とは、トランザクション内のすべての操作が実行される、または実行されない、という意味です。
  2. 一貫性は、データが整合性制約を満たすこと、つまりデータの中間状態が存在しないことを意味します。たとえば、あなたの財布に 100 元があり、私の財布にも 100 元があり、あなたが私に 50 元を送金した場合、あなたの財布のお金は 50 元になり、私の財布のお金は 150 元になります。私のお金は追加されるが、あなたのお金は差し引かれないといった中間状態は発生しません。
  3. 分離とは、複数のトランザクションが同時に実行されたときに互いに干渉しないことを意味します。つまり、トランザクション内のデータは他のトランザクションから分離されます。
  4. 耐久性とは、トランザクションが完了した後、データが永久に保存され、その後の他の操作や障害がトランザクションの結果に影響を与えないことを意味します。

一般的な意味では、トランザクションは、一部の更新操作が成功または失敗することを保証するように設計されています。

分散トランザクションとは何か

名前が示すように、分散トランザクションは分散システムで実装されます。それらは実際には複数のローカル トランザクションで構成されています。

大規模な操作は、異なるサーバーに分散されたさまざまな小さな操作で構成されます。分散トランザクションでは、これらの小さな操作がすべて成功するか、すべて失敗するかを保証する必要があります。本質的に、分散トランザクションは、異なるデータベース間でのデータの一貫性を確保するように設計されています。

一般的な分散トランザクション ソリューションには、2PC、3PC、TCC、ローカル メッセージ テーブル、信頼性の高いメッセージの結果整合性、ベスト エフォート通知などがあります。

今日は、信頼性の高いメッセージの結果一貫性のソリューションに焦点を当てます。

信頼性の高いメッセージ最終整合性ソリューションとは何ですか?

信頼性の高いメッセージ最終整合性ソリューションとは、トランザクション イニシエーターがローカル トランザクションを完了し、メッセージをメッセージ ミドルウェアに送信すると、トランザクション参加者 (メッセージ コンシューマー) が確実にメッセージを受信し、トランザクションを正常に処理することを意味します。このソリューションは、メッセージがトランザクション参加者に送信されている限り、トランザクションは最終的に一貫性を保つことを強調しています。

このアプローチの問題点は何でしょうか?

このソリューションは、メッセージ ミドルウェアを通じて実装されます。トランザクション イニシエーター (メッセージ プロデューサー) はメッセージをメッセージ ミドルウェアに送信し、トランザクション参加者はメッセージ ミドルウェアからメッセージを受信します。ネットワーク通信の不確実性により、次の図に示すように、分散トランザクションの問題が発生する可能性があります。

1. ローカルトランザクションとメッセージの原子性の問題

上記の点線ボックスに示すように、次のような状況があります。

  • 1) ローカルトランザクションがコミットに失敗した場合、メッセージは送信されません。
  • 2) ローカル トランザクションは成功し、メッセージの送信は失敗し、ローカル トランザクションはロールバックされます。
  • 3) ローカル メッセージは成功し、メッセージはタイムアウトし、ローカル トランザクションはロールバックされ、最終的にメッセージは失敗します。
  • 4) ローカル メッセージは成功し、メッセージがタイムアウトし、ローカル トランザクションはロールバックされ、最終的にメッセージが成功します。

まとめると、ローカル トランザクションがメッセージ参加者のトランザクションと矛盾する 4 番目の状況があります。

2. メッセージを受信するトランザクション参加者の信頼性。

メッセージ ミドルウェアとトランザクション参加者は、メッセージを正常に使用できることを確認する必要があります。

3. メッセージの繰り返し消費

トランザクション参加者のインターフェースのべき等性に注意してください。メッセージ参加者はメッセージを正常に消費した可能性がありますが、ネットワークの問題により、メッセージ ミドルウェアはメッセージが消費されていないと判断し、再試行が発生する可能性があります。

解決

1. ローカルメッセージテーブル

ローカル メッセージ テーブルの鍵となるのは、メッセージ ログをローカルに保存するためのレコード テーブルがあることです。メッセージを送信できることを確認するには、メッセージ ログ レコードを継続的にスキャンするスケジュールされたタスクを開始する必要があります。具体的なプロセスは以下のとおりです。

上記のプロセス:

  • 1) トランザクションイニシエーターのローカルトランザクションが正常に実行され、メッセージログがローカルメッセージテーブルに記録されます。
  • 2) スケジュールされたタスクを開始し、ローカル メッセージ テーブルを周期的にスキャンします。
  • 3) スケジュールされたタスクがメッセージをスキャンすると、そのメッセージがメッセージ ミドルウェアに送信されます。
  • 4) メッセージ ミドルウェアはメッセージを受信し、トランザクション イニシエーターに成功を通知するメッセージを返します。
  • 5) トランザクションイニシエーターは、正常に送信されたメッセージを受信すると、ログメッセージを削除します。
  • 6) トランザクション参加者はメッセージをサブスクライブして消費します。
  • 7) 取引参加者は現地での事務処理を行います。
  • 8) ローカル トランザクションが正常に処理され、成功確認がメッセージ ミドルウェアに送信されます。

注意点:

トランザクション参加者はインターフェースの冪等性を保証します。

2.RocketMqトランザクションメッセージソリューション

Apache RocketMQ 4.3 以降のバージョンでは、トランザクション メッセージが正式にサポートされており、分散トランザクションの実装に便利なサポートが提供されます。 RocketMQ 4.3 以降では、完全なトランザクション メッセージが実装されました。実際、これはローカル メッセージ テーブルのラッパーです。プロデューサー側でのメッセージ送信とローカル トランザクション実行の原子性問題を解決するために、ローカル メッセージ テーブルが MQ 内に移動されます。

実装プロセス:

  • 1) トランザクションイニシエーターはハーフトランザクションメッセージを送信する
  • 2) RocketMqは、半分が正常に送信されたと応答します。
  • 3) トランザクションイニシエーターがローカルトランザクションを実行する
  • 4) トランザクション イニシエーターはローカル トランザクションを正常に実行し、RocketMq にコミットを送信し、mq はメッセージをトランザクション参加者に配信します。トランザクション イニシエーターはローカル トランザクションの実行に失敗し、RocketMq にロールバックを送信し、mq はメッセージを削除します。
  • 5) RocketMq は、一定期間内に取引開始者から確認情報を受信しなかった場合、取引開始者に対して取引の審査を実施します。
  • 6) トランザクションイニシエーターはローカルトランザクションのステータスを照会します。
  • 7) トランザクション イニシエーターは、照会されたトランザクション ステータスに基づいて、RocketMq にコミット/ロールバックを送信します。
  • 8) RocketMq がコミットを開始すると、コミットが失敗するか、一定時間内に正常な ACK を受信しなかった場合、再試行を開始します。

アドバンテージ:

メッセージ データは独立して保存されるため、ビジネス システムとメッセージ システム間の結合が軽減されます。

スループットはローカル メッセージ テーブル ソリューションよりも優れています。

欠点:

メッセージを送信するには、2 つのネットワーク要求 (メッセージの半分 + コミット/ロールバック) が必要です。

メッセージ コールバック インターフェイスを実装する必要があります。

実際、各分散トランザクション ソリューションにはそれぞれ長所と短所があります。長所と短所を比較検討し、ビジネスシナリオに最適なものを選択する必要があります。

大丈夫。今日はこれで終わりです。これからも私が学んだことや考えたことをシェアしていきます。一緒に成功への道を歩んでいけたらと思います!

この記事はWeChatの公開アカウント「狼王プログラミング」から転載したもので、以下のQRコードからフォローできます。この記事の転載についてはWolf King Programming公式アカウントまでご連絡ください。

<<:  Redis 分散ロック

>>:  中国における自律制御型クラウドコンピューティングの開発動向に関する議論

推薦する

クラウドへの道: 複雑な分析アプリケーションをクラウドに移行する

組織のクラウド コンピューティングの取り組みには通常、オンプレミスのアプリケーションをクラウドに移行...

クラウドネイティブ クラスタにおけるネットワーク トラフィックの可観測性に関する考察

背景クラウド ネイティブ テクノロジーが広く普及し、実装される中で、私が遭遇した多くのユーザー ニー...

フレンドリーリンクの作り方

フレンドリーなリンクは、かなりの量のトラフィックをもたらすだけでなく、さらに重要なことに、Web サ...

Huawei Cloud 11.11クラウドカーニバルが開幕、「バイヤーショー」の第一波が戦場に到着

今年の「ダブルイレブン」は例年よりも早くやって来ます。 11月1日から、みんなが「最終支払い派」にな...

ウェブサイトのキーワードを選択してレイアウトし、競合分析をうまく行う方法

キーワード調査は SEO プロセスの非常に重要な部分です。この部分がどれだけうまく行われるかは、ウェ...

エンタープライズ SMS サービスの品質とユーザー エクスペリエンスを監視するにはどうすればよいでしょうか? Bonree Net SMS モニタリングが登場!

モバイル インターネットの時代において、企業の SMS は、正確な配信、制御可能な量、便利なやり取り...

代理購入の「36の戦略」:アフターサービスに潜む大きな危険

[「代購」は、時には友人に商品を届けることを意味し、時には「副収入」を稼ぐためのパートタイムを意味し...

ワンダ電子商取引が明らかに:O2Oモデルの採用はリソース統合の課題に直面

テンセントテクノロジーの王克新が1月5日に報じた。万達グループはかつて、電子商取引業界に参入するため...

HostHatch - すべての VPS が 20% オフ + 「言葉では言い表せない」メモリ時間 / 無料 cpanel ライセンス

hosthatch からの最新ニュース: [1] メモリが「言葉では言い表せないほど」倍増 + 20...

CtripはUnionPayのCVCコード記録禁止に違反したため重い罰則を受ける可能性がある

Ctrip の「クレジットカード スキャンダル」: システムリスクか、それとも偶発的な操作ミスか原題...

corgitech-$7/softlayer/日本/シンガポール/VMware/1g メモリ/30g ハードディスク/3T トラフィック

corgitech、5年間運営しているこのVPSビジネスは、長い間私のブログに登場していませんでした...

国家インターネット情報局が複数の恐喝ウェブサイトを調査し処罰

新華網、北京、9月13日(新華社)―中国サイバースペース管理局から記者が得た情報によると、最近、多数...

中秋節後にウェブサイトの総合的な SEO 最適化分析を行うにはどうすればよいでしょうか?

3日間の中秋節の連休はあっという間に過ぎ、今日が仕事初日です。多くのウェブマスターは連休中も頑張って...

電気機械産業におけるエントリーレベルのネットワークマーケティング戦略についての簡単な説明

昨日、私は上司から、インターネット マーケティングについて数人の新しい同僚をトレーニングし、同時にイ...

簡単な分析:ウェブサイトのトラフィックの減少に影響を与える18の理由!

月給5,000~50,000のこれらのプロジェクトはあなたの将来ですウェブサイトのトラフィックは常に...