分散トランザクション、このようにプレイできますか?

分散トランザクション、このようにプレイできますか?

複数のデータを同時に操作する場合、そのデータの整合性と一貫性をどのように確保すればよいでしょうか?

回答: 取引は一般的な慣行です。

[[247728]]

例えば:

ユーザーが注文を行うと、残高テーブル、注文テーブル、取引テーブルを変更する必要があるため、次のような疑似コードが作成されます。

  1. トランザクションを開始します。
  2. CURD テーブル t_account;例外ロールバック。
  3. CURD テーブル t_order;例外ロールバック。
  4. CURD テーブル t_flow;例外ロールバック。
  5. 専念;
  • 残高テーブル、注文テーブル、フロー テーブルのすべての SQL 操作が成功した場合、すべてが送信されます。
  • いずれかが失敗した場合は、すべてをロールバックします

データの整合性と一貫性を確保するためのトランザクション。

取引計画にはどのような潜在的な問題がある可能性がありますか?

回答: インターネットのビジネス特性により、大量のデータと大量の同時実行性では、システム パフォーマンスを向上させるためにデータベースの分割を頻繁に使用する必要があります。データベースが分割されている場合、残高、注文、取引は異なるデータベース、または異なるデータベース インスタンスに分散される可能性があります。この場合、データベースのネイティブ トランザクションを使用してデータの一貫性を確保することはできません。

高度な同時実行性と実装の容易さを備えた分散トランザクションは、業界ではまだ十分に解決されていない難しい問題です。それで、私たちに何ができるでしょうか?

A: 補償取引は一般的な慣行です。

補償取引とは何ですか?

回答:補償取引とは、業務側で逆の業務操作を実行する取引です。

例えば:

残高を変更するには、次のトランザクションを実行します。

  1. int Do_AccountT(uid, お金){
  2. トランザクションを開始します。
  3. //残高はこの金額だけ変わります
  4. uid の money を含む CURD テーブル t_account。
  5. anyException ロールバックは NO を返します。
  6. 専念;
  7. YESを返します。
  8. }
  9.   

次に、残高を変更するには、補償トランザクションを次のようにします。

  1. int Compensate_AccountT(uid, お金){
  2. //お金の逆操作を行う
  3. Do_AccountT(uid, -1*money)を返す{
  4. }

同様に、注文操作の場合、トランザクションは次のようになります: Do_OrderT、新しい注文を追加します。

注文操作の場合、補正トランザクションは Compensate_OrderT であり、注文を削除します。

バランスと順序の一貫性を確保するための疑似コード:

  1. // 最初のトランザクションを実行する
  2. intフラグ= Do_AccountT ();
  3. if(フラグ= YES ){
  4. //最初のトランザクションが成功したら、2番目のトランザクションを実行します
  5. フラグ= Do_OrderT ();
  6. if(フラグ= YES ){
  7. // 2番目のトランザクションが成功した場合、それは成功します
  8. YESを返します。
  9. }
  10. それ以外{
  11. // 2番目のトランザクションが失敗した場合、最初のトランザクションの補正トランザクションを実行します
  12. 補償アカウントT();
  13. }
  14. }

補償取引のデメリットは何ですか?

  • 異なるビジネスでは異なる補償取引を作成する必要がありますが、これは普遍的ではありません。
  • トランザクションの失敗に対する補償は考慮されません。
  • ビジネス プロセスが複雑な場合、if/else は複数のレイヤーにネストされます。

ナレーション: 上記の例では、バランスと順序の一貫性のみを考慮しているため、2 * 2 = 4 つのブランチがあります。残高 + 注文 + トランザクションの一貫性を考慮すると、2*2*2=8 の if/else 分岐が発生し、複雑さが指数関数的に増加します。

他に一貫性を保つための簡単な実践方法はありますか?

回答: 複数のデータベース インスタンス上の複数のトランザクションの一貫性を確保するには、「コミット後の最適化」を実行します。

単一のデータベースでは、一貫性を確保するために次のような大規模なトランザクションが使用されます。

  1. トランザクションを開始します。
  2. CURD テーブル t_account;例外ロールバック。
  3. CURD テーブル t_order;例外ロールバック。
  4. CURD テーブル t_flow;例外ロールバック。
  5. 専念;

複数のデータベースに分割された後、大きなトランザクションは次の 3 つの小さなトランザクションになります。

  1. トランザクション1を開始します。
  2. //最初のライブラリトランザクション実行
  3. CURD テーブル t_account;例外ロールバック。
  4. // 最初のデータベーストランザクションがコミットされる
  5. コミット1;
  6.  
  7. トランザクション2を開始します。
  8. //2番目のライブラリトランザクション実行
  9. CURD テーブル t_order;例外ロールバック。
  10. // 2 番目のデータベース トランザクションのコミット
  11. コミット2;
  12.  
  13. トランザクション3を開始します。
  14. //3番目のライブラリトランザクション実行
  15. CURD テーブル t_flow;例外ロールバック。
  16. // 3番目のデータベーストランザクションがコミットされる
  17. コミット3;

ナレーション: これら 3 つのトランザクションは 3 つのデータベース、またはデータベースの 3 つの異なるインスタンスで発生することを再度思い出してください。

トランザクションは、実行と送信の 2 つのフェーズに分かれています。

  • CURDの実行には長い時間がかかります
  • コミットは非常に速く実行されます

したがって、実行プロセス全体のタイムラインは次のようになります。

  • 最初のトランザクションの実行には 200 ミリ秒、コミットには 1 ミリ秒かかります。
  • 2 番目のトランザクションは実行に 120 ミリ秒、コミットに 1 ミリ秒かかります。
  • 3 番目のトランザクションは実行に 80 ミリ秒、コミットに 1 ミリ秒かかります。

どの時点で矛盾が生じるのでしょうか?

回答: 最初のトランザクションが正常に送信されてから最後のトランザクションが正常に送信されるまでの間に何らかの問題 (サーバーの再起動、データベースの異常など) が発生した場合、データの不整合が発生する可能性があります。

ナレーション: 上の図に示すように、最後の 202 ミリ秒以内に異常が発生し、不整合が生じています。

コミット後の最適化とは何ですか?

回答: トランザクションの実行と送信の順序が変更された場合、トランザクションは最初に実行され、最後に一緒に送信されます。

  • 最初のトランザクションの実行には 200 ミリ秒かかり、2 番目のトランザクションには 120 ミリ秒かかり、3 番目のトランザクションには 80 ミリ秒かかります。
  • 最初のトランザクションは 1 ミリ秒コミットし、2 番目のトランザクションは 1 ミリ秒コミットし、3 番目のトランザクションは 1 ミリ秒コミットします。

コミット後の最適化後、不整合はいつ発生しますか?

A: 質問に対する答えは前と同じです。最初のトランザクションが正常に送信されてから最後のトランザクションが正常に送信されるまでの間に何らかの問題 (サーバーの再起動、データベースの異常など) が発生した場合、データの不整合が発生する可能性があります。

ナレーション: 上の図に示すように、最後の 2 ミリ秒以内に異常が発生し、不整合が生じます。

違いや矛盾点は何でしょうか?

答え:

  • シリアル トランザクション ソリューションでは、合計実行時間は 303 ミリ秒であり、最後の 202 ミリ秒の例外によって不整合が発生する可能性があります。
  • 送信後の最適化ソリューションの合計実行時間も 303 ミリ秒ですが、不一致は最後の 2 ミリ秒の例外によって発生します。

データの一貫性の問題は完全に解決されていませんが、不整合の可能性は大幅に減少しています。

ナレーション: 上記の例では、確率は 100 分の 1 に減少します。

提出後の最適化の欠点は何ですか?

A: トランザクションのスループットに影響します。

  • シリアル トランザクション スキームでは、最初のデータベース トランザクションがコミットされるとデータベース接続が解放されます。
  • コミット後の最適化ソリューション: すべてのトランザクションが実行されるまで、すべてのデータベース接続は解放されません。

つまり、データベース接続にかかる時間が長くなり、システム全体のスループットが低下します。

要約する

分散トランザクション、2 つの一般的な方法:

  • 報酬業務
  • コミット後の最適化

バンドル

  1. trx1.exec(); trx1.コミット();
  2. trx2.exec(); trx2.コミット();
  3. trx3.exec(); trx3.コミット();

最適化対象:

  1. trx1.exec(); trx2.exec(); trx3.exec();
  2. trx1.コミット(); trx2.コミット(); trx3.コミット();

この小さな変更 (コストは極めて低い) では、マルチデータベース分散トランザクションにおけるデータ一貫性の問題を完全に解決することはできませんが、スループットを犠牲にして、データの不整合の可能性を大幅に減らすことができます。

一貫性とスループットのトレードオフについては、ビジネス アーキテクトがトレードオフを慎重に検討する必要もあります。

ナレーション: 前にも言ったように、一般的なビジネス慣行から逸脱した建築設計は、ただの不正行為です。

結論よりもアイデアの方が重要です。誰もが恩恵を受けられることを願っています。

【この記事は51CTOコラムニスト「58 Shen Jian」によるオリジナル記事です。転載については原著者にお問い合わせください。

この著者の他の記事を読むにはここをクリックしてください

<<:  エッジコンピューティングとデータセンターの未来

>>:  マイクロソフトのエンタープライズ クラウド サービスが中国に集結、クラウド イノベーションに無限の可能性をもたらす

推薦する

#618# edgenat: 香港 CN2、韓国 SK、米国 AS4837、VPS および専用サーバー、月払いで 20% オフ、年払いで 30% オフ

618 中間プロモーション月間中、edgenat はすべての VPS および専用サーバーに対して特別...

Neusoft Cloud Technology が Alibaba Cloud Lindorm データベースを導入し、自動車のインターネットのデータ保存コストを 80% 削減

記者は4月9日、東軟集団の子会社である東軟雲科技が立ち上げた自動車インターネットクラウドプラットフォ...

SEO最適化を行うには「勝つ」必要がある

中国文化は奥深く、長い歴史を持っています。漢字は深い文化的遺産を持ち、多くの意味を表しています。オン...

クラウドコンピューティングの未来は大きく変わる

2 年前、Wired 誌に非常に目を引く記事が掲載されました。「クラウド コンピューティングの時代は...

Yecao Cloud: 618 中年セール、香港 VPS は年間 138 元から、広帯域 + 無制限トラフィック、BGP/CN2/Huawei 専用回線

Yecao Cloud(〜、アジア太平洋APINCおよび欧州RIPE NCCのメンバー)は、618年...

ion: サンノゼ cn2 gia VPS、厳格な管理、大規模なデータセンターの承認、信頼できる品質、月額 35 ドルから

Krypt傘下のVPSブランドであるionが、サンノゼデータセンターのVPSにcn2 gia回線のア...

テンプレート Web サイトの構築はなぜ良くないのでしょうか? 革新がなければ、行き止まりになるだけです。

月収10万元の起業の夢を実現するミニプログラム起業支援プラン活発な生活を楽しむことは、必ずしも将来楽...

#Cyber​​Monday# itldc: 9 日間 50% オフ プロモーション、9 つのデータセンター VPS + 専用サーバー

itldc は、12 月 1 日から 12 月 9 日までの 9 日間、Xeon E3 シリーズ C...

不確実な経済の中でCIOが効率性を見出す方法

支出に対する監視が厳しくなるにつれ、IT リーダーは予算支出を見直し、クラウドの使用、自動化、効率的...

ブランドKOLマーケティングメレー

ショートビデオやライブ放送の人気により、新世代のブランドが急速に台頭しています。 2017年から現在...

権威の高いウェブサイトのための SEO の方向性 4: ロングテール キーワードの調査

みなさんこんにちは。私はMuzi Chengzhouです。権威の高いウェブサイトの場合、改善する必要...

百度の青大根アルゴリズムの威力が今日現れ始めている

2月19日、Baiduウェブマスターコミュニティは、Baidu Green Radish Algor...

APP のマーケティング モデルは何ですか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています無料アプリ...

高品質なソフト記事の書き方、ソフト記事によるマーケティングプロモーションの実施方法とは?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています前回の記事...

ウェブサイトのプロモーションに入札することに不安を感じていますか? キーワード分析を学べば、その理由がわかります。

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますウェブサイ...