(57)【要約】【課題】分散型システムにおいてトランザクションをコミットするための方法、コンピュータ・プログラム、およびシステムを提供すること。【解決手段】方法は、システムのコーディネータ・ノードでトランザクションのコミット要求をクライアントから受信するステップと、システムにおける他のノードについて、テール・ログ・シーケンス番号をトラッキングするステップと、システムにおける各関与ノードについてトランザクションに関連付けられた最大ログ・シーケンス番号を決定するステップと、各関与ノードについてのテール・ログ・シーケンス番号が、それぞれの関与ノードでのトランザクションに関連する最大ログ・シーケンス番号よりも大きいかまたは等しいことを条件に、コーディネータ・ノードでのトランザクションをコミットするステップを含む。【選択図】  図１
2009520253.tif 000002
【特許請求の範囲】
【請求項１】
分散型システムのコーディネータ・ノードでトランザクションをコミットするようにとの要求をクライアントから受信するステップであって、前記分散型システムが１つまたは複数の関与ノードを備える、受信するステップと、
前記分散型システムにおけるすべての他のノードそれぞれについて、テール・ログ・シーケンス番号をトラッキングするステップであって、各テール・ログ・シーケンス番号は前記それぞれのノードによってフラッシュされた最新のトランザクション・ログ・レコードを近似し、前記すべての他のノードのうちの少なくとも１つが関与ノードである、トラッキングするステップと、
前記１つまたは複数の関与ノードのそれぞれについて前記トランザクションに関連付けられた最大ログ・シーケンス番号を決定するステップであって、各最大ログ・シーケンス番号が前記それぞれの関与ノードでの前記トランザクションに必要な最高のトランザクション・ログ・レコードに対応する、決定するステップと、
前記１つまたは複数の関与ノードのそれぞれについての前記テール・ログ・シーケンス番号が、前記それぞれの関与ノードでの前記トランザクションに関連付けられた前記最大ログ・シーケンス番号よりも大きいかまたは等しい場合、前記コーディネータ・ノードで前記トランザクションをコミットするステップと、
を有する、分散型システムにおいてトランザクションをコミットするための方法。
【請求項２】
前記分散型システムにおける前記すべての他のノードそれぞれについて、前記テール・ログ・シーケンス番号をトラッキングするステップが、
前記分散型システム内の前記すべての他のノードそれぞれについてのエントリを備える第１のアレイを維持するステップであって、各エントリは、前記それぞれの他のノードについて前記テール・ログ・シーケンス番号を格納するように動作可能である、維持するステップと、
前記すべての他のノードのうちの１つからのメッセージに新しいテール・ログ・シーケンス番号が結合された場合、前記第１のアレイを更新するステップと、
を有する、請求項１に記載の方法。
【請求項３】
前記新しいテール・ログ・シーケンス番号が、前記ノードによってフラッシュされた最も新しいトランザクション・ログ・レコードではなく、前記メッセージが、１つまたは複数の応答、１つまたは複数の要求、あるいは、少なくとも１つの応答および少なくとも１つの要求を備える、請求項２に記載の方法。
【請求項４】
前記１つまたは複数の関与ノードのそれぞれについて前記トランザクションに関連付けられた前記最大ログ・シーケンス番号を決定するステップが、
前記トランザクションに対する第２のアレイを作成するステップであって、前記第２のアレイは、前記１つまたは複数の関与ノードのそれぞれに関するエントリを備え、各エントリは、前記それぞれの関与ノードについての前記トランザクションに関連付けられた前記最大ログ・シーケンス番号を格納するように動作可能である、作成するステップと、
前記１つまたは複数の関与ノードのうちの１つからの応答に、前記トランザクションに関連付けられた前記最大ログ・シーケンス番号が結合された場合、前記第２のアレイを更新するステップと、
を有する、請求項２に記載の方法。
【請求項５】
前記コーディネータ・ノードで前記トランザクションをコミットするステップが、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュしたかどうかを判別するために、前記第２のアレイを前記第１のアレイと比較するステップと、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュした場合、前記コーディネータ・ノードで前記トランザクションに関するコミット・ログ・レコードを書き込むステップと、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュした場合、前記それぞれの関与ノードに送信されるようにすでにスケジューリングされた他のメッセージと共に、前記１つまたは複数の関与ノードのそれぞれにコミット要求が送信されるようにスケジューリングするステップと、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュした場合、正常コミット・メッセージを前記クライアントに戻すステップと、
を有する、請求項４に記載の方法。
【請求項６】
前記トランザクションが前記それぞれの関与ノードでコミットされていることを指定する応答が、前記１つまたは複数の関与ノードそれぞれから受信された場合、前記トランザクションの状態に関する情報を保持するために、割り当てられた前記コーディネータ・ノードのログ・スペースを再利用するステップをさらに有する、請求項５に記載の方法。
【請求項７】
各応答が、前記それぞれの関与ノードから前記コーディネータ・ノードへと送信されている無関係なメッセージと結合される、請求項６に記載の方法。
【請求項８】
前記コーディネータ・ノード上の第１のエージェントが前記トランザクションの実行を処理し、前記コーディネータ・ノード上の第２のエージェントが前記トランザクションのコミットメントを処理する、請求項１に記載の方法。
【請求項９】
前記少なくとも１つの関与ノードに関する前記テール・ログ・シーケンス番号が、前記少なくとも１つの関与ノードの前記トランザクションに関連付けられた前記最大ログ・シーケンス番号よりも小さい場合、前記少なくとも１つの関与ノードで１つまたは複数のトランザクション・ログ・レコードをフラッシュするためのメッセージを少なくとも１つの関与ノードに送信するステップをさらに有する、請求項１に記載の方法。
【請求項１０】
コンピュータ読み取り可能媒体を備えるコンピュータ・プログラム製品であって、前記コンピュータ読み取り可能媒体は、分散型システムにおいてトランザクションをコミットするためのコンピュータ読み取り可能プログラムを含み、前記コンピュータ読み取り可能プログラムは、コンピュータ上で実行された場合、
分散型システムのコーディネータ・ノードでトランザクションをコミットするようにとの要求をクライアントから受信する動作であって、前記分散型システムが１つまたは複数の関与ノードを備える、受信する動作と、
前記分散型システムにおけるすべての他のノードそれぞれについて、テール・ログ・シーケンス番号をトラッキングする動作であって、各テール・ログ・シーケンス番号は前記それぞれのノードによってフラッシュされた最新のトランザクション・ログ・レコードを近似し、前記すべての他のノードのうちの少なくとも１つが関与ノードである、トラッキングする動作と、
前記１つまたは複数の関与ノードのそれぞれについて前記トランザクションに関連付けられた最大ログ・シーケンス番号を決定する動作であって、各最大ログ・シーケンス番号が前記それぞれの関与ノードでの前記トランザクションに必要な最高のトランザクション・ログ・レコードに対応する、決定する動作と、
前記１つまたは複数の関与ノードのそれぞれについての前記テール・ログ・シーケンス番号が、前記それぞれの関与ノードでの前記トランザクションに関連付けられた前記最大ログ・シーケンス番号よりも大きいかまたは等しい場合、前記コーディネータ・ノードで前記トランザクションをコミットする動作と、
を、前記コンピュータに実行させる、コンピュータ・プログラム製品。
【請求項１１】
前記分散型システムにおける前記すべての他のノードそれぞれについて、前記テール・ログ・シーケンス番号をトラッキングする動作が、
前記分散型システム内の前記すべての他のノードそれぞれについてのエントリを備える第１のアレイを維持する動作であって、各エントリは、前記それぞれの他のノードについて前記テール・ログ・シーケンス番号を格納するように動作可能である、維持する動作と、
前記すべての他のノードのうちの１つからのメッセージに新しいテール・ログ・シーケンス番号が結合された場合、前記第１のアレイを更新する動作と、
を有し、
前記１つまたは複数の関与ノードのそれぞれについて前記トランザクションに関連付けられた前記最大ログ・シーケンス番号を決定する動作が、
前記トランザクションに対する第２のアレイを作成する動作であって、前記第２のアレイは、前記１つまたは複数の関与ノードのそれぞれに関するエントリを備え、各エントリは、前記それぞれの関与ノードについての前記トランザクションに関連付けられた前記最大ログ・シーケンス番号を格納するように動作可能である、作成する動作と、
前記１つまたは複数の関与ノードのうちの１つからの応答に、前記トランザクションに関連付けられた前記最大ログ・シーケンス番号が結合された場合、前記第２のアレイを更新する動作と、
を有し、
前記コーディネータ・ノードで前記トランザクションをコミットする動作が、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュしたかどうかを判別するために、前記第２のアレイを前記第１のアレイと比較する動作と、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュした場合、前記コーディネータ・ノードで前記トランザクションに関するコミット・ログ・レコードを書き込む動作と、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュした場合、前記それぞれの関与ノードに送信されるようにすでにスケジューリングされた他のメッセージと共に、前記１つまたは複数の関与ノードのそれぞれにコミット要求が送信されるようにスケジューリングする動作と、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュした場合、正常コミット・メッセージを前記クライアントに戻す動作と、
を有する、請求項１０に記載のコンピュータ・プログラム製品。
【請求項１２】
前記新しいテール・ログ・シーケンス番号が、前記ノードによってフラッシュされた最も新しいトランザクション・ログ・レコードではなく、前記メッセージが、１つまたは複数の応答、１つまたは複数の要求、あるいは、少なくとも１つの応答および少なくとも１つの要求を備える、請求項１１に記載のコンピュータ・プログラム製品。
【請求項１３】
前記コンピュータ読み取り可能プログラムは、前記コンピュータ上で実行された場合、
前記トランザクションが前記それぞれの関与ノードでコミットされていることを指定する応答が、前記１つまたは複数の関与ノードそれぞれから受信された場合、前記トランザクションの状態に関する情報を保持するために、割り当てられた前記コーディネータ・ノードのログ・スペースを再利用する動作を、さらに前記コンピュータに実行させ、各応答は、前記それぞれの関与ノードから前記コーディネータ・ノードへと送信されている無関係なメッセージと結合される、請求項１０に記載のコンピュータ・プログラム製品。
【請求項１４】
前記コーディネータ・ノード上の第１のエージェントが前記トランザクションの実行を処理し、前記コーディネータ・ノード上の第２のエージェントが前記トランザクションのコミットメントを処理する、請求項１０に記載のコンピュータ・プログラム製品。
【請求項１５】
前記コンピュータ読み取り可能プログラムは、前記コンピュータ上で実行された場合、
前記少なくとも１つの関与ノードに関する前記テール・ログ・シーケンス番号が、前記少なくとも１つの関与ノードの前記トランザクションに関連付けられた前記最大ログ・シーケンス番号よりも小さい場合、前記少なくとも１つの関与ノードで１つまたは複数のトランザクション・ログ・レコードをフラッシュするためのメッセージを少なくとも１つの関与ノードに送信する動作を、さらに前記コンピュータに実行させる、請求項１０に記載のコンピュータ・プログラム製品。
【請求項１６】
複数のデータベースと、
互いに接続された複数のノードと、
を備える分散型システムであって、前記複数のノードそれぞれが前記複数のデータベースのうちの１つまたは複数に結合され、前記複数のノードのうちの少なくとも１つが、
前記少なくとも１つのノードでトランザクションをコミットするようにとの要求をクライアントから受信する動作であって、前記少なくとも１つのノードが前記トランザクションのコーディネータ・ノードであり、前記複数のノードのうちの１つまたは複数が関与ノードである、受信する動作と、
前記分散型システムにおけるすべての他のノードそれぞれについて、テール・ログ・シーケンス番号をトラッキングする動作であって、各テール・ログ・シーケンス番号は前記それぞれのノードによってフラッシュされた最新のトランザクション・ログ・レコードを近似し、前記すべての他のノードのうちの少なくとも１つが関与ノードである、トラッキングする動作と、
前記１つまたは複数の関与ノードのそれぞれについて前記トランザクションに関連付けられた最大ログ・シーケンス番号を決定する動作であって、各最大ログ・シーケンス番号が前記それぞれの関与ノードでの前記トランザクションに必要な最高のトランザクション・ログ・レコードに対応する、決定する動作と、
前記１つまたは複数の関与ノードのそれぞれについての前記テール・ログ・シーケンス番号が、前記それぞれの関与ノードでの前記トランザクションに関連付けられた前記最大ログ・シーケンス番号よりも大きいかまたは等しい場合、前記コーディネータ・ノードで前記トランザクションをコミットする動作と、
を、実行するように動作可能な、分散型システム。
【請求項１７】
前記分散型システムにおける前記すべての他のノードそれぞれについて、前記テール・ログ・シーケンス番号をトラッキングする動作が、
前記分散型システム内の前記すべての他のノードそれぞれについてのエントリを備える第１のアレイを維持する動作であって、各エントリは、前記それぞれの他のノードについて前記テール・ログ・シーケンス番号を格納するように動作可能である、維持する動作と、
前記すべての他のノードのうちの１つからのメッセージに新しいテール・ログ・シーケンス番号が結合された場合、前記第１のアレイを更新する動作と、
を有し、
前記１つまたは複数の関与ノードのそれぞれについて前記トランザクションに関連付けられた前記最大ログ・シーケンス番号を決定する動作が、
前記トランザクションに対する第２のアレイを作成する動作であって、前記第２のアレイは、前記１つまたは複数の関与ノードのそれぞれに関するエントリを備え、各エントリは、前記それぞれの関与ノードについての前記トランザクションに関連付けられた前記最大ログ・シーケンス番号を格納するように動作可能である、作成する動作と、
前記１つまたは複数の関与ノードのうちの１つからの応答に、前記トランザクションに関連付けられた前記最大ログ・シーケンス番号が結合された場合、前記第２のアレイを更新する動作と、
を有し、
前記コーディネータ・ノードで前記トランザクションをコミットする動作が、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュしたかどうかを判別するために、前記第２のアレイを前記第１のアレイと比較する動作と、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュした場合、前記コーディネータ・ノードで前記トランザクションに関するコミット・ログ・レコードを書き込む動作と、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュした場合、前記それぞれの関与ノードに送信されるようにすでにスケジューリングされた他のメッセージと共に、前記１つまたは複数の関与ノードのそれぞれにコミット要求が送信されるようにスケジューリングする動作と、
前記１つまたは複数の関与ノードのそれぞれが、前記それぞれの関与ノードで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュした場合、正常コミット・メッセージを前記クライアントに戻す動作と、
を有する、請求項１６に記載の分散型システム。
【請求項１８】
前記新しいテール・ログ・シーケンス番号が、前記ノードによってフラッシュされた最も新しいトランザクション・ログ・レコードではなく、前記メッセージが、１つまたは複数の応答、１つまたは複数の要求、あるいは、少なくとも１つの応答および少なくとも１つの要求を備える、請求項１７に記載の分散型システム。
【請求項１９】
さらに前記コーディネータ・ノードが、
前記トランザクションが前記それぞれの関与ノードでコミットされていることを指定する応答が、前記１つまたは複数の関与ノードそれぞれから受信された場合、前記トランザクションの状態に関する情報を保持するために、割り当てられた前記コーディネータ・ノードのログ・スペースを再利用する動作を、実行するように動作可能であり、各応答は、前記それぞれの関与ノードから前記コーディネータ・ノードへと送信されている無関係なメッセージと結合される、請求項１７に記載の分散型システム。
【請求項２０】
前記コーディネータ・ノード上の第１のエージェントが前記トランザクションの実行を処理し、前記コーディネータ・ノード上の第２のエージェントが前記トランザクションのコミットメントを処理し、さらに前記コーディネータ・ノードが、
前記少なくとも１つの関与ノードに関する前記テール・ログ・シーケンス番号が、前記少なくとも１つの関与ノードの前記トランザクションに関連付けられた前記最大ログ・シーケンス番号よりも小さい場合、前記少なくとも１つの関与ノードで１つまたは複数のトランザクション・ログ・レコードをフラッシュするためのメッセージを少なくとも１つの関与ノードに送信する動作を、実行するように動作可能な、請求項１６に記載の分散型システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に分散型システムに関する。とりわけ本発明は、分散型システムにおけるトランザクションのコミットメントを対象とする。
【背景技術】
【０００２】
分散型システムとは、データが様々なデータベースに格納されるマルチノード・システムのことである。ノードは、コンピュータ・システムなどの任意のデータ処理システムとすることができる。各データベースへは１つのノードを介してのみアクセス可能であるが、分散型システムでは１つのノードを介して複数のデータベースにアクセスすることができる。分散型システムのノードは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）などのネットワークを介して、互いに接続することができる。加えて分散型システムのノードは、１箇所にあるものとするか、複数の場所にわたって分散させることができる。分散型システムの例には、データベース・システム、メール・サーバ・システムなどが含まれる。
【０００３】
結果として単一の論理アクションを生じさせる要求セットからなるトランザクションは、分散型システムにおける複数のデータベース上のデータを修正することができるため、分散型システムは、障害（たとえば、電源異常、ハードウェア・クラッシュなど）が発生するか否かにかかわらず、データの整合性が維持されることを保証しなければならない。したがって、トランザクションで要求された各動作は「コミット」されなければならず、すなわちデータへの変更が永続的になり、その後トランザクションをコミットすることができる。データの変更は、データ変更のログ・レコードが「フラッシュ」された場合、すなわち、不揮発性ストレージ（たとえばディスク・ドライブ）に書き込まれた場合に、永続的になる。ログ・レコードにより、ノードは、障害以前にコミットされた動作を再生することによって、データベースをその障害前の状態に復元することができる。
【０００４】
従来、分散型システムは、２フェーズ・コミット（２ＰＣ）プロトコルを使用して、データの整合性を保持してきた。２ＰＣシステムでは、各トランザクションのコーディネータ・ノード、すなわち、クライアント（たとえばアプリケーション）がトランザクションをサブミットしたノードが、トランザクションの各要求について、要求を処理する責務を負う分散型システム内のノードを識別する。トランザクションにおいて要求を処理するように割り当てられた各ノードが、関与ノード（participant node）と呼ばれる。
【０００５】
２フェーズ・コミット・プロトコルの各関与ノードは、トランザクションをコミットするか打ち切るかを断定し、その断定をコーディネータ・ノードに送信する。次にコーディネータ・ノードは、各関与ノードからの断定に基づいて、トランザクションをコミットするか打ち切るかを最終的に決定する。トランザクションは、すべての関与ノードがトランザクションをコミットすることを断定した場合にのみ、コーディネータ・ノードによってコミットされることになる。そうでない場合、コーディネータ・ノードはトランザクションを打ち切ることになる。
【０００６】
しかしながら、フェーズ１の間、コーディネータ・ノードは、トランザクションをコミットする準備をするように各関与ノードにメッセージを送信するため、２フェーズ・コミット・プロトコルはあまりメッセージ効率が良くない。次に各関与ノードは、要求された動作をコミットできるかどうかを決定し、トランザクションをコミットするか打ち切るかに関するその断定と共に、コーディネータ・ノードにメッセージを返送する。第２のフェーズでは、コーディネータ・ノードが、関与ノードから受け取ったすべての断定に基づいてトランザクションをコミットするか打ち切るかを決定し、トランザクションをコミットするかまたは打ち切るようにとのメッセージを、各関与ノードに送信する。
【０００７】
分散型システムによって使用される他のコミット・プロトコルは、「Ｍｅｔｈｏｄ  ｏｆ  Ｃｏｍｍｉｔｍｅｎｔ  ｉｎ  ａ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｄａｔａｂａｓｅ  Ｔｒａｎｓａｃｔｉｏｎ」という名称の米国特許第５７９９３０５号明細書に記載された、２インターバル・コミット（２ＩＣ）である。２ＩＣシステムは、インターバル・コーディネータから連続して送信されるインターバル・メッセージを使用して、トランザクションをコミットするか打ち切るかを決定する。したがって、２ＩＣシステムがメッセージを発行する必要は２ＰＣシステムよりも少ないが、依然として必要以上にメッセージを多用する。
【特許文献１】米国特許第５７９９３０５号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００８】
したがって、現在のコミットメント・プロトコルよりもメッセージ効率の良い分散型トランザクション・コミットメント・プロトコルが求められている。本発明は、こうしたニーズを追及する。
【課題を解決するための手段】
【０００９】
分散型システムにおいてトランザクションをコミットするための方法、コンピュータ・プログラム製品、およびシステムが提供される。この方法、コンピュータ・プログラム製品、およびシステムは、分散型システムのコーディネータ・ノードでトランザクションをコミットするようにとの要求をクライアントから受信することであって、この分散型システムが１つまたは複数の関与ノードを備える、受信することと、分散型システムにおけるすべての他のノードそれぞれについて、テール・ログ（tail log）シーケンス番号をトラッキングすることであって、各テール・ログ・シーケンス番号はそれぞれのノードによってフラッシュされた最新のトランザクション・ログ・レコードを近似し、すべての他のノードのうちの少なくとも１つが関与ノードである、トラッキングすることと、１つまたは複数の関与ノードのそれぞれについてトランザクションに関連付けられた最大ログ・シーケンス番号を決定することであって、各最大ログ・シーケンス番号がそれぞれの関与ノードでのトランザクションに必要な最高のトランザクション・ログ・レコードに対応する、決定することと、１つまたは複数の関与ノードのそれぞれについてのテール・ログ・シーケンス番号が、それぞれの関与ノードでのトランザクションに関連付けられた最大ログ・シーケンス番号よりも大きいかまたは等しい場合、コーディネータ・ノードでのトランザクションをコミットすること、に備える。
【００１０】
次に本発明について、添付の図面を参照しながら、単なる例として説明する。
【発明を実施するための最良の形態】
【００１１】
本発明は、一般に分散型システムに関し、とりわけ分散型システムにおけるトランザクションのコミットメントに関する。以下の説明は、当業者の１人が本発明を作成および使用できるようにするために提示され、特許出願およびその要件に関連して提供される。当業者であれば、本明細書に記載された好ましい実装および一般的な原理および機能に対する様々な修正が容易に明らかとなろう。したがって、本発明は、図示された実装に限定されることを意図するものではなく、本明細書に記載された原理および機能に適合する最も広い範囲が認められる。
【００１２】
図１は、本発明の態様に従った、分散型システムにおいてトランザクションをコミットするためのプロセス１００を示す。１０２で、トランザクションをコミットするようにとの要求が、クライアントから分散型システムのコーディネータ・ノードで受信される。クライアントは、アプリケーションまたはプロセスとすることが可能であり、コーディネータ・ノードまたは何らかの他のノード上に配置することができる。コーディネータ・ノードは、通常、トランザクションが初期化された場所、すなわち、トランザクションを開始する要求をクライアントがサブミットした場所である。分散型システムはトランザクションに関与しているすべての関与ノードを含み、分散型システム内には１つまたは複数の関与ノードが存在することができる。いくつかの実施形態では、コーディネータ・ノードが関与ノードである場合もある。
【００１３】
１０４で、分散型システムのあらゆる他のノードに関するテール・ログ・シーケンス番号が（コーディネータ・ノードで）トラッキングされる。分散型システムにおいて、少なくとも１つの他のノードが関与ノードであることは明らかである。分散型システム内の各ノードが、そのノードによって実行されるすべての要求のログを維持する。ログ・レコードは、通常、最初にランダム・アクセス・メモリ（ＲＡＭ）などの揮発性メモリ、すなわち、障害の影響を受けやすいメモリ内に作成される。要求された動作をノードがコミットする準備が整った場合、ノードは、要求された動作に関連付けられたログ・レコードを、ハード・ディスクなどの不揮発性メモリに「フラッシュ」、すなわち書き込む。ログ・レコードのフラッシュにより、その後しばらくして障害が発生した場合、ノードは要求された動作を再実行することができる。各テール・ログ・シーケンス番号は、それぞれのノードによってフラッシュされた最新のトランザクション・ログ・レコードを近似する。
【００１４】
その後、１０６で、１つまたは複数の関与ノードのそれぞれについて、トランザクションに関連付けられた最大ログ・シーケンス番号が決定される。通常、単一トランザクション内に複数の要求が存在する。各関与ノードは複数の要求を処理するために割り当てることが可能であり、各要求は別々のログ・レコードを有することから、各最大ログ・シーケンス番号は、それぞれの関与ノードでトランザクションに要求された最高トランザクション・ログ・レコードに対応する（すなわち、トランザクション・ログ・レコードのログ・シーケンス番号は、そのトランザクションについてそれぞれの関与ノードによって実行された最終の要求動作に対応する）。各ノードのログはそのログに固有であるため、１つのノードでのログ・シーケンス番号は、通常、他のノードでの同じログ・シーケンス番号と異なるトランザクションに対応することになる。
【００１５】
トランザクションは、１つまたは複数の関与ノードそれぞれについてのテール・ログ・シーケンス番号が、それぞれの関与ノードでのトランザクションに関連付けられた最大ログ・シーケンス番号よりも大きいかまたは等しい場合に、コーディネータ・ノードでコミットされる（１０８）。これにより、コーディネータ・ノードでトランザクションがコミットされる前に、各関与ノードがそのそれぞれのトランザクション要求をコミットしたことが保証され、データの整合性を保持する。
【００１６】
図２〜図３には、本発明の実施形態に従った、分散型システムにおいてトランザクションをコミットするためのプロセス２００が示される。２０２で、トランザクションをコミットする要求が、分散型システムのコーディネータ・ノードで、クライアントから受信される。コミット要求がサブミットされた場合、クライアントは通常、データを修正、削除、または挿入する要求などの多くの他の要求をすでにコーディネータ・ノードにサブミットしており、その後、それらの要求はトランザクションに関与している分散型システム内の１つまたは複数の関与ノードに転送されている。
【００１７】
分散型システム内の他のノードそれぞれについてのエントリを備える第１のアレイが、コーディネータ・ノードで維持される（２０４）。各エントリは、それぞれの他のノードについてテール・ログ・シーケンス番号を格納するように動作可能である。２０６で、他のノードのうちの１つからのメッセージに新しいテール・ログ・シーケンス番号が結合（piggyback）された場合、第１のアレイは更新される。メッセージは、１つまたは複数の応答、１つまたは複数の要求、あるいはそれら２つの組み合わせを含むことができる。その結果、テール・ログ・シーケンス番号は、新しい別のメッセージで送信されるのではなく、１つのノードがすでに他のノードに送る予定であったメッセージと共に含められるため、メッセージング・トラフィックが大幅に低減されることになる。加えて、テール・ログ・シーケンス番号を既存のメッセージに追加するコストは非常に低く、通常は数バイト余分なだけである。
【００１８】
いくつかの実装では、ノードによって送信されるテール・ログ・シーケンス番号は、ノードによってフラッシュされた実際の最新のトランザクション・ログ・レコードではなく、何らかの以前のトランザクション・ログ・レコードである。これにより、他のトランザクションに割り振られたリソースをアンロックまたはアンラッチする時間がより多く与えられるため、メモリなどの、ノード上のリソースに関する競合を最小限にする一助となる。
【００１９】
トランザクションに対する第２のアレイが、２０８で作成される。第２のアレイは、１つまたは複数の関与ノードのそれぞれに関するエントリを備え、各エントリは、それぞれの関与ノードについてのトランザクションに関連付けられた最大ログ・シーケンス番号を格納するように動作可能である。２１０で、１つまたは複数の関与ノードのうちの１つからの応答に、トランザクションに関連付けられた最大ログ・シーケンス番号が結合された場合、第２のアレイは更新される。１つまたは複数の関与ノードがすでにコーディネータ・ノードに送信する予定であった応答に、最大ログ・シーケンス番号を結合することによって、メッセージング・トラフィックはさらに低減される。
【００２０】
次に、第２のアレイが第１のアレイと比較され、１つまたは複数の関与ノードのそれぞれが、それぞれの関与ノードでトランザクションに要求された最高トランザクション・ログ・レコードをフラッシュしたかどうかが判別される（２１２）。１つまたは複数の関与ノードのそれぞれが、それぞれの関与ノードでトランザクションに要求された最高トランザクション・ログ・レコードをフラッシュした場合、コーディネータ・ノードでトランザクションに関するコミット・ログ・レコードが書き込まれ（２１４）、それぞれの関与ノードに送信されるようにすでにスケジューリングされた他のメッセージと共に、１つまたは複数の関与ノードのそれぞれにコミット要求が送信されるようにスケジューリングされ（２１６）、正常コミット・メッセージがクライアントに戻される（２１８）。
【００２１】
メッセージング・トラフィックは、それぞれの関与ノードに送信されるようにすでにスケジューリングされた他のメッセージを介して、各関与ノードにコミット要求を送信することによって、再度改善される。関与ノードがコミット要求を受信すると、関与ノードは、トランザクション用に予約されたリソースのアンロック、およびトランザクションに関するコミット・ログ・レコードの書き込みなどの、ローカル・コミット処理を実行することになる。関与ノードがローカル・コミット処理を完了すると、関与ノードは、トランザクションをローカルにコミットした旨の応答をコーディネータ・ノードに送信することになる。この応答が、関与ノードからコーディネータ・ノードへと送信される無関係なメッセージと結合され、メッセージング・トラフィックをさらに低減させることができる。コーディネータ・ノードが各関与ノードからの返答を受信すると、コーディネータ・ノードは、トランザクションの状態に関する情報を保持するために、割り当てられたコーディネータ・ノードのログ・スペースを再利用（reclaim）することになる（２２０）。この情報は、各関与ノードの識別などを含むことができる。
【００２２】
１つまたは複数の関与ノードのうちの少なくとも１つに関するテール・ログ・シーケンス番号が、少なくとも１つの関与ノードのトランザクションに関連付けられた最大ログ・シーケンス番号よりも小さい場合、他のチェックがすでに実行されたかどうかに関して判別される（２２２）。他のチェックが何も実行されていない場合、コーディネータ・ノードはタイムアウトまで待機した後、再度チェックすることができる。他方で、他のチェックがすでに実行されている場合、少なくとも１つの関与ノードで１つまたは複数のトランザクション・ログ・レコードをフラッシュするためのメッセージが、少なくとも１つの関与ノードに送信される（２２４）。
【００２３】
いくつかの実施形態では、コーディネータ・ノードは、１つまたは複数のトランザクション・ログ・レコードをフラッシュするためのメッセージを送信した後に再度チェックするまで、単に待機することになる。他の実施形態では、メッセージは、フラッシュされるログ・シーケンス番号および応答要求を含むことができる。次にコーディネータ・ノードは、次に進むまで応答を待つことになる。テール・ログ・シーケンス番号を頻繁に更新できるようにノード間で多数のメッセージが送信されるため、分散型システムは一般に多くのトランザクションを処理することから、１つまたは複数のトランザクション記録をフラッシュするための要求を関与ノードに積極的に送信する必要性は、ほとんど生じないはずである。
【００２４】
クラッシュ・リカバリを実行する関与ノードは、たとえトランザクションがコミットされていても、いかなるコミット要求も見ない可能性がある。そうした環境の下では、クラッシュ・リカバリを実行する関与ノードは、トランザクションの状態を決定し、適宜コミットするかまたは打ち切るために、コーディネータ・ノードと通信することになる。コーディネータ・ノードは、それぞれの関与ノードがトランザクションをローカルにコミットした旨の返答を各関与ノードから受信するまで、トランザクションの状態に関する情報を保持するために、割り当てられたログ・スペースを再利用しないことになるため、トランザクションの状態を依然として記憶していることになる。
【００２５】
特定のトランザクションは、プリフェッチ（すなわち、先読み）要求などの、データを修正、削除、または挿入しない要求を含むことができる。これらの要求は、通常非同期であり、時には、ロック・タイムアウトまたはデッドロックに遭遇する。デッドロックは、第１のトランザクションにリソースＡが割り振られており、リソースＢの割り振りを待機しているが、同時に、第２のトランザクションにはリソースＢが割り振られており、リソースＡの割り振りを待機している場合に、発生する可能性がある。
【００２６】
あるノードでデッドロックが発生した場合、そのノードは、通常、ロック・タイムアウト後にトランザクションのうちの１つのロールバックを試行することになる。しかしながら、分散トランザクションでは、ノードが関与ノードである場合、コーディネータ・ノードにロールバックのための許可を求めなければならない。いくつかの実施形態では、コーディネータ・ノードは、前述のようにすでにコミットを処理していない場合はロールバックの許可を認め、任意の他の関与ノードにロールバックを通知することになる。そうでなければ、コーディネータ・ノードは、関与ノードがロールバックを実行しないようにすることになる。
【００２７】
図４〜図５は、本発明の実装に従った分散型システム３００を示す。分散型システム３００は、ノード３０２ａおよび３０２ｂを含む。ノード３０２ａは、データベース３０４ａに結合され、ノード３０２ｂはデータベース３０４ｂおよび３０４ｃに結合される。トランザクション・ログ３０６ａおよび３０６ｂは、それぞれノード３０２ａおよび３０２ｂ上で維持される。トランザクション・ログ３０６ａの例を図５に見ることができる。例示的トランザクション・ログ３０６ａは、ログ・シーケンス番号（ＬＳＮ）列３１４ａ、トランザクションＩＤ列３１４ｂ、動作列３１４ｃ、および複数の行（すなわち記録）３１６を含む。他の実施形態では、トランザクション・ログは、より多いかまたはより少ない列、異なる列、異なる情報などを備えた、異なるものとすることができる。
【００２８】
ノード３０２ａおよび３０２ｂは、アレイ３０８ａおよび３０８ｃも含む。図４で、分散型システム３００はノード３０２ａおよび３０２ｂのみを備えるように示されているため、図５に示されるように、アレイ３０８ａおよび３０８ｃは、それぞれが唯一のエントリ３１８ａおよび３１８ｃを備えたテールＬＳＮアレイである。この実施形態では、エントリ３１８ａは、ノード３０２ｂによってフラッシュされた最新のトランザクション・ログ・レコードの近似であり、エントリ３１８ｃは、ノード３０２ａによってフラッシュされた最新のトランザクション・ログ・レコードの近似である。
【００２９】
クライアント３１０がノード３０２ａにトランザクションをサブミットしたため、最大トランスＬＳＮアレイ３０８ｂがノード３０２ａに含まれる、ここでノード３０２ｂは関与ノードである。クライアント３１０は、ノード３０２ａ、ノード３０２ｂ、あるいは、分散型システム３００の内部または外部にある何らかの他のノード（図示せず）に常駐する、アプリケーションまたはプロセスとすることができる。最大トランスＬＳＮアレイ  ３０８ｂは、ノード３０２ｂでトランザクションに要求された最高トランザクション・ログ・レコードに関するエントリ３１８ｂを含む。メッセージ３１２ａ〜ｈは、クライアント３１０、ノード３０２ａ、およびノード３０２ｂの間でのメッセージングを示すために、図４に示されている。
【００３０】
本発明の他の態様に従った分散型システム４００が、図６に示される。分散型システム４００は、ノード４０２ａ〜ｄおよびデータベース４０４ａ〜ｋを含む。クライアント・アプリケーション４０６はノード４０２ａ上で動作する。ノード４０２ａはログ・レコードを格納するためのログ・スペース４１０と、トランザクションを調整するためのエージェント４０８ａ〜ｂも含む。エージェント４０８ａ〜ｂは、ノード４０２ａ上で実行中のタスクまたはプロセスとすることができる。本発明のいくつかの実施形態では、一方のエージェントを使用してトランザクションの実行を処理し、他方のエージェントを使用してトランザクションのコミットメントを処理することができる。
【００３１】
本発明は、完全なハードウェア実施形態、完全なソフトウェア実施形態、またはハードウェア要素およびソフトウェア要素の両方を含む実施形態、の形を取ることができる。一態様では、本発明は、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むが、これらに限定されることのない、ソフトウェア内で実装される。
【００３２】
さらに、本発明は、コンピュータまたは任意の命令実行システムによって、またはこれらに関連して使用するための、プログラム・コードを提供する、コンピュータ使用可能またはコンピュータ読み取り可能媒体からアクセス可能な、コンピュータ・プログラム製品の形を取ることもできる。本説明では、コンピュータ使用可能またはコンピュータ読み取り可能媒体は、命令実行のシステム、装置、またはデバイスによって、あるいはそれらに関連して使用するための、プログラムの包含、格納、通信、伝播、または移送が可能な、任意の装置とすることができる。
【００３３】
媒体は、電子、磁気、光、電磁、赤外線、または半導体のシステム（あるいは装置またはデバイス）、あるいは伝播媒体とすることができる。コンピュータ読み取り可能媒体の例には、半導体またはソリッド・ステート・メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、剛体磁気ディスク、および光ディスクが含まれる。光ディスクの現行例には、ＤＶＤ、コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、およびコンパクト・ディスク読み取り／書き込み（ＣＤ−Ｒ／Ｗ）が含まれる。
【００３４】
図７は、プログラム・コードの格納または実行、あるいはその両方に好適な、データ処理システム５００を示す。データ処理システム５００は、システム・バス５０６を介してメモリ要素５０４ａ〜ｂに結合された、プロセッサ５０２を含む。他の実施形態では、データ処理システム５００は、複数のプロセッサを含むことが可能であり、各プロセッサは、１つまたは複数のメモリ要素に直接、またはシステム・バスを介して間接的に結合することができる。
【００３５】
メモリ要素５０４ａ〜ｂは、プログラム・コードの実際の実行中に使用されるローカル・メモリと、大容量ストレージと、実行中に大容量ストレージからコードを取り出さなければならない回数を減らすために、少なくともいくつかのプログラム・コードの一時ストレージを提供するキャッシュ・メモリとを、含むことができる。図に示されるように、入力／出力すなわちＩ／Ｏデバイス５０８ａ〜ｂ（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない）が、データ処理システム５００に結合される。Ｉ／Ｏデバイス５０８ａ〜ｂは、直接、または介在するＩ／Ｏコントローラ（図示せず）を介して間接的に、データ処理システム５００に結合することができる。
【００３６】
この実施形態では、データ処理システム５００を、通信リンク５１２を介して他のデータ処理システムあるいはリモートのプリンタまたはストレージ・デバイスに結合できるようにするために、ネットワーク・アダプタ５１０がデータ処理システム５００に結合される。通信リンク５１２は、専用ネットワークまたは公衆ネットワークとすることができる。モデム、ケーブル・モデム、およびイーサネット・カードは、現在使用可能なネットワーク・アダプタ・タイプの数例に過ぎない。
【００３７】
テール・ログ・シーケンス番号、最大ログ・シーケンス番号、コミット要求、あるいはローカル・コミット確認、またはそれらのすべてに関するノード間での通信を、他の既存のメッセージと結合することによって、分散型システムにおけるメッセージング・トラフィックを大幅に低減させることができる。このメッセージング・トラフィックの低減の結果、トランザクションのコミット時間がより迅速になり、同程度の性能を維持しながらも、それほど強力でないネットワークなどの、低コストのシステムを使用することができる。
【００３８】
以上、分散型システムにおいてトランザクションをコミットするための様々な実装について説明してきた。しかしながら、当業者であれば、この実装に対する様々な修正が可能であること、ならびに、任意の変形が本発明の趣旨および範囲内であることを、容易に理解されよう。たとえば、前述のプロセス流れは、特定順序のプロセス動作を参照しながら説明されている。しかしながら、前述のプロセス動作の多くの順序は、本発明の範囲または動作に影響を与えることなく変更することができる。したがって、当業者であれば、添付の特許請求の範囲の趣旨および範囲を逸脱することなく、多くの修正が実行可能である。
【図面の簡単な説明】
【００３９】
【図１】本発明の態様に従った、分散型システムにおいてトランザクションをコミットするための方法を示すプロセス流れ図である。
【図２】本発明の一実施に従った、分散型システムにおいてトランザクションをコミットするための方法を示す流れ図である。
【図３】本発明の一実施に従った、分散型システムにおいてトランザクションをコミットするための方法を示す流れ図である。
【図４】本発明の実施形態に従った、分散型システムを示す図である。
【図５】本発明の実施形態に従った、分散型システムを示す図である。
【図６】本発明の他の態様に従った、分散型システムを示す図である。
【図７】本発明の実施形態が実装可能なデータ処理システムを示すブロック図である。
【図１】
2009520253.tif 000003
【図２】
2009520253.tif 000004
【図３】
2009520253.tif 000005
【図４】
2009520253.tif 000006
【図５】
2009520253.tif 000007
【図６】
2009520253.tif 000008
【図７】
2009520253.tif 000009
【手続補正書】
【提出日】平成21年1月28日(2009.1.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
１つまたは複数の関与ノードを備えるシステムのコーディネータ・ノードでトランザクションのコミット要求を受信するステップと、
前記システムにおける他のノードそれぞれについて、前記他のノードそれぞれによってフラッシュされた最新のトランザクション・ログ・レコードを近似するテール・ログ・シーケンス番号をトラッキングするステップと、
前記１つまたは複数の関与ノードのそれぞれについて前記トランザクションに関連する、前記関与ノードそれぞれでの前記トランザクションに必要な最高のトランザクション・ログ・レコードに対応する最大ログ・シーケンス番号を決定するステップと、
前記１つまたは複数の関与ノードのそれぞれについての前記テール・ログ・シーケンス番号が、前記関与ノードそれぞれでの前記トランザクションに関連する前記最大ログ・シーケンス番号よりも大きいかまたは等しいことを条件に、前記コーディネータ・ノードで前記トランザクションをコミットするステップを含み、
前記トラッキングするステップが、
前記システムの他のノードそれぞれについて、前記テール・ログ・シーケンス番号を格納するためのエントリを備える第１のアレイを維持するステップと、
前記他のノードからのメッセージに新しいテール・ログ・シーケンス番号が結合されて  いることを条件に、前記第１のアレイを更新するステップを含む、方法。
【請求項２】
前記新しいテール・ログ・シーケンス番号が、前記ノードによってフラッシュされた最新のトランザクション・ログ・レコードではなく、前記メッセージが、応答、要求、あるいは、応答および要求を含む、請求項１に記載の方法。
【請求項３】
前記決定するステップが、
前記１つまたは複数の関与ノードのそれぞれに関する前記トランザクションに関連する前記最大ログ・シーケンス番号を格納するエントリを備える、前記トランザクションに対する第２のアレイを作成するステップと、
前記関与ノードからの応答に、前記トランザクションに関連する前記最大ログ・シーケンス番号が結合された場合、前記第２のアレイを更新するステップと、
を含む、請求項１に記載の方法。
【請求項４】
前記コミットするステップが、
前記１つまたは複数の関与ノードのそれぞれが、前記関与ノードそれぞれで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュしたかどうかを判別するために、前記第２のアレイを前記第１のアレイと比較するステップと、
前記１つまたは複数の関与ノードのそれぞれが、前記関与ノードそれぞれで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュした場合、前記コーディネータ・ノードで前記トランザクションに関するコミット・ログ・レコードを書き込むステップと、
前記１つまたは複数の関与ノードのそれぞれが、前記関与ノードそれぞれで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュしたことを条件に、前記関与ノードそれぞれに送信されるようにすでにスケジューリングされた他のメッセージと共に、前記１つまたは複数の関与ノードのそれぞれにコミット要求が送信されるようにスケジューリングするステップと、
前記１つまたは複数の関与ノードのそれぞれが、前記関与ノードそれぞれで前記トランザクションに要求された前記最高トランザクション・ログ・レコードをフラッシュした場合、正常コミット・メッセージを前記クライアントに戻すステップと、
を含む、請求項３に記載の方法。
【請求項５】
前記トランザクションが前記それぞれの関与ノードでコミットされていることを指定する応答が、前記１つまたは複数の関与ノードそれぞれから受信されたことを条件に、前記トランザクションの状態に関する情報を保持するために、割り当てられた前記コーディネータ・ノードのログ・スペースを再利用するステップをさらに含む、請求項４に記載の方法。
【請求項６】
各応答が、前記それぞれの関与ノードから前記コーディネータ・ノードへと送信されている無関係なメッセージと結合される、請求項５に記載の方法。
【請求項７】
前記コーディネータ・ノード上の第１のエージェントが前記トランザクションの実行を処理し、前記コーディネータ・ノード上の第２のエージェントが前記トランザクションのコミットメントを処理する、請求項１に記載の方法。
【請求項８】
前記少なくとも１つの関与ノードに関する前記テール・ログ・シーケンス番号が、前記少なくとも１つの関与ノードの前記トランザクションに関連する前記最大ログ・シーケンス番号よりも小さい場合、前記少なくとも１つの関与ノードで１つまたは複数のトランザクション・ログ・レコードをフラッシュするためのメッセージを少なくとも１つの関与ノードに送信するステップをさらに含む、請求項１に記載の方法。
【請求項９】
前記請求項１乃至８のいずれかの方法に含まれるすべてのステップをコンピュータに実行させる、コンピュータ・プログラム。
【請求項１０】
請求項１乃至８のいずれかの方法に含まれるすべてのステップを実施するように適合された手段を備える、システム。
【国際調査報告】
2009520253.tif 000010
2009520253.tif 000011