ホームページ  >  記事  >  Java  >  fescar 分散トランザクションの詳細な紹介 (写真とテキスト)

fescar 分散トランザクションの詳細な紹介 (写真とテキスト)

不言
不言転載
2019-01-31 11:04:473424ブラウズ

この記事では、fescar 分散トランザクションについて説明します (写真とテキスト)。必要な方は参考にしていただければ幸いです。

1. fescar 分散トランザクション (概要)

1.1. 概要

Fescar は、分散トランザクションを解決する Alibaba のオープンソース分散トランザクション ミドルウェアです。マイクロサービス シナリオで直面するトランザクションの問題を、ビジネスへの侵入を一切発生させずに効率的に解決します。

1.2. Fescar の開発履歴

2014 年、Alibaba ミドルウェア チームは、グループ内のアプリケーションに分散トランザクション サービスを提供する TXC (淘宝網トランザクション コンストラクター) をリリースしました。

2016 年、TXC は製品変革を行い、GTS (グローバル トランザクション サービス) として Alibaba Cloud に上陸し、当時アユンのパブリック クラウドおよび独自のクラウド ソリューションにおける業界唯一のクラウド分散トランザクション製品となりました。 、多くの外部顧客にサービスを提供し始めました。

2019 年以来、アリババのミドルウェア チームは、TXC と GTS の技術蓄積に基づいて、コミュニティと協力してこの分散トランザクション ソリューションを構築するオープンソース プロジェクト Fescar (Fast & EaS​​y Commit And Rollback、FESCAR) を立ち上げました。

1.3. 設計の本来の意図

ビジネスへの侵入なし

高パフォーマンス

1.4.1.4.1.設計概念図

fescar 分散トランザクションの詳細な紹介 (写真とテキスト)

    トランザクション コーディネーター (TC):
  1. トランザクション コーディネーター

    は、グローバル トランザクションの実行ステータスを維持します。グローバル トランザクションのコミットまたはロールバックを調整および推進します。

  2. トランザクション マネージャー (TM):
  3. グローバル トランザクションの境界を制御します

    はグローバル トランザクション を開く責任を負い、最終的にグローバル トランザクションを開始しますcommit または global return ロールする解像度。

  4. リソース マネージャー (RM):
  5. ブランチ トランザクションの制御

    。ブランチの登録、ステータスのレポート、トランザクション コーディネーターからの指示の受け取り、ブランチ (ローカル) トランザクションの推進を担当します。コミットとロールバック。

  6. 1.4.2. XA との違いは何ですか?

fescar 分散トランザクションの詳細な紹介 (写真とテキスト)

    XA ソリューションの RM は、実際には
  1. データベース層

    にあります。RM は本質的にデータベースそのものです (提供することにより)。アプリケーションで使用するドライバー)。

  2. Fescar の RM は、アプリケーションの
  3. 側のセカンドパーティ パッケージ

    の形式でミドルウェア層としてデプロイされます。 は、データベース自体 プロトコルのサポート。もちろん では、データベースが XA プロトコルをサポートする必要はありません。これは、マイクロサービス ベースのアーキテクチャにとって非常に重要です。アプリケーション層は、ローカル トランザクションと分散トランザクション用の 2 つの異なるデータベース ドライバー セットに適応する必要がありません。

  4. この設計では、データベースの
  5. プロトコル サポート

  6. 1.4.3 に関する分散トランザクション スキームの要件が取り除かれています。 2 フェーズコミット

1.4.3.1. XA の 2PC プロセス

    #XA の PC プロセス

  1. fescar 分散トランザクションの詳細な紹介 (写真とテキスト)

  2. Phase2 の解決がコミットであるかロールバックであるかに関係なく、トランザクション リソースのロックは、Phase2 が完了するまで解放されるまで維持する必要があります。
  3. ビジネスが正常に実行されていると仮定すると、最終的にトランザクションの 90% 以上が正常に送信される可能性が高くなります。フェーズ 1 でローカル トランザクションを送信できますか?このようにして、90% 以上の場合、フェーズ 2 のロック保持時間を節約でき、全体の効率を向上できます。


  4. 1.4.3.2. fescar の 2PC プロセス

fescar 分散トランザクションの詳細な紹介 (写真とテキスト)

    ブランチ トランザクションのデータのローカル ロック
  1. はローカル トランザクションによって管理され、ブランチ トランザクション Phase1 の終了時に解放されます。

    同時に、ローカルトランザクションが終了すると、
  2. 接続
  3. も解放されます。

    ブランチトランザクション
  4. グローバルロック
  5. のデータはトランザクションコーディネーター側で管理されており、フェーズ2のグローバルコミットが決定すると、すぐにグローバルロックを解除することができます。グローバル ロールバックが解決された場合にのみ、

    グローバル ロックはブランチのフェーズ 2 が終了するまで保持されます。

    この設計により、ブランチ トランザクションによるリソース (データと接続) のロック時間が大幅に短縮され、全体的な同時実行性とスループットを向上させる基盤が提供されます。
  6. 1.4.4. ブランチ トランザクションをコミットおよびロールバックするにはどうすればよいですか? (キーポイント)

まず、アプリケーションは
    Fescar の JDBC データ ソース プロキシ
  1. (Fescar の RM

    ) を使用する必要があります。

  2. Fescar の JDBC データ ソース エージェントはビジネス SQL を解析し、ローカル トランザクション#を使用して、更新前後のビジネス データのデータ ミラーリング をロールバック ログ に整理します。 ## の ACID 機能は、同じローカル トランザクションでビジネス データの更新とログの書き込みのロールバックをコミットします。

  3. #このようにして、送信されたビジネス データの更新には、対応する
  4. ロールバック ログ

    exists
    # が必要であることが保証されます。 fescar 分散トランザクションの詳細な紹介 (写真とテキスト)

    ##解決がグローバル コミットの場合、この時点でブランチ トランザクションが送信されており、同期調整は必要ありません (非同期
  5. ロールバック ログのクリーンアップ
  6. のみが必要です)。フェーズ 2 は非常に早く完了できます。

    解決策がグローバル ロールバックの場合、RM はコーディネーターからロールバック リクエストを受信し、XID とブランチ ID を通じて対応するロールバック ログ レコードを検索し、ロールバック レコードを通じてフィードバックを生成します。 SQL を更新して実行し、ブランチのロールバックを完了します。
  7. 1.4.5. トランザクション伝播メカニズム

XID はグローバル トランザクションの一意の識別子です。トランザクション伝播メカニズムは次のことを行います。これはサービス呼び出しリンクを介して渡され、サービスのトランザクション コンテキストにバインドされます。このようにして、サービス リンク内のデータベース更新操作は、XID で表されるグローバル トランザクションにブランチを登録し、XID に含められます。同じグローバルトランザクションの管轄権。
  1. このメカニズムに基づいて、Fescar は
  2. あらゆるマイクロサービス RPC フレームワークをサポートできます。 Dubbo の Filter RpcContext など、XID を透過的に伝播できる特定のフレームワーク内のメカニズムを見つけてください。
  3. 1.4.6. ブランチの基本的な動作パターン

  4. グローバル トランザクションの一部であるブランチ トランザクションには、独自のビジネス ロジックに加えて、コーディネーターの動作:

ブランチ登録: ブランチ トランザクションのデータ操作が実行される前に、次のブランチ トランザクション データ操作を既に実行されているトランザクションに含めるためにコーディネーターに登録する必要があります。オープンされたグローバルトランザクションの管理では、ブランチ登録が成功した後にのみデータ操作を実行できます。

  1. ステータス報告: ブランチ トランザクションのデータ操作が完了した後、その実行結果をトランザクション コーディネーターに報告する必要があります。

  2. ブランチ送信: コーディネーターによって発行されたブランチ トランザクション送信リクエストに応答し、ブランチ送信を完了します。

  3. ブランチ ロールバック: コーディネーターによって発行されたブランチ トランザクション ロールバック リクエストに応答し、ブランチ ロールバックを完了します。

  4. 1.4.7. AT モード ブランチの動作モード
    fescar 分散トランザクションの詳細な紹介 (写真とテキスト)

    ビジネス ロジックはトランザクションのメカニズムや相互作用に注意を払う必要はありません。ブランチとグローバルトランザクション間の処理は自動で実行されます。


  5. fescar 分散トランザクションの詳細な紹介 (写真とテキスト)1.4.8. MTパターンブランチの動作パターン

ビジネスロジックを Prepare/Commit/Rollback の 3 つの部分に分解して MT ブランチを形成し、グローバル トランザクションに参加する必要があります。


  1. fescar 分散トランザクションの詳細な紹介 (写真とテキスト)1.4.9. 混合モード

  2. AT モードと MT モードのブランチは動作において基本的に一貫しているため、完全に互換性があります。つまり、
グローバル トランザクションでは、AT と MT のブランチが同時に存在できます

。このようにして、

ビジネス シナリオを包括的にカバーする

という目的を達成できます。AT モードがサポートできる場合は AT モードを使用し、AT モードが一時的にサポートできない場合は代わりに MT モードを使用します。さらに、当然のことながら、MT モードで管理される非トランザクション リソースも、トランザクションをサポートするリレーショナル データベース リソースとともに同じ分散トランザクション管理に含めることができます。 1.5. 暫定バージョンの計画v0.1.0

## マイクロサービス フレームワークのサポート: Dubbo

  • データベースのサポート: MySQL

  • Spring AOP に基づくアノテーション

  • トランザクション コーディネーター: スタンドアロン バージョン

  • ## v0.5.x

マイクロサービス フレームワークのサポート: Spring Cloud

  • MT モード

  • TCC のサポートモード トランザクション アダプテーション

  • 動的構成とサービス検出

  • トランザクション コーディネーター: 高可用性クラスターのバージョン

  • v0.8.x

メトリクス

    ##コンソール: モニタリング/導入/アップグレード/容量拡張
  • v1.0.0
  • 一般提供: 運用環境に適用可能

    v1.5.x
  • データベースサポート: Oracle/PostgreSQL/OceanBase

    Spring AOP のアノテーションに依存しない
  • #ホットスポット データ最適化された処理メカニズム
  • RocketMQ トランザクション メッセージはグローバル トランザクション管理に組み込まれます
  • NoSQL はグローバル トランザクション管理の適応メカニズムに組み込まれます
  • HBase のサポート
  • Redis のサポート
  • #v2.0.0

    #########サポート

    • 1.6. 概要

    • 概要を読んで血を吐きましたが、どのマイクロサービス RPC フレームワークもサポートしていると明記されています。 Spring Cloud に適した方法を選択してください。Spring Cloud が次のバージョンに統合される予定であるとのことでした。

    ## を推奨します。 #1.7. Github オープンソース アドレス

    https://github.com/alibaba/fescar/

以上がfescar 分散トランザクションの詳細な紹介 (写真とテキスト)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。