最近、分散トランザクションに関するブログ投稿をいくつか読んでメモを取り、この記事にまとめました。
画像はPexelsより データベーストランザクション データベース トランザクション (略称: トランザクション) は、データベース管理システムの実行プロセスにおける論理単位であり、有限の一連のデータベース操作で構成されます。 これらの操作はすべてか、いずれも実行されないかのいずれかであり、分割できない作業単位です。 データベース トランザクションのいくつかの典型的な特性:
略語はACIDです。
取引の実施原則 地方問題 単一のサーバーおよび単一のリレーショナル データベース上の従来のトランザクションは、ローカル トランザクションです。ローカル トランザクションはリソース マネージャーによって管理されます。 JDBC トランザクションは、非常に典型的なローカル トランザクションです。 トランザクションログ InnoDB トランザクション ログには、REDO ログと UNDO ログが含まれます。 REDO ログ: 通常は物理ログであり、特定の行がどのように変更されたかではなく、データ ページに対する物理的な変更を記録します。送信後に物理データ ページを復元するために使用されます。 UNDOログ(ロールバックログ) :物理ログを記録するREDOログとは異なる論理ログです。 レコードが削除されると、対応する挿入レコードが UNDO ログに記録され、レコードが更新されると、対応する逆の更新レコードが記録されると考えられます。 トランザクションACID特性の実装アイデア:
分散トランザクション 分散トランザクションとは、トランザクション参加者、トランザクションをサポートするサーバー、リソース サーバー、およびトランザクション マネージャーが、異なる分散システムの異なるノードに配置されていることを意味します。 簡単に言えば、分散トランザクションとは分散システムにおけるトランザクションを指し、異なるデータベース ノード間のデータの一貫性を確保するために存在します。 分散トランザクションがなぜ必要なのでしょうか?以下は 2 つの側面から説明されます。 マイクロサービスアーキテクチャにおける分散トランザクション インターネットの急速な発展に伴い、軽量かつ明確な機能区分を持つマイクロサービスが歴史の舞台に登場しました。 たとえば、ユーザーがライブ放送ギフトを購入するために注文を行うサービスは、コインサービス (coinService)、注文サービス (orderService)、ギフトサービス (giftService) の 3 つのサービスに分割されます。 これらのサービスは異なるマシン (ノード) に展開されており、対応するデータベース (ゴールド コイン データベース、注文データベース、ギフト データベース) も異なるノードにあります。 ユーザーがギフトを購入する注文をすると、ギフト データベース、ゴールド コイン データベース、注文データベースは異なるノード上にあります。ローカルトランザクションは使用できません。では、異なるデータベース (ノード) 上のデータの一貫性を確保するにはどうすればよいでしょうか?これには分散トランザクションが必要です。 シャーディングによる分散トランザクション ビジネスが発展するにつれて、データベースのデータはますます大きくなり、データポイントは 1,000 万を超えます。それをシャーディングする必要があります (同社は以前は Mycat を使用してデータベースとテーブルをシャーディングし、その後 Sharding-JDBC を使用しました)。 分割データベースでは、データが異なるノードに分散されます。たとえば、一部は深センのコンピューター ルームにあり、一部は北京のコンピューター ルームにあります。それを保証するためにローカルトランザクションを使用したい場合、それは役に立たないでしょう。分散トランザクションは依然として必要です。 たとえば、A が B に 10 元を送金します。A のアカウント データは北京のデータ センターにあり、B のアカウント データは深センのデータ センターにあります。 プロセスは次のとおりです。 CAP理論とBASE理論 分散トランザクションを学ぶには、CAP 理論と BASE 理論を理解する必要があります。 CAP理論 分散システムの基本理論である CAP 理論は、分散システムでは一貫性、可用性、分断耐性の 3 つの要素のうち 2 つだけが同時に達成できることを意味します。 一貫性 ( C): 一貫性とは、データが複数のコピー間で一貫性を維持できるかどうかを指します。 たとえば、あるパーティション ノードでデータが更新されると、他のパーティション ノードで読み取られるデータも更新されたデータになります。 可用性(A): 可用性とは、システムによって提供されるサービスが常に利用可能であり、ユーザーからの各操作要求に対して常に限られた時間内に結果を返すことができることを意味します。ここでのポイントは「限られた時間内で」と「結果を返す」ことです。 パーティション耐性 ( P): 分散システムでネットワーク パーティション障害が発生した場合でも、一貫性と可用性を満たすサービスを提供できる必要があります。 ベース理論 BASE 理論は CAP における AP の拡張です。当社のビジネス システムでは、システムの可用性とパーティション耐性と引き換えに一貫性を犠牲にすることを検討しています。 BASE は、Basically Available、Soft State、Eventually Consistent という 3 つのフレーズの略語です。 基本的に利用可能:基本的に利用可能です。これは、システム全体の障害ではなく、ローカル障害をサポートすることによって実現されます。 ユーザーが 5 つのデータベース サーバーに分割されている場合、1 つのユーザー データベースで障害が発生すると、その特定のホスト上のユーザーの 20% にのみ影響し、他のユーザーには影響はありません。 ソフト状態:ソフト状態。状態はしばらくの間同期されない可能性があります。 最終的に一貫性がある: 最終的に一貫性がある。重要なのは、データが常に強く一貫していることではなく、最終的に一貫していることだけです。 分散トランザクションのためのいくつかのソリューション 分散トランザクションソリューションには主に次のものがあります。
フェーズ2提出計画 2 フェーズ コミット スキームは、一般的に使用される分散トランザクション ソリューションです。トランザクションの送信は、実行計画の準備と送信の 2 つの段階に分かれています。 第 2 フェーズの送信は成功しました。
図に示すように: フェーズ 2 の送信が失敗しました:
リソース マネージャーは、トランザクション マネージャーの指示に従ってローカル トランザクション操作をロールバックし、トランザクション処理プロセスで使用されるすべてのロック リソースを解放します。 2PC ソリューションは実装が簡単でコストも低いですが、次のような主な欠点があります。
TCC(補償メカニズム) TCC は補償メカニズムを採用しており、その中核となる考え方は、各操作ごとに、対応する確認と補償 (キャンセル) 操作を登録する必要があるというものです。 TCC (Try-Confirm-Cancel) は、ビジネス ロジックを分解して分散トランザクションを実装します。 特定のビジネス サービスの場合、TCC 分散トランザクション モデルでは、ビジネス システムが次の 3 つのロジックを実装する必要があります。
TCC 分散トランザクション モデルは、次の 3 つの部分で構成されます。
次に、TCC が分散トランザクションを実装するプロセスをシミュレートするために、ユーザーがギフトを購入する注文を出す例を取り上げます。ユーザー A の残高は 100 枚のゴールド コインで、ギフトを 5 個所有していると仮定します。 Aは10枚の金貨を費やして、10本のバラを買う注文をしました。残高、注文、ギフトはすべて異なるデータベースに保存されます。 TCC のトライフェーズ:
TCC 確認フェーズ:
TCC のキャンセル フェーズ:
TCC ソリューションにより、アプリケーションはデータベース操作の粒度をカスタマイズできるため、ロックの競合が減り、パフォーマンスが向上します。 しかし、次のような欠点もあります。
ローカルメッセージテーブル eBay は当初、分散トランザクションの問題を解決するためにローカル メッセージ テーブル ソリューションを提案しました。このソリューションは現在業界で広く使用されています。その中心的なアイデアは、分散トランザクションをローカル トランザクションに分割して処理することです。 基本的な実装フローチャートを見てみましょう。 基本的な実装のアイデアは次のとおりです。 メッセージ送信者:
メッセージコンシューマー:
プロデューサーとコンシューマーは、ローカル メッセージ テーブルを定期的にスキャンし、処理されなかったメッセージや失敗したメッセージを再送信します。信頼性の高い自動調整およびアカウント補充ロジックがあれば、このソリューションは依然として非常に実用的です。 利点と欠点: このソリューションの利点は、分散トランザクションの問題を適切に解決し、最終的な一貫性を実現することです。欠点は、メッセージ テーブルがビジネス システムに結合されることです。 ベストエフォート通知 最大通知とは何ですか?ベストエフォート通知も分散トランザクションソリューションです。 以下は、企業のオンラインバンキング振込の例です。
ベスト エフォート通知スキームの目的は、通知の発信者が特定のメカニズムを使用して、ビジネス処理の結果を受信者に通知するためにベスト エフォートを行うことです。 ベストエフォート通知実装メカニズムは次のとおりです。 ベストエフォート通知ソリューション: ベストエフォート通知を実装するには、MQ ACK メカニズムを使用できます。 解決策は次のとおりです。
移転業務実施フローチャート: 対話プロセスは次のとおりです。
サガトランザクション Saga トランザクションは、プリンストン大学の Hector Garcia-Molina 氏と Kenneth Salem 氏によって提案されました。 基本的な考え方は、長いトランザクションを複数のローカルの短いトランザクションに分割し、それらを Saga トランザクション コーディネータが調整することです。正常に終了した場合は正常に完了します。ステップが失敗した場合、補正操作が逆の順序で 1 回呼び出されます。 サガの紹介:
サガの処刑命令:
Saga には 2 つの回復戦略があります。
たとえば、ユーザーが注文し、10 元を支払って 10 本以上のバラを購入するとします。
トランザクションが T4 で異常ロールバックされたと仮定します。 C4 がバラを在庫に戻そうとすると、ユーザーのバラがすべて使い果たされていることがわかります。これは Saga の欠点であり、トランザクション間の分離が欠如していることが原因です。 この問題は、次の解決策によって解決できます。
参考文献と謝辞:
|
<<: サーバー、ストレージ、ネットワーク仮想化の実装と適用
>>: クラウドプラットフォームへのデータベース移行を慎重に計画する方法
kvmla (2011~) 現在、日本の東京データセンターにはソフトバンク回線に接続されたサーバーが...
最近、クラウド コンピューティングに注目が集まっており、ストレージは基盤となるプラットフォームとして...
中国商人のpigyunは2009年にVPS事業を開始し、今年で3年目になります。現在、7月夏のプロモ...
2018 年 1 月 10 日、Teambition は上海 R&D センターで「複雑さを簡...
「Tmallに参加するにしても、Tencentに参加するにしても、私は明確な指示を与えています。ただ...
[51CTO.com からのオリジナル記事] 今日、クラウド コンピューティングは IT 業界全体の...
消費者層の入れ替わりや消費のグレードアップに伴い、各ブランドのマーケティングは徐々に内向きになってき...
サイバーセキュリティ企業 Valtix による最近の調査では、回答者の 51% が、マルチクラウド環...
前の 2 つの記事を書き終えた後、多くの友人が私の Web サイトを通じて、関連する最適化プロセスに...
電子商取引が急激に普及しているこの時代、多くの中小企業や個人の実店舗販売業者は、利益の一部を獲得でき...
概要:WeChatパブリックプラットフォームは昨日、「WeChatストア」を正式に開始しました。We...
著者はテンセントの現在の発展における問題点を分析し、テンセントの新しい文化創造理念はそれほど普及せず...
Hostcat は、bandwagonhost に関するプロモーション記事を公開しました: band...
テクノロジーの採用とベンダーロックインには違いがあります。テクノロジーの導入は重要ですが、ベンダーロ...
fapvps、この VPS プロバイダーに関して、Hostcat は関連する紹介情報を見つけることが...