(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-02-24
(54)【発明の名称】トランザクション処理方法、装置、機器並びにコンピュータプログラム
(51)【国際特許分類】
G06F 9/50 20060101AFI20220216BHJP
G06F 9/46 20060101ALI20220216BHJP
G06F 16/23 20190101ALI20220216BHJP
【FI】
G06F9/50 150E
G06F9/46 430
G06F16/23
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2021509740
(86)(22)【出願日】2020-10-15
(85)【翻訳文提出日】2021-03-11
(86)【国際出願番号】 CN2020121033
(87)【国際公開番号】W WO2021109719
(87)【国際公開日】2021-06-10
(31)【優先権主張番号】201911223449.3
(32)【優先日】2019-12-03
(33)【優先権主張国・地域又は機関】CN
(81)【指定国・地域】
(71)【出願人】
【識別番号】514187420
【氏名又は名称】テンセント・テクノロジー・(シェンジェン)・カンパニー・リミテッド
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ヤン,ジィア
(72)【発明者】
【氏名】フェイ,チアン
(72)【発明者】
【氏名】チェン,ニングオ
(72)【発明者】
【氏名】リィウ,デェジ
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175CA09
(57)【要約】
本願実施例は、トランザクション処理方法、装置、機器並びにコンピュータ記憶媒体を開示し、前記方法は、データベースから取得した、処理対象となるトランザクションを少なくとも2つのサブトランザクションに分割するステップと、サブトランザクションのそれぞれが属するネットワークインターフェースと前記サブトランザクションによって実現される各機能とに従って、前記サブトランザクションのそれぞれをN個の部分に分割するステップであって、前記N個の部分は、関連付け関係を持つものである、ステップと、前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得するステップと、前記処理結果に従って異常なサブトランザクションがあると決定した場合、前記異常なサブトランザクションの異常原因にマッチングする処理戦略を決定するステップと、前記処理対象となるトランザクションの最終的な処理結果を取得するために、前記処理戦略を使用して、前記異常なサブトランザクションを処理するステップとを含む。
【選択図】
図3
【特許請求の範囲】
【請求項1】
トランザクション処理機器が実行する、トランザクション処理方法であって、
データベースから取得した、処理対象となるトランザクションを少なくとも2つのサブトランザクションに分割するステップと、
サブトランザクションのそれぞれが属するネットワークインターフェースと前記サブトランザクションによって実現される各機能とに従って、前記サブトランザクションのそれぞれをN(Nは1より大きい整数である)個の部分に分割するステップであって、前記N個の部分は、関連付け関係を持つものである、ステップと、
前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得するステップと、
前記処理結果に従って異常なサブトランザクションがあると決定した場合、前記異常なサブトランザクションの異常原因にマッチングする処理戦略を決定するステップと、
前記処理対象となるトランザクションの最終的な処理結果を取得するために、前記処理戦略を使用して、前記異常なサブトランザクションを処理するステップと、を含む、トランザクション処理方法。
【請求項2】
前記サブトランザクションのそれぞれが属するネットワークインターフェースと前記サブトランザクションによって実現される各機能とに従って、前記サブトランザクションのそれぞれをN個の部分に分割するステップであって、前記N個の部分は、関連付け関係を持つものである、ステップは、
前記サブトランザクションのそれぞれが属するネットワークインターフェースのカテゴリセットを決定するステップと、
前記ネットワークインターフェースのカテゴリセットと、対応するサブトランザクションによって実現される各機能とに従って、前記対応するサブトランザクションをN個の部分に分割するステップと、
関連付け関係を持つN個の部分を形成するために、前記サブトランザクションのそれぞれによって実現される各機能に従って、前記N個の部分間の関連付け関係を決定するステップと、を含む、
請求項1に記載のトランザクション処理方法。
【請求項3】
前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得するステップは、
前記少なくとも2つのサブトランザクション間が独立する場合、前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得するステップを含む、
請求項1または2に記載のトランザクション処理方法。
【請求項4】
前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得するステップは、
前記少なくとも2つのサブトランザクション間に交差がある場合、前記交差および事前設定されたホワイトリストに従って、前記少なくとも2つのサブトランザクション間の処理パスを決定し、前記サブトランザクションのそれぞれの処理結果を取得するために、前記処理パスに従って、前記サブトランザクションのそれぞれのN個の部分を前記関連付け関係に基づいて順次に処理するステップを含む、
請求項3に記載のトランザクション処理方法。
【請求項5】
前記サブトランザクションが属するネットワークインターフェースのカテゴリセットにN個のカテゴリが含まれる場合、前記サブトランザクションを少なくともM(Mは1より大きい整数である)個の部分に分割し、前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得するステップは、
前記関連付け関係に従って、少なくともM個の部分間のシリアル実行順序を決定するステップと、
最後に実行される部分の処理結果を取得するために、前記シリアル実行順序に従って、前記シリアル実行順序における前記少なくともM個の部分のM-1番目の部分の処理結果に基づいて、前記シリアル実行順序における前記少なくともM個の部分のM番目の部分を実行するステップと、を含む、
請求項2に記載のトランザクション処理方法。
【請求項6】
前記処理対象となるトランザクションの最終的な処理結果を取得するために、前記処理戦略を使用して、前記異常なサブトランザクションを処理する前に、前記方法は、
前記処理戦略を使用して前記異常なサブトランザクションを処理した結果に従って、新しい処理結果を決定するステップと、
前記新しい処理結果が、前記異常なサブトランザクションが依然として異常な状態にあることである場合、現在処理されたサブトランザクションの処理結果セットを決定するステップと、
メッセージミドルウェアを使用して、前記処理結果セットを記憶するステップと、
前記処理対象となるトランザクションの最終的な処理結果を取得するために、入力された読み取り命令を受信した場合、前記メッセージミドルウェアから前記処理結果セットを読み取り、異常なサブトランザクションのN個の部分を処理し続けるステップと、を含む、
請求項1ないし5のいずれか一項に記載のトランザクション処理方法。
【請求項7】
前記処理結果に従って異常なサブトランザクションがあると決定した場合、前記異常なサブトランザクションの異常原因にマッチングする処理戦略を決定するステップは、
前記異常原因が、前記異常なサブトランザクションを処理するときにユーザ側で異常が発生したことである場合、前記異常なサブトランザクションの前のサブトランザクションの処理結果を前記異常なサブトランザクションの処理結果として使用するステップと、
前記異常原因が、前記異常なサブトランザクションを処理するときにサーバ側で異常が発生したことである場合、前記関連付け関係に従って、前記異常なサブトランザクションのN個の部分を再び処理するステップと、を含む、
請求項1ないし6のいずれか一項に記載のトランザクション処理方法。
【請求項8】
前記データベースから取得した、処理対象となるトランザクションを少なくとも2つのサブトランザクションに分割するステップは、
前記処理対象となるトランザクションを実現するために呼び出す必要のあるリソースインターフェースセットを決定するステップと、
前記処理対象となるトランザクションをリソースインターフェースセットと一致する複数のサブトランザクションに分割するステップと、
対応的に、受信した処理実行命令に応答して、各リソースインターフェースを起動するステップと、
前記N個の部分のうち、最後に実行される部分の処理結果を取得するために、リソースインターフェースのフィードバックの準備完了情報を受信した場合、前記リソースインターフェースにおいて、一致するサブトランザクションのN個の部分を前記関連付け関係に従って処理するステップと、を含む、
請求項1ないし7のいずれか一項に記載のトランザクション処理方法。
【請求項9】
トランザクション処理装置であって、
データベースから取得した、処理対象となるトランザクションを少なくとも2つのサブトランザクションに分割するように構成される第1分割モジュールと、
サブトランザクションのそれぞれが属するネットワークインターフェースと前記サブトランザクションによって実現される各機能とに従って、前記サブトランザクションのそれぞれをN(Nは1より大きい整数である)個の部分に分割するように構成される第2分割モジュールであって、前記N個の部分は、関連付け関係を持つものである、第2分割モジュールと、
前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得するように構成される第1処理モジュールと、
前記処理結果に従って異常なサブトランザクションがあると決定した場合、前記異常なサブトランザクションの異常原因にマッチングする処理戦略を決定するように構成される第1決定モジュールと、
前記処理対象となるトランザクションの最終的な処理結果を取得するために、前記処理戦略を使用して、前記異常なサブトランザクションを処理するように構成される第2処理モジュールと、を備える、トランザクション処理装置。
【請求項10】
トランザクション処理機器であって、
実行可能な命令を記憶するように構成されるメモリと、
前記メモリに記憶された実行可能な命令を実行すると、請求項1ないし8のいずれか一項に記載のトランザクション処理方法を実現するように構成されるプロセッサと、を備える、トランザクション処理機器。
【請求項11】
コンピュータプログラムであって、
コンピュータに、請求項1ないし8のいずれか一項に記載のトランザクション処理方法を実行させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、2019年12月03日に中国特許局に提出された、出願番号がCN201911223449.3である中国特許出願に基づいて提出されるものであり、当該中国特許出願の優先権を主張し、当該中国特許出願の全ての内容が参照によって本願に組み込まれる。
【0002】
本願は、データベース分野、特に、トランザクション処理方法、装置、機器並びにコンピュータ記憶媒体に関するものである。
【背景技術】
【0003】
関連技術のデータベースにおいて、トランザクションAがデータを操作して提出(コミットとも呼ばれる)(commit)またはロールバック(rollback)する前に、他のトランザクションは、トランザクションAによるデータの修正を確認することができない。長いトランザクションの場合、トランザクションがコミットされていないと、同じリソースを操作する要求ブロッキングまたは処理のタイムアウトが発生する。このように、サブトランザクションのコミットは、データベースのローカルトランザクションに依存するため、サービス全体のパフォーマンスは、スタンドアロンデータベースの処理能力によって制限され、処理効率が低い。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本願実施例は、マッチング処理戦略を使用して異常なサブトランザクションを自動的に処理することにより、フォールトトレランスおよびトランザクション処理能力を向上させることができる、トランザクション処理方法、装置、機器並びにコンピュータ記憶媒体を開示する。
【課題を解決するための手段】
【0005】
本願実施例の技術的解決策は、次のように実現される。
【0006】
第1態様によれば、本願実施例は、トランザクション処理方法を開示し、前記方法はトランザクション処理機器によって実行され、前記方法は、データベースから取得した、処理対象となるトランザクションを少なくとも2つのサブトランザクションに分割するステップと、サブトランザクションのそれぞれが属するネットワークインターフェースと前記サブトランザクションによって実現される各機能とに従って、前記サブトランザクションのそれぞれをN(Nは1より大きい整数である)個の部分に分割し、前記N個の部分は、関連付け関係を持つものである、ステップと、前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得するステップと、前記処理結果に従って異常なサブトランザクションがあると決定した場合、前記異常なサブトランザクションの異常原因にマッチングする処理戦略を決定するステップと、前記処理対象となるトランザクションの最終的な処理結果を取得するために、前記処理戦略を使用して、前記異常なサブトランザクションを処理するステップとを含む。
【0007】
第2態様によれば、本願実施例は、トランザクション処理装置を開示し、前記装置は、データベースから取得した、処理対象となるトランザクションを少なくとも2つのサブトランザクションに分割するように構成される第1分割モジュールと、サブトランザクションのそれぞれが属するネットワークインターフェースと前記サブトランザクションによって実現される各機能とに従って、前記サブトランザクションのそれぞれをN(Nは1より大きい整数である)個の部分に分割するように構成される第2分割モジュールであって、前記N個の部分は、関連付け関係を持つものである、第2分割モジュールと、前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得するように構成される第1処理モジュールと、前記処理結果に従って異常なサブトランザクションがあると決定した場合、前記異常なサブトランザクションの異常原因にマッチングする処理戦略を決定するように構成される第1決定モジュールと、前記処理対象となるトランザクションの最終的な処理結果を取得するために、前記処理戦略を使用して、前記異常なサブトランザクションを処理するように構成される第2処理モジュールとを備える。
【0008】
第3態様によれば、本願実施例は、トランザクション処理機器を開示し、前記機器は、実行可能な命令を記憶するように構成されるメモリと、前記メモリに記憶された実行可能な命令を実行すると、上記のトランザクション処理方法を実現するように構成されるプロセッサとを備える。
【0009】
第4態様によれば、本願実施例は、実行可能な命令が記憶された記憶媒体(非一時的な記憶媒体)を開示し、前記記憶媒体は、プロセッサによって実行されると、本願実施例で提供されるトランザクション処理方法を実現するように構成される。
【発明の効果】
【0010】
本願実施例は、以下の有益な効果を有する。処理対象となるトランザクションについては、サブトランザクションが属するネットワークインターフェースに基づいてサブトランザクションを複数の部分に分割し、各部分を処理して、全体的なサービスのパフォーマンスがスタンドアロンデータベースの処理能力によって制限されるという問題を解決し、処理結果が異常である異常なサブトランザクションについては、異常原因に基づき、マッチング処理戦略を選択して異常なサブトランザクションを処理することにより、最終的な処理結果を取得する。このように、マッチング処理戦略を使用して異常なサブトランザクションを自動的に処理して、フォールトトレランスおよびトランザクション処理能力を向上させる。
【図面の簡単な説明】
【0011】
ここでの図面は、本明細書に組み込まれてその一部を構成し、これらの図面は、本願と一致する実施例を示し、明細書とともに本願実施例の技術的解決策を説明するために使用される。
【
図1】本願実施例で提供されるトランザクション処理システムの一例示的なアーキテクチャの概略図である。
【
図2A】本願実施例で提供されるトランザクション処理システムの別の一例示的なアーキテクチャの概略図である。
【
図2B】本願実施例で提供されるトランザクション処理システムの概略的な構造図である。
【
図3】本願実施例で提供されるトランザクション処理方法の実装プロセスの概略図である。
【
図4】本願実施例で提供されるトランザクション処理方法の別の具現プロセスの概略図である。
【
図5】本願実施例で提供されるトランザクション処理システムのフレームワーク図である。
【
図6】本願実施例で提供される長いトランザクション処理の別のフレームワーク図である。
【
図7】本願実施例で提供されるトランザクション処理方法の実装プロセスの概略図である。
【
図8】本願実施例で提供される長いトランザクションプロセス状態の実行パス図である。
【
図9】本願実施例で提供されるトランザクション処理方法の別の実装プロセスの概略図である。
【
図10】本願実施例のメッセージミドルウェアがトランザクション状態を記憶する実装プロセスの概略図である。
【
図11】本願実施例による振替要求を実現する実施プロセスの概略図である。
【
図12】本願実施例で提供されるトランザクション処理方法の実装プロセスの概略図である。
【発明を実施するための形態】
【0012】
本願の目的、技術的解決策および利点をより明確にするために、以下、図面を参照して本願をさらに詳細に説明し、説明された実施例は、本願を限定するものに見なされるべきではなく、創造的な努力なしに当業者が取得した他のすべての実施例は、本出願の保護範囲に含まれるものとする。
【0013】
以下の説明では、「いくつかの実施例」に関し、それらは全ての可能な実施例のサブセットを説明するが、「いくつかの実施例」は全ての可能な実施例の同じサブセットまたは異なるサブセットであってもよく、競合することなく互に組み合わせることができることを理解できる。
【0014】
以下の説明において、「第1/第2/第3」という用語は、オブジェクトに対する特定の配列を表すものではなく、類似するオブジェクトを区別するものに過ぎない。「第1/第2/第3」は、いくつかの実施例で説明される本願実施例がいくつかの実施例で図示または説明された順序以外の順序で実施されることができるように、許可される場合、特定の順序や前後の順序を交換することができることを理解できる。
【0015】
特に定義されない限り、本明細書で使用される技術用語および科学用語は、本願の技術分野の当業者によって一般に理解されるのと同じ意味を有する。本明細書で使用する用語は、本願実施例を説明することのみを目的としており、本願を限定することを意図するものではない。
【0016】
本願実施例をより詳細に説明する前に、本願実施例に関する名詞や用語について説明する。本願実施例に関する名詞や用語は、以下の解釈に適用する。
【0017】
1)ACID特性:トランザクションは、それぞれ、原子性(Atomicity)、整合性(Consistency)、隔離性(Isolation)および持続性(Durability)の4つの特性を有し、略称して、トランザクションのACID特性である。
【0018】
2)長いトランザクション:1つのトランザクションが長い時間をかけて完了できない場合があり、それが、1つの長いトランザクション(Long Transaction)である。データベースにおいて、実行時間が6秒を超えるトランザクションは、長いトランザクションと見なされる。Informixは、論理ログスペース全体の特定の比例を超えるトランザクション(論理ログスペース全体を占めるトランザクションの割合が「長いトランザクション深度喫水線比率」というパラメータで限定された値を超える)を、「長いトランザクション」と呼ぶ。
【0019】
3)パブリッシュ-サブスクライブメカニズム(PubSub:Publish-Subscribe):メッセージングモードの紹介は、長い歴史を持つクラシックのメッセージングモードであり、サブスクライブパブリッシュモードは、複数のサブスクライバオブジェクトが特定のトピックオブジェクトを同時にモニタリングするように、一対多の依存関係を定義する。当該トピックオブジェクトは、自体の状態が変化するときに、全てのサブスクライバオブジェクトに通知して、それらが、自身の状態を自動的に更新するようにする。システムを一連の協調クラスに分割すると、非常に悪い副作用がある。それは、対応するオブジェクト間の整合性を維持する必要があることであり、これは、メンテナンス、拡張および再利用に不便が生じる。1つのオブジェクトの変更で他のオブジェクトを同時に変更する必要があり、且つ、変更する必要があるオブジェクトの数が具体的に分からない場合、サブスクライブパブリッシュモードを使用することができる。
【0020】
4)クラスタサーバ(Broker):クラスター内の1つまたは複数のサーバの総称であり、Brokerは、レプリケーションメカニズムがない。brokerがダウンすると、当該brokerのメッセージは使用できなくなる。Brokerは、サブスクライバの状態を保存しないため、サブスクライバ自体が保存する。
【0021】
5)ブックキーパ(BookKeeper)は、ログエントリストリームの記憶と永続性を提供するサービスフレームワークである。ログフレームワークに特に適合し、よりクラシックのアプリケーションは、メッセージキューの永続的なフレームワークとして使用される。
【0022】
6)先書きログ(Write-Ahead Logging):トランザクションログは、トランザクションの効率を向上させるのに役立つ。トランザクションログを使用すると、ストレージエンジンは、ターゲットデータを変更するときに、変更されたデータ自体を毎回ディスクに永続化することなく、当該データのメモリコピーを変更して、変更動作をハードディスクに永続化されたトランザクションログに記録するだけで済む。トランザクションログは追加方式を使用するため、ログを書き込む操作は、ディスク上の複数の場所にヘッドを移動する必要があるランダムI/Oとは異なって、ディスク上の小さな領域での順序的I/Oであり、そのため、トランザクションログの方式を使用すると比較的に速い。トランザクションログが永続化された後、メモリ内の変更されたデータをバックグラウンドでゆっくりとディスクにフラッシュして戻すことができる。
【0023】
7)ブロックチェーン(Blockchain):ブロック(Block)によって形成される、暗号化されたチェーン型のトランザクション記憶構造である。
【0024】
8)ブロックチェーンネットワーク(Blockchain Network):コンセンサスを通じて新しいブロックをブロックチェーンに組み込む一連のノードのセットである。
【0025】
9)クラウド技術(Cloud technology)は、クラウドコンピューティングビジネスモードに基づいて適用されるネットワーク技術、情報技術、統合技術、管理プラットフォーム技術、アプリケーション技術などの総称であり、リソースプールを形成することができ、必要に応じて使用することができ、柔軟で便益である。クラウドコンピューティング技術は重要なサポートになる。技術ネットワークシステムのバックグラウンドサービスは、ビデオウェブサイト、画像ウェブサイトおよびより多くのポータルウェブサイトなど、大量のコンピューティングおよび記憶リソースが必要である。インターネット業界の急速な発展および応用に伴い、各物品に独自の識別マークが付けられ、論理処理のためにバックグラウンドに伝送する必要があり、異なるレベルのデータは個別に処理され、様々な業界データは強力なシステムのサポートを必要とし、クラウドコンピューティングを通じてのみ実現することができる。
【0026】
10)データベース(Database、DB)は、要するに、電子化されたファイルキャビネットである、電子ファイルを記憶する場所と見なすことができ、ユーザは、ファイル内のデータに対して追加、照会、更新、削除などの操作を実行することができる。いわゆる「データベース」は、特定の方式で一緒に記憶され、複数のユーザと共有することができ、可能な限り小さい冗長性を有し、アプリケーションプログラムから独立したデータセットである。
【0027】
11)データベース管理システム(DBMS:Database Management System)は、データベース管理用に設計されたコンピュータソフトウェアシステムであり、通常、記憶、インターセプト、セキュリティ、バックアップなどの基本機能を備えている。データベース管理システムは、リレーショナル、エクステンシブル マークアップ ランゲージ(XML:Extensible Markup Language)など、システム自体がサポートするデータベースモデルに従って分類し、またはサーバクラスタ、携帯電話など、サポートするコンピュータタイプに従って分類し、または構造化照会言語(SQL:Structured Query Language)、XQueryなど、使用している照会言語に従って分類し、または最大規模、最大実行速度など、パフォーマンスインパルスフォーカスに従って分類し、またはその他の分類方式を使用することができる。どの分類方式を使用しても、様々な照会言語を同時にサポートするなど、いくつかのDBMSはカテゴリをまたがることができる。
【0028】
関連技術において、サブトランザクションのコミットがデータベースのローカルトランザクションに依存するため、全体的なサービスのパフォーマンスはスタンドアロンデータベースの処理能力によって制限され、長いトランザクションの状態は、サービスのデータベースと共に、1つのローカルデータベーストランザクションコミットとして操作する必要があり、したがって、サービスデータベースは侵入性があり、さらに、トランザクションに対する補償を提供することができないいくつかの操作は、特定の使用制限がある。
【0029】
これに基づき、本願実施例は、トランザクション処理方法、装置、機器並びにコンピュータ記憶媒体(非一時的な記憶媒体)を開示し、長いトランザクションを処理する必要があるシナリオにおいて、先ず、取得した、処理対象となるトランザクションを、少なくとも2つのサブトランザクションに分割する。そして、サブトランザクションのそれぞれが属するネットワークインターフェースに従って、前記サブトランザクションのそれぞれを複数の部分に分割し、前記複数の部分は、関連付け関係を持つものであり、さらに、前記関連付け関係に従って前記サブトランザクションのそれぞれの複数の部分を処理して、前記複数の部分のうち、最後に実行される部分の処理結果を取得する。最後に、前記処理結果に従って異常なサブトランザクションがあると決定した場合、前記異常なサブトランザクションの異常原因にマッチングする処理戦略を決定し、前記処理対象となるトランザクションの最終的な処理結果を取得するために、前記処理戦略を使用して、前記異常なサブトランザクションを処理する。このように、処理対象となるトランザクションにおいて、サブトランザクションが属するネットワークインターフェースに基づいて、サブトランザクションを複数の部分に分割して、全体的なサービスのパフォーマンスがスタンドアロンデータベースの処理能力によって制限されるという問題を解決する。そして、各部分を処理し、処理結果が異常なサブトランザクション、処理結果が異常である異常なサブトランザクションにおいて、異常原因に基づき、マッチング処理戦略を選択して異常なサブトランザクションを処理することにより、最終的な処理結果を取得し、このように、マッチング処理戦略を使用して異常なサブトランザクションを自動的に処理して、フォールトトレランスおよびトランザクション処理能力を向上させることができる。
【0030】
以下、本願実施例で提供されるトランザクション処理機器の例示的なアプリケーションを説明する。本願実施例で提供される機器は、ノートブックコンピュータ、タブレットコンピュータ、デスクトップコンピュータ、セットトップボックス、モバイル機器(例えば、携帯電話、携帯型音楽プレーヤ、携帯情報端末、専用メッセージング機器、ポータブルゲーム機器など)などの様々なユーザ機器として実施してもよく、サーバとして実施してもよい。以下、機器が機器またはサーバとして実施される場合の例示的なアプリケーションについて説明する。サーバは、独立した物理的サーバであってもよく、複数の物理サーバで構成されるサーバクラスタまたは分散型システムであってもよく、クラウドサービス、クラウドデータベース、クラウドコンピューティング、クラウド関数、クラウド記憶、ネットワークサービス、クラウド通信、ミドルウェアサービス、ドメインネームサービス、セキュリティサービス、CDN、およびビッグデータおよび人工知能プラットフォームなどの基本的なクラウドコンピューティングサービスを提供するクラウドサーバであってもよい。端末は、スマートフォン、タブレットコンピュータ、ノートブックコンピュータ、デスクトップコンピュータ、スマートスピーカ、スマートウォッチなどであり得るが、これらに限定されない。端末およびサーバは、有線または無線通信方式を通じて直接または間接的に接続することができるが、本願は、これらに限定されない。
【0031】
図1を参照すると、
図1は、本願実施例で提供されるトランザクション処理システムの一例示的なアーキテクチャの概略図であり、一例示的なアプリケーションを示すために、先ず、端末10によって送信されたトランザクション処理要求を受信した場合、当該トランザクション処理要求が指定する、処理対象となるトランザクション11を複数のサブトランザクション12に分割する。その後、サブトランザクションのそれぞれが属するネットワークインターフェースに従って、当該サブトランザクションを再分割して、関連付けられた複数の部分13を取得する。次に、当該複数の部分13間の関連付け関係に基づき当該複数の部分を順次に処理して、前記複数の部分13のうち、最後に実行される部分の処理結果101を取得する。当該処理結果101に異常が発生した場合、異常原因に基づいて、マッチング処理戦略102を決定し、最後に、前記処理対象となるトランザクション11の最終的な処理結果104を取得するために、当該処理戦略を使用して異常なサブトランザクション103を処理する。このように、サブトランザクションが属するネットワークインターフェースに基づいて、サブトランザクションを複数の部分に分割し、各部分を処理することにより、全体的なサービスのパフォーマンスがスタンドアロンデータベースの処理能力によって制限されるという問題を解決し、処理結果が異常である異常なサブトランザクションについては、最終的な処理結果を取得するために、異常原因に基づき、マッチング処理戦略を選択して異常なサブトランザクションを処理する。このように、マッチング処理戦略を使用して異常なサブトランザクションを自動的に処理して、フォールトトレランスおよびトランザクション処理能力を向上させる。
【0032】
図2Aを参照すると、
図2Aは、本願実施例で提供されるトランザクション処理システムの別の例示的なアーキテクチャの概略図であり、ブロックチェーンネットワーク20(例示的に、ネイティブノードとして使用するサーバ200を示す)、監視システム30(例示的に、監視システム30に属する機器300およびそのグラフィックインターフェイス301)を含み、以下、それぞれを説明する。
【0033】
ブロックチェーンネットワーク20のタイプは、柔軟で多様であり、例えば、パブリックチェーン、プライベートチェーン、またはコンソーシアムチェーンのいずれかであり得る。パブリックチェーンを例にとると、ユーザ機器、サーバなどの任意のサービス主体の電子機器は、許可なしにブロックチェーンネットワーク20にアクセスすることができる。コンソーシアムチェーンを例にとると、サービス主体は、許可された後に当該サービス主体の管轄下の電子機器(例えば、機器/サーバなど)は、ブロックチェーンネットワーク20にアクセスすることができ、この場合、ブロックチェーンネットワーク20内の特別なタイプのノード、即ち、クライアントノードになる。
【0034】
クライアントノードは、サービス主体によって開始されたトランザクション(例えば、チェーンにデータを記憶したり、チェーン上のデータを照会するために使用されるなど)をサポートする機能のみを提供することができ、以下で説明されるソート機能、コンセンサスサービスおよび台帳機能などの、ブロックチェーンネットワーク20のネイティブノードの機能に対して、クライアントノードは、デフォルトでまたは選択的に(例えば、サービス主体の具体的なサービスニーズに応じるなど)実現することができる。それにより、サービス主体のデータおよびサービス処理論理をブロックチェーンネットワーク20に最大限に遷移することができ、ブロックチェーンネットワーク20を介してデータおよびサービス処理プロセスの信頼性および追跡可能性を実現することができる。
【0035】
ブロックチェーンネットワーク20は、サービス主体(例えば、
図2Aに示された監視システム30など)からのクライアントノード(例えば、
図2Aに示された、監視システム30に属する機器300など)によって提出されたトランザクションを受信し、台帳を更新したり、台帳を照会するためにトランザクションを実行し、機器のユーザインターフェイス(例えば、機器300のグラフィックインターフェイス301など)にはトランザクションを実行する様々な中間結果または最終結果が表示される。
【0036】
以下、監視システムがブロックチェーンネットワークにアクセスしてトランザクション処理の上位チェーンを実現することを例にして、ブロックチェーンネットワークの例示的なアプリケーションを説明する。
【0037】
監視システム30の機器300はブロックチェーンネットワーク20にアクセスし、ブロックチェーンネットワーク20のクライアントノードとなる。機器300は、センサを介して、処理対象となるトランザクションを取得し、当該処理対象となるトランザクションを少なくとも2つのサブトランザクションに分割し、その後、サブトランザクションのそれぞれが属するネットワークインターフェースに従って、サブトランザクションを複数の部分に分割し、前記複数の部分は、関連付け関係を持つものであり、および、関連付け関係に従って、サブトランザクションの複数の部分を処理して、最後に実行される部分の処理結果を取得する。最後に、処理結果が異常なサブトランザクションが存在することを表す場合、異常原因とマッチングする処理戦略を決定し、当該処理戦略を使用して異常なサブトランザクションを処理し、それにより、処理対象となるトランザクションの最終的な処理結果を取得し、さらに、最終的な処理結果をブロックチェーンネットワーク20におけるサーバ200に転送し、または機器300に保存する。機器300にアップロードロジックが配置され、またはユーザが操作する場合、機器300は、処理対象となるトランザクション/同期時間照会要求に従って、更新操作/照会操作に対応するトランザクションを生成し、トランザクション中に更新操作/照会操作を実現するために呼び出す必要のあるスマートオントラスト、およびスマートオントラストによって転送されたパラメータを指定し、トランザクションは、監視システム30によって署名されたデジタル署名(例えば、監視システム30のデジタル証明書の秘密鍵を使用して、トランザクションのダイジェストを暗号化して取得するなど)を搬送し、トランザクションをブロックチェーンネットワーク20にブロードキャストする。ここで、デジタル証明書は、監視システム30による認証センタ31への登録を通じて取得することができる。
【0038】
サーバ200などのブロックチェーンネットワーク20におけるネイティブノードは、トランザクションを受信したときに、トランザクションによって搬送されたデジタル署名を検証し、デジタル署名が検証された後、トランザクション中搬送した監視システム30のアイデンティティに従って、監視システム30がトランザクション権限を有するかどうかを確認し、デジタル署名および権限検証のうちの任意の1つの検証判断は、トランザクションの失敗につながる可能性がある。検証成功後、ネイティブノード自体のデジタル署名(例えば、ネイティブノードの秘密鍵を使用してトランザクションのダイジェストを暗号化して取得するなど)が署名され、ブロックチェーンネットワーク20でブロードキャストされ続ける。
【0039】
ブロックチェーンネットワーク20におけるソート機能を有するノードが検証されたトランザクションを受信した後、トランザクションを新しいブロックに充填し、ブロックチェーンネットワーク20における、コンセンサスサービスを提供するノードにブロードキャストする。
【0040】
ブロックチェーンネットワーク20におけるコンセンサスサービスを提供するノードは、新しいブロックに対してコンセンサスプロセスを実行してコンセンサスに到達し、台帳機能を提供するノードは、新しいブロックをブロックチェーンの後部に追加し、新しいブロック内のトランザクションを実行する。処理対象となるトランザクションの処理結果を提出するトランザクションにおいて、状態データベースにおける、処理対象となるトランザクションに対応するキーと値のペアを更新し、同期時間を照会するトランザクションにおいて、状態データベースから同期時間に対応するキーと値のペアを照会し、照会結果を返す。取得した同期時間は、機器300のグラフィックインターフェイス301に表示される。
【0041】
ブロックチェーンネットワーク20におけるネイティブノードは、ブロックチェーンから、処理対象となるトランザクションを読み取り、処理対象となるトランザクションをネイティブノードの監視ページに提示し、ネイティブノードもブロックチェーンに記憶された処理対象となるトランザクションを使用して、当該処理対象となるトランザクションを処理することができ、例えば、サブトランザクションが属するネットワークインターフェースに基づいて、サブトランザクションを複数の部分に分割することにより、全体的なサービスのパフォーマンスがスタンドアロンデータベースの処理能力によって制限されるという問題を解決し、処理結果が異常である異常なサブトランザクションにおいて、異常原因に基づき、マッチング処理戦略を選択して異常なサブトランザクションを処理することにより、最終的な処理結果を取得する。このように、マッチング処理戦略を使用して異常なサブトランザクションを自動的に処理して、フォールトトレランスおよびトランザクション処理能力を向上させる。
【0042】
実際のアプリケーションでは、サーバ200がトランザクション処理機能およびカウンティング機能を有するなど、ブロックチェーンネットワーク20の異なるネイティブノードに対して異なる機能を設定することができ、サブトランザクションが属するネットワークインターフェースに基づいてサブトランザクションを複数の部分に分割し、各部分を処理して、処理結果が異常である異常なサブトランザクションを決定し、その後、最終的な処理結果を取得するために、異常原因に基づいて、マッチング処理戦略を選択して異常なサブトランザクションを処理する。この場合、トランザクションプロセス中、サーバ200は、機器300によって送信されたトランザクション処理要求を受信し、サーバ200を使用してトランザクション処理要求に基づき、処理対象となるトランザクションを分割して、複数のサブトランザクションを取得し、その後、サブトランザクションが属するネットワークインターフェースに基づいてサブトランザクションを複数の部分に分割し、最後に、各部分を処理し、処理結果が異常である異常なサブトランザクションにおいて、最終的な処理結果を取得するために、異常原因に基づいて、マッチング処理戦略を選択して異常なサブトランザクションを処理する。このように、全体的なサービスのパフォーマンスがスタンドアロンデータベースの処理能力によって制限されるという問題を解決する共に、マッチング処理戦略を使用して異常なサブトランザクションを自動的に処理することにより、フォールトトレランスおよびトランザクション処理能力を向上させることができる。
【0043】
図2Bを参照すると、
図2Bは、本願実施例で提供されるトランザクション処理システムの概略的な構造図であり、
図2Bに示された機器400は、少なくとも1つのプロセッサ410、メモリ450、少なくとも1つのネットワークインターフェース420およびユーザインターフェース430を備える。機器400における各コンポーネントは、バスシステム440を介して結合される。バスシステム440は、これらのコンポーネント間の接続通信を具現するために使用されることを理解されたい。データバスに加えて、バスシステム440は、電力バス、制御バスおよび状態信号バスをさらに備える。しかしながら、説明を明確にするために、
図2Bでは様々なバスをすべてバスシステム440として表記する。
【0044】
プロセッサ410は、汎用プロセッサ、デジタル信号プロセッサ、または他のプログラマブルロジックデバイス、ディスクリートゲートまたはトランジスタロジックデバイス、ディスクリートハードウェアコンポーネントなど、信号処理能力を備えた集積回路チップであってもよく、ここで、汎用プロセッサは、マイクロプロセッサまたは任意の従来のプロセッサなどであってもよい。
【0045】
ユーザインターフェース430は、1つまたは複数のスピーカおよび/または1つまたは複数の視覚的表示画面を含む、メディアコンテンツを提示することができる1つまたは複数の出力装置431を備える。ユーザインターフェース430は、ユーザ入力を容易にするユーザインターフェース構成要素、いくつかの例では、キーボード、マウス、マイク、タッチスクリーンディスプレイ、カメラ、他の入力ボタンおよび制御部を含む、1つまたは複数の入力装置432をさらに備える。
【0046】
メモリ450は、取り外し可能、取り外し不可能、またはそれらの組み合わせであり得る。例示的なハードウェア機器は、固体メモリ、ハードディスクドライブ、光ディスクドライブなどを含む。メモリ450は、例示的に、プロセッサ410から物理的に離れた1つまたは複数の記憶機器を含む。
【0047】
メモリ450は、揮発性メモリまたは不揮発性メモリであってもよく、または揮発性および不揮発性メモリの両方を含んでもよい。不揮発性メモリは、読み取り専用メモリ(ROM:Read Only Memory)であってもよく、揮発性メモリは、ランダムアクセスメモリ(RAM:Random Access Memory)であってもよい。本願実施例で説明されたメモリ450は、任意の適合なタイプのメモリを含む。
【0048】
いくつかの実施例において、メモリ450は、様々な操作をサポートするためにデータを記憶することができ、これらのデータの例は、プログラム、モジュールおよびデータ構造またはそのサブセットまたはスーパーセットを含み、ここで、「モジュール」は、ハードディスク(例えば、処理回路および/またはメモリなど)、ソフトウェア(例えば、プログラミング言語を使用して開発されたソフトウェアなど)またはそれらの組み合わせを使用して実現することができる。以下、例示的に説明する。
【0049】
操作システム451は、様々な基本的なサービスを実現しおよびハードディスクベースのタスクを処理するように構成される、フレームワーク層、コアライブラリ層、ドライバ層などの、様々な基本的なシステムサービスおよび実行ハードディスクに関するタスクを処理するように構成されるシステムプログラムを含む。
【0050】
ネットワーク通信モジュール452は、1つまたは複数の(有線または無線)ネットワークインターフェース420を介して他のコンピューティング機器に到達するように構成され、例示的なネットワークインターフェース420は、bluetooth(登録商標)、無線互換性認証、およびニバーサルシリアルバス(USB:Universal Serial Bus)などを含む。
【0051】
提示モジュール453は、ユーザインターフェース430に関する1つまたは複数の出力装置431(例えば、表示画面、スピーカなど)を介して情報を提示することができるようにする(例えば、周辺機器を操作し、内容および情報を表示するように構成されるユーザインターフェースなど)。
【0052】
入力処理モジュール454は、1つまたは複数の入力装置432のうちの1つからの1つまたは複数のユーザ入力または相互作用を検出し、検出された入力または相互作用を翻訳する。
【0053】
いくつかの実施例において、本願実施例で提供される装置は、ソフトウェア方式を使用して実現し、
図2Bは、メモリ450に記憶されたトランザクション処理サーバ455を示し、当該サーバは、プログラムおよびプラグインなどの形式のソフトウェアであってもよく、第1分割モジュール4551、第2分割モジュール4552、第1処理モジュール4553、第1決定モジュール4554および第2処理モジュール4555などのソフトウェアモジュールを備える。これらのモジュールは論理モジュールであり、したがって、実現する機能に応じて任意に組み合わせしたり、さらに分割することができる。以下で各モジュールの機能を示す。
【0054】
いくつかの別の実施例において、本願実施例で提供される装置は、ハードディスク方式を使用して実現することができ、例として、本願実施例で提供される装置は、本願実施例で提供されるトランザクション処理方法を実行するようにプログラミングされた、ハードディスク復号化プロセッサ形式のプロセッサであってもよい。例えば、ハードディスク復号化プロセッサ形式のプロセッサは、1つまたは複数の特定用途向け集積回路(ASIC:Application Specific Integrated Circuit)、DSP、プログラマブルロジックデバイス(PLD:Programmable Logic Device)、複合プログラマブルロジックデバイス(CPLD:Complex Programmable Logic Device)、フィールドプログラマブルゲートアレイ(FPGA:Field-Programmable Gate Array)または他の電子素子を使用することができる。
【0055】
本願実施例で提供される機器の例示的なアプリケーションおよび実施を参照して、本願実施例で提供されるトランザクション処理方法を説明する。
【0056】
図3を参照すると、
図3は、トランザクション処理機器が実行する、本願実施例で提供されるトランザクション処理方法の実装プロセスの概略図であり、
図3に示されたステップを参照して説明する。
【0057】
ステップS301において、データベースから取得した、処理対象となるトランザクションを少なくとも2つのサブトランザクションに分割する。
【0058】
いくつかの実施例において、前記処理対象となるトランザクションは長いトランザクション、即ち、テンセント課金トランザクションなど、ネットワーク全体に実現される必要があるトランザクションであってもよい。いくつかの実施例において、処理対象となるトランザクションが呼び出す必要のあるリソースインターフェースのカテゴリに従って、当該処理対象となるトランザクションを分割することができ、例えば、リソースインターフェースのカテゴリが3つである場合、処理対象となるトランザクションを少なくとも3つのサブトランザクションに分割し、即ち、1つのリソースインターフェースのカテゴリは1つのサブトランザクションに対応する。
【0059】
本願実施例において、処理対象となるトランザクションは、トランザクション処理機器がクライアントによって送信されたトランザクションを受信することであってもよく、トランザクション処理機器がクライアントまたはサーバから読み取ったトランザクションであってもよい。例えば、クライアントは、ゲームの課金トランザクションまたは勘定トランザクションなどをトランザクション処理機器に送信する。
【0060】
ステップS302において、サブトランザクションのそれぞれが属するネットワークインターフェースとサブトランザクションによって実現される各機能とに従って、サブトランザクションのそれぞれをN個の部分に分割し、前記N個の部分は、関連付け関係を持つものである。
【0061】
いくつかの実施例において、Nは1より大きい整数である。サブトランザクションのそれぞれが属するネットワークインターフェースは、当該サブトランザクションを実現するために呼び出す必要のあるネットワークインターフェースとして理解することができ、例えば、3つのネットワークインターフェースを呼び出す必要がある場合、当該サブトランザクションを、関連付け関係を持つ3つの部分に分割する。前記関連付け関係は、実行プロセス中の当該3つの部分の順次関係であってもよい。例えば、当該サブトランザクションは、AとBの間の通話を実現することであり、通話中3つのネットワークインターフェースを呼び出す必要があるため、3つの部分に分割する。当該3つの部分は、次の通りである。最初の部分は、発信側Aが着信側Bの電話番号を照会して、通話を実現するための準備をすることである。2番目の部分は、照会した番号に基づいて、当該番号に掛け、ネットワーク通信に基づいてAとBの間のネットワーク接続を確立し、当該ネットワーク接続に基づいて通話することである。3番目の部分は、通話結果を処理することである。
【0062】
ステップS303において、関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、N個の部分のうち、最後に実行される部分の処理結果を取得する。
【0063】
いくつかの実施例において、当該関連付け関係に従って各部分を処理し、最終的に、最後に実行される部分の処理結果を取得する。例えば、上記のAとBの間の通話を実現することを例として、最終的に通話結果を取得する。当該通話結果を当該サブトランザクションの処理結果として使用する。
【0064】
ステップS304において、処理結果に従って異常なサブトランザクションがあると決定した場合、異常なサブトランザクションの異常原因にマッチングする処理戦略を決定する。
【0065】
いくつかの実施例において、前記異常なサブトランザクションは、処理結果と予測した結果が一致しないサブトランザクションとして理解することができる。例えば、AとBの間の通信を実現することを例として、最後に取得した通話結果が通話失敗を表す場合、当該サブトランザクションが異常なサブトランザクションであることを表す。前記異常なサブトランザクションの異常原因にマッチングする処理戦略は、当該異常原因に基づいて、当該異常なサブトランザクションのデータをロールバックするか、処理を続けるかを決定し、それにより、当該異常なサブトランザクションの処理結果をより正確に取得することができることと理解することができる。いくつかの実施例において、前記異常原因が、前記異常なサブトランザクションを処理するときにユーザ側で異常が発生したことである場合、前記異常なサブトランザクションの前のサブトランザクションの処理結果を前記異常なサブトランザクションの処理結果として使用する。一具体的な例において、ユーザ側が前記異常なサブトランザクションを処理するときに異常が発生することは、今回の異常が発生した後に、再実行することができず、または再実行しても異常がまた発生することである可能性がある。例えば、選択した銀行カードの残高が不足しているため、ユーザが支払いに失敗した場合、当該ページのトランザクションを再度実行しても、支払いに失敗する。支払い方を再選択するページにロールバックするために、トランザクションをロールバックして、ユーザが他の銀行カードを再選択することができるようにする。前記異常原因が、前記異常なサブトランザクションを処理するときにサーバ側で異常が発生したことである場合、前記関連付け関係に従って、前記異常なサブトランザクションのN個の部分を再び処理する。一具体的な例では、サーバ側が前記異常なサブトランザクションを処理するときに異常が発生することは、今回の異常が発生した後に、当該サブトランザクションを完了するために再実行する必要があることである可能性がある。例えば、ユーザが支払いに成功した後に、出荷が失敗した場合、データをロールバックすることができず、出荷が成功するまで、ユーザに再出荷する必要がある。このように、異常原因に基づき、マッチング処理戦略を選択して異常なサブトランザクションを処理し、異常なサブトランザクションを時間内に自動的に処理して、トランザクションの処理能力を向上させる。
【0066】
ステップS305において、処理対象となるトランザクションの最終的な処理結果を取得するために、処理戦略を使用して異常なサブトランザクションを処理する。
【0067】
いくつかの実施例において、サブトランザクションのそれぞれの正しい処理結果を取得し、それにより、処理対象となるトランザクションの最終的な処理結果を取得する。このように、マッチング処理戦略を使用して異常なサブトランザクションを自動的に処理し、複数のサブトランザクションを処理する整合性を保証することができるだけでなく、フォールトトレランスおよびトランザクション処理能力も向上させる。
【0068】
本実施例において、処理する必要がある長いトランザクションにおいて、先ず、複数のサブトランザクションに分割し、その後、サブトランザクションを複数の部分に分割し、各部分を処理して、サブトランザクションのそれぞれの処理結果を取得する。このように、全体的なサービスのパフォーマンスがスタンドアロンデータベースの処理能力によって制限されるという問題を解決し、最終的な処理結果を取得するために、異常が発生した処理結果の異常原因に基づいて、マッチング処理戦略を使用して異常なサブトランザクションを処理し、このように、マッチング処理戦略を使用して異常なサブトランザクションを自動的に処理して、フォールトトレランスおよびトランザクション処理能力を向上させる。
【0069】
いくつかの実施例において、各部分に対する処理の高効率を確保するために、前記ステップS302は、次のステップを介して実現することができる。
【0070】
ステップS321において、サブトランザクションのそれぞれが属するネットワークインターフェースのカテゴリセットを決定する。
【0071】
例えば、BからAへの振替を例にとると、Aが振替要求を開始したネットワークインターフェース、AおよびBのそれぞれに対応する銀行のネットワークインターフェース、およびBが振替要求を受信して振替を実現するネットワークインターフェースなどを呼び出す必要がある。
【0072】
ステップS322において、ネットワークインターフェースのカテゴリセットと、対応するサブトランザクションによって実現される各機能とに従って、対応するサブトランザクションをN個の部分に分割する。
【0073】
いくつかの実施例において、ネットワークインターフェースのカテゴリセットに従って、サブトランザクションのそれぞれを少なくともカテゴリセットのカテゴリの数と同じ数を有する複数の部分に分割し、対応するサブトランザクションによって実現される各機能と組み合わせて、サブトランザクションを部分に分割する分割点を決定し、例えば、上記のBからAへの振替を例にとると、3つのカテゴリがあり、且つ実現する各機能は注文の提出、振替操作の実行、および振替成功通知である場合、当該サブトランザクションを少なくとも3つの部分に分割する。AおよびBに対応する銀行が同じである場合、当該サブトランザクションを3つの部分に分割することができ、AおよびBに対応する銀行が同じではない場合、当該サブトランザクションを4つの部分に分割することができる。
【0074】
ステップS323において、関連付け関係を持つN個の部分を形成するために、サブトランザクションのそれぞれによって実現される各機能に従って、N個の部分間の関連付け関係を決定する。
【0075】
例えば、上記のBからAへの振替を例として、当該3つの機能(即ち、注文の提出、振替操作の実行、および振替成功通知)に基づいて、サブトランザクションを3つの部分に分割し、当該3つの部分間の関連付け関係を決定する。
【0076】
いくつかの実施例において、複数のサブトランザクション処理に対する整合性を保証するために、前記ステップS303は、次の2つの状況を含む。
【0077】
状況1:前記少なくとも2つのサブトランザクション間が独立する場合、前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得する。
【0078】
いくつかの実施例において、前記少なくとも2つのサブトランザクション間は独立し、即ち、これらのサブトランザクション間には交差がない。例えば、1つのサブトランザクションは通信を実現することであり、1つのサブトランザクションは銀行インターフェースの呼び出しを実現することである場合、交差のないサブトランザクションにおいて、サブトランザクション間の処理順序を考慮せずに、サブトランザクションのそれぞれの複数の部分において、最後に実行される部分の処理結果を取得するために、これらの部分間の関連付け関係に応じて、当該複数の部分を処理する。
【0079】
状況2:先ず、前記少なくとも2つのサブトランザクション間に交差がある場合、前記交差および事前設定されたホワイトリストに従って、前記少なくとも2つのサブトランザクション間の処理パスを決定する。
【0080】
いくつかの実施例において、処理対象となるトランザクションがテンセント課金であることを例にとると、1つのサブトランザクションは製品に対する評価であり、1つのサブトランザクションは注文の支払いであり、1つのサブトランザクションは出荷であり、この場合、当該3つのサブトランザクション間に交差があり、即ち、先ず、製品を評価する必要があり、製品の評価結果に基づいて注文の支払いを実現し、最後に、注文の支払い結果に基づいて出荷成功または失敗を実現する。前記事前設定されたホワイトリストは、設定されたトランザクションを実現するための適切な処理パスと見なすことができ、例えば、注文の支払いは出荷前に実行する必要があり、先に出荷してから注文の支払いが行われると、当該処理パスが事前設定されたホワイトリストを満たさないと決定する。
【0081】
その後、前記サブトランザクションのそれぞれの処理結果を取得するために、前記処理パスに従って、前記関連付け関係に基づいてサブトランザクションのそれぞれのN個の部分を順次に処理する。
【0082】
例えば、最初のサブトランザクションの処理結果を取得するために、当該処理パスに従って、先ず、実行する必要がある最初のサブトランザクションを決定し、前記関連付け関係に従って、当該最初のサブトランザクションの複数の部分を処理する。その後、2番目のサブトランザクションの処理結果を取得するために、最初のサブトランザクションの処理結果に基づいて、2番目のサブトランザクションの複数の部分を前記関連付け関係に従って処理し、以下同様に、当該処理パスに従って全てのサブトランザクションを処理して、処理対象となるトランザクションの最終的な処理結果を取得する。このように、複数のサブトランザクションを複数の部分に分割して処理することにより、サブトランザクションのリアルタイムの整合性を保証する。ホワイトリストメカニズムを導入することにより、複数のサブトランザクション間の状態転送の合理性を保証する。
【0083】
一具体的な例において、前記サブトランザクションが属するネットワークインターフェースのカテゴリセットにN個のカテゴリが含まれる場合、前記サブトランザクションを少なくともM(Mは1より大きい整数である)個の部分に分割し、前記ステップS303は、次のステップによって実現される。
【0084】
ステップ1において、前記関連付け関係に従って、少なくともM個の部分間のシリアル実行順序を決定する。
【0085】
例えば、BからAへの振替を例にとると、振替注文の作成、振替操作の実行および振替結果の3つの部分に分割すると、当該3つの部分間の実行順序を決定する。
【0086】
ステップ2において、最後に実行される部分の処理結果を取得するために、前記シリアル実行順序に従って、前記シリアル実行順序における前記少なくともM個の部分のM-1番目の部分の処理結果に基づいて、前記シリアル実行順序における前記少なくともM個の部分のM番目の部分を実行する。
【0087】
例えば、先ず、振替注文の作成を実行して、作成成功した振替注文を取得し、その後、当該振替注文に基づいて、BからAへの振替を実行し、最後に、当該結果が成功であるか失敗であるかを判断して、ユーザに通知する。
【0088】
本願実施例において、上記のステップ1ないしステップ4を通じて1つのサブトランザクションの処理プロセスを実現し、当該サブトランザクションの処理結果を取得するために、複数の部分間の実行順序に従って当該複数の部分を次々に実行し、それにより、トランザクションの処理速度を向上させる。
【0089】
いくつかの実施例において、複数のサブトランザクションを処理するプロセス中に、異常が発生した異常なサブトランザクションにおいて、処理対象となるトランザクションの現在のトランザクション状態をメッセージミドルウェアに記憶して、データ層の信頼性を向上させ、さらに、記憶されたデータを失わないことを保証し、ステップS305の前に、前記方法は、次のステップをさらに含み、
図4に示されたように、
図4は、本願実施例で提供されるトランザクション処理方法の別の実装プロセスの概略図であり、
図3を参照して以下で説明する。
【0090】
ステップS401において、処理戦略を使用して異常なサブトランザクションを処理した結果を新しい処理結果として決定する。
【0091】
例えば、当該異常なサブトランザクションが出荷失敗である場合、マッチング処理戦略は、支払いに成功したユーザに出荷し続けて、新しい出荷結果を取得する。
【0092】
ステップS402において、新しい処理結果および異常なサブトランザクションが依然として異常な状態にある場合、現在処理されたサブトランザクションの処理結果セットを決定する。
【0093】
ステップS403において、メッセージミドルウェアを使用して、処理結果セットを記憶する。
【0094】
例えば、新しい出荷結果が出荷がまだ失敗していることを示す場合、現在のネットワークに障害がある可能性があると見なし、この場合、トランザクションメッセージを失わないことを保証するために、現在処理されたサブトランザクションの処理結果セット、即ち、処理対象となるトランザクションの現在のトランザクション状態情報を先に決定し、その後、当該現在のトランザクション状態情報をメッセージミドルウェアに記憶して、データ層の高信頼性を向上させる。
【0095】
ステップS404において、処理対象となるトランザクションの最終的な処理結果を取得するために、入力された読み取り命令を受信した場合、メッセージミドルウェアから処理結果セットを読み取り、異常なサブトランザクションのN個の部分を処理し続ける。
【0096】
いくつかの実施例において、前記入力された読み取り命令を受信することは、処理対象となるトランザクションを処理し続ける必要がある場合、例えば、ネットワークが異常な状態から正常な状態に変化する場合、当該メッセージミドルウェアから、メッセージサブスクライブメカニズムを使用してトランザクションの回復を実現し、異常なサブトランザクションの複数の部分を処理し続けて、正常な処理結果を取得する。
【0097】
いくつかの実施例において、異なるリソースが混合された処理対象となるトランザクションにおいて、このような処理対象となるトランザクションにおける異なるリソースを有するサブトランザクションの整合性を保証するために、前記方法は、次のステップで実現される。
【0098】
ステップ1において、前記処理対象となるトランザクションが呼び出す必要のあるリソースインターフェースセットを実現すると決定する。
【0099】
いくつかの実施例において、処理対象となるトランザクションがテンセント課金であることを例にとると、当該トランザクションを実現するために呼び出す必要のあるリソースインターフェースセットは、少なくとも、製品評価を実現するリソースインターフェース、注文の支払いを実現するユーザ側のリソースインターフェース、出荷を実現するリソースインターフェースなどを含む。
【0100】
ステップ2において、処理対象となるトランザクションをリソースインターフェースセットと一致する複数のサブトランザクションに分割する。
【0101】
例えば、テンセント課金を、製品評価を実現するリソースインターフェース、製品評価を実現するリソースインターフェース、注文の支払いを実現するユーザ側のリソースインターフェース、出荷を実現するリソースインターフェースと一致する3つのサブトランザクションに分割する。
【0102】
ステップ3において、受信した処理実行命令に応答して、各リソースインターフェースを起動する。
【0103】
いくつかの実施例において、処理対象となるトランザクションを処理する必要がある処理実行命令を受信した場合、分散式トランザクション(外部XA)能力トランザクションの第1段階に入り、各リソースインターフェースを起動して、各リソースインターフェースがサブトランザクションを処理するための準備動作をするようにする。
【0104】
ステップ4において、N個の部分のうち、最後に実行される部分の処理結果を取得するために、リソースインターフェースのフィードバックの準備完了情報を受信した場合、リソースインターフェースにおいて、一致するサブトランザクションのN個の部分を関連付け関係に従って処理する。
【0105】
いくつかの実施例において、リソースインターフェースの準備が完成した後に、準備完了情報をプロセッサにフィードバックし、リソースインターフェースにおいて一致するサブトランザクションを処理して、処理結果を取得し、その後、分散式トランザクション(外部XA)能力の第2段階に入り、即ち、処理結果を提出して、処理完了した通知情報をユーザにフィードバックし、このように、複数のリソースインターフェースを使用して複数のサブトランザクションを処理し、異なるサブトランザクションの整合性を保証する。
【0106】
以下、本願実施例が1つの実際の適用シナリオにおける例示的なアプリケーションを説明し、課金シナリオでの長いトランザクションを処理することを例として説明する。
【0107】
いくつかの実施例において、一般的なトランザクションは、データベースのローカルトランザクションによって保証されることができる。例えば、MySQLのデフォルトの繰り返し可能読み取り(RR:Repeatable read)の隔離レベルにおいて、トランザクションAがデータを操作してコミットまたはロールバックする前に、他のトランザクションは、トランザクションAによって実行されたデータ修正を見ることができない。短いトランザクションにおいて、データベースのロック時間は比較的短く、長いトランザクションにおいて、トランザクションがコミットされていないと、同じリソースを操作することによる要求ブロッキングまたは処理タイムアウトが発生する。したがって、長いトランザクションは、通常、データベーストランザクションを直接に使用して実現するには適合しない。いくつかの実施例において、1つの長いトランザクションを一連のサブトランザクションシーケンスに分解して順次に実行し、そのうちの特定のサブトランザクションが実行に失敗した場合、その前に実行に成功したサブトランザクションに対して対応する補償トランザクションを実行する。ここで、サブトランザクションのそれぞれは、ローカルデータベーストランザクションとしてコミットされ、別のバックグラウンドサービス(Daemon)を介して長いトランザクション全体の原子性を保証する。このように、長いトランザクションの整合性を保証することに基づき、データベースの長いトランザクションのパフォーマンスが低いという問題を解決し、それにより、全体的なサービスのパフォーマンスを改善することができる。処理プロセスは
図5に示し、
図5は、本願実施例で提供されるトランザクション処理システムのフレームワーク図であり、以下、
図5を参照して説明する。
【0108】
先ず、処理プロセス51を起動し、長いトランザクション分を複数のサブトランザクション501、502、50jおよび50nに分割し、そのそれぞれはT1ないしTNに対応し、ここで、C151およびC252は、サブトランザクション501ないし50nに対応する補償トランザクションである。複数のサブトランザクション501ないし50nを処理することにより、その全てが実行に成功した場合、プロセス52を終了し、実行に失敗したサブトランザクションにおいて、補償トランザクションを使用して補償し、実行に成功した場合、プロセス53を終了する。
【0109】
これにより、
図5に示された技術案を実現するのに次の2つの条件を備える必要があることが分かる。
【0110】
条件1:トランザクション特性に対するDBMSのサポートが必要である。
【0111】
条件2:1つの長いトランザクションを複数のサブトランザクションに分解することができる。
【0112】
実行プロセスは、次の通りである。
【0113】
(1)1つの長いトランザクションTを複数のサブトランザクション{T1,T2,・・・,TN}に分解すると仮定すると、サブトランザクションのそれぞれは比較的独立し、且つ原子性を保証することができる。
【0114】
(2)長いトランザクションT全体の原子性を保証するために、当該長いトランザクションTの一部が実行に成功した場合、サブトランザクションのそれぞれは、対応する補償トランザクション{C1,C2,・・・,CN}を提供する必要がある。したがって、長いトランザクションの実行シーケンスは次の通りである。(ここで、0≦j≦N)
正常な実行シーケンス:T1,T2,・・・,Tj,・・・,TN
異常な実行シーケンス:T1,T2,・・・,Tj,・・・,Cj,・・・,C2,C1
(3)サブトランザクションのそれぞれの実行は互に独立し、長いトランザクションの実行プロセスでは、トランザクションは隔離性を備えず、トランザクションの中間状態が外部から読み取られる場合がある。
【0115】
(4)アプリケーションプログラムは、トランザクション開始(begin-saga)コマンドワードを介して1つの長いトランザクションを開始し、一意のトランザクション識別子(ID)を生成し、処理開始(begin-transaction)および処理終了(end-transaction)コマンドワードを介してサブトランザクションのそれぞれの境界を定義し、最後にトランザクション終了(end-saga)コマンドワードを介してトランザクション全体のコミットを完了する。
【0116】
(5)サブトランザクションのそれぞれを実行する場合、同時に、現在のサブトランザクションの状態情報を1つのデータベースのローカルトランザクションとして提出して保存する。データベーストランザクション異常(例えば、クラッシュ(Crash))処理メカニズムとは異なり、データベーストランザクションは異常が発生するときにロールバックログ(undo log)を介してトランザクションを自動的にロールバックすることができる。ただし、異常を処理するメカニズムは、長いトランザクションの原子性を保証するために、アプリケーションプログラムが情報リレー(Message Relay)サービスsagaバックグラウンドサービス(saga daemon)を介して後続のサブトランザクション(forward recovery)を完成し続けるか、補償トランザクション(backward recovery)を実行する必要がある。
図6に示されたように、
図6は、本願実施例で提供される長いトランザクション処理の別のフレームワーク図であり、以下、
図6を参照して説明する。
【0117】
ステップ1において、アプリケーションプログラム(APP:Application)61によって出力された処理対象となるトランザクションを複数のサブトランザクションT162、T263ないしTN64に分割する。
【0118】
いくつかの実施例において、APP61は、処理対象となるトランザクションをシステムサービス69に出力する。当該処理対象となるトランザクションは長いトランザクションである。当該複数のサブトランザクションT162、T263ないしTN64の間は独立してもよく、直列関係を有してもよい。
【0119】
ステップ2において、2つの操作の整合性を保証するために、各サービス操作を同時に記録する。
【0120】
いくつかの実施例において、各トランザクションを実行する場合、データベースに基づいて実行するため、各操作およびそれらに基づくトランザクションが整合性を有することを保証する必要があり、ここで、APP表65はサービスの論理を示し、処理イベント表66は、トランザクションの状態情報を表すように構成され、全体的な思想は、サービス操作を完成する必要があるときに、トランザクション全体の操作を同時に記録し、このように、2つの表が全て実行されたか、全て失敗することを保証し、即ち2つの操作が同時に有効になることを表す。
【0121】
ステップ3において、表66に基づいて、サブトランザクションT162を実行した後に実行される次のサブトランザクションを決定し、情報リレー67(message delay)を使用して当該実行されるサブトランザクションの実行を駆動する。
【0122】
いくつかの実施例において、情報リレー67は、1つのサブトランザクションの実行が完了した後に、次のサブトランザクションの実行を駆動するために使用される。
【0123】
ステップ4において、当該実行されるサブトランザクションをシステムに公開して、当該サブトランザクションを実行し続けるようにする。いくつかの実施例において、データベース68は、データベース記憶を示す。
【0124】
これにより、サブトランザクションのコミットがデータベースのローカルトランザクションに依存するため、全体的なサービスのパフォーマンスはスタンドアロンデータベースの処理能力によって制限され、さらに、長いトランザクションの状態は、サービスのデータベースと共に、1つのローカルデータベーストランザクションコミットとして操作する必要があり、サービスデータベースは侵入性があり、トランザクションに対する補償を提供することができないいくつかの操作は、特定の使用制限があることが分かる。
【0125】
本願実施例において、テンセント課金の適用シナリオに基づいて、以下説明する。先ず、テンセント課金は、千億元相当の収益を持つテンセント内部サービスをサポートするインターネット課金プラットフォームであり、このような巨大なサービス規模では、テンセント課金は、サービスの急速な増加をサポートする必要がある同時に、各トランザクションが正しいことを保証する必要もある。しかしながら、テンセント課金でのトランザクションプロセスは、通常、ネットワークを数十回呼び出す必要があり、分散式シナリオではACIDを満たして、全ての操作が実行に成功した後に結果を提出することを保証し、分散スケールの拡大に伴い、整合性を達成する周期も長くなる。ビットコインネットワークのスケーラビリティ(Scalability)問題を例にとると、整合性を満たすためには、トランザクションの平均確認時間は10分である必要がある。したがって、複雑なサービスシナリオに適応するために、Base理論が表れ、強力な整合性の代わりに最終的な整合性を使用する。しかしながら、テンセント課金では一日の平均トランザクション量が億元を超えるため、最終的な整合性またはオフラインの補償性技術案を使用すると、より多くの処理リスクとコンプレインをもたらし、リアルタイムで整合性を実現する必要がある。したがって、本願実施例は、トランザクション処理方法を開示し、エンジンプラットフォームが複雑な分散整合性問題を処理するようにし、主に、分散式トランザクションの原子性を実現し、トランザクションのリアルタイムの高い整合性を保証し、自動異常処理、フォールトトレランスを改善し、および状態機械のプロセス管理に基づいて、プロセスの制御性を向上させる。ここで、テンセント課金において長いトランザクションは、通常、ユーザログインス状態の検査、リスク管理チェック、元の物品の評価、マーケティング活動の評価、ユーザの支払い、物品の出荷、活動の贈与などのプロセスを含む、1つの完全なトランザクションプロセスであり、全てが成功し、または全てが失敗するように、プロセス全体の整合性を保証する必要がある。有限状態機械(FSM:Finite State Machine)および信頼性の高いメッセージミドルウェアを導入することにより、アプリケーション層ベースの長いトランザクションを実現する。
【0126】
図7は、本願実施例で提供されるトランザクション処理方法の実装プロセスの概略図であり、以下、
図7を参照して説明する。
【0127】
先ず、イニシエータは、APPエンド700によって提出された処理対象となるトランザクションを受信し、当該処理対象となるトランザクションを複数のサブトランザクションT1701、T2702およびTN703に分割する。
【0128】
いくつかの実施例において、イニシエータは、オペレータ条件1に基づいてサブトランザクションT1701を実行することを決定した後、T2702を実行し、オペレータ条件3に基づいて、サブトランザクションT1701を実行することを決定した後、TN703を実行し、即ち、オペレータ条件2がサブトランザクションT2702を実行することを決定した後、TN703を実行する。リソースパーティは、データベースまたはネットワークインターフェースの呼び出しとして理解することができる。矢印71および72のそれぞれは、サブトランザクションの実行に失敗した場合に、1つの逆の操作を実行することを示す。
【0129】
その後、起動情報をリソースパーティ73に送信して、リソースパーティが1つのサブトランザクションT1701を処理し始めるようにする。
【0130】
いくつかの実施例において、1つのサブトランザクションを3つの独立した部分(即ち、準備リモートプロシージャコールプロトコル(pre-rpc:prepare-Remote Procedure Call Protocol)704、rpc 705および提出rpc(post-rpc)706)に分割し、そのうちの特定のサブトランザクションが処理プロセス中に異常が発生した場合、トランザクションの回復は、サービスがrpc応答の結果情報に従って、複数のオペレータ条件(Conditions)の組み合わせを介してforward recoveryを使用するかbackward recoveryを使用するかを指定することができる。
【0131】
次に、各部分間の関連付け関係に従って、各部分を実行し、最後に実行される部分の処理結果をリソースパーティ74にフィードバックする。
【0132】
最後に、サブトランザクションT1701の実行が完了したことをリソースパーティ75にフィードバックし、最終的に、APPエンド700にフィードバックする。
【0133】
本願実施例において、FSMホワイトリストメカニズムを導入することにより、トランザクション状態転送の合理性を保証する。例えば、支払い済みの注文は、支払いのために再度提出されることはない。
図8は、本願実施例で提供される長いトランザクションプロセス状態の実行パス図であり、
図8に示されたように、ノード内の数字は特定の実行状態を示し、ここで、例えば、01は初期化を示し、50は評価成功を示し、100は注文成功を示し、評価が成功した後に、注文する必要があり、100は支払いが提出されたことを示し、wechat支払いのポップアップウィンドウの呼び出しに成功したことを示す。例えば、wechatに1つのポップアップウィンドウがポップアップ表示され、ユーザはパスワードを入力し、ユーザはパスワードを入力することも入力しないこともでき、入力した場合支払いに成功して支払い成功(101)に入り、次に、610は出荷の成功を示し、901は出荷の失敗を示し、205は支払いで成功しなかったことを示し、601はユーザが払戻を開始したことを示し、602はユーザへの払戻が成功したことを示し、602から910への矢印は、払い戻しが成功した後に、支払手形の状態を同時に更新し、その後、当該支払手形は返金を開始したことを表記する。実線パスは、正常に実行することができるパスを示し、点線パス801は、制限された実行パスを示す(即ち、ノード50は、ノード901に直接転送することができず、即ち、評価から出荷の失敗への転送は不合理な状態転送であり、その間で支払い完了状態ノード101を通過する必要がある)。このように、長いトランザクションでの実行は複数の操作に分割し、いくつかのステップは順序的であり、したがって、状態プロセスが制御可能である必要があり、有限状態機械ホワイトリスト方式を介してトランザクションプロセスの合理な転送および実行を制御することができる。
【0134】
本願実施例において、信頼性の高いメッセージミドルウェア(pub-sub)を使用することにより、トランザクションの状態をメッセージミドルウェアに記憶し、メッセージサブスクライブメカニズムを介してトランザクションの回復を実現する。これにより、サービス侵入の問題を解決し、より多くのシナリオに適用することができる同時に、柔軟なサブスクライブ能力を提供したため、並行処理能力が高くなり、遅延もミリ秒レベルになり、オンラインの長いトランザクションの処理シナリオにより適合する。
図9に示されたように、
図9は、本願実施例で提供されるトランザクション処理方法の別の実装プロセスの概略図であり、以下、
図9を参照して説明する。
【0135】
先ず、APPエンド91が、処理対象となるトランザクションをシステムサービス92に提出する。
【0136】
その後、システムサービス92は、処理対象となるトランザクションにおけるサブトランザクションT193を処理し、条件オペレータ1に基づいて、T193を完了したことを決定した後、サブトランザクションT294を実行し、これによって類推すれば、当該処理対象となるトランザクション処理を完了して、最終的な処理結果を取得するために、最後のサブトランザクションTN95を実行するまで、サブトランザクションのそれぞれを順序に実行する。
【0137】
いくつかの実施例において、これらのサブトランザクションを処理するプロセスでは、処理サブトランザクションT193のトランザクション状態をトランザクション状態記憶領域96に保存することができ、トランザクション状態記憶領域96からT193のトランザクション状態をシステムサービスにフィードバックすることもできる。同様に、処理サブトランザクションT294のトランザクション状態をトランザクション状態記憶領域97に記憶し、トランザクション状態記憶領域97からT294のトランザクション状態をシステムサービスにフィードバックすることもでき、処理サブトランザクションTN95のトランザクション状態をトランザクション状態記憶領域98に保存し、イベント記憶領域98からTN95のトランザクション状態をシステムサービスにフィードバックすることもできる。
【0138】
図10は、本願実施例のメッセージミドルウェアがトランザクション状態を記憶する実装プロセスの概略図であり、
図10に示されたように、APP11、APP12およびAPPN13は、それぞれ、処理対象となるトランザクションを提出するために使用される。一具体的な例において、APP12によって提出された処理対象となるトランザクションは処理プロセス中異常が発生する場合、APP12によって提出された処理対象となるトランザクションのトランザクション状態をメッセージミドルウェア1004に記憶し、当該メッセージミドルウェア1004において、生産側1005および消費者側1006を含み、ここで、生産側1005は、記憶されたトランザクション状態をキューに入れるように構成され、消費者側1006は、記憶されたトランザクション状態をデキューするように構成される。次に、メッセージミドルウェアに記憶されるトランザクション状態において、記憶するときにメッセージが失われないことを保証する信頼性の高いメッセージミドルウェアに重点が置かれているため、基礎となる記憶として記憶されたディスパッチャ1007(dispatcher)は、要求を受信した後、制御ディスパッチャ1007は要求に従って、トランザクション状態をどこに記憶するかを決定し、当該制御ディスパッチャ1007の基礎となる記憶は、コンピューティングエンジン1008(broker)、およびストレージエンジン1009(BK:bookkeeper)、および分散式コーディネータ1010(zookeeper)を備える。コンピューティングエンジン1008は、ロードバランス1011(load balance)、管理分類1012(managed ledger)、メモリ1013(cache)およびBKクライアント1014を介して、記憶するように要求されたトランザクション状態をどうやって記憶するかを決定する。つまり、制御ディスパッチャ1007は、計算と記憶の分離を実現し、即ち、当該トランザクション状態をどうやって記憶するか、どこに記憶されたかを計算し、記憶とはストレージエンジン1009によって保証されるトランザクション状態の信頼性の高い記憶を指す。
【0139】
本実施例において、トランザクションメッセージを失われないことを保証するために、データ層における信頼性の高いメッセージミドルウェアは、マルチレプリケーションベースの方式に基づいて、データ層の高い信頼性を保証し、さらに、生産側でWALを介して順序にログを書き込み、システムの処理能力を向上させ、ミリ秒レベルの遅延を達成することができ、アーキテクチャでは計算と記憶の分離方式を介して、水平方向の拡張を柔軟に実行することができ、最後に、管理を容易にするために操作が容易な管理プラットフォームが実現され、いつでも実行されたトランザクションを見ることができる。
【0140】
いくつかの実施例において、テンセント課金の実際のサービスシナリオにおいて、引処理プロセスの処理中にRPCインターフェースを呼び出すことは、データベースまたは他のリソースインターフェースを直接に操作することもできる。ユーザが振替することを例にとると、一回の振替操作プロセスは、
図11の3つのステップを含む。
図11は、本願実施例による振替要求を実現する実施プロセスの概略図であり、
図11を参照して説明する。
【0141】
ステップ1において、振替注文を作成するために、APPエンド1101によって提出された振替要求において、注文サービス1102に記録する。
【0142】
ステップ2において、振替DB操作を実行する同時に、ユーザのDBデータを修正するために、注文の作成が完了した後、DBサービス1103に入る。
【0143】
いくつかの実施例において、振替操作を実行するプロセス中、異なる2つのネットワークインターフェースを呼び出す必要がある場合、2つのグループ1104および1105によって実現される必要がある。フループ1104および1105において、MおよびSは、それぞれ、データベースの設定でマスターとスレーブを示す。一具体的な例において、ユーザAからユーザBへ振替するが、2つのユーザは、建設銀行と中国工商銀行という異なる銀行を持ち、当該2つの銀行のデータが1つのサーバに記憶されていない場合、2つのグループ1104および1105を使用して、異なる銀行間の振替を実現する。
【0144】
ステップ3において、振替が完了した後、通知サービス1106に入って、振替成功情報を生成し、振替成功通知を実行し、振替成功情報をAPPエンド1101に返す。
【0145】
いくつかの実施例において、点線1107および点線1108は、それぞれ、現在のステップが失敗した場合、データロールバックを実行することを示す。
【0146】
本実施例において、メッセージミドルウェアの書き込み性能はデータベースの処理性能より高く、ローカル記憶と高整合性のリモートメッセージミドルウェアを組み合わせる方式を介してトランザクションメッセージが失われないように保証する。長いトランザクションの状態情報は、メッセージミドルウェアを介して永続的に記憶し、サービスの記憶に結合する必要なく、pub-sub方式を介してトランザクション全体の実行を駆動し、データベースの非侵入性を保証する。
【0147】
いくつかの実施例において、データベースのトランザクションは接続に基づいており、接続が切断されるとトランザクションがロールバックされるため、次のいくつかのシナリオが想定される。
【0148】
シナリオ1:DBトランザクションが先にコミットに成功し、他のトランザクションは失敗した場合。
【0149】
シナリオ2:他のトランザクションが先にコミットに成功し、このときのDB接続が切断された場合。
【0150】
シナリオ3:他のトランザクションが先にコミットに成功し、このときのDBの一部が成功し、一部が失敗した場合。
【0151】
シナリオ4:非同期サービスがあり、このときのDBがコミットするかしないかを操作する場合。
【0152】
これにより、長いトランザクションがDB操作に関する場合、いくつかの複雑なSQL操作は対応する逆操作を実現することができないなど、補償トランザクション操作を実現または提供することは非常に難しいことが分かる。それにより、長いトランザクションの一貫して処理することを実現することができない。以上の4つのシナリオが発生すると、サブトランザクションの一部はコミットされ、一部が失敗する状況が発生する。したがって、上記の問題を解決するために、本願実施例は、MySQL外部XA能力を参照して、ネイティブの分散式トランザクションを実現する。MySQLは、外部XAトランザクション能力を提供したため、正常に準備したトランザクションが接続を超えることを許可する。2つの段階でコミットする方式を介してデータベース間の分散トランザクションを実現する。サービスSQLは制限されないため、使用シナリオはより広い。以下、振替を例して、長いトランザクションが混合リソース操作に関する場合異なるサブトランザクションの整合性を保証するプロセスを説明し、
図12に示されたように、
図12は、本願実施例で提供されるトランザクション処理方法の実装プロセスの概略図であり、以下、
図12を参照して説明する。
【0153】
ステップS1201において、トランザクションを起動する。
【0154】
いくつかの実施例において、APPエンドは、トランザクションを開始させる命令をミドルウェアサービスエンジン(TDXA)に送信し、APPエンドは、TDXAへの振替要求を開始し、TDXAは、整合性を有するミドルウェアサービスエンジンを実現するために使用される。
【0155】
ステップS1202において、振替注文を作成する。
【0156】
いくつかの実施例において、Tryは注文を作成することを示し、注文サービス(order service)を作成した後、sql振替操作を開始させて、振替操作の第1段階に入る。
【0157】
ステップS1203において、sql命令「xa start xd1」をデータベース1に送信する。
【0158】
いくつかの実施例において、sql1は、サブトランザクションT1を更新し、これは、sqlステートメント「@sql1=update T1 set balance=balance+10 where user=‘g1’」によって実現することができる。sql2は、サブトランザクションT1を再び更新し、これは、sqlステートメント「@sql2=update T1 set balance=balance-10 where user=‘g2’ and balance>=10」によって実現することができる。
【0159】
ステップS1204において、sql命令「xa start xd2」をデータベース2に送信する。
【0160】
いくつかの実施例において、データベース1およびデータベース2にそれぞれsql命令「xa start xd1」および「xa start xd2」を送信する(ここで、当該2つのsql命令は、両者のデータベースがマッチングすることを保証し、データベース1およびデータベース2を両方とも準備させるコーディネータとして使用される)ことにより、トランザクションを処理するデータベース1とデータベース2の整合性を維持する。
【0161】
ステップS1205において、sql命令「xa prepare xd1」をデータベース1に送信する。
【0162】
ステップS1206において、sql命令「xa prepare xd2」をデータベース2に送信する。
【0163】
いくつかの実施例において、トランザクションを処理し、即ち、振替注文を処理するために、データベース1およびデータベース2にそれぞれsql命令「xa prepare xd1」および「xa prepare xd2」を送信することにより、2つのDBを両方とも準備させる。
【0164】
ステップS1207において、振替結果を決定し、通知メッセージをユーザに通知する。
【0165】
いくつかの実施例において、「do」を使用して振替結果を取得することができ、注文の作成を完了したときに設定された状態は1であり、失敗した場合当該注文の状態を変更するなど、order serviceが振替注文の作成中失敗した場合、当該作成された注文の状態を再設定し、doとは振替の失敗または成功をユーザに対して通知することを意味する。本実施例において、注文が正常に作成されたが、振替結果が失敗した場合、作成された注文の状態を無効な注文に変更する必要がある。ステップS1207を完了した後、複数のトランザクション間の状態の第2段階に入る。
【0166】
他の実施例において、データベーストランザクション処理プロセス中、ロールバックする必要があるシナリオでは、sqlのundo logを記録する方式を介して逆操作を実行する(例えば、a=a+1の逆操作はa=a-1である)。データベースを記憶媒体として使用すること以外にも、ローカルファイルを記憶として使用することもでき、例えば、サブトランザクションのそれぞれの状態情報を行に記憶し、その後、1つの非同期出荷検査ファイル内のトランザクション状態情報を介して後続の操作を決定する。
【0167】
ステップS1208において、前述のステップを確認する。
【0168】
いくつかの実施例において、複数のトランザクション間の状態の第2段階は、上記のステップS1201ないしステップS1207におけるネゴシエーションしたプロトコルを確認する。
【0169】
ステップS1209において、「xa commit xid1」をデータベース1に送信し、および「xa commit xid2」をデータベース2に送信する。
【0170】
いくつかの実施例において、「xa commit xid1」および「xa commit xid2」をデータベース1およびデータベース2にそれぞれ送信することにより、データベース1およびデータベース2が最後の処理結果(例えば、振替成功など)を提出して、APPエンドにフィードバックしたことを確認する。
【0171】
ステップS1210において、トランザクション終了メッセージをAPPエンドに返す。
【0172】
本願実施例において、様々な異なるリソースのトランザクションタイプをサポートし、適用シナリオはより広く、1つの長いトランザクションプロセスはRPCデータベース、KVなどの様々なリソース操作に関する可能性があり、混合リソース操作の整合性を確報して、普遍性を実現する必要がある。
【0173】
以下、本願実施例で提供される、ソフトウェアモジュールとして実施されるトランザクション処理サーバ455の例示的な構造であり、いくつかの実施例において、
図2Bに示されたように、メモリ450に記憶されたトランザクション処理サーバ455におけるソフトウェアモジュールは、データベースから取得した、処理対象となるトランザクションを少なくとも2つのサブトランザクションに分割するように構成される第1分割モジュール4551と、サブトランザクションのそれぞれが属するネットワークインターフェースと前記サブトランザクションによって実現される各機能とに従って、前記サブトランザクションのそれぞれをN(Nは1より大きい整数である)個の部分に分割するように構成される第2分割モジュール4552であって、前記N個の部分は、関連付け関係を持つものである、第2分割モジュール4552と、前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得するように構成される第1処理モジュール4553と、前記処理結果に従って異常なサブトランザクションがあると決定した場合、前記異常なサブトランザクションの異常原因にマッチングする処理戦略を決定するように構成される第1決定モジュール4554と、前記処理対象となるトランザクションの最終的な処理結果を取得するために、前記処理戦略を使用して、前記異常なサブトランザクションを処理するように構成される第2処理モジュール4555とを備えることを含む。いくつかの実施例において、前記第1分割モジュール4551は、さらに、前記サブトランザクションのそれぞれが属するネットワークインターフェースのカテゴリセットを決定し、前記ネットワークインターフェースのカテゴリセットと、対応するサブトランザクションによって実現される各機能とに従って、前記対応するサブトランザクションをN個の部分に分割し、関連付け関係を持つN個の部分を形成するために、前記サブトランザクションのそれぞれによって実現される各機能に従って、前記N個の部分間の関連付け関係を決定するように構成される。いくつかの実施例において、前記第1処理モジュール4553は、さらに、前記少なくとも2つのサブトランザクション間が独立する場合、前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得するように構成される。いくつかの実施例において、前記第1処理モジュール4553は、さらに、前記少なくとも2つのサブトランザクション間に交差がある場合、前記交差および事前設定されたホワイトリストに従って、前記少なくとも2つのサブトランザクション間の処理パスを決定し、前記サブトランザクションのそれぞれの処理結果を取得するために、前記処理パスに従って、前記関連付け関係に基づいてサブトランザクションのそれぞれのN個の部分を順次に処理するように構成される。いくつかの実施例において、前記サブトランザクションが属するネットワークインターフェースのカテゴリセットにN個のカテゴリが含まれる場合、前記サブトランザクションを少なくともM(Mは1より大きい整数である)個の部分に分割し、前記第1処理モジュール4553は、さらに、前記関連付け関係に従って、少なくともM個の部分間のシリアル実行順序を決定し、最後に実行される部分の処理結果を取得するために、前記シリアル実行順序に従って、前記シリアル実行順序における前記少なくともM個の部分のM-1番目の部分の処理結果に基づいて、前記シリアル実行順序における前記少なくともM個の部分のM番目の部分を実行するように構成される。いくつかの実施例において、前記第1処理モジュール4553は、さらに、前記処理戦略を使用して前記異常なサブトランザクションを処理した結果に従って、新しい処理結果を決定し、前記新しい処理結果が、前記異常なサブトランザクションが依然として異常な状態にあることである場合、現在処理されたサブトランザクションの処理結果セットを決定し、メッセージミドルウェアを使用して、前記処理結果セットを記憶し、入力された読み取り命令を受信した場合、前記メッセージミドルウェアから前記処理結果セットを読み取り、異常なサブトランザクションのN個の部分を処理し続けるように構成される。いくつかの実施例において、前記第2処理モジュール4555は、さらに、前記異常原因が、前記異常なサブトランザクションを処理するときにユーザ側で異常が発生したことである場合、前記異常なサブトランザクションの前のサブトランザクションの処理結果を前記異常なサブトランザクションの処理結果として使用し、前記異常原因が、前記異常なサブトランザクションを処理するときにサーバ側で異常が発生したことである場合、前記関連付け関係に従って、前記異常なサブトランザクションのN個の部分を再び処理するように構成される。いくつかの実施例において、前記第1分割モジュール4551は、さらに、前記処理対象となるトランザクションが呼び出す必要のあるリソースインターフェースセットを実現すると決定し、前記処理対象となるトランザクションをリソースインターフェースセットとマッチングする複数のサブトランザクションに分割し、それに対応して、受信した処理実行命令に応答して、各リソースインターフェースを起動し、前記N個の部分のうち、最後に実行される部分の処理結果を取得するために、リソースインターフェースのフィードバックの準備完了情報を受信した場合、前記リソースインターフェースにおいて、マッチングするサブトランザクションのN個の部分を前記関連付け関係に従って処理するように構成される。
【0174】
本願実施例は、実行可能な命令が記憶された記憶媒体を開示し、ここで、実行可能な命令が記憶され、実行可能な命令がプロセッサによって実行されると、プロセッサが、本願実施例で提供される方法を実行するようにする。いくつかの実施例において、記憶媒体は、フラッシュメモリ、磁気表面メモリ、光ディスク、または光ディスクメモリなどのメモリであってもよく、上記のメモリのうちの1つまたは任意に組み合わせた様々な機器であってもよい。いくつかの実施例において、実行可能な命令は、プログラム、ソフトウェア、ソフトウェアモジュール、スクリプトまたはコードの形であり得、任意の形態のプログラミング言語(コンパイルまたは解釈された言語、または宣言または手続き型言語を含む)でプログラミングし、それらは、独立したプログラムとして配置され、またはモジュール、コンポーネント、サブルーチン、またはコンピューティング環境での使用に適したその他のユニットとして配置されることを含む任意の形で配置される。例として、実行可能な命令は、ファイルシステム内のファイルに対応することに限れなく、他のプログラムまたはデータのファイルの一部に記憶されることができ、例えば、ハイパーテキストマークアップ言語(HTML:Hyper Text Markup Language)ドキュメントのうちの1つまたは複数のスクリプトに記憶され、議論するプログラム専用の単一のファイルに記憶され、または、複数の協調ファイル(例えば、1つまたは複数のモジュール、サブプログラムまたはコード部分のファイルに記憶されるなど)に記憶される。例として、実行可能な命令は、1つの車載コンピューティング機器に配置されて実行され、または1つ場所に配置された複数のコンピューティング機器に配置されて実行され、さらにまたは、複数の場所に分散し且つ通信ネットワークによって相互接続する複数のコンピューティング機器を介して実行されることができる。要約すれば、本願実施例が、長いトランザクションを処理するプロセスにおいて、処理対象となるトランザクションについては、サブトランザクションが属するネットワークインターフェースに基づいてサブトランザクションを複数の部分に分割し、各部分を処理して、全体的なサービスのパフォーマンスがスタンドアロンデータベースの処理能力によって制限されるという問題を解決し、処理結果が異常である異常なサブトランザクションについては、異常原因に基づき、マッチング処理戦略を選択して異常なサブトランザクションを処理することにより、最終的な処理結果を取得する。このように、マッチング処理戦略を使用して異常なサブトランザクションを自動的に処理して、フォールトトレランスおよびトランザクション処理能力を向上させる。上記した内容は、本願の実施例に過ぎず、本願の保護範囲を限定することを意図するものではない。本願の精神および範囲内で行われるあらゆる修正、同等の置換、改善などは、すべて本願の保護範囲に含まれるべきである。
【産業上の利用可能性】
【0175】
本願実施例では、データベースから取得した、処理対象となるトランザクションを少なくとも2つのサブトランザクションに分割し、サブトランザクションのそれぞれが属するネットワークインターフェースと前記サブトランザクションによって実現される各機能とに従って、前記サブトランザクションのそれぞれをN個の部分に分割し、前記N個の部分は、関連付け関係を持つものであり、前記関連付け関係に基づき、前記サブトランザクションのそれぞれのN個の部分を処理して、前記N個の部分のうち、最後に実行される部分の処理結果を取得し、前記処理結果に従って異常なサブトランザクションがあると決定した場合、前記異常なサブトランザクションの異常原因にマッチングする処理戦略を決定し、前記処理対象となるトランザクションの最終的な処理結果を取得するために、前記処理戦略を使用して、前記異常なサブトランザクションを処理する。このように、自動的な配置方式を通じて、マッチング処理戦略を使用して異常なサブトランザクションを処理し、フォールトトレランスおよびトランザクション処理能力を向上させる。
【国際調査報告】