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

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

[[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 分散ロック

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

推薦する

検索におけるYahooとGoogleの違い

誰かがYahooとGoogleの違いは何かと尋ねました。 1. Google は意味分析とリンクに重...

製品運用: ユーザー成長チャネルを構築するには?

製品の成長フレームワークの構築を始める前に、まず答えなければならない質問は、「成長の方向はどこから始...

手頃な価格で高速、実名/登録不要の香港クラウドサーバーのおすすめ

この記事の目的は、香港のクラウド サーバーを推奨することです。香港のクラウド サーバーの利点は、速度...

DaNei Education が IT 教育マップを構築し、UCloud がオンライン教育の「アクセラレーター」に

急速な発展期を経て、オンライン教育は 2017 年から初期の成熟段階に入りました。市場では依然として...

イーソン・チャンは百度と捜狗の顔を変えた。句読点が思考を呼び起こした

検索エンジンに少しでも詳しい人なら、次のことを知っているでしょう。「検索エンジンのユーザーが使用する...

ウェブマスターネットワークレポート:中国のビットコインが衝撃的な規制に直面 湖南テレビがウェブサイトに反撃

1. 中国のビットコインは衝撃的な規制危機に直面しており、破産の波が押し寄せている規制当局からの連絡...

高性能分散メッセージングシステム Kafka を 5 分で理解する

Kafka は LinkedIn が立ち上げた高スループットの分散メッセージング システムです。簡単...

異常は悪です。インターネット上のスパムはますますひどくなっています。

今年4月末と5月初めに、GoogleとBaiduは相次いで「ペンギンアルゴリズム」とBaiduの「W...

SEOは統合マーケティングを国際化へと確実にアップグレードする

国内のSEO業界の発展は打撃を受け、圧迫されているのでしょうか、それとも別の活路があるのでしょうか?...

hostodo: 年間 25 ドル、アジア最適化 (+cn2 ネットワーク)、KVM/768M/20g ハードディスク/750g トラフィック

hostodo のボスは、KVM や OpenVZ を含む 6 つの特別な VPS を送ってくれまし...

中国インターネット年次レポート!

この記事では、2019 年の中国のモバイル インターネットの概要を紹介します。庚子の年は特別な年であ...

reliablehostingservices-大容量ハードディスクVPS(最低100G)が25%オフ/月額2.5ドルから

ReliableHostingServices は 2010 年に設立されたばかりです。主な事業は、...

Google Readerが終了、数十社がGoogleの残余を奪い合う

新浪テクノロジー 張南いまだに何百万人もの忠実なユーザーを抱える RSS リーダー ツールの Goo...

サービスメッシュが分散マイクロサービスの管理にどのように役立つか

サービス メッシュは、サービス通信にセキュリティ、回復力、可視性をもたらし、開発者がそれらを行う必要...

SEOERの自己改善と超越は「ほぼ」を拒否することから始まります

現在、中国では基本的なSEO技術が普及しており、オンラインマーケティングに携わるほぼすべての企業がS...