特許第6581315号(P6581315)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

特許6581315リアルタイムのトランザクション的に一貫性のある変更通知
<>
  • 特許6581315-リアルタイムのトランザクション的に一貫性のある変更通知 図000002
  • 特許6581315-リアルタイムのトランザクション的に一貫性のある変更通知 図000003
  • 特許6581315-リアルタイムのトランザクション的に一貫性のある変更通知 図000004
  • 特許6581315-リアルタイムのトランザクション的に一貫性のある変更通知 図000005
  • 特許6581315-リアルタイムのトランザクション的に一貫性のある変更通知 図000006
  • 特許6581315-リアルタイムのトランザクション的に一貫性のある変更通知 図000007
  • 特許6581315-リアルタイムのトランザクション的に一貫性のある変更通知 図000008
  • 特許6581315-リアルタイムのトランザクション的に一貫性のある変更通知 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6581315
(24)【登録日】2019年9月6日
(45)【発行日】2019年9月25日
(54)【発明の名称】リアルタイムのトランザクション的に一貫性のある変更通知
(51)【国際特許分類】
   G06F 16/11 20190101AFI20190912BHJP
【FI】
   G06F16/11
【請求項の数】31
【全頁数】31
(21)【出願番号】特願2018-543113(P2018-543113)
(86)(22)【出願日】2017年4月27日
(65)【公表番号】特表2019-511770(P2019-511770A)
(43)【公表日】2019年4月25日
(86)【国際出願番号】US2017029888
(87)【国際公開番号】WO2017204988
(87)【国際公開日】20171130
【審査請求日】2018年10月16日
(31)【優先権主張番号】15/163,832
(32)【優先日】2016年5月25日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】フラー,アルフレッド
(72)【発明者】
【氏名】クマール,ビジェイ
(72)【発明者】
【氏名】ヘッスマー,ライナー
【審査官】 後藤 彰
(56)【参考文献】
【文献】 国際公開第2015/200476(WO,A2)
【文献】 米国特許出願公開第2015/0135193(US,A1)
【文献】 米国特許出願公開第2011/0251997(US,A1)
【文献】 国際公開第2015/200686(WO,A1)
【文献】 米国特許出願公開第2009/0100113(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/11
(57)【特許請求の範囲】
【請求項1】
方法であって、
データ処理ハードウェア(112)によって、分散システム(200)についての変更ログ処理(500)の初期のインスタンス(310)を実行することを備え、前記変更ログ処理(500)の各インスタンス(310)は、前記分散システム(200)上で実行されるトランザクション(204、214)のトランザクション履歴(312)を、前記データ処理ハードウェア(112)と通信しているメモリハードウェア(114)上に格納するように構成され、前記方法はさらに、
前記データ処理ハードウェア(112)において、前記分散システム(200)上で対応するトランザクション(204、214)を実行するためのトランザクション要求(138)を受信することと、
前記データ処理ハードウェア(112)によって、受信した前記トランザクション要求(138)に基づいて変更ログ負荷を求めることと、
前記変更ログ負荷が閾値負荷を満たす場合、前記データ処理ハードウェア(112)によって、前記変更ログ処理(500)の少なくとも1つのその後のインスタンス(310)を実行することと、
前記データ処理ハードウェア(112)によって、前記変更ログ処理(500)の複数のインスタンスが実行中であるか否かを判断することと、
前記変更ログ処理(500)の複数のインスタンスが実行中である場合、
前記データ処理ハードウェア(112)によって、前記変更ログ処理(500)の前記少なくとも1つのその後のインスタンス(310)の実行を中止することと、
前記データ処理ハードウェア(112)によって、前記変更ログ処理(500)の前記初期のインスタンス(310)の前記トランザクション履歴(312)と、前記変更ログ処理(500)の前記少なくとも1つのその後のインスタンス(310)の前記トランザクション履歴(312)とをマージすることとを備える、方法。
【請求項2】
前記メモリハードウェア(114)の変更ログキャッシュ(310)に各トランザクション履歴(312)を格納することをさらに備える、請求項1に記載の方法。
【請求項3】
前記各トランザクション履歴(312)を格納することは、
前記データ処理ハードウェア(112)によって、前記トランザクション履歴(312)をデータストライプにシャードすることと、
各データストライプを複製することと、
前記データストライプおよび複製した前記データストライプを前記メモリハードウェア(114)の複数の記憶場所(250)に格納することとを備える、請求項2に記載の方法。
【請求項4】
前記変更ログ処理(500)の前記少なくとも1つのその後のインスタンス(310)を実行した後に前記変更ログ負荷が前記閾値負荷を満たさない場合、
前記データ処理ハードウェア(112)によって、前記変更ログ処理(500)の前記少なくとも1つのその後のインスタンス(310)の実行を中止することと、
前記データ処理ハードウェア(112)によって、前記変更ログ処理(500)の前記初期のインスタンス(310)の前記トランザクション履歴(312)と、前記変更ログ処理(500)の前記少なくとも1つのその後のインスタンス(310)の前記トランザクション履歴(312)とをマージすることとをさらに備える、請求項1から3のいずれか1項に記載の方法。
【請求項5】
各トランザクション要求(138)を受信したことに応答して、
前記データ処理ハードウェア(112)によって実時間を得ることと、
前記データ処理ハードウェア(112)によって、前記実時間に基づいて最大コミット時間(TDMax)を求めることとをさらに備え、前記最大コミット時間(TDMax)は、前記分散システム(200)上で前記対応するトランザクション(204、214)の実行を完了する最大時間を指定しており、さらに、
前記最大コミット時間(TDMax)を前記データ処理ハードウェア(112)から前記メモリハードウェア(114)の少なくとも1つの変更ログキャッシュ(310)に通信することを備える、請求項1から4のいずれか1項に記載の方法。
【請求項6】
前記少なくとも1つの変更ログキャッシュ(310)は前記実時間から前記最大コミット時間(TDMax)まで通知ロックを設定し、前記通知ロックは、前記対応する変更ログキャッシュ(310)が、前記最大コミット時間(TDMax)よりも早い対応するコミット時間を有する完了済のトランザクション(204、214)について1つ以上のサブスクライブしているウォッチャ(322)に通知することを防止する、請求項5に記載の方法。
【請求項7】
前記少なくとも1つの変更ログキャッシュ(310)は前記最大コミット時間(TDMax)の終わりに前記通知ロックを解除し、解除された前記通知ロックは、前記対応する変更ログキャッシュ(310)が、前記最大コミット時間(TDMax)よりも早い前記対応するコミット時間を有する完了済の各トランザクション(204、214)について前記1つ以上のサブスクライブしているウォッチャ(322)に通知することを許可する、請求項6に記載の方法。
【請求項8】
前記最大コミット時間(TDMax)を通信した後、
前記データ処理ハードウェア(112)によって、前記分散システム(200)上で前記対応するトランザクション(204、214)の実行をコミットすることをさらに備え、前記トランザクション(204、214)は前記最大コミット時間(TDMax)を備え、さらに、
前記対応するトランザクション(204、214)が前記最大コミット時間(TDMax)にまたは前記最大コミット時間(TDMax)の前に各自のコミット時間を備える場合は前記分散システム(200)上の前記対応するトランザクション(204、214)の実行が受付けられることを示すトランザクション結果(332)を、前記データ処理ハードウェア(112)によって得ることと、
前記トランザクション結果(332)を前記データ処理ハードウェア(112)から前記少なくとも1つの変更ログキャッシュ(310)に通信することとを備え、受信した前記トランザクション結果(332)によって、前記少なくとも1つの変更ログキャッシュ(310)は、前記対応するトランザクション(204、214)と関連付けられた少なくとも1つのミューテーションを記録する、請求項5に記載の方法。
【請求項9】
前記少なくとも1つの変更ログキャッシュ(310)は、記録された前記ミューテーションを前記データ処理ハードウェア(112)上で実行される1つ以上のウォッチャプロキシ(314)に通信し、各ウォッチャプロキシ(314)は、前記最大コミット時間(TDMax)の終わりに前記対応するトランザクション(204、214)の各自のサブスクライブしているウォッチャ(322)に通知(350)を提供するように構成され、前記通知(350)は記録された前記ミューテーションを備える、請求項8に記載の方法。
【請求項10】
前記通知(350)は、前記最大コミット時間(TDMax)の前記終わりに前記トランザクション履歴(312)の一貫性のあるスナップショットをさらに備え、前記一貫性のあるスナップショットは、前記対応するトランザクション(204、214)と、前記最大コミット時間(TDMax)よりも早い対応するコミット時間を有するいずれかの完了済のトランザクション(204、214)とを備える、請求項9に記載の方法。
【請求項11】
前記最大コミット時間(TDMax)を通信した後、
前記データ処理ハードウェア(112)によって、前記分散システム(200)上で前記対応するトランザクション(204、214)の実行をコミットすることをさらに備え、前記トランザクション(204、214)は前記最大コミット時間(TDMax)を備え、さらに、
前記対応するトランザクション(204、214)が前記最大コミット時間(TDMax)にまたは前記最大コミット時間(TDMax)の前にコミットできない場合は前記分散システム(200)上の前記対応するトランザクション(204、214)の実行が拒絶されることを示すトランザクション結果(332)を、前記データ処理ハードウェア(112)によって得ることと、
前記トランザクション結果(332)を前記データ処理ハードウェア(112)から前記少なくとも1つの変更ログキャッシュ(310)に通信することとを備え、受信した前記トランザクション結果(332)によって、前記少なくとも1つの変更ログキャッシュ(310)は、前記トランザクション処理が前記最大コミット時間(TDMax)を前記少なくとも1つの変更ログキャッシュ(310)に通信した前記実時間と前記最大コミット時間(TDMax)との間の前記トランザクション履歴(312)にギャップを作成する、請求項5に記載の方法。
【請求項12】
前記少なくとも1つの変更ログキャッシュ(310)は、前記トランザクション履歴(312)の前記ギャップを前記データ処理ハードウェア(112)上で実行される1つ以上のウォッチャプロキシ(314)に通信し、各ウォッチャプロキシ(314)は、前記最大コミット時間(TDMax)の終わりに前記対応するトランザクション(204、214)の各自のサブスクライブしているウォッチャ(322)に通知(350)を提供するように構成され、前記通知(350)は前記トランザクション履歴(312)の前記ギャップ中にキャッシュミスを備える、請求項11に記載の方法。
【請求項13】
前記データ処理ハードウェア(112)によって、オフラインイベント(650)の後に前記変更ログ処理(500)の再開を決定することと、
前記データ処理ハードウェア(112)上で実行される前記変更ログ処理(500)において、実時間を得ることと、
前記データ処理ハードウェア(112)によって、前記変更ログ処理(500)が再開すると前記実時間に基づいて現在のシーケンス番号を求めることと、
前記データ処理ハードウェア(112)によって、前記現在のシーケンス番号からグローバルな最大コミット時間遅延(TDMax)を待機してから、前記分散システム(200)上で実行されるいずれかのトランザクション(204、214)についての前記トランザクション履歴(312)を更新することとをさらに備える、請求項1から12のいずれか1項に記載の方法。
【請求項14】
前記変更ログ処理(500)の前記再開の前に前記分散システム(200)上で実行されるトランザクション(204、214)は、前記グローバルな最大コミット時間遅延(TCDMax)内に完了する、請求項13に記載の方法。
【請求項15】
マージした前記トランザクション履歴(312)を1つ以上のサブスクライブしているウォッチャ(322)に送信することをさらに備え、サブスクライブしている各ウォッチャ(322)は、前記メモリハードウェア(114)上に格納されたデータ(202)についての変更通知(350)を受信するためのスタンディングクエリ(130)を有する、請求項1から14のいずれか1項に記載の方法。
【請求項16】
システム(100)であって、
分散システム(200)のデータ処理ハードウェア(112)と、
前記データ処理ハードウェア(112)と通信しているメモリハードウェア(114)とを備え、前記メモリハードウェア(114)は、前記データ処理ハードウェア(112)上で実行されると前記データ処理ハードウェア(112)に動作を実行させる命令を格納しており、前記動作は、
分散システム(200)についての変更ログ処理(500)の初期のインスタンス(310)を実行することを備え、前記変更ログ処理(500)の各インスタンス(310)は、前記分散システム(200)上で実行されるトランザクション(204、214)のトランザクション履歴(312)を前記メモリハードウェア(114)上に格納するように構成され、前記動作はさらに、
前記分散システム(200)上で対応するトランザクション(204、214)を実行するためのトランザクション要求(138)を受信することと、
受信した前記トランザクション要求(138)に基づいて変更ログ負荷を求めることと、
前記変更ログ負荷が閾値負荷を満たす場合、前記変更ログ処理(500)の少なくとも1つのその後のインスタンス(310)を実行することと、
前記変更ログ処理(500)の複数のインスタンスが実行中であるか否かを判断することと、
前記変更ログ処理(500)の複数のインスタンスが実行中である場合、
前記変更ログ処理(500)の前記少なくとも1つのその後のインスタンス(310)の実行を中止することと、
前記変更ログ処理(500)の前記初期のインスタンス(310)の前記トランザクション履歴(132)と、前記変更ログ処理(500)の前記少なくとも1つのその後のインスタンス(310)の前記トランザクション履歴(132)とをマージすることとを備える、システム。
【請求項17】
前記動作はさらに、前記メモリハードウェア(114)の変更ログキャッシュ(310)に各トランザクション履歴(132)を格納することを備える、請求項16に記載のシステム(100)。
【請求項18】
前記各トランザクション履歴(132)を格納することは、
前記トランザクション履歴(132)をデータストライプにシャードすることと、
各データストライプを複製することと、
前記データストライプおよび複製した前記データストライプを前記メモリハードウェア(114)の複数の記憶場所(250)に格納することとを備える、請求項17に記載のシステム(100)。
【請求項19】
前記動作はさらに、
前記変更ログ処理(500)の前記少なくとも1つのその後のインスタンス(310)を実行した後に前記変更ログ負荷が前記閾値負荷を満たさない場合、
前記変更ログ処理(500)の前記少なくとも1つのその後のインスタンス(310)の実行を中止することと、
前記変更ログ処理(500)の前記初期のインスタンス(310)の前記トランザクション履歴(132)と、前記変更ログ処理(500)の前記少なくとも1つのその後のインスタンス(310)の前記トランザクション履歴(132)とをマージすることとを備える、請求項16から18のいずれか1項に記載のシステム(100)。
【請求項20】
前記動作はさらに、各トランザクション要求(138)を受信したことに応答して、
実時間を得ることと、
前記実時間に基づいて最大コミット時間(TCDMax)を求めることとを備え、前記最大コミット時間(TCDMax)は、前記分散システム(200)上で前記対応するトランザクション(204、214)の実行を完了する最大時間を指定しており、前記動作はさらに、
前記最大コミット時間(TCDMax)を前記メモリハードウェア(114)の少なくとも1つの変更ログキャッシュ(310)に通信することを備える、請求項16から19のいずれか1項に記載のシステム(100)。
【請求項21】
前記少なくとも1つの変更ログキャッシュ(310)は前記実時間から前記最大コミット時間(TCDMax)まで通知ロックを設定し、前記通知ロックは、前記対応する変更ログキャッシュ(310)が、前記最大コミット時間(TCDMax)よりも早い対応するコミット時間を有する完了済のトランザクション(204、214)について1つ以上のサブスクライブしているウォッチャ(322)に通知することを防止する、請求項20に記載のシステム(100)。
【請求項22】
前記少なくとも1つの変更ログキャッシュ(310)は前記最大コミット時間(TCDMax)の終わりに前記通知ロックを解除し、解除された前記通知ロックは、前記対応する変更ログキャッシュ(310)が、前記最大コミット時間(TCDMax)よりも早い前記対応するコミット時間を有する完了済の各トランザクション(204、214)について前記1つ以上のサブスクライブしているウォッチャ(322)に通知することを許可する、請求項21に記載のシステム(100)。
【請求項23】
前記動作はさらに、前記最大コミット時間(TCDMax)を通信した後、
前記分散システム(200)上で前記対応するトランザクション(204、214)の実行をコミットすることを備え、前記トランザクション(204、214)は前記最大コミット時間(TCDMax)を備え、前記動作はさらに、
前記対応するトランザクション(204、214)が前記最大コミット時間(TDMax)にまたは前記最大コミット時間(TDMax)の前に各自のコミット時間を備える場合は前記分散システム(200)上の前記対応するトランザクション(204、214)の実行が受付けられることを示すトランザクション結果(332)を得ることと、
前記トランザクション結果(332)を前記少なくとも1つの変更ログキャッシュ(310)に通信することとを備え、受信した前記トランザクション結果(332)によって、前記少なくとも1つの変更ログキャッシュ(310)は、前記対応するトランザクション(204、214)と関連付けられた少なくとも1つのミューテーションを記録する、請求項20に記載のシステム(100)。
【請求項24】
前記少なくとも1つの変更ログキャッシュ(310)は、記録された前記ミューテーションを前記データ処理ハードウェア(112)上で実行される1つ以上のウォッチャプロキシ(314)に通信し、各ウォッチャプロキシ(314)は、前記最大コミット時間(TDMax)の終わりに前記対応するトランザクション(204、214)の各自のサブスクライブしているウォッチャ(322)に通知(350)を提供するように構成され、前記通知(350)は記録された前記ミューテーションを備える、請求項23に記載のシステム(100)。
【請求項25】
前記通知(350)は、前記最大コミット時間(TDMax)の前記終わりに前記トランザクション履歴(132)の一貫性のあるスナップショットをさらに備え、前記一貫性のあるスナップショットは、前記対応するトランザクション(204、214)と、前記最大コミット時間(TDMax)よりも早い対応するコミット時間を有するいずれかの完了済のトランザクション(204、214)とを備える、請求項24に記載のシステム(100)。
【請求項26】
前記動作はさらに、前記最大コミット時間(TDMax)を通信した後、
前記分散システム(200)上で前記対応するトランザクション(204、214)の実行をコミットすることを備え、前記トランザクション(204、214)は前記最大コミット時間(TDMax)を備え、前記動作はさらに、
前記対応するトランザクション(204、214)が前記最大コミット時間(TDMax)にまたは前記最大コミット時間(TDMax)の前にコミットできない場合は前記分散システム(200)上の前記対応するトランザクション(204、214)の実行が拒絶されることを示すトランザクション結果(332)を得ることと、
前記トランザクション結果(332)を前記少なくとも1つの変更ログキャッシュ(310)に通信することとを備え、受信した前記トランザクション結果(332)によって、前記少なくとも1つの変更ログキャッシュ(310)は、前記トランザクション処理が前記最大コミット時間(TDMax)を前記少なくとも1つの変更ログキャッシュ(310)に通信した前記実時間と前記最大コミット時間(TDMax)との間の前記トランザクション履歴(132)にギャップを作成する、請求項20に記載のシステム(100)。
【請求項27】
前記少なくとも1つの変更ログキャッシュ(310)は、前記トランザクション履歴(132)の前記ギャップを前記データ処理ハードウェア(112)上で実行される1つ以上のウォッチャプロキシ(314)に通信し、各ウォッチャプロキシ(314)は、前記最大コミット時間(TDMax)の終わりに前記対応するトランザクション(204、214)の各自のサブスクライブしているウォッチャ(322)に通知(350)を提供するように構成され、前記通知(350)は前記トランザクション履歴(132)の前記ギャップ中にキャッシュミスを備える、請求項26に記載のシステム(100)。
【請求項28】
前記動作はさらに、
オフラインイベントの後に前記変更ログ処理(500)の再開を決定することと、
実時間を得ることと、
前記変更ログ処理(500)が再開すると前記実時間に基づいて現在のシーケンス番号を求めることと、
前記現在のシーケンス番号からグローバルな最大コミット時間遅延(TDMax)を待機してから、前記分散システム(200)上で実行されるいずれかのトランザクション(204、214)についての前記トランザクション履歴(132)を更新することとを備える、請求項16から27のいずれか1項に記載のシステム(100)。
【請求項29】
前記変更ログ処理(500)の前記再開の前に前記分散システム(200)上で実行されるトランザクション(204、214)は、前記グローバルな最大コミット時間遅延(TDMax)内に完了する、請求項28に記載のシステム(100)。
【請求項30】
前記動作はさらに、マージした前記トランザクション履歴(132)を1つ以上のサブスクライブしているウォッチャ(322)に送信することを備え、サブスクライブしている各ウォッチャ(322)は、前記メモリハードウェア(114)上に格納されたデータ(202)についての変更通知(350)を受信するためのスタンディングクエリ(130)を有する、請求項16から29のいずれか1項に記載のシステム(100)。
【請求項31】
コンピュータによって実行されるプログラムであって、前記プログラムは、前記コンピュータに、請求項1から15のいずれか1項に記載の方法を実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、1つ以上のウォッチャが分散システム内でサブスクライブしているデータについての一貫性のある変更通知を当該ウォッチャに提供することに関する。
【背景技術】
【0002】
背景
分散ストレージシステムは、データストア内の1つ以上のメモリ場所にオーバーレイしているメモリハードウェア上にデータを格納する。ウォッチャはスタンディングクエリ(standing query)を発行して、分散システム上に格納された特定のデータをサブスクライブし、サブスクライブしているデータがミューテーションを受けるといつでも変更通知を受信し得る。たとえば、ライタは書込トランザクションを実行して、分散システム上に格納された特定のデータを修正/ミューテートし得、当該データが修正されると当該データをサブスクライブしているウォッチャに通知される。しかし、分散システムに対する需要が増加すると、多数の変更/書込が同時に起こった場合、分散システムがオーバーランされて変更通知をリアルタイムでストリームすることができなくなる。高需要の期間中は、サブスクリプションを完全にドロップして分散システムに対する負荷を軽減することが知られている。この理由で、順序通りの配信が保証されずに設計されるシステムもあり、順序付けはクライアントに委ねられることが多い。しかし、この結果、サブスクライブしているウォッチャが分散データの一貫性のないスナップショットを受信することになる。さらに、分散システム上に格納されたデータに対する各トランザクションを記録するために変更ログを用いることが知られている。これらの変更ログはデータストアに加えられるすべての変更を記録し、データストア上で読出トランザクションが起こると、変更ログは所与のスナップショットのすべてのデータについてのオン/オフチェックポイントとして機能する。
【発明の概要】
【発明が解決しようとする課題】
【0003】
概要
分散システム上で耐久性のある変更ログを使用すると、当該変更ログを単一のマシン上に時折トランケートすることが一般に必要であるため、トランザクションが実行を待機する間にボトルネックが生じてしまう。したがって、耐久性のある変更ログは、分散システムに対する需要が高い期間中は、その固有のスケーラビリティ限界のために、分散システムによって与えられる分散機能を無効にしてしまう。
【課題を解決するための手段】
【0004】
本開示の一局面は、トランザクション的に一貫性のある変更通知を作成するための方法を提供する。当該方法は、データ処理ハードウェアによって、分散システムについての変更ログ処理の初期のインスタンスを実行することと、データ処理ハードウェアにおいて、分散システム上で対応するトランザクションを実行するためのトランザクション要求を受信することと、データ処理ハードウェアによって、受信したトランザクション要求に基づいて変更ログ負荷を求めることとを含む。変更ログ処理の各インスタンスは、分散システム上で実行されるトランザクションのトランザクション履歴を、データ処理ハードウェアと通信しているメモリハードウェア上に格納するように構成される。変更ログ負荷が閾値負荷を満たす場合、当該方法は、データ処理ハードウェアによって、変更ログ処理の少なくとも1つのその後のインスタンスを実行することを含む。当該方法はさらに、データ処理ハードウェアによって、変更ログ処理の複数のインスタンスが実行中であるか否かを判断することを含む。変更ログ処理の複数のインスタンスが実行中である場合、当該方法は、データ処理ハードウェアによって、変更ログ処理の少なくとも1つのその後のインスタンスの実行を中止することと、データ処理ハードウェアによって、変更ログ処理の初期のインスタンスのトランザクション履歴と、変更ログ処理の少なくとも1つのその後のインスタンスのトランザクション履歴とをマージすることとを含む。
【0005】
本開示の実装例は以下の任意の特徴の1つ以上を含み得る。ある実装例では、当該方法は、メモリハードウェアの変更ログキャッシュに各トランザクション履歴を格納することを含む。各トランザクション履歴を格納することは、データ処理ハードウェアによって、トランザクション履歴をデータストライプにシャードすることと、各データストライプを複製することと、データストライプおよび複製したデータストライプをメモリハードウェアの複数の記憶場所に格納することとを含み得る。変更ログ処理の少なくとも1つのその後のインスタンスを実行した後に変更ログ負荷が閾値負荷を満たさない場合、当該方法は、データ処理ハードウェアによって、変更ログ処理の少なくとも1つのその後のインスタンスの実行を中止することと、データ処理ハードウェアによって、変更ログ処理の初期のインスタンスのトランザクション履歴と、変更ログ処理の少なくとも1つのその後のインスタンスのトランザクション履歴とをマージすることとを含み得る。
【0006】
各トランザクション要求を受信したことに応答して、当該方法は、データ処理ハードウェアによって実時間を得ることと、データ処理ハードウェアによって、実時間に基づいて最大コミット時間を求めることと、最大コミット時間をデータ処理ハードウェアからメモリハードウェアの少なくとも1つの変更ログキャッシュに通信することとを含み得る。最大コミット時間は、分散システム上で対応するトランザクションの実行を完了する最大時間を指定し得る。
【0007】
ある例では、少なくとも1つの変更ログキャッシュは、実時間から最大コミット時間まで通知ロックを設定する。通知ロックは、対応する変更ログキャッシュが、最大コミット時間よりも早い対応するコミット時間を有する完了済のトランザクションについて1つ以上のサブスクライブしているウォッチャに通知することを防止し得る。少なくとも1つの変更ログキャッシュは最大コミット時間の終わりに通知ロックを解除し得る。解除された通知ロックは、対応するログキャッシュが、最大コミット時間よりも早い対応するコミット時間を有する完了済の各トランザクションについて1つ以上のサブスクライブしているウォッチャに通知することを許可し得る。最大コミット時間を通信した後、当該方法は、データ処理ハードウェアによって、分散システム上で対応するトランザクションの実行をコミットすることを含み得る。ここで、トランザクションは最大コミット時間を含む。その後、当該方法はさらに、対応するトランザクションが最大コミット時間にまたは最大コミット時間の前に各自のコミット時間を含む場合は分散システム上の対応するトランザクションの実行が受付けられることを示すトランザクション結果を、データ処理ハードウェアによって得ることと、トランザクション結果をデータ処理ハードウェアから少なくとも1つの変更ログキャッシュに通信することとを含み得る。
【0008】
ある例では、受信したトランザクション結果によって、少なくとも1つの変更ログキャッシュは、対応するトランザクションと関連付けられた少なくとも1つのミューテーションを記録する。少なくとも1つの変更ログキャッシュは、記録されたミューテーションをデータ処理ハードウェア上で実行される1つ以上のウォッチャプロキシに通信し得る。各ウォッチャプロキシは、対応するトランザクションの各自のサブスクライブしているウォッチャに通知を提供するように構成され得る。通知は記録されたミューテーションを含み得、トランザクション履歴の一貫性のあるスナップショットを任意に含み得る。ここで、通知内の一貫性のあるスナップショットは、対応するトランザクションと、対応するトランザクションのコミット時間よりも早い対応するコミット時間を有するいずれかの完了済のトランザクションとを含む。
【0009】
ある実装例では、最大コミット時間を通信した後、当該方法は、データ処理ハードウェアによって、分散システム上で対応するトランザクションの実行をコミットすることを含む。ここで、トランザクションは最大コミット時間を含む。その後、当該方法は、対応するトランザクションが最大コミット時間にまたは最大コミット時間の前にコミットできない場合は分散システム上の対応するトランザクションの実行が拒絶されることを示すトランザクション結果を、データ処理ハードウェアによって得ることと、トランザクション結果をデータ処理ハードウェアから少なくとも1つの変更ログキャッシュに通信することとを含み得る。ある例では、受信したトランザクション結果によって、少なくとも1つの変更ログキャッシュは、トランザクション処理が最大コミット時間を少なくとも1つの変更ログキャッシュに通信した実時間と最大コミット時間との間のトランザクション履歴にギャップを作成する。
【0010】
ある例では、少なくとも1つの変更ログキャッシュは、トランザクション履歴のギャップをデータ処理ハードウェア上で実行される1つ以上のウォッチャプロキシに通信する。各ウォッチャプロキシは、最大コミット時間の終わりに対応するトランザクションの各自のサブスクライブしているウォッチャに通知を提供するように構成され得、通知はトランザクション履歴のギャップ中にキャッシュミスを含む。
【0011】
当該方法はさらに、データ処理ハードウェアによって、オフラインイベントの後に変更ログ処理の再開を決定することと、データ処理ハードウェア上で実行される変更ログ処理において、実時間を得ることとを含み得る。当該方法はさらに、データ処理ハードウェアによって、変更ログ処理が再開すると実時間に基づいて現在のシーケンス番号を求めることと、データ処理ハードウェアによって、現在のシーケンス番号からグローバルな最大コミット時間遅延を待機してから、分散システム上で実行されるいずれかのトランザクションについてのトランザクション履歴を更新することとを含み得る。変更ログ処理の再開の前に分散システム上で実行されるトランザクションは、グローバルな最大コミット時間遅延内に完了し得る。当該方法はさらに、マージしたトランザクション履歴を1つ以上のサブスクライブしているウォッチャに送信することを含み得る。サブスクライブしている各ウォッチャは、メモリハードウェア上に格納されたデータの変更についてのスタンディングクエリを有し得る。
【0012】
本開示の別の局面は、トランザクション的に一貫性のある変更通知を作成するためのシステムを提供する。当該システムは、分散システムのデータ処理ハードウェアと、データ処理ハードウェアと通信しているメモリハードウェアとを含む。メモリハードウェアは、データ処理ハードウェア上で実行されるとデータ処理ハードウェアに動作を実行させる命令を格納している。当該動作は、分散システムについての変更ログ処理の初期のインスタンスを実行することと、分散システム上で対応するトランザクションを実行するためのトランザクション要求を受信することと、受信したトランザクション要求に基づいて変更ログ負荷を求めることとを含む。変更ログ処理の各インスタンスは、分散システム上で実行されるトランザクションのトランザクション履歴をメモリハードウェア上に格納するように構成される。変更ログ負荷が閾値負荷を満たす場合、当該システムは、変更ログ処理の少なくとも1つのその後のインスタンスを実行することと、変更ログ処理の複数のインスタンスが実行中であるか否かを判断することとを含む。変更ログ処理の複数のインスタンスが実行中である場合、当該システムは、変更ログ処理の少なくとも1つのその後のインスタンスの実行を中止することと、変更ログ処理の初期のインスタンスのトランザクション履歴と、変更ログ処理の少なくとも1つのその後のインスタンスのトランザクション履歴とをマージすることとを含む。
【0013】
本局面は以下の任意の特徴の1つ以上を含み得る。ある実装例では、当該動作はさらに、メモリハードウェアの変更ログキャッシュに各トランザクション履歴を格納することを含む。各トランザクション履歴を格納することは、トランザクション履歴をデータストライプにシャードすることと、各データストライプを複製することと、データストライプおよび複製したデータストライプをメモリハードウェアの複数の記憶場所に格納することとを含み得る。当該動作はさらに、変更ログ処理の少なくとも1つのその後のインスタンスを実行した後に変更ログ負荷が閾値負荷を満たさない場合、変更ログ処理の少なくとも1つのその後のインスタンスの実行を中止することと、変更ログ処理の初期のインスタンスのトランザクション履歴と、変更ログ処理の少なくとも1つのその後のインスタンスのトランザクション履歴とをマージすることとを含み得る。各トランザクション要求を受信したことに応答して、当該動作は、実時間を得ることと、実時間に基づいて最大コミット時間を求めることと、最大コミット時間をメモリハードウェアの少なくとも1つの変更ログキャッシュに通信することとを含み得る。最大コミット時間は、分散システム上で対応するトランザクションの実行を完了する最大時間を指定し得る。
【0014】
少なくとも1つの変更ログキャッシュは、実時間から最大コミット時間まで通知ロックを設定し得る。通知ロックは、対応する変更ログキャッシュが、最大コミット時間よりも早い対応するコミット時間を有する完了済のトランザクションについて1つ以上のサブスクライブしているウォッチャに通知することを防止し得る。少なくとも1つの変更ログキャッシュは最大コミット時間の終わりに通知ロックを解除し得る。解除された通知ロックは、対応する変更ログキャッシュが、最大コミット時間よりも早い対応するコミット時間を有する完了済の各トランザクションについて1つ以上のサブスクライブしているウォッチャに通知することを許可し得る。
【0015】
ある例では、当該動作は、最大コミット時間を通信した後、分散システム上で対応するトランザクションの実行をコミットすることを含む。トランザクションは対応するコミット時間を含む。その後、当該動作は、対応するトランザクションが最大コミット時間にまたは最大コミット時間の前に各自のコミット時間を含む場合は分散システム上の対応するトランザクションの実行が受付けられることを示すトランザクション結果を得ることと、トランザクション結果を少なくとも1つの変更ログキャッシュに通信することとを含む。受信したトランザクション結果によって、少なくとも1つの変更ログキャッシュは、対応するトランザクションと関連付けられた少なくとも1つのミューテーションを記録し得る。少なくとも1つの変更ログキャッシュは、記録されたミューテーションをデータ処理ハードウェア上で実行される1つ以上のウォッチャプロキシに通信し得る。各ウォッチャプロキシは、対応するトランザクションの各自のサブスクライブしているウォッチャに通知を提供するように構成され得、通知は記録されたミューテーションを含む。通知は、トランザクション履歴の一貫性のあるスナップショットをさらに含み得る。一貫性のあるスナップショットは、対応するトランザクションと、対応するトランザクションのコミット時間よりも早い対応するコミット時間を有するいずれかの完了済のトランザクションとを含み得る。
【0016】
ある実装例では、当該動作は、最大コミット時間を通信した後、分散システム上で対応するトランザクションの実行をコミットすることを含む。ここで、トランザクションは最大コミット時間を含む。その後、当該動作はさらに、対応するトランザクションが最大コミット時間にまたは最大コミット時間の前にコミットできない場合は分散システム上の対応するトランザクションの実行が拒絶されることを示すトランザクション結果を得ることと、トランザクション結果を少なくとも1つの変更ログキャッシュに通信することとを含み得る。受信したトランザクション結果によって、少なくとも1つの変更ログキャッシュは、トランザクション処理が最大コミット時間を少なくとも1つの変更ログキャッシュに通信した実時間と最大コミット時間との間のトランザクション履歴にギャップを作成し得る。少なくとも1つの変更ログキャッシュは、トランザクション履歴のギャップをデータ処理ハードウェア上で実行される1つ以上のウォッチャプロキシに通信し得る。各ウォッチャプロキシは、最大コミット時間の終わりに対応するトランザクションの各自のサブスクライブしているウォッチャに通知を提供するように構成され得、通知はトランザクション履歴のギャップ中にキャッシュミスを含む。
【0017】
ある例では、当該動作はさらに、オフラインイベントの後に変更ログ処理の再開を決定することと、実時間を得ることと、変更ログ処理が再開すると実時間に基づいて現在のシーケンス番号を求めることと、現在のシーケンス番号からグローバルな最大コミット時間遅延を待機してから、分散システム上で実行されるいずれかのトランザクションについてのトランザクション履歴を更新することとを含む。変更ログ処理の再開の前に分散システム上で実行されるトランザクションは、グローバルな最大コミット時間遅延内に完了し得る。当該動作はさらに、マージしたトランザクション履歴を1つ以上のサブスクライブしているウォッチャに送信することを含み得、サブスクライブしている各ウォッチャは、メモリハードウェア上に格納されたデータの変更についてのスタンディングクエリを有する。
【0018】
本開示の1つ以上の実装例の詳細は添付の図面および以下の説明に記述されている。他の局面、特徴、および利点は説明および図面から、ならびに請求項から明らかになるであろう。
【0019】
さまざまな図中の同様の参照符号は同様の要素を示す。
【図面の簡単な説明】
【0020】
図1】分散システムの非一時的なデータストレージへのアクセスをユーザデバイスに提供するための例示的なシステムの概略図である。
図2】分散ストレージシステムの非一時的なデータストアへのアクセスを1つ以上のユーザデバイスに提供するための例示的なシステムの概略図である。
図3】スタンディングクエリについてのほぼリアルタイムの通知を提供するための通知システムの例示的なコンポーネントの概略図である。
図4A図3の通知システムのバックエンドおよび少なくとも1つの変更ログキャッシュが実行する例示的な動作の概略図である。
図4B図3の通知システムのバックエンドおよび少なくとも1つの変更ログキャッシュが実行する例示的な動作の概略図である。
図5】例示的な変更ログ処理の概略図である。
図6】分散システム上で実行される変更ログ処理によって設定されるコミット時間ウィンドウのプロットを示す図である。
図7】メモリハードウェアと通信している例示的なコンピューティングデバイスの概略図である。
【発明を実施するための形態】
【0021】
詳細な説明
インメモリ変更ログ、または変更ログキャッシュを有する分散システムは、当該分散システム上で実行されるトランザクションのトランザクション履歴を格納して、ウォッチサブスクリプションをより高速に処理し、それによって当該トランザクションが実行されるとほぼ「リアルタイムの」更新を提供する。したがって、このメモリ上のキャッシングによって、分散システムの多くの(たとえば1,000個の)マシンにわたって実行されるトランザクションのトランザクション履歴を単一の変更ログキャッシュが格納するので、増加したスケーラビリティが提供される。一般に、分散システム上の所与のデータストアが毎秒処理可能なトランザクションの数は、変更ログキャッシュが毎秒実行し得るタスクの数よりも多い。ファンインポイント(fan-in point)において変更ログキャッシュがデータストアに発行されるすべてのトランザクション要求に対処するためのスループットの減少を軽減するために、実装例は、高需要時に、変更ログキャッシュを、異なるコンピューティングリソース上で実行される複数の変更ログキャッシュ(たとえば変更ログ処理の複数のインスタンス)に動的に分割することを含む。その後、この複数の変更ログキャッシュ、およびそれらの関連付けられたトランザクション履歴が日和見的に互いにマージされて、ファンアウトポイント(fan-out point)において1つ以上のサブスクライブしているウォッチャについてのトランザクション履歴の保証または一貫性が維持され得る。
【0022】
図1および図2を参照して、ある実装例では、システム100はユーザ102と関連付けられた1つ以上のユーザデバイス120a〜nを含む。ユーザデバイス120は、スケーラブルな/弾力性のある非一時的なデータストア150を有する分散ストレージシステム200とネットワーク132を介して通信している。ある実装例では、分散ストレージシステム200は、データストア150へのアクセスを管理するコンピューティングデバイス112を実行する。ユーザデバイス120は、コンピューティングデバイス112が書込トランザクション204を実行するとデータストア150にデータ202を書込み、コンピューティングデバイス112が読出トランザクション214を実行するとデータストア150からデータ202をウォッチするかまたは読出す。ある例では、コンピューティングデバイス112がネットワーク132を介してユーザデバイス120から書込アクセス要求128を受信すると、コンピューティングデバイス112は書込トランザクション204を実行する。同様に、コンピューティングデバイス112がネットワーク132を介してユーザデバイス120から読出アクセス要求130を受信すると、コンピューティングデバイス112は読出トランザクション214を実行する。ある例では、読出アクセス要求130は、ユーザデバイス120が新たな読出アクセス要求130を繰返し発行する必要なしにデータストア150からデータ202を一貫してウォッチするかまたは読出すことができるようにする、分散システム200にわたって一度発行されるスタンディングクエリに対応する。
【0023】
ある実装例では、分散ストレージシステム200は、分散システム200上で実行されるトランザクション204のトランザクション履歴312(図3)を耐久性のない変更ログキャッシュ(CLC)310に格納するための変更ログ処理500を実行する。あるシナリオでは、分散ストレージシステム200は、分散システム200が受信する書込アクセス要求128の数が増加することによって分散システム200に対する変更ログ負荷も増加する期間中などの高需要の期間中に、変更ログ処理500の複数のインスタンスを実行する。ある実装例では、分散システム200上で実行されるバックエンド304が、対応するトランザクション204からのミューテートしたデータ202の複数のスライスを非耐久状態の複数の耐久性のないCLC310の間でファンインするかまたは分散させ得る。次に、分散システム200上で実行されるスライスマネージャ318が、複数のCLC310からのミューテートしたデータ202のスライスをファンアウトするかまたはマージして、対応するトランザクションに関心がある1つ以上のユーザデバイス120にデータストア150の一貫性のあるスナップショットを提供し得る。
【0024】
ユーザデバイス120は、ネットワーク132を介してコンピューティングデバイス112と通信可能な任意のコンピューティングデバイスであり得る。ユーザデバイス120は、ラップトップ、タブレット、スマートフォン、およびウェアラブルコンピューティングデバイス(たとえばヘッドセットおよび/または時計)などのデスクトップコンピューティングデバイスならびにモバイルコンピューティングデバイスを含むが、これらに限定されない。ユーザデバイス120はさらに、ディスプレイ122上でグラフィカルユーザインターフェイス(GUI)222を実行して、分散ストレージシステム200のデータストア150にデータ202を書込むおよび/またはデータストア150からデータ202を読出し得る。ユーザデバイス120は、データストア150に格納されたデータ202の更新/変更/ミューテートを求める書込アクセス要求128を送信するライタ320(図3)と、データ202の変更またはミューテーションが起こるといつでもデータ202の取得を求める読出アクセス要求130(たとえばスタンディングクエリ)を送信するリーダ322(図3)との双方を含み得る。
【0025】
ネットワーク132は、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、および/またはインターネットなどの、さまざまな種類のネットワークを含み得る。ネットワーク132は長距離ネットワーク(たとえばインターネットまたはWAN)を表わし得るが、ある実装例では、ネットワーク132はローカルエリアネットワーク(LAN)などの短距離ネットワークを含む。ある実装例では、ネットワーク132は標準的な通信技術および/またはプロトコルを用いる。したがって、ネットワーク132は、イーサネット(登録商標)、ワイヤレスフィデリティ(WiFi)(たとえば802.11)、マイクロ波アクセスに関する世界的相互運用(WiMax)、3G、ロングタームエボリューション(LTE)、デジタル加入者回線(DSL)、非同期転送モード(ATM)、インフィニバンド(InfiniBand)、PCIエクスプレスアドバンストスイッチング、ブルートゥース(登録商標)、ブルートゥースローエナジー(BLE)等の技術を用いるリンクを含み得る。同様に、ネットワーク132上で用いられるネットワーキングプロトコルは、マルチプロトコルラベルスイッチング(MPLS)、伝送制御プロトコル/インターネットプロトコル(TCP/IP)、ユーザデータグラムプロトコル(UDP)、ハイパーテキスト転送プロトコル(HTTP)、シンプルメール転送プロトコル(SMTP)、ファイル転送プロトコル(FTP)等を含み得る。ネットワーク132上でやり取りされるデータは、ハイパーテキストマークアップ言語(HTML)、拡張可能マークアップ言語(XML)等を含む技術および/またはフォーマットを用いて表わされ得る。さらに、リンクのすべてまたは一部は、セキュアソケットレイヤ(SSL)、トランスポート層セキュリティ(TLS)、仮想私設ネットワーク(VPN)、インターネットプロトコルセキュリティ(IPsec)などの従来の暗号化技術を用いて暗号化され得る。他の例では、ネットワーク132は、上述のものの代わりにまたは上述のものに加えて、カスタムおよび/または専用データ通信技術を用いる。
【0026】
図2を参照して、ある実装例では、分散ストレージシステム200は疎結合されたメモリホスト110、110a〜n(たとえばコンピュータまたはサーバ)を含む。各メモリホストは、データをキャッシュするために用いられ得るストレージリソース114(たとえばメモリハードウェア、メモリハードウェア、フラッシュメモリ、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、および/またはディスク)と通信しているコンピューティングリソース112(たとえば1つ以上のプロセッサまたは中央処理装置(CPU))を有する。ストレージリソース114上に重なっているデータストア150(たとえばストレージ抽象化)によって、1つ以上のユーザデバイス120、120a〜nによるストレージリソース114のスケーラブルな使用が可能になる。ユーザデバイス120は、(たとえばリモートプロシージャコール(RPC)を介して)ネットワーク132を通じてメモリホスト110と通信し得る。
【0027】
ある実装例では、分散ストレージシステム200は「シングルサイド」であり、ユーザデバイス120からのRPCに応答するための任意のサーバジョブが、それらの対応するメモリホスト110上で書込トランザクション204を実行する際にデータ202を書込むまたは読出トランザクション214を実行する際にデータ202を読出す必要性をなくし、代わりに、専用ハードウェアに依拠して遠隔の書込および読出アクセス要求128、130をそれぞれ処理し得る。「シングルサイド」とは、メモリホスト110上の要求処理の大部分がメモリホスト110のCPU112上で実行されるソフトウェアによってではなくハードウェアにおいて行なわれ得る方法を指す。メモリホスト110(たとえばサーバ)のプロセッサ112に、対応するストレージリソース114(たとえば非一時的メモリ)のアクセスをユーザデバイス120上で実行されるユーザ処理126にエクスポートするサーバ処理118を実行させる代わりに、ユーザデバイス120はメモリホスト110のネットワークインターフェイスコントローラ(NIC)116を介してストレージリソース114に直接アクセスしてもよい。シングルサイドの分散キャッシングシステムに関するさらなる概念および特徴は米国特許第9,164,702号に見ることができ、当該米国特許の内容全体を引用により本明細書に援用する。
【0028】
分散ストレージシステム200は、リモートメモリホスト110のメモリハードウェア114(たとえばデータストア150)にデータ202を入れ、RPCを介して、またはリモートダイレクトメモリアクセス(RDMA)対応のケーブルネットワークインターフェイスコントローラ(NIC)116を介して、リモートメモリホスト110からデータ202を取得し得る。ネットワークインターフェイスコントローラ116(ネットワークインターフェイスカード、ネットワークアダプタ、またはLANアダプタとしても知られている)は、コンピューティングデバイス/リソース112をネットワーク132に接続するコンピュータハードウェアコンポーネントであり得る。メモリホスト110a〜nおよびユーザデバイス120の双方は、ネットワーク通信用のネットワークインターフェイスコントローラ116を各々が有し得る。メモリホスト110のコンピューティングプロセッサ112上で実行されるホスト処理118は、書込トランザクション204を実行して更新されたデータ202を書込む際にメモリ場所250a〜nを割当て得る。
【0029】
ある実装例では、1つ以上のユーザデバイス120(たとえばウォッチャ322)は、スタンディングクエリと関連付けられた読出アクセス要求130を分散システム200にわたって一度発行して、特定のデータ202をサブスクライブする。このスタンディングクエリ(たとえば読出アクセス要求130)によって、対応するユーザデバイス120(たとえばサブスクライブしているウォッチャ322)は、新たな読出アクセス要求130を繰返し発行する必要なしにデータストア150からデータ202を一貫してウォッチするかまたは読出すことができる。したがって、分散システム200上で書込トランザクション204を実行してデータストア150内のデータ202を修正することを求める書込アクセス要求138を分散システム200が受信するといつでも、分散システム200は、修正された/ミューテートしたデータ202を、データ202をサブスクライブしている1つ以上のウォッチャ322にストリームする。
【0030】
ある実装例では、分散システム200は、更新されたデータ202を1つ以上のサブスクライブしているウォッチャ322にリアルタイムでストリームし、分散システム200が所与の時点で現在受信しているトランザクション要求138および140の数に基づいてスケーラブルである。たとえば、分散システム200は、分散システム200が高負荷下にある時に、すなわち分散システム200が多数の書込要求138を受信している時に、データストア150内のデータ202に対する複数のミューテーションを折畳む一貫性のあるスナップショット(たとえばトランザクション履歴312)を所与の時間インスタンスで提供し得る。このスケーラビリティによって、分散システム200は、可能な限りリアルタイムで、かつ分散システム200の過負荷のためにウォッチャ322へのデータ202のストリーミングをドロップする必要なしに、更新されたデータ202をサブスクライブしているウォッチャ322にストリームすることができる。したがって、書込トランザクション204の実行が成功裏に完了すると、ウォッチャ322による読出トランザクション214は、ウォッチャ322が書込トランザクション204によって修正されたデータ202の最新のコピーを受信するように、データストア150の現在の一貫性のある状態を反映している。ウォッチャ322は、最後のスナップショットから起こったすべての変更を反映していない場合があるデータの単一の一貫性のあるスナップショットを所与の時間インスタンスで受信する。
【0031】
図3は、データストア150に格納されたデータ202をサブスクライブしている1つ以上のウォッチャ322に通知350を送信するための通知システム300のコンポーネントの例示的な実装例のブロック図である。本明細書において、ウォッチャ322は、データストア150内の特定されたデータ202の変更が通知350としてほぼリアルタイムでウォッチャ322にストリームされるようにスタンディングクエリ(たとえば読出アクセス要求130)を発行することによって、この特定されたデータ202をサブスクライブし得る。通知システム300は、1つ以上のリモートライタ320、320a〜nおよび1つ以上のリモートウォッチャ322、322a〜nと関連付けられたリモートユーザデバイス120とネットワーク132を介して通信している分散システム200を含む。分散システム200は、コンピューティングデバイス112上で実行されるデータストアバックエンド304およびスライスマネージャ318と、メモリハードウェア114のデータストア150とを含む。
【0032】
ある実装例では、コンピューティングデバイス112は変更ログ処理500についての命令を実行する。変更ログ処理500は、分散システム200上で実行されるトランザクション204のトランザクション履歴312の一部を非耐久状態で格納するためにメモリ114内に耐久性のない変更ログキャッシュ(CLC)310を提供する。データストア150内のデータ202に加えられるすべての変更を記録する耐久性のある変更ログを用いるのとは対照的に、CLC310は、コンピューティングデバイス112が変更ログ処理の付加的なインスタンスを実行して2つ以上のCLC310a〜nを提供することによってCLC310をスケールアップまたはスケールダウンできるように、メモリ114内でシャード可能である。このように、変更ログ処理500はさらに、所与の時間における分散システム200に対する現在の負荷に依存して1つ以上のインスタンスの実行を中止し得る。耐久性のないCLC310によって提供されるスケーラビリティがなければ、各書込トランザクション204がデータストア150の対応する場所で実行を待機する間、多数の書込要求128によってボトルネックが生じることになる。一般に、単一のデータストア150は、そのデータストア150の変更を記録するための各自のCLC310に割当てられる。しかし、複数のデータストア150が同一のCLC310に割当てられてもよい。たとえば、通知システム300は、各CLC310が1,000個のデータストア150の変更を記録するように、100万個のデータストア150および100個のCLC310を含んでもよい。ある例では、付加的なデータストア150が追加された場合により多くのCLC310をスケールアップして、分散システム200に対する負荷の増加に対処することが必要である。
【0033】
ある例では、コンピューティングデバイス112(たとえばデータ処理ハードウェア)は1つ以上のウォッチャプロキシ314、314a〜nを実行する。各ウォッチャプロキシは、ウォッチャ322の個々のサブスクリプションを監視するためのステートフルマシンを含む。たとえば、各ウォッチャ322は各自のウォッチャプロキシ314と1対1の接続を有する。したがって、各ウォッチャプロキシ314は、各自のウォッチャ322と、対応するウォッチャプロキシ314にミューテーションまたはキャッシュミスを提供する1つ以上のCLC310との間で多重化する。キャッシュミスが起こるシナリオでは、ウォッチャプロキシ314はバックエンド700にクエリ352を送ってデータストア202からデータ202を取出し得る/取得し得る。
【0034】
ある実装例では、バックエンド304は、新たな書込トランザクション204がデータストア150内のデータ202の更新をコミットするたびに、CLC310に格納されたトランザクション履歴312を更新するためのトランザクション処理を実行する。トランザクション処理は、ファンイン段階301においてCLC310を使用して、順序付けられた変更ログ(たとえばトランザクション履歴312)のキャッシュを維持し得る。ある例では、トランザクション処理は、CLC310が維持する順序付けられた変更ログのキャッシュをデータ202のストライプにシャードし、データ202の各ストライプを複製し、データストライプおよび複製したデータストライプをメモリハードウェア114上の複数の記憶場所250に格納する。バックエンド310がリモートライタ320から書込アクセス要求128を受信すると、バックエンド304は実時間クロック316から実時間(TT)を得て、TTに基づいて最大コミット時間TDMaxを求め得る。TDMaxは、分散システム200上で対応する書込トランザクション204の実行をコミットする最大時間を指定する。たとえば、TDMaxは、分散システム200が対応するトランザクション204をコミットする上限制限時間を実施する。これによって、分散システム200は、分散システム200がTDMaxまでにトランザクション204をコミットできない場合は対応するトランザクション204を打切る。
【0035】
ある例では、ファンイン段階301において、バックエンド304は準備ロックメッセージ330をCLC310に送信してから、書込トランザクション204を実行して(たとえば書込をコミットして)データストア150内のデータ202を修正/ミューテート/変更する。準備ロックメッセージ330は対応するペンディングトランザクション204のTDMaxを含み、準備ロックメッセージ330によってCLC310はコミット時間ウィンドウ610(図6)の間は通知ロックを設定する。ここで、コミット時間ウィンドウ610は、CLC310が準備ロックメッセージ330を受信するTTからTDMaxまでの時間ウィンドウに対応する。通知ロックは、CLC310が、TDMaxよりも早くペンディングトランザクションの開始よりも遅い対応するコミット時間を有するいずれの完了済のトランザクション204についても、コミット時間ウィンドウ610中に1つ以上のウォッチャ322に通知することを防止する。本明細書において「コミット時間」という用語は、対応する書込トランザクション204の実行が完了する時間を指す。バックエンド304は、準備ロックメッセージ330をCLC310に送信した後、書込トランザクション204の実行をコミットしてデータストア150内のデータ202を更新する。
【0036】
ある実装例では、バックエンド304は、対応するトランザクション204がコミットしてトランザクション結果332をCLC310に提供した後に、トランザクション結果332を得る。ある例では、トランザクション結果332は、対応するトランザクション204がTDMaxにまたはTDMaxの前にコミット時間を含む場合は対応するトランザクション204の実行が受付けられることを示す。これらの例では、トランザクション結果332は、対応するトランザクション204から生じるデータ202の少なくとも1つのミューテーションも含み得る。他の例では、トランザクション結果332は、対応するトランザクション204が失敗した場合は、またはそうでなければデータストア150がTDMaxまでに対応するトランザクションを完了する/コミットすることができない場合は、対応するトランザクション204の実行が拒絶されることを示す。したがって、本明細書において、トランザクション結果332がトランザクション204が「拒絶される」ことを示しているとは、TDMaxの前に公的に打切られたために結果が分かっているトランザクション204を指す場合もあるし、トランザクション204がTDMaxまでにコミットしなかったために、トランザクション204が完了したか否かの結果が不明なトランザクション204を指す場合もある。
【0037】
バックエンド304は、書込トランザクション204をコミットした後に解放ロックメッセージ334をCLC310に提供し得る。解放ロックメッセージ334は対応するトランザクション204のトランザクション結果332を含み、解放ロックメッセージ334によってCLC310は通知ロックを解放/解除する。たとえば、CLC310は、解放ロックメッセージ334を受信すると通知ロックを直ちに解除し得る。トランザクション結果332が対応するトランザクションが受付けられることを示す実装例では、解放ロックメッセージ334によってCLC310は、対応するトランザクション204と関連付けられたデータ202の少なくとも1つのミューテーションを記録する。逆に、解放ロックメッセージ334によってCLC310は、対応するトランザクション204のコミット時間ウィンドウ610中のトランザクション履歴312にギャップを作成する。CLC310が作成するギャップは、トランザクション204がギャップ中はペンディングであったが、トランザクション204が完全にコミットされたか否かの結果は不明であることを示す。
【0038】
ある実装例では、1つ以上のウォッチャプロキシ314は、トランザクション処理のファンアウト段階302において実行されて、CLC310からトランザクション履歴312を受信する。トランザクション履歴312は、対応するトランザクション204についての最古の準備ロックメッセージよりも早い対応するコミット時間を有する分散システム200上で実行されるいずれかのトランザクション204を含む。ある例では、CLC310は、データ202のミューテーションをトランザクション履歴312に記録し、トランザクション履歴312をウォッチャプロキシ314に提供することによって、対応するトランザクション204が受付けられた場合はデータ202の少なくとも1つのミューテーションを通信する。これらの例では、各ウォッチャプロキシ314は通知350内にデータ202のミューテーションを含み、通知350を各自のサブスクライブしているウォッチャ322に提供する。他の例では、CLC310は、対応するトランザクション204が拒絶された場合は、ギャップを有するトランザクション履歴312をウォッチャプロキシ314に提供し、これによって、各ウォッチャプロキシ314は通知350内のキャッシュミスをプッシュし、通知350を各自のサブスクライブしているウォッチャ322に提供する。ここで、キャッシュミスは、トランザクション履歴312のギャップ中にペンディングであるトランザクション204の不明の結果を反映している。ある例では、ウォッチャプロキシ314は、バックエンド304にクエリ352を送ってトランザクション履歴312のギャップ中のデータストア150のスナップショットを得て、ペンディングトランザクション204の結果を求め、その結果を各自のサブスクライブしているウォッチャ322に提供する。逆に、対応するトランザクション204がTDMaxの前に公的に打切られたために拒絶される場合は、対応するトランザクション204はトランザクション履歴312から単に省略される。さらに、新たなウォッチャ322が分散システム200に接続すると、ウォッチャ322がデータストア150の一貫性のあるスナップショットを受信するように、対応するウォッチャプロキシ314が、ウォッチャ322と関連付けられたスタンディングクエリ130に影響を与えるデータストア150のすべての変更を統合し得る。
【0039】
データストア150にコミットされるトランザクション204の数が増加して、単一のCLC310ではすべてのミューテーションを記録するのに十分なスループットを有していない状況では、データ204のミューテーションは複数のCLC310の間でスライスに分割され得る。ある実装例では、スライスマネージャ318は、ミューテートしたデータ204の1つ以上のそれぞれのスライスを各々が含む複数のCLC310からのトランザクション履歴312をマージして、1つ以上のウォッチャ322からの所与のスタンディングクエリ(たとえば読出アクセス要求130)を満たす。
【0040】
図4Aおよび図4Bは、分散システム200のバックエンド304および少なくとも1つの変更ログキャッシュ310が実行する例示的な動作を示すダイヤグラム400a、400bを提供する。ダイヤグラム400a、400bは図3の通知システム300を参照して説明され得る。縦のy軸は、上から下に向かって増加する時間を示す。時間1において、バックエンド304はリモートライタ320からトランザクション要求(たとえば書込アクセス要求128)を受信する。リモートライタ320は、書込トランザクション204を実行してメモリハードウェア114上でデータストア150に格納されたデータ202をミューテートすることを求めるトランザクション要求138を送信し得る。時間2において、バックエンド304は対応するトランザクション204をペンディング中として割当てる。ここで、バックエンド304は実時間クロック316からTTを得て、対応するトランザクション204のTDMaxを求める。バックエンド304は、TDMaxを含む準備ロックメッセージ330を作成し得る。
【0041】
時間3において、バックエンド304は準備ロックメッセージ330をCLC310に送信し、時間4において、CLC310は準備ロックメッセージ330を受信したことに応答して実時間クロック316からTTを取出す。時間5において、CLC310は、準備ロックメッセージ330が(たとえば時間3で)呼出されるTTと、対応するトランザクション204のTDMaxとの間のコミット時間ウィンドウ610の間は通知ロックを設定する。通知ロックは、CLC310が、コミット時間ウィンドウ610内に対応するそのフォール(fall)を有するいずれの完了済のトランザクション204についても、1つ以上のウォッチャ322に通知することを防止する。続いて、時間6において、バックエンド304は対応するトランザクション204の実行をコミットして、データストア150内のデータ202を変更(たとえばミューテート)する。
【0042】
時間7において、データストア150はコミット時間をバックエンド304に戻し、バックエンド304は戻されたコミット時間に基づいてトランザクション結果332を得る。図4Aは、時間7において戻されたコミット時間がTDMaxにまたはTDMaxの前に起こって、対応するトランザクション204が受付けられることを示すトランザクション結果332を提供することを示す。このシナリオでは、時間8において、バックエンド304はトランザクション204が受付けられることをライタ320に通知し、時間9において、対応するトランザクション204から生じるデータ202の少なくとも1つのミューテーションをCLC310に提供する。時間10において、CLCは通知ロックを解放/解除し、データ202の少なくとも1つのミューテーションを記録する。時間8においてトランザクション204が受付けられることをライタ320に通知することによって、ライタ320には、ライタ320がトランザクション204の結果をサブスクライブしているウォッチャ322として見ることができる前に、書込トランザクション204が成功したことが通告される。しかし、他のシナリオでは、バックエンド304は、CLCが時間10においてデータ202の少なくとも1つのミューテーションを記録すると、時間10においてトランザクションが受付けられることをライタ320に通知してもよい。これらのシナリオでは、データ202の少なくとも1つのミューテーションは、ライタ320の呼出が戻される前に記録されることが保証される。
【0043】
一方、図4Bは、対応するトランザクション204がTDMaxまでに完了/コミットできなかったために、またはトランザクション204がTDMaxの前に公的に打切られたために、対応するトランザクション204が拒絶されるシナリオを示す。たとえば、時間7において、データストア150は、トランザクション204がTDMaxまでにコミットできなかったために拒絶されることを示す、またはトランザクション204がTDMaxの前に公的に打切られたために拒絶されることを示すトランザクション結果332をバックエンド304に戻し得る。時間8において、バックエンド304はトランザクション204が拒絶されることをリモートライタ320に通知し、時間9において、バックエンド304は解放ロックメッセージ334をCLC314に送信する。ここで、解放ロックメッセージ334は、対応するトランザクション204が拒絶されたことを示すトランザクション結果332を含み、CLC310に通知ロックを解放するように通告する。時間10において、CLC310は、コミット時間ウィンドウ610の間に予め設定された通知ロックを解除し、拒絶された対応するトランザクション204と関連付けられたギャップを作成する。より具体的には、CLC310は、コミット時間ウィンドウ610中のトランザクション履歴312に、すなわち、準備ロックメッセージ330が呼出されるTT(たとえば時間3)と、対応するトランザクション204のTDMaxとの間のトランザクション履歴312にギャップを作成し得る。したがって、CLC310が作成するギャップは、トランザクション204が当該ギャップ中はペンディングであったが、トランザクション204が完了したか否かの結果は不明であることを示す。
【0044】
図5は、分散システム200に対する現在の変更ログ負荷(たとえば需要)に基づいてスケーラビリティを提供するために分散システム200上で実行される例示的な変更ログ処理500を提供する。変更ログ処理500は図3の通知システム300を参照して説明することができる。データ処理ハードウェア(たとえばコンピューティングデバイス112)は変更ログ処理500の初期のインスタンスを実行して、初期の耐久性のないCLC310aを提供する。CLC310aは、分散システム200上で実行されるトランザクション(たとえば書込トランザクション204)のトランザクション履歴312を、データ処理ハードウェアと通信しているメモリハードウェア114上に格納するように構成される。したがって、各CLC310(たとえば変更ログ処理500の各インスタンス)は、順序付けられた変更ログのキャッシュを維持する役割を果たす。
【0045】
ファンイン段階301において、バックエンド304は、対応するトランザクション204を実行するためのトランザクション要求128(たとえば書込アクセス要求)をリモートライタ320から受信したことに応答して、準備ロックメッセージ330をCLC310aに送信する。ここで、CLC310aは、TDMaxまでにはコミットすることが保証されている、まだコミットしていない対応するトランザクション204のエントリをトランザクション履歴312(たとえば変更ログ)に記録することによって、各準備ロックメッセージ330を処理する。バックエンド304が複数のトランザクション要求128を受信すると、CLC310aが複数の準備ロックメッセージ330を処理しなければならないため、CLC310aに対する変更ログ負荷が増加する。ある例では、データストア150が毎秒処理可能なコミットの数は、各CLC310がスループットの減少を経験する前に同時に処理可能な準備ロックメッセージ330の数よりも多い。たとえば、CLC310aはキャッシングパフォーマンスが劣化する前に毎秒10,000個の入力される準備ロックメッセージ330を処理可能であり得るのに対して、データストア150は毎秒300,000個のコミットを処理可能である。したがって、変更ログ負荷が閾値負荷を満たす(たとえば超える)場合、CLC310aには、入力される準備ロックメッセージ330の処理に対処するスループットが欠如している場合がある。この結果、入力される準備ロックメッセージ300は、対応するCLC310での処理を待機している間にボトルネックになり得る。ここで、閾値負荷は、CLC310aがキャッシングパフォーマンスの劣化を経験することなく処理可能な1秒当たりの準備ロックメッセージ330の最大数に対応する。データ処理ハードウェアは、所与の時間に受信したトランザクション要求(たとえば書込アクセス要求128)の数に基づいて変更ログ負荷を求め得る。
【0046】
動作502において、バックエンド304は、対応するトランザクション204の実行が成功した場合、ミューテートしたデータ202を含むデータストア150からトランザクション結果332を得る。上述のように、CLC310aは、変更ログ負荷が閾値負荷を満たす場合はデータストア150で起こるすべての変更を記録できない場合がある。変更ログ負荷が閾値負荷を満たす場合、メモリハードウェア114内のトランザクション履歴312のキャッシングにスケーラビリティを提供するために、データ処理ハードウェアは、動作504において、トランザクション結果332からのミューテートしたデータ202を複数のスライス202a〜dに分割し、変更ログ処理500の少なくとも1つのその後のインスタンスを実行する。これによって、ミューテートしたデータ202のスライス202a〜dを格納するための少なくとも1つのその後の耐久性のないCLC310b〜dが提供される。初期のCLC310aと同様に、その後の各CLC310a〜dは、分散システム200上で実行されるトランザクションの対応するトランザクション履歴312を格納するように構成される。たとえば、図5は、データ処理ハードウェアが動作504において変更ログ処理500の3つのその後のインスタンスを実行して複数のCLC310a、310b、310c、310dを提供することを示す。データ処理ハードウェアは「スライサ」コンポーネントを実装して変更ログ負荷を監視し、過負荷のためにミューテートしたデータ202を複数のスライス202a〜dに分割することを決定し得る。
【0047】
ファンアウト段階302において、各CLC310a〜d、たとえば分散システム200上で実行される変更ログ処理500の各インスタンスは、対応するトランザクション履歴312a、312b、312c、312dを分散システム200上で実行されるスライスマネージャ318に提供し得る。ここで、各トランザクション履歴312a〜dは、受付けられた対応するトランザクション204についてのミューテートしたデータ202の1つ以上のスライス202a〜dを示す。
【0048】
動作506において、変更ログ処理の複数のインスタンス(たとえば複数のCLC310a〜d)が実行中である場合、スライスマネージャ318は変更ログ処理500の少なくとも1つのその後のインスタンスの実行を中止し、変更ログ処理500の初期のインスタンス(たとえばCLC310a)のトランザクション履歴312と、変更ログ処理500の少なくとも1つのその後のインスタンス(たとえばCLC310b〜d)のトランザクション履歴312とに含まれているミューテートしたデータ202のスライス202a〜dをマージする。上述のように、データ処理ハードウェアは「スライサ」コンポーネントを実装して、変更ログ負荷の軽負荷のためにミューテートしたデータ202のスライス202a〜dをマージすることを決定し得る。たとえば、図5は、複数のCLC310a〜dからのトランザクション履歴312a〜dがスライスマネージャ318内にファンアウトし、スライスマネージャ318が複数のCLC310a〜dのトランザクション履歴312からのデータスライス202a〜dをマージして、サブスクライブしているウォッチャ322に、トランザクション履歴312の一貫性のあるスナップショットを所与の時間インスタンスで提供することを示す。ここで、トランザクション履歴312の一貫性のあるスナップショットは、受付けられる対応するトランザクション204についてのミューテートしたデータ202の1つ以上のバッチ、および/または拒絶される対応するトランザクション204についてのトランザクション履歴312のギャップの1つ以上のバッチを提供し得る。動作508において、1つ以上のウォッチャプロキシ314は、サブスクライブしている各ウォッチャ322に、トランザクション履歴312の一貫性のあるスナップショットを含む通知350を所与の時間インスタンスで送信する。トランザクション履歴にギャップがある場合、ウォッチャプロキシ314は対応するリモートウォッチャ322にキャッシュミスを提供する。ウォッチャプロキシ314は、ファンアウト段階302において変更ログ処理500の複数のインスタンスが実行中であるか否かを判断し得る。
【0049】
ある実装例では、1つ以上のウォッチャプロキシ314は、トランザクション履歴312の一貫性のあるスナップショットに含まれているミューテートしたデータ202のバッチごとに所与の時間インスタンスで再開トークンをウォッチャ322に提供する。再開トークンは全タスクにわたってグローバルに有効であり、再開トークンが将来用いられ得るように永続する。再開トークンは、クライアントに送信される現在の変更状態を表わす範囲および関連付けられたタイムスタンプを含み得る。したがって、再開トークンを用いると、ウォッチャ322が分散システムから一時的に切断されて、再接続されると、分散システム200が一時的に切断されたウォッチャ322のすべての状態を失った場合でもウォッチャ322がウォッチャプロキシ314から通知350を効率的に受信する能力が提供され得る。
【0050】
図6は、新たな書込トランザクション204がデータストア150内のデータ202の更新にコミットするたびに少なくとも1つのCLC310に格納されたトランザクション履歴312を更新するために、分散システム200上でデータ処理ハードウェア(たとえばコンピューティングデバイス112)が実行する変更ログ処理500のプロット600を示す。横のx軸は分散システム200の実時間を示しており、実時間のグローバルシーケンス番号は左から右に増加する。縦の破線601〜607は実時間中のそれぞれのグローバルシーケンス番号を示す。
【0051】
分散システム200上で対応する第1のトランザクション204aを実行するための第1のコミット時間ウィンドウ610aが、対応するCLC310によって縦の破線601と603との間に設定される。ここで、第1のコミット時間ウィンドウ610aは第1の最大コミット時間TCMax_1と関連付けられており、TCMax_1は、第1のトランザクション204aがTCMax_1の後はコミットしないことを保証している。図6は、実時間が縦の破線603において13と等しいときにTCMax_1が第1のコミットウィンドウ610aの境界を付けていること、および実時間が縦の破線601において4と等しいときにデータ処理ハードウェアが第1のトランザクション204aをコミットすることを示す。
【0052】
同様に、分散システム200上で対応する第2のトランザクション204bを実行するための第2のコミット時間ウィンドウ610bが、対応するCLC310によって縦の破線602と604との間に設定される。ここで第2のコミット時間ウィンドウ610bは第2の最大コミット時間TCMax_2と関連付けられており、TCMax_2は、第2のトランザクション204bがTCMax_2の後はコミットしないことを保証している。図6は、実時間が縦の破線604において21と等しいときにTCMax_2が第2のコミット時間ウィンドウ610bの境界を付けていること、および実時間が縦の破線602において12と等しいときにデータ処理ハードウェアが第2のトランザクション204bをコミットすることを示す。第1および第2のコミット時間ウィンドウ610a、610bと関連付けられたCLC310は同一でもよいし、異なっていてもよい。
【0053】
第1のトランザクション204aの実行は、第1のTCMax_1よりも早いコミット時間で完了する。たとえば、図6は、第1のトランザクション204aのコミット時間が9と等しいのに対して、第1のTCMax_1は13と等しいことを示す。第1のトランザクション204aは、より早い準備ロック時間を有する別のペンディングトランザクション204によってロックアウトされないため、データ処理ハードウェアは、実時間が9と等しいときにコミット時間を受信するとトランザクション履歴312の第1の一貫性のあるスナップショットを即座に取り得る。第2のトランザクション204bはトランザクション履歴312の第1の一貫性のあるスナップショットの前に縦の破線602において実行をコミットするが、第2のトランザクション204bは第1の一貫性のあるスナップショットが終わるまでは完全には完了しない。たとえば、第2のトランザクション204bは18と等しいコミット時間を含む。したがって、第1の一貫性のあるスナップショットは、第1のトランザクション204aと関連付けられているが第2のトランザクション204bとは関連付けられていないいずれかのミューテーションを含む。
【0054】
図6が第2のTCMax_2よりも早い対応するコミット時間を含む第2のトランザクション204bをさらに示すように、第2のトランザクション204bは、より早い準備ロック時間を有する別のペンディングトランザクション204によってロックアウトされないため、データ処理ハードウェアは、18と等しい対応するコミット時間においてトランザクション履歴312の第2の一貫性のあるスナップショットを取る。ここで、第2の一貫性のあるスナップショットは、コミット時間ウィンドウ610a、610bの双方と関連付けられたトランザクション履歴をマージして、第1および第2のトランザクション204a、204bの双方と関連付けられたミューテーションを含む。データ処理ハードウェアは少なくとも1つのウォッチャプロキシ314を実行して、第2の一貫性のあるスナップショット内のトランザクション履歴のマージを提供し得る。
【0055】
ある実装例では、データ処理ハードウェアは、オフラインイベント650の後に変更ログ処理500の再開を決定する。たとえば、図6は、オフラインイベント650が縦の破線605において起こり、続いて変更ログ処理500が実時間が30と等しい縦の下線606において再開するまで起こることを示す。変更ログキャッシュは耐久状態を有さないため、オフラインイベント650の前に変更ログキャッシュによって予め保持されている状態はいずれも、変更ログ処理500が再開する時までには無くなっている。ある例では、データ処理ハードウェアはグローバルな最大コミット時間遅延TCDMaxに依拠して、変更ログ処理500の再開後のトランザクション履歴312のすべてのその後のスナップショットが一貫性があるように分散システム200上で実行されるすべてのトランザクション204が完了することを保証する。換言すれば、TCDMaxは、変更ログ処理500の再開前にコミットするトランザクション204はいずれもTCDMaxの終わりまでには完了していることを保証する期間である。データ処理ハードウェアは、変更ログ処理が再開すると実時間に基づいて現在のシーケンス番号を求める。たとえば、現在のシーケンス番号は、変更ログ処理500が再開するときの縦の破線606において30と等しい。その後、データ処理ハードウェアは現在のシーケンス番号(たとえば縦の破線606)からTCDMaxを待機してから、分散システム上で実行されるトランザクション204のトランザクション履歴312を更新する。本明細書において、実時間(TT)は、所与のシステム上の実時間の測定が実際の時間に対応するように時間を有効に離散化する。したがって、TTは、現在時刻が確率的にTTの下限(TTnow_lowerbound)とTTの上限(TTnow_upperbound)との間の間隔内にあることを示す間隔を規定する。この結果、TTの値を直接準備することができず、第1の実時間(TT1)がTT2_lowerboundである後に第2の実時間(TT2)におけるイベントが起こった条件はTT1_upperboundよりも大きい。図6は、TCDMaxが20と等しく、縦の破線606と607との間に起こっていることを示す。したがって、TCDMaxが20と等しい場合、データ処理ハードウェアは、実時間が50と等しい縦の破線607になってからトランザクション履歴312を更新する。
【0056】
ある例では、第3のコミット時間ウィンドウ610cが、実時間が25と等しいときに対応するCLC310によって設定され、オフラインイベント650は第3のコミット時間ウィンドウ610c中に起こる。第3のコミット時間ウィンドウ610cはオフラインイベント650の発生前に既知の第3のTCMax_3で終了するが、対応するCLC310は、縦の破線605と606との間のオフラインイベント650の結果として、第3のコミット時間ウィンドウ610cと関連付けられた対応するトランザクション204の状態を失う。したがって、変更ログ処理500の間、ウォッチャプロキシ314はTCDMaxを待機してから、第3のコミット時間ウィンドウ610cと関連付けられた対応するトランザクション204を含むトランザクション履歴312の一貫性のあるスナップショットを提供する。トランザクション履歴312にギャップがある場合は、ウォッチャプロキシ314はギャップの時間範囲中にデータストアから一貫性のある状態を取出す。
【0057】
ある実装例では、第4のコミット時間ウィンドウ610dが、対応するCLC310によって再開イベントの後に設定され、TCDMaxの終わりの前に起こる第4のTCMax_4を含む。第4のコミット時間ウィンドウ610dと関連付けられた対応するトランザクションが第4のTCMax_4までに成功裏にコミットすると仮定すると、TCDMaxの終わりのトランザクション履歴312の一貫性のあるスナップショットは、両方のコミット時間ウィンドウ610c、610dと関連付けられたトランザクション履歴をマージして、それらの対応するトランザクション204と関連付けられたミューテーションを含む。対照的に、TCDMax中に開始するがTCDMaxの後に終了する第5のコミット時間ウィンドウ610eと関連付けられた対応するトランザクション204は、TCDMaxの終わりに一貫性のあるスナップショットには含まれない。第5のコミット時間ウィンドウ610dと関連付けられた第5のTCMax_5はTCDMaxの後に起こるためである。
【0058】
図7は、コンピューティングリソース112およびデータストア150などの、本文書に記載されるシステムおよび方法を実装するために用いられ得る例示的なコンピューティングデバイス700の概略図である。コンピューティングデバイス700は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、および他の適切なコンピュータなどの、さまざまな形態のデジタルコンピュータを表わすことを意図している。ここに示すコンポーネント、それらの接続および関係、ならびにそれらの機能は例示に過ぎないことが意図されており、本文書に記載されるおよび/または請求される本発明の実装例を限定することを意図していない。
【0059】
コンピューティングデバイス700は、プロセッサ710(すなわちデータ処理ハードウェア)と、メモリ720と、記憶装置730と、メモリ720および高速拡張ポート750に接続している高速インターフェイス/コントローラ740と、低速バス770および記憶装置730に接続している低速インターフェイス/コントローラ660とを含む。コンポーネント710、720、730、740、750および760の各々はさまざまなバスを用いて相互に接続されており、共通のマザーボード上にまたは他の態様で適宜搭載され得る。プロセッサ710は、コンピューティングデバイス700内で実行される命令を処理可能であり、この命令には、GUIのためのグラフィック情報を高速インターフェイス740に結合されているディスプレイ780などの外部入出力デバイス上に表示するためにメモリ720内または記憶装置730上に記憶されている命令が含まれる。他の実装例では、複数のプロセッサおよび/または複数のバスが、複数のメモリおよび複数種類のメモリとともに適宜用いられ得る。また、複数のコンピューティングデバイス700が接続され得、各デバイスは(たとえば、サーババンク、ブレードサーバ群、またはマルチプロセッサシステムとして)必要な動作の一部を提供する。
【0060】
メモリ720は、情報を非一時的にコンピューティングデバイス700内に記憶する。メモリ720は、コンピュータ読取可能媒体、揮発性メモリユニット、または不揮発性メモリユニットであり得る。非一時的メモリ720は、コンピューティングデバイス700が使用するプログラム(たとえば命令のシーケンス)またはデータ(たとえばプログラム状態情報)を一時的にまたは永続的に記憶するために用いられる物理デバイスであり得る。不揮発性メモリの例として、フラッシュメモリおよび読取専用メモリ(ROM)/プログラマブルROM(PROM)/消去可能プログラマブルROM(EPROM)/電子的消去可能プログラマブルROM(EEPROM(登録商標))(たとえば、ブートプラグラムなどのファームウェアに典型的に用いられる)およびディスクまたはテープが挙げられるが、これらに限定されない。揮発性メモリの例として、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、スタティックRAM(SRAM)、相変化メモリ(PCM)が挙げられるが、これらに限定されない。
【0061】
記憶装置730は、コンピューティングデバイス700に大容量記憶を提供可能である。ある実装例では、記憶装置730はコンピュータ読取可能媒体である。さまざまな異なる実装例では、記憶装置630は、フロッピー(登録商標)ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリもしくは他の同様のソリッドステートメモリデバイス、またはストレージエリアネットワークもしくは他のコンフィギュレーションにおけるデバイスを含む一連のデバイスであり得る。さらなる実装例では、コンピュータプログラムプロダクトが情報担体において有形に具体化される。コンピュータプログラムプロダクトは、実行されると上述のような1つ以上の方法を実行する命令を含む。情報担体は、メモリ720、記憶装置730、またはプロセッサ710上のメモリなどの、コンピュータ読取可能媒体または機械読取可能媒体である。
【0062】
高速コントローラ740はコンピューティングデバイス700のための帯域幅集約的な動作を管理するのに対して、低速コントローラ760はより低い帯域幅集約的な動作を管理する。そのような機能の割当ては例示に過ぎない。ある実装例では、高速コントローラ740はメモリ720、ディスプレイ780に(たとえばグラフィックスプロセッサまたはアクセラレータを介して)、およびさまざまな拡張カード(図示せず)を受付け得る高速拡張ポート750に結合される。ある実装例では、低速コントローラ760は記憶装置730および低速拡張ポート670に結合される。さまざまな通信ポート(たとえばUSB、ブルートゥース(登録商標)、イーサネット(登録商標)、無線イーサネット)を含み得る低速拡張ポート770は、キーボード、ポインティングデバイス、スキャナ、またはスイッチもしくはルータなどのネットワーキングデバイスなどの1つ以上の入出力デバイスに、たとえばネットワークアダプタを介して結合され得る。
【0063】
コンピューティングデバイス700は、図に示すように多数の異なる形態で実装され得る。たとえば、コンピューティングデバイス700は標準的なサーバ700aとしてもしくはそのようなサーバ700a群内で複数回、ラップトップコンピュータ700bとして、またはラックサーバシステム700cの一部として実装され得る。
【0064】
ある実装例では、コンピューティングリソース112を実装するコンピューティングデバイス700は、(たとえばメモリ720内の)データストア150と通信している。(データ処理ハードウェア710上で実行される)コンピューティングリソース112は分散システム200についての変更ログ処理500の初期のインスタンス310を実行し、変更ログ処理500の各インスタンス310は、コンピューティングリソース112と通信しているメモリハードウェア720上に、分散システム200上で実行されるトランザクション204(たとえば書込トランザクション)のトランザクション履歴312を格納するように構成される。コンピューティングリソース112はトランザクション要求138を受信し、受信したトランザクション要求138に基づいて変更ログ負荷を求め得る。ある例では、コンピューティングリソース112は、変更ログ負荷が閾値負荷を満たした場合は変更ログ処理500の少なくとも1つのその後のインスタンス310を実行し、変更ログ処理500の複数のインスタンスが実行中であるか否かを判断する。変更ログ処理500の複数のインスタンスが実行中である場合、コンピューティングリソース112は変更ログ処理500の少なくとも1つのその後のインスタンスの実行を中止し、変更ログ処理500の初期のインスタンス310のトランザクション履歴と、変更ログ処理500の少なくとも1つのその後のインスタンス310のトランザクション履歴とをマージし得る。ある例では、コンピューティングリソース112は、マージしたトランザクション履歴を反映する一貫性のあるスナップショットを、ミューテートしたデータをサブスクライブしているすべてのウォッチャ322に提供する。
【0065】
ソフトウェアアプリケーション(すなわちソフトウェアリソース110s)は、コンピューティングデバイスにタスクを実行させるコンピュータソフトウェアを指す場合がある。ある例では、ソフトウェアアプリケーションは「アプリケーション」、「アプリ」または「プログラム」と称される場合がある。アプリケーションの例として、システム診断アプリケーション、システム管理アプリケーション、システム保守アプリケーション、ワードプロセッシングアプリケーション、スプレッドシートアプリケーション、メッセージングアプリケーション、メディアストリーミングアプリケーション、ソーシャルネットワーキングアプリケーション、およびゲーミングアプリケーションが挙げられるが、これらに限定されない。
【0066】
非一時的メモリ110hmは、コンピューティングデバイス110hcが使用するプログラム(たとえば命令のシーケンス)またはデータ(たとえばプログラム状態情報)を一時的にまたは永続的に格納するために用いられる物理デバイスであり得る。非一時的メモリ110hmは揮発性および/または不揮発性のアドレス指定可能な半導体メモリであり得る。不揮発性メモリの例として、フラッシュメモリおよび読取専用メモリ(ROM)/プログラマブルROM(PROM)/消去可能プログラマブルROM(EPROM)/電子的消去可能プログラマブルROM(EEPROM(登録商標))(たとえば、ブートプラグラムなどのファームウェアに典型的に用いられる)が挙げられるが、これらに限定されない。揮発性メモリの例として、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、スタティックRAM(SRAM)、相変化メモリ(PCM)およびディスクまたはテープが挙げられるが、これらに限定されない。
【0067】
ここに記載されるシステムおよび技法の各種実装は、デジタル電子回路および/もしくは光回路、集積回路、専用に設計されたASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、ならびに/またはその組み合わせで実現できる。これら各種実装は、少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステム上で実行可能および/または解釈可能な1つ以上のコンピュータプログラムでの実装を含むことができ、それは、専用または汎用目的でもよく、ストレージシステム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスに対して、データおよび命令を受信し、データおよび命令を送信するように結合される。
【0068】
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても知られている)は、プログラマブルプロセッサのための機械命令を含んでおり、高レベル手続き型および/またはオブジェクト指向プログラミング言語で、および/またはアセンブリ/機械言語で実装され得る。本明細書において「機械読取可能媒体」および「コンピュータ読取可能媒体」という用語は、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される任意のコンピュータプログラムプロダクト、非一時的なコンピュータ読取可能媒体、装置および/またはデバイス(たとえば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス(PLD))を指し、機械命令を機械読取可能信号として受信する機械読取可能媒体を含む。「機械読取可能信号」という用語は、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される任意の信号を指す。
【0069】
本明細書に記載される主題および機能的動作の実装例は、デジタル電子回路で実装されてもよく、または本明細書に開示される構造およびそれらの構造的等価物を含むコンピュータソフトウェア、ファームウェアもしくはハードウェアで実装されてもよく、またはそれらのうちの1つ以上の組み合わせで実装されてもよい。さらに、本明細書に記載される主題は、1つ以上のコンピュータプログラムプロダクトとして、すなわちデータ処理装置によって実行するため、またはデータ処理装置の動作を制御するためにコンピュータ読取可能媒体上で符号化されるコンピュータプログラム命令の1つ以上のモジュールとして実装されてもよい。コンピュータ読取可能媒体は、機械読取可能記憶装置、機械読取可能記憶基板、メモリデバイス、機械読取可能伝播信号に影響を及ぼす物質の組成、またはそれらのうちの1つ以上の組み合わせであってもよい。「データ処理装置」、「コンピューティングデバイス」および「コンピューティングプロセッサ」という用語は、データを処理するためのすべての装置、デバイスおよび機械を包含しており、一例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む。当該装置は、ハードウェアに加えて、当該コンピュータプログラムのための実行環境を作り出すコード、たとえばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つ以上の組み合わせを構成するコードを含み得る。伝播信号は、人工的に生成される信号、たとえば好適な受信機装置に送信される情報を符号化するために生成される機械生成電気信号、光信号または電磁信号である。
【0070】
コンピュータプログラム(アプリケーション、プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプトまたはコードとしても知られている)は、コンパイラ型言語またはインタープリタ型言語を含む任意の形態のプログラミング言語で書込まれてもよく、スタンドアロンのプログラムとして、またはコンピューティング環境での使用に適したモジュール、コンポーネント、サブルーチンもしくは他のユニットとしてなどの任意の形態で配備されてもよい。コンピュータプログラムは、ファイルシステム内のファイルに必ずしも対応していない。プログラムは、他のプログラムまたはデータ(たとえばマークアップ言語文書で格納された1つ以上のスクリプト)を保持するファイルの一部に格納されてもよく、当該プログラムに専用の単一のファイルに格納されてもよく、または複数の調整されたファイル(たとえば1つ以上のモジュール、サブプログラム、またはコードの一部を格納するファイル)に格納されてもよい。コンピュータプログラムは、1つのコンピュータで、または、一箇所に位置するかもしくは複数の箇所にわたって分散されて通信ネットワークによって相互に接続されている複数のコンピュータ上で実行されるように配備されてもよい。
【0071】
本明細書に記載される処理および論理フローは、入力データ上で動作して出力を生成することによって機能を実行するように1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブルプロセッサによって実行され得る。また、処理および論理フローは、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)などの特殊用途論理回路によって実行されてもよく、装置も、当該特殊用途論理回路として実装されてもよい。
【0072】
コンピュータプログラムの実行に適したプロセッサは、一例として、汎用マイクロプロセッサおよび特殊用途マイクロプロセッサを両方とも含み、任意の種類のデジタルコンピュータの任意の1つ以上のプロセッサを含む。一般に、プロセッサは、読取専用メモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信することになる。コンピュータの必須の要素は、命令を実行するためのプロセッサ、ならびに命令およびデータを格納するための1つ以上のメモリデバイスである。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置、たとえば磁気ディスク、光磁気ディスクまたは光ディスクも含み、または、当該1つ以上の大容量記憶装置からデータを受信するもしくは当該1つ以上の大容量記憶装置にデータを転送するように、もしくは受信も転送もするように動作可能に結合されることになる。しかし、コンピュータはこのようなデバイスを有する必要はない。さらに、コンピュータは、別のデバイス、たとえば数例を挙げると、携帯電話、携帯情報端末(PDA)、携帯型オーディオプレーヤ、全地球測位システム(GPS)受信機に埋込まれてもよい。コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能媒体は、すべての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、一例として、たとえばEPROM、EEPROMおよびフラッシュメモリデバイスなどの半導体メモリデバイス、たとえば内蔵ハードディスクまたは取外し可能なディスクなどの磁気ディスク、光磁気ディスク、ならびにCD ROMおよびDVD−ROMディスクを含む。プロセッサおよびメモリは、特殊用途論理回路によって補完されてもよく、または特殊用途論理回路に組込まれてもよい。
【0073】
ユーザとの対話を提供するために、本開示の1つ以上の局面は、情報をユーザに表示するための表示装置、たとえばCRT(陰極線管)、LCD(液晶表示)モニタまたはタッチスクリーンと、任意にユーザが入力をコンピュータに提供することができるようにするキーボードおよびポインティングデバイス、たとえばマウスまたはトラックボールとを有するコンピュータ上で実装され得る。ユーザとの対話を提供するために他の種類のデバイスも使用してもよい。たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、たとえば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックであってもよく、ユーザからの入力は、音響入力、音声入力または触覚入力を含む任意の形態で受信されてもよい。また、コンピュータは、ユーザが使用するデバイスにドキュメントを送り、ユーザが使用するデバイスからドキュメントを受信することによって、たとえばウェブブラウザから受信された要求に応答してユーザのクライアントデバイス上のウェブブラウザにウェブページを送ることによって、ユーザと対話し得る。
【0074】
本開示の1つ以上の局面は、たとえばデータサーバとしてのバックエンドコンポーネントを含むコンピューティングシステムにおいて実装されてもよく、またはミドルウェアコンポーネント、たとえばアプリケーションサーバを含むコンピューティングシステムにおいて実装されてもよく、またはフロントエンドコンポーネント、たとえばユーザが本明細書に記載される主題の実装例と対話できるようにするグラフィカルユーザインターフェースまたはウェブブラウザを含むクライアントコンピュータを含むコンピューティングシステムにおいて実装されてもよく、または1つ以上のこのようなバックエンドコンポーネント、ミドルウェアコンポーネントまたはフロントエンドコンポーネントの任意の組み合わせを含むコンピューティングシステムにおいて実装されてもよい。システムの構成要素は、任意の形態または媒体のデジタルデータ通信、たとえば通信ネットワークによって相互に接続され得る。通信ネットワークの例として、ローカルエリアネットワーク(「LAN」)および広域ネットワーク(「WAN」)、インターネットワーク(たとえばインターネット)、ならびにピアツーピアネットワーク(たとえばアドホックピアツーピアネットワーク)が挙げられる。
【0075】
コンピューティングシステムは、クライアントおよびサーバを含み得る。クライアントとサーバは一般に互いに離れており、典型的には通信ネットワークを介して対話する。クライアントとサーバの関係は、それぞれのコンピュータ上で実行されて互いにクライアント−サーバ関係を有するコンピュータプログラムによって生じる。ある実装例では、サーバは、(たとえば、クライアントデバイスと対話するユーザにデータを表示して、クライアントデバイスと対話するユーザからユーザ入力を受信する目的で)データ(たとえばHTMLページ)をクライアントデバイスに送信する。(たとえばユーザ対話の結果として)クライアントデバイスで生成されたデータは、サーバにおいてクライアントデバイスから受信され得る。
【0076】
本明細書は多くの具体例を含んでいるが、これらは、本開示または請求され得るものの範囲を限定するものとして解釈されるべきではなく、むしろ本開示の特定の実装例に特有の特徴の説明であると解釈されるべきである。また、別々の実装例の文脈において本明細書に記載されている特定の特徴は、単一の実装例において組み合わせて実装されてもよい。逆に、単一の実装例の文脈において記載されているさまざまな特徴は、複数の実装例において別々に、または任意の好適な下位の組合せで実装されてもよい。さらに、特徴は特定の組み合わせで作用するものとして上記され、さらにはそのようなものとして最初は請求され得るが、請求されている組み合わせからの1つ以上の特徴は、場合によっては当該組み合わせから削除されてもよく、請求されている組み合わせは、下位の組合せまたは下位の組合せの変形例に向けられてもよい。
【0077】
同様に、動作は特定の順序で図示されているが、これは、このような動作が、望ましい結果を達成するために、示されている特定の順序もしくはシーケンシャルな順序で実行されなければならないと理解されるべきではなく、または、望ましい結果を達成するために、すべての示されている動作が実行されなければならないと理解されるべきではない。特定の状況では、マルチタスク処理および並列処理が有利な場合がある。さらに、上記の実施形態におけるさまざまなシステム構成要素の分離は、すべての実施形態においてこのような分離が必要であるものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは、一般に単一のソフトウェアプロダクトに一体化されてもよく、または複数のソフトウェアプロダクトにパッケージングされてもよいことが理解されるべきである。
【0078】
多数の実装例が記載されてきた。しかし、本開示の精神および範囲から逸脱することなくさまざまな修正がなされ得ることが理解されるであろう。したがって、他の実装例は、以下の請求項の範囲内にある。たとえば、請求項に記載されている動作は、異なる順序で実行されて、依然として望ましい結果を達成することができる。
図1
図2
図3
図4A
図4B
図5
図6
図7