(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-07-28
(45)【発行日】2023-08-07
(54)【発明の名称】分散システムにおける非同期ストレージ管理
(51)【国際特許分類】
G06F 3/06 20060101AFI20230731BHJP
G06F 13/10 20060101ALI20230731BHJP
【FI】
G06F3/06 302Z
G06F3/06 302B
G06F13/10 340A
G06F13/10 310B
(21)【出願番号】P 2021549453
(86)(22)【出願日】2019-03-04
(86)【国際出願番号】 US2019020500
(87)【国際公開番号】W WO2020180290
(87)【国際公開日】2020-09-10
【審査請求日】2021-08-20
(73)【特許権者】
【識別番号】520155228
【氏名又は名称】ヒタチ ヴァンタラ エルエルシー
(74)【代理人】
【識別番号】110000279
【氏名又は名称】弁理士法人ウィルフォート国際特許事務所
(72)【発明者】
【氏名】グリマルディ,ケビン カヌエッテ
(72)【発明者】
【氏名】クルマ, マーティー
(72)【発明者】
【氏名】トッド, アンドリュー
(72)【発明者】
【氏名】ウォラー, ワルター
【審査官】吉田 歩
(56)【参考文献】
【文献】特開2011-210106(JP,A)
【文献】特開2015-060486(JP,A)
【文献】特開2005-050298(JP,A)
【文献】国際公開第2017/158799(WO,A1)
【文献】米国特許第05970488(US,A)
【文献】特開2000-163222(JP,A)
【文献】特開2018-022397(JP,A)
【文献】梶原 顕伍 他,Raftに基づく分散データベースの性能解析,情報処理学会 研究報告 システムソフトウェアとオペレーティング・システム(OS),第2017-OS-140巻,第15号,情報処理学会 ,2017年05月09日,1-9,ISSN 2188-8795
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06
G06F 13/10
(57)【特許請求の範囲】
【請求項1】
システムであって、
実行可能命令により動作を実行するように構成された1つ又は複数のプロセッサを含み、
前記動作は、
ユーザ装置から、ストレージにおけるデータの格納に関係する格納動作についてのユーザ要求を受信すること;
前記格納動作の実行を示す応答を前記ユーザ装置へ送信することに先立って、前記格納動作を維持するために更新を更新キューへ追加することであって、前記更新を前記更新キューへ追加することは、前記更新を前記更新キューへ追加させる要求を送信することを含み、前記要求は、前記格納動作により達成される前記格納動作のタイプ又は状態の少なくとも1つを指定する、追加すること;
前記更新を少なくとも1つの他のプロセッサにより管理される少なくとも1つの他の更新キューへ追加するために、前記更新キューに対する前記更新に関する情報を少なくとも1つの前記他のプロセッサへ送信すること;及び
その後に、前記更新キューから前記更新を取得し、前記格納動作を実行するために前記更新を処理することと、を含み、
前記動作は、
前記更新と前記更新キュー内に既に存在する既存更新とを結合することにより前記更新を折り畳むことをさらに含み、
前記結合することは、前記格納動作により達成される前記状態と前記既存更新の格納動作により達成される状態とを結合することを含
み、
前記更新と前記既存更新とを結合することは、同じ指定優先度の格納動作を含む前記更新及び前記既存更新の少なくとも一部に基づいている
システム。
【請求項2】
請求項1に記載のシステムにおいて、
前記動作は、前記更新キューへ前記更新を追加する時に:
前記更新へ割り当てられた優先度と、前記更新キュー内に既に存在する1又は複数の更新へ割り当てられた優先度とを比較すること;及び
前記更新を、前記更新キュー内において低い優先度を有する既存更新の前方に置くことをさらに含む、
システム。
【請求項3】
請求項1に記載のシステムにおいて、
その後に、前記更新キューから前記更新を取得し、前記格納動作を実行するために前記更新を処理することは:
前記更新を処理するために少なくとも1つのワーカ処理をインスタンス化すること;
前記更新キューから前記更新を選択すること;
前記少なくとも1つのワーカ処理を実行する前記1又は複数のプロセッサのうちの1つのプロセッサに対応するプロセッサ識別子により前記更新キュー内の前記更新をマーキングすること;及び
前記格納動作を実行するために前記ワーカ処理のうちの1つを実行することと、を含む、
システム。
【請求項4】
請求項
3に記載のシステムにおいて、
前記更新キュー内の前記更新をマーキングする前記プロセッサ識別子は、前記更新キュー内の前記更新が処理されていることを示す、
システム。
【請求項5】
請求項
3に記載のシステムにおいて、
前記動作は、前記ワーカ処理による前記更新の処理の完了に続いて、前記更新キューから前記更新をデキューするための要求を送信することをさらに含む、
システム。
【請求項6】
請求項
3に記載のシステムにおいて、
前記動作は、前記更新の前記処理を完了することの失敗に続いて、前記更新の部分的処理に基づいて、更新された状態を有する新しい更新として前記更新をリキューするための要求を、前記ワーカ処理により送信することを更に含む、
システム。
【請求項7】
請求項
3に記載のシステムにおいて、
前記更新キューから前記更新を取得することに先立って、前記プロセッサ識別子と前記更新キュー内の前記既存更新において示されているプロセッサ識別子とを整合することに少なくとも部分的に基づいて、処理され、且つ完了していない既存更新を決定するための要求を送信することをさらに含む、
システム。
【請求項8】
請求項1に記載のシステムにおいて、
その後に、前記更新キューから前記更新を取得することは、取り出された更新の最大優先度又は取り出された更新の最大数のうちの少なくとも1つを指定することを含む、
システム。
【請求項9】
請求項1に記載のシステムにおいて、
前記少なくとも1つの他の更新キューへ追加するために、前記更新に関する情報を前記少なくとも1つの他のプロセッサへ送信することは、ラフト合意アルゴリズムに従う前記情報を送信することを含む、
システム。
【請求項10】
方法であって、
1つ又は複数のプロセッサにより、ユーザ装置からストレージにおけるデータの格納に関係する格納動作のユーザ要求を受信すること;
前記1つ又は複数のプロセッサにより、前記格納動作の実行を示す応答を前記ユーザ装置へ送信することに先立って、前記格納動作を維持するために更新を更新キューへ追加することであって、前記更新を前記更新キューへ追加することは、前記更新を前記更新キューへ追加させる要求を送信することを含み、前記要求は、前記格納動作により達成される前記格納動作のタイプ又は状態の少なくとも1つを指定する、追加すること;
前記1つ又は複数のプロセッサにより、前記更新を少なくとも1つの他のプロセッサにより管理される少なくとも1つの他の更新キューへ追加するために、前記更新キューに対する前記更新に関する情報を前記少なくとも1つの他のプロセッサへ送信すること;及び
前記1つ又は複数のプロセッサにより、その後に、前記更新キューから前記更新を取得し、前記格納動作を行うために前記更新を処理することを含み、
前記更新と前記更新キュー内に既に存在する既存更新とを結合することにより前記更新を折り畳むことをさらに含み、前記結合することは、前記格納動作により達成される前記状態と前記既存更新の格納動作により達成される状態とを結合することをさらに含
み、
前記更新と前記既存更新とを結合することは、同じ指定優先度の格納動作を含む前記更新及び前記既存更新の少なくとも一部に基づいている
方法。
【請求項11】
1つ又は複数のプロセッサにより実行されると、前記1つ又は複数のプロセッサを動作を実行するように構成する命令を格納する1又は複数の非一時的コンピュータ可読媒体であって、
前記動作は、
ユーザ装置から、ストレージにおけるデータの格納に関係する格納動作のユーザ要求を受信すること;
前記格納動作の実行を示す応答を前記ユーザ装置へ送信することに先立って、前記格納動作を維持するために更新を更新キューへ追加することであって、前記更新を前記更新キューへ追加することは、前記更新を前記更新キューへ追加させる要求を送信することを含み、前記要求は、前記格納動作により達成される前記格納動作のタイプ又は状態の少なくとも1つを指定する、追加すること;
前記更新を少なくとも1つの他のプロセッサにより管理される少なくとも1つの他の更新キューへ追加するために、前記更新キューに対する前記更新に関する情報を前記少なくとも1つの前記他のプロセッサへ送信すること;
その後、前記更新キューから前記更新をその後取得し、前記格納動作を行うために前記更新を処理することを含み、
前記動作は、前記更新と前記更新キュー内に既に存在する既存更新とを結合することにより前記更新を折り畳むことをさらに含み、
前記結合することは、前記格納動作により達成される前記状態と前記既存更新の格納動作により達成される状態とを結合することを含
み、
前記更新と前記既存更新とを結合することは、同じ指定優先度の格納動作を含む前記更新及び前記既存更新の少なくとも一部に基づいている
非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示はデータストレージの技術分野に関する。
【背景技術】
【0002】
データオブジェクトは、データをオブジェクトとして管理するオブジェクトストレージアーキテクチャで格納されてもよい。格納されたデータの管理のための多くの動作は、コンピュータ的に高価であり得、そして直列に行われると、いくつかのアプリケーションに望ましい応答時間より長い応答時間をもたらし得る。特定のストレージ管理動作を非同期的に行うための従来の解決策は、各動作の正確さを保証するためにそれらの能力において制限され得る。例えば、従来の解決策はいくつかの動作が必要とし得る保証の十分な原子性を有していないことがある。加えて、一定期間後のオブジェクトの保持の期限切れなどのいくつかの動作は、本来非同期であり得る。したがって、複雑なデータ管理システムの高性能を可能にするために、効率的且つ信頼できる保護機構が望ましい。
【発明の概要】
【課題を解決するための手段】
【0003】
本明細書におけるいくつかの実施形態は永続更新キューを含む。例えば、システムは、ストレージでのデータの格納に関係する格納動作についてのユーザ要求を、ユーザ装置から受信してもよい。格納動作の実行を示す応答をユーザ装置へ送信することに先立って、更新は、格納動作を維持するために更新キューへ追加されてもよい。例えば、更新を更新キューへ追加することは、格納動作のタイプを規定すること及び/又は格納動作により達成される状態に少なくとも基づき、更新を更新キューへ追加されるようにするための要求を送信することを含んでもよい。加えて、更新に関する情報は、他のプロセッサにより管理される別の更新キューへ更新を追加するために別のプロセッサへ送信され得る。その後、更新は更新キューから入手され、そして格納動作を行うために処理されてもよい。
【0004】
詳細説明は添付図面を参照して記載される。図面では、参照番号の最も左の桁は参照番号が最初に出現する図を識別する。異なる図内の同じ参照番号の使用は同様又は同一なアイテム又は特徴を示す。
【図面の簡単な説明】
【0005】
【
図1】
図1は、いくつかの実施形態に係るデータを格納することができるシステムのアーキテクチャ例を示す。
【0006】
【
図2】
図2は、いくつかの実施形態に係る複数のサービス計算装置の構成例を示すブロック図である。
【0007】
【
図3】
図3は、いくつかの実施形態係るエンキュー及び折り畳み更新動作の実行例を示すブロック図である。
【0008】
【
図4】
図4は、いくつかの実施形態に係る高優先度動作によるエンキューの実行例を示すブロック図である。
【0009】
【
図5】
図5は、いくつかの実施形態に係るワーク取得動作の実行例を示すブロック図である。
【0010】
【
図6】
図6は、いくつかの実施形態に係るワーク取得動作の実行例を示すブロック図である。
【0011】
【
図7】
図7は、いくつかの実施形態に係るデキュー動作の実行例を示すブロック図である。
【0012】
【
図8】
図8は、いくつかの実施形態に係るリキュー動作の実行例を示すブロック図である。
【0013】
【
図9】
図9は、いくつかの実施形態に係る進行中リスト動作の実行例を示すブロック図である。
【0014】
【
図10】
図10は、いくつかの実施形態に係る非同期管理プログラムの動作例を示すブロック図である。
【0015】
【
図11】
図11は、いくつかの実施形態に係る非同期管理プログラムの動作例を示すブロック図である。
【0016】
【
図12】
図12は、いくつかの実施形態に係る非同期管理プログラムの動作例を示すブロック図である。
【0017】
【
図13】
図13は、いくつかの実施形態に係る非同期管理プログラムの動作例を示すブロック図である。
【0018】
【
図14】
図14は、いくつかの実施形態に係る非同期管理プログラムの動作例を示すブロック図である。
【0019】
【
図15】
図15は、いくつかの実施形態に係る非同期管理プログラムの動作例を示すブロック図である。
【0020】
【
図16】
図16は、いくつかの実施形態に係る非同期管理プログラムの動作例を示すブロック図である。
【0021】
【
図17】
図17は、いくつかの実施形態に係る非同期管理プログラムの動作例を示すブロック図である。
【0022】
【
図18】
図18は、いくつかの実施形態に係る非同期管理プログラムの動作例を示すブロック図である。
【0023】
【
図19】
図19は、いくつかの実施形態による更新を管理するための永続更新キューを採用する処理を示す流れ図である。
【発明を実施するための形態】
【0024】
本明細書におけるいくつかの実施形態は、ユーザ要求及び他のストレージ更新を維持する高可用性永続更新キュー(Durable update Queue:DUQ)を含む分散コンピュータシステムのための技術及び配置へ向けられる。例えば、非同期管理プログラムは、ストレージ管理動作が正しい順番で且つ指示されたとおりに実行され且つ完了されることを保証するためにDUQを管理するバックグラウンドサービスとして実行されてもよい。いくつかのケースでは、DUQに対する更新は、ユーザ要求の実行又は他のストレージイベントと同じトランザクションにおいて実行されてもよく、DUQを高効率且つ一貫したものにする。DUQの冗長性はラフト合意アルゴリズム又は他の好適な合意アルゴリズムを介してされてもよい。さらに、一例として、DUQはログ構造化マージツリー(LSMツリー)データ構造を使用して格納されてもよい。
【0025】
いくつかの例では、効率化と安全性との両方を支援するために、本明細書における高可用性DUQは、非同期で処理される更新を格納するための冗長性により維持されてもよい。DUQの少なくとも3つの複製が存在してもよいので、コンピュータシステムは、DUQが格納されるストレージ装置の故障に耐えることができる。DUQは、任意の汎用の更新に関する情報を保持してもよく、任意のタイプの一般的方針又は動作のために採用されてもよい。DUQに対する更新は他の状態変更と同じトランザクション内で行われてもよい。これは、ユーザへ応答を返す前に更新がDUQに維持されることを保証する。加えて、更新は依然として、ユーザに対する応答に続きコンピュータシステム内のさらなる処理を必要としてもよい。
【0026】
いくつかのケースでは、指標を変更するトランザクションもまた、別の指標に対し行わせる更新を引き起こしててもよい。したがって、他の指標に対する更新もDUQへ追加されてもよい。一例として、DUQへ以前に追加された他の指標の更新が既に存在し、そしてこの更新が未だ処理されていなければ、DUQは、複数の更新を単一更新へ折り畳んでもよい。これらの複数の更新は、状態を含んでいる場合には、状態同士が一貫するように、2つの更新をマージする方法か個々に制御してもよい。その結果、本明細書における実施形態は、後の処理のために任意の更新を格納するための柔軟なシステムを含む。一貫性は、更新が失われる機会又は逆に更新がDUQ内に記録される間に変更が失われる機会を低減又は削除するために、システムに対する変更の残りと同じトランザクションにおいてDUQへ更新を追加することにより維持されてもよい。
【0027】
いくつかの例では、非同期管理プログラムは、処理される更新のためのDUQを定期的にポーリングしてもよい。非同期管理プログラムは、処理されるDUQにおける更新を「進行中」としてマーキングすることによりこれらの更新を処理してもよく、そして、ワーカが次に処理するために、インメモリキューへ更新を内部的に追加してもよい。このワーカは、二次指標を更新すること、システムへメッセージを送信することなどの更新に関連するどんな変更も行ってもよい。更新が処理された後、DUQのサイズが絶えず成長しないように、DUQから更新がデキューされてもよい。
【0028】
一例として、コンピュータシステムの一部分が、第1のユーザを含む環境内に配備され、且つ、第1のユーザが、システム内に数か月間保持される一組の映像を取り込むためにユーザアプリケーションを使用していると仮定する。さらに、その後、特定の基準に基づいて選択されたそれらの映像の部分が、それらへ適用される特定メタデータタグを有する必要があり、そして次にアーカイブのためにリモートサイトへ移動される必要があると仮定する。したがって、この例は特定のやり方に適用される一連の動作を説明する。さらに、この例における一連の動作はかなり複雑であるが、はるかに複雑な一連の動作が、本明細書におけるシステムの現実世界での実施形態においてしばしば適用されてもよい。
【0029】
上述の例では、上記一連の動作を完了するために、データの全ライフサイクルを通じてシステムにより実行される高価な性質の複数の格納関連動作が存在する。一連の動作例を達成するために、映像群の各映像の取り込み時に映像群の保持を設定するための更新がDUQ内へ挿入されてもよい。同様に、上記基準に基づいて指標付けジョブを開始するための更新もまたDUQ内へ挿入されてもよい。次に、指標付けの結果は、メタデータタグに関連付けられる一組のオブジェクトを問い合わせるために使用されてもよい。メタデータタグの貼り付けの時点でタグ付きオブジェクトをアーカイブのためにリモートサイトへ移動するための動作を設定するために、別の更新がDUQ内へ挿入されてもよい。
【0030】
本明細書におけるDUQの利点例は、DUQ内へ挿入される一連の更新が、以前に適用された動作の結果に基づきトリガされてもよいことである。別の例として、データを移動するための更新がDUQへ追加された後、DUQの1つの複製が存在するシステム内のノードは機能停止する又はそうでなければ利用不能になると仮定する。DUQはシステム内の複数のノード上で冗長的に維持されてもよいので、上記例の処理は依然として、システム内の別のノード上に維持されたDUQの冗長な複製を使用することにより指示されたように実行されてもよい。
【0031】
したがって、本明細書における実施形態は、持続的DUQの使用により分散計算システム内の非同期更新を可能にする。本明細書においてDUQへ追加される更新は、正確さを保証するために状態変更の残りの部分とはアトミックである。本明細書における技術は、更新が、ユーザ要求と同期的に行われた対応する変更と共存するかどうかの問題をなくす。更新は同期的変更の前にキューされなくてもよいので、恒久的に持続するDUQ内の更新のいかなるリスクも無い。これは、DUQは、対応状態が同期的に追加されること無しには実行されないためである。加えて、更新は同期更新後にキューされてしまうことがないので、必要とされる更新の無い同期変更のいかなるリスクも無い。更新はDUQから取り出されると直ちに安全に消費されてもよく、そして、対応状態変更が適用されてしまえば、更新がDUQ内に無いいかなるリスクも無い。
【0032】
論述目的のために、いくつかの例示的実施形態は、オブジェクト及び/又は他のデータ並びに関連メタデータの格納を管理するためのクラウドストレージシステムと通信する複数のサービス計算装置の環境において説明される。しかし、本明細書の開示に照らし当業者に明らかになるように、本明細書における実施形態は、提供される特定例へ制限されることはなく、そして他のタイプの計算システムアーキテクチャ、他のタイプのストレージ環境、他のタイプのユーザ構成、他のタイプのデータ等に拡張されてもよい。
【0033】
図1はいくつかの実施形態に係るデータを格納することができるシステム100のアーキテクチャ例を示す。システム100は、例えば1つ又は複数のネットワーク106を介して少なくとも1つのストレージシステム104と通信することができる又はそうでなければそれと接続される複数のサービス計算装置102(1)~102(N)を含む。さらに、サービス計算装置102は、以下に追加的に論述されるように様々なタイプの計算装置のいずれかであってもよいユーザ装置108(1)、108(2)、...などの1つ又は複数のユーザ計算装置108とネットワーク106上で通信することができる。
【0034】
いくつかの例では、サービス計算装置102は、任意数のやり方で具現化されてもよい1又は複数のサーバを含んでもよい。例えば、サービス計算装置102のプログラム、他の機能要素、及びデータストレージの少なくとも一部は、例えばサーバのクラスタ、サーバファーム、データセンター、クラウドホスト型コンピュータサービス等内の少なくとも1つのサーバ上に実装されてもよいが、他のコンピュータアーキテクチャが追加的に又は代替的に使用されてもよい。図示の例では、サービス計算装置102は、1又は複数のプロセッサ110、1又は複数のコンピュータ可読媒体112、及び1又は複数の通信インターフェース114を含む、又はそれらと関連付けられてもよい。
【0035】
各プロセッサ110は、単一処理ユニット又は多数の処理ユニットであってもよく、単一又は複数の計算ユニット若しくは処理コアを含んでもよい。プロセッサ110は、1つ又は複数の中央処理ユニット、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、ステートマシン、論理回路系、及び/又は動作命令に基づいて信号を操作する任意の装置として実装されてもよい。一例として、プロセッサ110は、本明細書において説明されるアルゴリズム及び処理を実行するように特別にプログラムされた又は構成された任意の好適なタイプの1つ又は複数のハードウェアプロセッサ及び/又は論理回路を含んでもよい。プロセッサ110は、本明細書において説明される機能をプロセッサ110が実行するようにプログラムすることができるコンピュータ可読媒体112内に格納されるコンピュータ可読命令をフェッチ及び実行するように構成されてもよい。
【0036】
コンピュータ可読媒体112は、コンピュータ可読命令、データ構造、プログラムモジュール又は他のデータなどの情報の格納のための任意のタイプの技術で実現される揮発性及び非揮発性メモリ並びに/又は着脱可能及び着脱不能媒体を含んでもよい。例えば、コンピュータ可読媒体112は、限定しないがRAM、ROM、EEPROM、フラッシュメモリ又は他のメモリ技術、光学ストレージ、ソリッドステートストレージ、磁気テープ、磁気ディスクストレージ、RAIDストレージシステム、ストレージアレイ、ネットワーク接続ストレージ、ストレージエリアネットワーク、クラウドストレージ、又は所望情報を格納するために使用でき、計算装置によりアクセスできる任意の他の媒体を含んでもよい。サービス計算装置102の構成に依存して、コンピュータ可読媒体112は、非一時的コンピュータ可読媒体がエネルギー、搬送波信号、電磁波、及び/又は信号それ自体などの媒体を排除すると述べる限りにおいて有形な非一時的媒体であってよい。いくつかのケースでは、コンピュータ可読媒体112は、サービス計算装置102と同じ位置に在ってもよく、一方、他の例では、コンピュータ可読媒体112はサービス計算装置102から部分的に離れていてもよい。例えば、いくつかのケースでは、コンピュータ可読媒体112はストレージシステム104内のストレージの一部を含んでもよい。
【0037】
コンピュータ可読媒体112はプロセッサ110により実行可能である任意数の機能構成部を格納するために使用されてもよい。多くの実施形態では、これらの機能構成部は、プロセッサ110により実行可能である命令又はプログラムであって、実行されると本明細書でサービス計算装置102に帰する動作を行うようにプロセッサ110を特にプログラムする命令又はプログラムを含む。コンピュータ可読媒体112内に格納される機能構成部は、それぞれが1つ又は複数のコンピュータプログラム、アプリケーション、実行可能コード又はその一部を含んでもよいサーバプログラム116及びストレージプログラム118を含んでもよい。例えば、サーバプログラム116はユーザ装置108及びストレージシステム104と通信する機能を提供してもよい。
【0038】
ストレージプログラム118は、非同期管理プログラム120を含んでもよく、そして、サービス計算装置102(1)~102(N)により格納され管理されるデータに関係するメタデータを含むメタデータデータ構造(DS:data structure)122(1)~122(N)を生成し管理するためのデータベース管理機能をさらに含んでもよい。例えば、ストレージプログラム118は、ストレージプログラム118にファイルシステム、オブジェクト情報、データ管理情報、及びメタデータデータ構造122(1)~122(N)の一部としての他の情報を維持させるように構成された実行可能命令を含んでもよい。ストレージプログラム118はさらに、ユーザ情報126などのメタデータデータ構造122(1)~122(N)に含まれる他のタイプの情報を管理するための管理機能を実行してもよい。
【0039】
非同期管理プログラム120は永続更新キュー(DUQ)124を管理及び維持してもよい。例えば、DUQ124は、以下に追加的に論述されるように、サービス計算装置102により格納されたデータに対する更新を管理するために使用されてもよい。コンピュータ可読媒体112に格納された追加機能構成部は、サービス計算装置102の様々な機能を制御及び管理するためのオペレーティングシステム(
図1に示さず)を含んでもよい。いくつかのケースでは、機能構成部は、コンピュータ可読媒体112のストレージ部内に格納され、コンピュータ可読媒体112のローカルメモリ部内へロードされ、1つ又は複数のプロセッサ110により実行されてもよい。
【0040】
加えて、コンピュータ可読媒体112は、本明細書において説明される機能及びサービスを実行するために使用されるデータ、データ構造及び他の情報を格納してもよい。例えば、コンピュータ可読媒体112はメタデータデータ構造122(1)~122(N)及びDUQ124を格納してもよい。加えて、コンピュータ可読媒体112は、以下に追加的に論述されるように、本明細書において説明される機能のうちのいくつかを実行する際にストレージプログラム118により使用されるアプリケーションプログラムインターフェース(API:application programming interface)情報126及び/又は非同期管理プログラム120を格納してもよい。さらに、コンピュータ可読媒体112は、例えば、ユーザ装置108などとの相互作用に基づく、各サービス計算装置102(1)~102(N)により格納されるデータであってもよいローカルデータ128(1)~128(N)を格納してもよい。
【0041】
サービス計算装置102はまた、他の機能構成部及びデータを含み維持してもよく、機能構成部及びデータは、プログラム、ドライバなど、機能構成部により使用され、又は生成されるデータを含む。さらに、サービス計算装置102は多くの他の論理構成部、プログラム構成部、及び物理構成部を含んでもよく、上述のものは本明細書における論述に関連する単なる一例である。
【0042】
1つ又は複数の通信インターフェース(I/F)114は、1つ又は複数のネットワーク106上などの様々な他の装置との通信を可能にするための1つ又は複数のソフトウェア及びハードウェア構成部を含んでもよい。したがって、通信インターフェース114は、ストレージシステム104、他のサービス計算装置102、及びユーザ装置108と通信するためのネットワーク106への接続を提供する1つ又は複数のポートを含んでもよいし又はそれと接続してもよい。例えば、通信インターフェース114は、本明細書の他のどこかで追加的に列挙されるようなLAN、インターネット、ケーブルネットワーク、セルラーネットワーク、無線ネットワーク(例えばWi-Fi)及び有線ネットワーク(例えばファイバーチャネル、光ファイバ、イーサーネット(登録商標))、直接接続、並びにBLUETOOTH(登録商標)などの近距離通信等のうちの1つ又は複数を介した通信を可能にしてもよい。
【0043】
1つ又は複数のネットワーク106は、インターネットなどの広域ネットワーク;イントラネットなどのローカルエリアネットワーク(LAN);セルラーネットワーク、Wi-Fiなどのローカル無線ネットワーク、及び/又はブルートゥース(登録商標)などの短距離無線通信などの無線ネットワーク;ファイバーチャネル、光ファイバ、イーサーネット、又は任意の他のこのようなネットワークを含む優先ネットワーク、直接有線接続、又はそれらの任意の組み合わせ含む任意の好適なネットワークを含んでもよい。したがって、1つ又は複数のネットワーク106は有線及び/又は無線通信技術の両方を含んでもよい。このような通信に使用される構成部はネットワークのタイプ、選択される環境、又はその両方に少なくとも部分的に依存し得る。このようなネットワーク上で通信するためのプロトコルは周知であり、したがって本明細書では詳細には論述されない。したがって、サービス計算装置102、ネットワークストレージシステム104、及びユーザ装置108は、有線又は無線接続部及びそれらの組み合わせを使用して1又は複数のネットワーク106上で通信することができる。
【0044】
各ユーザ装置108は、デスクトップ、ラップトップ、タブレット計算装置、モバイル装置、スマートフォン、ウェアラブル装置、及び/又はネットワーク上でデータを送信することができる任意の他のタイプの計算装置などの任意の好適なタイプの計算装置であってよい。ユーザ130(1)、130(2)、...は、例えばそれぞれのユーザアカウント、ユーザログイン信用証明書などを介して、ユーザ装置108(1)、108(2)、...にそれぞれ関連付けられてもよい。さらに、ユーザ装置108は、1又は複数のネットワーク106を介し、別のネットワークを介し、又は任意の他の好適なタイプの通信接続を介してサービス計算装置102と通信することができてもよい。非常に多くの他の変形形態が本明細書の開示の利益を有する当業者に明らかになるであろう。
【0045】
さらに、各ユーザ装置108(1)、108(2)、...、は、例えばネットワークストレージシステム104上の格納のためにユーザデータを送信するため、及び/又はネットワークストレージシステム104から格納データを受信するためのサーバプログラム116と通信するためのそれぞれのユーザ装置108(1)、108(2)、...上で実行してもよいユーザアプリケーション136(1)、136(2)、...、のそれぞれのインスタンスを含んでもよい。いくつかのケースでは、アプリケーション136はブラウザを含んでもよいし又はブラウザを介し動作してもよいが、他のケースでは、アプリケーション136は、1つ又は複数のネットワーク106上でのサーバプログラム116との通信を可能にする通信機能を有する任意の他のタイプのアプリケーションを含んでもよい。
【0046】
ストレージシステム104は、1又は複数のストレージ計算装置140を含んでもよく、ストレージ計算装置は、サービス計算装置102に関し上に論述された例のうちの任意のものなどの1又は複数のサーバ又は任意の他の好適な計算装置を含んでもよい。ストレージコンピュータ装置140はそれぞれ、1又は複数のプロセッサ142、1又は複数のコンピュータ可読媒体144、及び1又は複数の通信インターフェース146を含んでもよい。例えば、プロセッサ142はプロセッサ110に関して上に論述された例のうちの任意のものに対応してもよく、コンピュータ可読媒体144は、コンピュータ可読媒体112に関して上に論述された例のうちの任意のものに対応してもよく、通信インターフェース146は通信インターフェース114に関して上に論述された例のうちの任意のものに対応してもよい。
【0047】
加えて、コンピュータ可読媒体144は、ストレージシステム104内に含まれるストレージ150上のデータの格納を管理するための1又は複数のプロセッサ142により実行される機能構成部としてストレージプログラム148を含んでもよい。ストレージ150は、ストレージ装置156などの1又は複数のアレイ154上にデータを格納するためのストレージ150に関連する1又は複数のコントローラ152を含んでもよい。例えば、コントローラ152は、例えばアレイ154をRAID構成、JBOD構成などで構成するために、及び/又はストレージ装置156に基づく論理ユニットをストレージプログラム148へ提示するために、そして下位にある物理的ストレージ装置156上に格納されるクラウドデータ158のようなデータオブジェクト又は他のデータなどのデータを管理するためにアレイ154を制御してもよい。ストレージ装置156は、ハードディスクドライブ、ソリッドステートドライイブ、光ドライブ、磁気テープ、及びそれらの組み合わせ等々などの任意のタイプのストレージ装置であってもよい。いくつかの例では、ネットワークストレージシステム104は当該技術分野で知られているような商業的なクラウドストレージを含んでもよく、一方、他の例では、ネットワークストレージシステム104はサービス計算装置102に関連するエンティティだけによりアクセス可能な私的又は企業ストレージシステムを含んでもよい。
【0048】
システム100では、ユーザ130は、それぞれのユーザ装置108が通信状態に在るサービス計算装置102へデータを格納し、それからデータを受信してもよい。したがって、サービス計算装置102はユーザ130及びそれぞれのユーザ装置108のためのローカルストレージを提供してもよい。定常状態動作中、サービス計算装置102と定期的に通信するユーザ108が存在してもよい。加えて、サービス計算装置は、万一サービス計算装置102が故障した場合にメタデータデータ構造122の回復を可能にするために、メタデータデータ構造122をメタデータデータ構造バックアップ168としてネットワークストレージシステム104へ定期的にバックアップしてもよい。
【0049】
いくつかのケースでは、サービス計算装置102は1又は複数のグループ、クラスタ、システム等へ配置されてもよい。例えば、いくつかの例では(
図1に示さず)、サービス計算装置102は、第1のサービス計算装置102と第2のサービス計算装置102とが、格納及びデータ管理サービスを複数のユーザ装置108へ提供するための計算ノードを併せて形成するように、第1のサービス計算装置102が第2のサービス計算装置102へ接続されるようにペアとして配置されてもよい。例えば、少なくともメタデータデータ構造122を維持することに関し、第1のサービス計算装置102(1)が主計算装置として働いてもよく、一方で第2のサービス計算装置102(2)は副計算装置として働いてもよい。追加的に又はその代わりに、いくつかの例では、サービス計算装置102は、複製及び災害復旧を可能にするために地理的に分離され且つ離れた位置において複数のクラスタで配置されてもよい。無数の他の構成は本明細書の開示の利益を受ける当業者に明らかになる。
【0050】
上述のように、いくつかのケースでは、複数のサービス計算装置102は、複数の位置におけるDUQ124の管理のための及びDUQ124の冗長性を提供するためのラフト構成で構成されてもよい。例えば、持続的DUQ124は、分散計算システム100内で非同期更新が実行されることを可能にする。DUQ124へ追加される更新は、正確さを保証するために状態変更の残りの部分とはアトミックであってもよい。DUQ124の使用は、更新が、ユーザ要求と同期して行われた対応変更と共存することを保証する。さらに、同期的変更の前に更新はキューされないので、恒久的に持続するDUQ内の更新のリスクも無い。これは、DUQは対応状態が同期的に追加されること無しには実行され得ないためである。加えて、同期的更新後に更新はキューされないので、予測される更新の無い同期変更のいかなるリスクも無い。更新はDUQ124から取り出されると直ちに安全に消費されてもよく、そして、対応状態変更が適用されていれば、更新がDUQ内に無いといういかなるリスクも無い。DUQ124の追加の特徴及び応用について以下に論述する。
【0051】
図2はいくつかの実施形態に係る複数のサービス計算装置102の構成例200を示すブロック図である。サービス計算装置102(1)~102(3)はいくつかの例ではDUQ124を管理するためのラフト合意アルゴリズムを実行するように構成されてもよい。例えば、計算システムは、主ストレージとしてクラウドストレージ又は他のネットワークストレージを使用する分散オブジェクトストアとして配置され、いくつかの例では、計算システムは、オブジェクトを、ユーザにより生成されるバケット(
図2に示さず)内にオブジェクトを格納してもよい。
【0052】
図2の例では、DUQ124は、メタデータゲートウェイ202と呼ばれる非同期管理プログラム120により生成される処理の内部の他の状態と共に常在してもよい。したがって、各サービス計算装置102(1)~102(3)は、それぞれが、DUQ124及び他状態206(1)~206(3)を含む持続的状態204(1)~204(3)を有するそれぞれのメタデータゲートウェイ202(1)~202(3)を含んでもよい。メタデータゲートウェイ202は、それぞれのサービス計算装置102(1)~102(3)により行われるメタデータ関連動作を管理する。メタデータゲートウェイ202は、例えばサービス計算装置102がバケットを生成することなど特定のより高いレベル動作を実行するための呼び出しを行うことを可能にするAPI情報126から、1又は複数のAPIを提供する、またはそれらにアクセスしてもよい。いくつかのケースでは、これらの動作を実行することは2つ以上の指標(
図2に示さず)と相互作用することを必要とする。一例として、バケット生成動作は3つの指標と相互作用することを含んでもよい。したがって、副指標を更新することは、すべての更新が一貫した副指標を提供するために正しく実行されるということを保証するためのDUQ124の使用を含んでもよい。加えて、DUQ124は、分散システム内の様々な維持タスクを実行すること、いくつかの基準を満たすオブジェクトを自動的に削除すること、並びに、いくつかの動作、条件などに対し実行され得る方針をユーザが定義することを許容することなどのユーザ定義動作を管理すること等の予定された対策を実行するために使用されてもよい。
【0053】
上述のように、いくつかのケースでは、サービス計算装置102(1)~102(3)は、DUQ124の冗長性を提供するためにラフトグループとして動作するように構成されてもよい。例えば、非同期管理プログラム120は、複数のサービス計算装置102にわたるDUQ124及び他状態206を含む持続的状態204の一貫性を維持するためにラフトアルゴリズムを採用してもよい。ラフトアルゴリズムは、各サービス計算装置102(1)~102(3)が同じ一連の状態遷移に同意することを保証する。したがって、ラフト合意208は、DUQ124が、付随状態(例えば他状態206)と共に、そして典型的には、他状態206と独立しないでラフト合意プロトコルを使用して複製されてもよいので、DUQ124だけでなく持続的状態204全体へ適用してもよい。ラフトグループは選択されたリーダを介して合意を達成する、例えば、ラフトグループ内のサービス計算装置102はリーダ又はフォロアのいずれかであってよい。リーダはフォロアに対するDUQ124複製の責任があってもよい。リーダは、ハートビートメッセージを送信することによりその存在をフォロアに定期的に通知してもよい。
【0054】
この例では、指示された方針に従ってオブジェクトを格納するためのユーザ要求210は、例えば
図1に関して上述されたユーザ装置108から受信されると仮定する。さらに、第1サービス計算装置102(1)がラフトグループリーダであり、サービス計算装置102(2)、102(3)が第1サービス計算装置102(1)のラフトグループフォロアであると仮定する。したがって、ユーザ要求210は、ストレージプログラムにオブジェクトを格納させ、少なくとも1つの更新を第1サービス計算装置102(1)における単一トランザクションとしてDUQ124へ書き込ませる。加えて、ラフトリーダ、サービス計算装置102(1)は、DUQ124に対する少なくとも1つの更新をラフトフォロア、サービス計算装置102(2)、102(3)へ伝えてもよい。したがって、208に示すように、ラフト合意アルゴリズムを介し、ラフトリーダは少なくとも1つのDUQ更新214を第2サービス計算装置102(2)及び第3サービス計算装置102(3)へ送信してもよい。加えて、上に述べたように、いくつかの例では、他状態206に関係する情報はまた、その性質がDUQ124を介して適用される更新に少なくとも部分的に依存し得るラフト合意208を介して更新されてもよい。したがって、DUQ124の冗長な複製は、ラフトアルゴリズムに基づき定期的に更新されてもよい。DUQ124の複数の複製は複数の異なるストレージ装置上に維持されるので、システムはDUQ124が維持されるストレージ装置又は計算装置の故障に耐えることができる。さらに、ユーザ要求と同じトランザクションにおいてDUQ124の更新を行うことにより、このイベントは、ユーザへ応答を返すまで維持され、メタデータデータ構造の更新までの待ち時間が低減され、そしてDUQ124から処理されるいかなる以降の更新も非同期的に処理されてもよい。さらに、現存の更新の処理が別のデータ構造、オブジェクトなどに対する追加処理の必要となれば、追加更新として追加処理がDUQ124へ追加され、追加処理が非同期的に行われてもよい。
【0055】
DUQ124は、ログ構造化マージツリーデータ構造として格納される冗長優先度キューであってもよく、システムの状態の残りと同じストレージ内に維持されてもよい。これは、DUQ124がシステムの状態の残りとともにアトミック的に更新されることを可能にする。DUQ124に対する各更新は複数の属性を含んでもよい。優先度属性はDUQ124内の項目の優先度を示す整数であってもよい。例えば、優先度は、DUQ124内の更新が処理される順番を判断するための第1の考慮事項であってもよい。高優先度を有する更新は低優先度を有する更新より早く処理されてもよい。
【0056】
キュー番号属性はまた、更新毎にDUQ124に関し、一意的であってもよい整数であってもよい。例えば、各更新がDUQ124へ挿入されると、各更新は単調増加カウンタから番号が割り当てられてもよい。高いキュー番号を有する更新は低いキュー番号を有する更新の後にDUQ124内へ挿入されてもよい。したがって、キュー番号は更新が処理される順番を判断する第2の考慮事項であってもよい。2つの更新が同じ優先度を有する場合には、低いキュー番号を有する更新は、高いキュー番号を有する更新より早く処理されてもよい。
【0057】
別属性は、更新のタイプであってもよく、更新が非同期管理プログラムにより処理される方法だけでなく、同じキーに関して更新を折り畳む方法を判断する列挙タイプであってもよい。キー属性は、DUQ124が更新を重複解除し得る機構をDUQ124に与えるブロブ(blob)であってもよい。加えて、プロセッサ識別子(ID)属性は、システム内の、どのプロセッサが特定更新を現在処理しているかを示す個々のプロセッサの一意なIDであってもよい。処理されていない更新に関して、プロセッサID属性は設定されない。さらに、状態属性は、上に論述された他のフィールドのうちのいずれかにおいても利用可能でない更新に関連するすべてのものを含むブロブであってもよい。
【0058】
加えて、DUQ124はAPI情報126に含まれてもよい以下の1又は複数のAPIを採用してもよい。いくつかのケースでは、これらのAPIのすべてはアトミックであってもよい。「エンキュー」APIは、更新をDUQ124内に挿入することに責任があってもよい。「ワーク取得」APIは、DUQ124からワークを取り出すことに責任があってもよい。「デキュー」APIは、完了した更新をDUQ124から一掃することに責任があってもよい。「リキュー」APIは、DUQ124が、潜在的他のプロセッサによりさらに処理されるように未完了のワークをDUQ124へ戻すことに責任があってもよい。進行中リストAPIは、プロセッサにより既に処理されているワークを入手することに責任があってもよい。上述のAPIのそれぞれの機能の例は、以下に提示され、
図3~9に示される。
【0059】
図3はいくつかの実施形態に係るエンキュー及び折り畳み更新動作300の実行例を示すブロック図である。上述のように、エンキューAPIは更新をDUQ124内へ挿入することに責任があってもよい。エンキューAPIは、引き数として優先度、タイプ、キー、及び状態を取ってもよい。エンキューAPIは、受信された更新がDUQ124内に既に存在する更新と共に折り畳まれられるべきかどうかを判断してもよい。更新がDUQ124内に実際に既に存在し、そして受信された更新と共に折り畳むのに適格である場合、更新は、既にDUQ124内に存在している更新と同じ優先度及びキュー番号を有するように折り畳まれる。更新のタイプ及びキーは変更されない。更新は、処理されていなければ折り畳まれるのに適格であるので、更新のプロセッサIDはヌル(null)になる。状態属性の値は、古い状態及び新しい状態を入力として受信する更新のタイプにより判断されでもよく、更新に含まれる状態ブロブを戻す。
【0060】
他方で、更新がDUQ124内に既に存在しない又は現存の更新が折り畳むのに適格でない場合は、新しい更新がDUQ124へ追加されてもよい。キーの更新がDUQ124内に存在しない場合、キーのDUQ124内の更新が既に処理されている場合、又は更新のタイプが折り畳むことをサポートしていなければ、更新は、折り畳むのに適格でない。
【0061】
図3の例では、更新302は、DUQ124内に既に存在しており、3に等しい優先度304、1に等しいキュー番号306、タイプ308「DELETE」、「Key1」のキー310、nullに等しいプロセッサID312、及び[a,b]に等しい状態314を含む。エンキュー要求316が発生していると仮定する。エンキュー要求316が左側のDUQ124に対し行われ、エンキュー要求316が完了された後、右側に示すようにDUQ124の状態の変化という結果となる。
【0062】
エンキュー要求316は、3の優先度304、タイプ308「DELETE」、key1のキー310及び、[c,d]に等しい状態314を含む。したがって、優先度304、タイプ308、及びキー310はエンキュー要求316の既存更新に関して同じであるので、新しい更新は既存更新302と共に折り畳まれてもよく、既存更新302の状態314の変化という結果となる。したがって、更新のエンキュー及び折り畳みに続くDUQ124内の状態314は、既存更新302の状態とエンキュー要求316の状態との組み合わせ、すなわち[a,b,c,d]である。これは、状態314が、DUQ124内に既に存在する更新302とエンキュー要求316との間に折り畳まれた、この場合、エンキュー要求316からの状態をDUQ124内に既に存在する更新302からの状態へ追加するためである。状態が折り畳まれる方法は個々の更新タイプに依存してもよい。
【0063】
図4はいくつかの実施形態に係る高い優先度動作400のエンキューの実行例を示すブロック図である。この例では、エンキュー要求402が受信される。エンキュー要求402は、優先度304の5、タイプ308のCREATEの、key2に等しいキー310及び状態314を含む。エンキュー要求402が受信されるとき、DUQ124は、3に等しい優先度304を有する既存更新404を既に含む。したがって、エンキュー要求402は異なる優先度に起因して既存更新404と共に折り畳まれない。その代りに、右側のDUQ124に示すように、新しい更新406が生成され、DUQ124内の既存更新404の前方に挿入される。これは、たとえ新しい更新406が低いキュー番号306を有していても新しい更新406はより高い優先度304、すなわち優先度=5を有するためである。したがって、新しい更新406は、優先度=3を有する既存更新404の前方にエンキューされる。
【0064】
図5はいくつかの実施形態に係るワーク取得動作500の実行例を示すブロック図である。上述のように、ワーク取得APIは、DUQ124からワークを取り出すために採用されてもよい。ゲットワークAPIは、引き数として、プロセッサID、最大優先度、及びカウントを取ってもよい。ワーク取得APIは、処理すべきワーク取得APIを呼び出しているプロセッサのための1又は複数の更新のリストをDUQ124から取得してもよい。リストは、指定された最大優先度以下の最高優先度を有する更新を、提供されたカウント数まで検出することにより配置されてもよい。次に、ワーク取得APIは、要求しているプロセッサの提供されたプロセッサIDによりこれらの更新をマーキングしてもよく、そしてプロセッサID312に対する変更して更新をDUQ124へ戻して維持してもよく、要求しているプロセッサへ選択された更新のリストを返してもよい。要求しているプロセッサは、今や、他のプロセッサもまたこれらの更新を取得しようすることなく、これらの更新に対して動作することができる。DUQ124内には何千ものイベントがある可能性があるので、個々のワーク取得呼び出しにより取り出される更新の数を制限することが望ましい。イベントの数は、DUQ124又はキュープロセッサのいずれかが扱うことができる処理より多くなってもよい。したがって、カウント属性は、戻されるリストに含まれる更新の数を制限してもよい。ワーク取得要求を介して取り出された更新は、異なるワーク取得要求により返されなくてもよく、エンキュー要求中に折り畳まれる適格がなくてもよい。
【0065】
図5の例では、ワーク取得要求502は、1のプロセッサID312を有するプロセッサから受信される。ワーク取得要求502は、さらに、4に等しい最大優先度504及び10に等しいカウント506を含む。したがって、ワーク取得要求502は、現在DUQ124の前方に在る更新406の優先度304より低い最大優先度506を含む。その代りに、更新404の優先度304がワーク取得要求502内で規定された最大優先度506以下であるので第2の更新404が戻されてもよい。この特徴は、高優先度更新が、DUQ124内に長期間存在した可能性がある低優先度更新を飢えさせるのを防ぐことが可能であるように存在する。また、ワーク取得要求の結果として、DUQ124内の更新404は、更新404内のプロセッサID312がヌルからプロセッサID=1へ変更されるように修正される。したがって、ワーク取得要求502を送信したプロセッサへ戻されるリスト内で、更新404は、ワーク取得要求502に含まれていたプロセッサIDの値に設定されたプロセッサIDを有する。プロセッサIDに更新404が割り当てられたので、任意のプロセッサからの将来のワーク取得要求への応答は、更新404を含まなくてもよい。加えて、以下に論述されるように、進行中リスト要求は、進行中リスト要求内のプロセッサIDが更新404内のプロセッサIDと同じである場合に更新404だけを戻してもよい。
【0066】
図6はいくつかの実施形態に係るワーク取得動作600の実行例を示すブロック図である。この例では、1に等しいプロセッサID312、10の最大優先度506、及び11に等しいカウント508を含むワーク取得要求602が受信される。さらに、この例におけるDUQ124は、優先度=5を有する更新602と、優先度=3を有する更新604とを現在含む。ワーク取得要求602内に与えられている引き数により、DUQ124の前方における更新604が、処理のために選択され、リストに戻される。さらに、更新604内のプロセッサID312は「null」から「1」へ変更される。カウントパラメータ508により示されるように、ワーク取得要求602が、応答は1つの結果だけを含むべきであると指定されているので、第2の更新606は、戻されない。したがって、実効されるべき多数の更新がDUQ124内にあっても、DUQ124の消費者は、かれら自身の可用性に従って取り出されるワークの量を制限することができる。
【0067】
図7はいくつかの実施形態に係るデキュー動作700の実行例を示すブロック図である。上述のように、デキューAPIは完了された更新をDUQ124から一掃するために採用されてもよい。デキューAPIは、引き数として、優先度、試行、キュー番号、及びプロセッサIDを含んでもよい。例えば、デキューAPIは、更新のプロセッサIDがデキュー要求702に含まれるプロセッサIDと等しい場合には、所与の優先度及びキュー番号に対応する更新を消去してもよい。更新のプロセッサIDが、提供されたプロセッサIDに等しくない場合には、提供されたIDを有するプロセッサはデキューされている更新を処理すべきでないので、エラーが投じられる。更新はデキューされるためにプロセッサにより処理されるべきであるので、ワーク取得APIを介して最初に入手し、処理することなく更新をデキューするいかなる方法も無い。加えて、デキューAPIは、更新を完了されたとしてマーキングするためにシステムにより使用されてもよい。これは、更新がDUQ124内にもはや出現しない又は任意のAPI要求により戻されるということを意味する。
【0068】
図7の例では、デキュー要求702が受信される。デキュー要求702は、5に等しい優先度304、1に等しい試行704、1に等しいキュー番号306、及び1に等しいプロセッサID312を含む。デキュー要求702は、整合する更新をDUQ124から位置を突き止め、除去する。この場合、更新706は、デキュー要求702内に指定されたパラメータが整合し、DUQ124から除去され、更新708がDUQ124の先頭へ移動することになる。デキュー要求702内のプロセッサIDが更新706のプロセッサID312と整合しなければ、デキュー要求702は失敗し、エラーメッセージが生成されてもよい。
【0069】
図8はいくつかの実施形態に係るリキュー動作800の実行例を示すブロック図である。上述のように、リキューAPIは、未完了の更新が、例えば他のプロセッサによりさらに処理されるように、未完了のワークをDUQ124へ戻すために採用されてもよい。リキューAPIは、引き数としてプロセッサID、優先度、キュー番号、新しい優先度及び、新しい状態を取る。リキューAPIは、既存更新のプロセッサIDが、提供されたプロセッサIDと整合する場合には、最初に、提供された優先度及びキュー番号が整合する更新を除去してもよい。既存更新のプロセッサIDがリキュー要求で提供されたものと整合していない場合には、提供されたIDを有するプロセッサはリキューされている更新を処理しているべきでないので、エラーメッセージが管理者などに生成されてもよい。逆に、更新をリキューするために、更新はプロセッサによりもはや処理されていてはならないので、ワーク取得APIを介して最初に更新を入手することなく更新をリキューする方法は存在しない。既存更新がDUQ124から除去された後、新しい更新は、優先度=新しい優先度、タイプ=既存更新タイプ、キー=既存更新キー、状態=新しい状態のような引き数により、上記エンキューAPIを呼び出すことによりエンキューされてもよい。リキューAPIは、典型的にはさらなる処理を妨げたエラーに起因して、完了されなかったワークをDUQ124内へ戻すためにシステムにより使用される。
【0070】
図8の例では、リキュー要求802が受信される。リキュー要求は、1に等しいプロセッサID 312、3に等しい優先度304、2に等しいキュー番号306、4に等しい新しい優先度804、及び[e,f]の新しい状態806を含む。したがって、リキュー要求802は更新810と整合し、キュー番号2及び優先度3を有する更新がリキューされる。これは、例えば、キュー消費者が更新810を処理しようとし、更新810が後で再処理されることを望んでいる間にエラーに遭遇した、又は、更新810が他のいくつかの理由のために完全には処理されない等のように、任意数の理由のために発生する可能性がある。リキューでは、優先度304及びキュー番号306が整合するとともに、リキュー要求内のプロセッサID312に整合するプロセッサID312を有する既存更新が存在するはずである。図示の例では、DUQ124内の第2の更新810が、リキュー要求802に整合し、したがって、3に等しい新しいキュー番号306、4に等しい優先度304、及び新しい状態[e,f]を有する更新812においてリキューされる。新しい更新812では、プロセッサID 312はヌルへ設定されるので、いかなるプロセッサも新たにキューされた更新812を扱うことができる。さらに、他の既存更新808は、この例におけるリキュー要求の行為により影響を受けない。
【0071】
図9はいくつかの実施形態に係る進行中リスト動作900の実行例を示すブロック図である。上述のように、進行中リストAPIは、プロセッサにより既に処理されているワークを入手するために採用されてもよい。進行中リストAPIは、引き数としてプロセッサID及び限度を取る。進行中リストAPIは、ワーク取得APIとして同じ順番で、そして指定された限度まで、提供されたIDを有するプロセッサによりDUQ124に従って現在処理されている更新を取り出してもよい。
【0072】
図9の例では、進行中リスト要求が受信される。進行中リスト要求902は、1に等しいプロセッサID312及び1に等しい限度904を含む。整合するプロセッサID312を有するDUQ124の先頭の更新906が返されてもよい。プロセッサID同士が一致しない場合には、更新906は返されず、その代りに第2の更新908が返されてもよい。したがって、ワーク取得要求と同様に、進行中リスト要求902は、1つの要求に応答して返される更新の総数を制限する能力を有する。この例では、1に等しい限度904に基づいて、1つの更新が返される。
【0073】
図10はいくつかの実施形態に係る非同期管理プログラム120の例示的動作1000を示すブロック図である。
図10の例はスタートアップにおける非同期管理プログラム120の状態を示す。この時点で、非同期管理プログラム120は、ワーカも有しないが、インメモリキュー1002を実際に含む又はそれにアクセスすることができ、DUQ124のメモリ内の位置を知っている。この例では、DUQ124は、消費される準備ができている4つの既存更新1004~1010を含む。非同期管理プログラム120はDUQ124から更新を消費するように構成されてもよい。
【0074】
この例では、更新1004は、更新1004内のプロセッサID1012(すなわちプロセッサID「P1」)によりマーキングされる仮定する。これは更新1004が、例えば
図5及び6に関し上に論述されたように、例えばワーク取得要求の実行に続くように、進行中(であることを示す。1つの非限定的例として、更新1004の処理は開始されているが、中断されている、又は完了されていないと仮定する。非同期管理プログラム120が始まった後、非同期管理プログラム120は、
図11~
図18に関し説明される動作などの動作を実行してもよい。
【0075】
図11はいくつかの実施形態に係る非同期管理プログラム120の例示的動作1100を示すブロック図である。この例では、非同期管理プログラム120は、DUQ124から更新を消費するために実行するために又はDUQ124に対する動作を実行するために、一群のワーカ1102、1104、1106を開始する。一例として、ワーカ1102~1106は、DUQ124内に維持された更新を処理するための非同期管理プログラム120を実行するプロセッサにより実行される複数の処理それぞれに対応してもよい。
【0076】
図12はいくつかの実施形態に係る非同期管理プログラム120の例示的動作1200を示すブロック図である。この例では、非同期管理プログラム120は、以前に実行されたときに完了しなかったワークを探すことを開始してもよい。非同期管理プログラム120は、DUQ124に対し進行中リスト要求を行うことによりそのようにする。したがって、非同期管理プログラム120は、非同期管理プログラム120が実行された最後の時に処理が開始されたが完了しなかった更新が存在するかどうかを判断するために、DUQ124に対し進行中リストAPI要求1202を行う。例えば、進行中リスト要求は、非同期管理プログラム120を実行するプロセッサのプロセッサIDをパラメータとして使用してもよく、パラメータとして例えば
図9に関し上述された限度をさらに含んでもよい。非同期管理プログラム120は、ワーカ1102~1106が消費するために、いくつかの取り出された更新のリストをインメモリキュー1002内に追加してもよい。新しい更新が取り出されない場合には、非同期管理プログラム120は、
図16に関し以下に論述されるようにワーク取得要求を実行してもよく、そして
図13~
図15をスキップしてもよい。
【0077】
図示の例では非同期管理プログラム120を実行するプロセッサのプロセッサIDが、更新1004をマーキングするプロセッサID1012(すなわち「P1」)に整合すると仮定する。したがって、更新1004は進行中リスト要求1202に応答して返される。このことは、そのプロセッサIDがこの非同期管理プログラムのプロセッサに等しかったということを意味する。非同期管理プログラム120は更新1004をそのインメモリキュー1002内に入れてもよい。
【0078】
図13はいくつかの実施形態に係る非同期管理プログラム120の例示的動作1300を示すブロック図である。
図13の例では、非同期管理プログラム120は、上記
図12内の動作により見つけ出されたいくつかの進行中更新を処理してもよい。例えば、非同期管理プログラム120は、別の一団の更新を入手する前に、更新のすべてが一群のワーカ1002~1006の1又は複数のワーカにより処理されるのを待ってもよい。
図13の例では、ワーカ1102はインメモリキュー1002から更新1004を取り出した。いくつかのケースでは、非同期管理プログラム120はワーカ1102が更新1004を処理することを完了するまで、DUQ124に対してそれ以上の要求をしない可能性がある。
【0079】
図14はいくつかの実施形態に係る非同期管理プログラム120の例示的動作1400を示すブロック図である。この例では、更新1004を処理の完了に続いて、ワーカ1102は、DUQ124から更新1004をデキューするためにデキュー更新要求1402を送信してもよい。次に、更新1004はDUQ124から除去される。したがって、本明細書におけるいくつかの例では、更新は、例えば
図7に関し上述したように、デキュー要求が行われるまでDUQ124から除去されない。例えば、更新の処理が終了された後だけデキュー要求を呼び出すことにより、システムは、DUQ124に従って更新が完了されることを保証する。
【0080】
図15はいくつかの実施形態に係る非同期管理プログラム120の例示的動作1500を示すブロック図である。この例では、非同期管理プログラム120は、進行中リスト要求1502を送信することにより、いくつかの進行中更新をも判断するために別の要求を行ってもよい。今回、進行中更新は返されず、これは、非同期管理プログラム120は以前に終了されていなかったすべての進行中ワークの処理を完了しており、今は新しいワークを入手し得るということを示している。
【0081】
図16はいくつかの実施形態に係る非同期管理プログラム120の例示的動作1600を示すブロック図である。この例では、非同期管理プログラムが、引き数としてそのプロセッサID、最大優先度、3以上の限度を使用したDUQ124に対するAPI呼び出しとしてワーク取得要求1602を行うと仮定する。例えば、非同期管理プログラム120にメモリを使い果たさせることを避けるために、非同期管理プログラム120は、インメモリキュー1002が閾値サイズを越えた場合に追加更新を取り出さないように構成されてもよい。
【0082】
ワーク取得要求1602に応答して、3つの更新1006、1008、1010のリスト1604が返されると仮定する。更新1006、1008、1010の各々は、非同期管理プログラム120を実行するプロセッサのプロセッサID1012、すなわちプロセッサID「P1」によりDUQ124内でマーキングされてもよい。非同期管理プログラム120は取り出された更新のすべてを同じインメモリキュー1002内へ追加してもよい。したがって、DUQ124は処理のために3つの新しい更新1006~1010を返し、
図5、6に関し上述されたように、他の消費者が可能性としてそれらの更新を消費するのを防止するために、更新の全ては、DUQ124内のそれらへ追加される非同期管理プログラムのプロセッサID1012を有する。
【0083】
図17はいくつかの実施形態に係る非同期管理プログラム120の例示的動作1700を示すブロック図である。非同期管理プログラム120は、非同期管理プログラム120の内部のワーカ1102~1106に、処理するべきそれぞれの更新を提供する。ワーカ1102~1106は更新1006~1010をそれぞれ処理し始める。
【0084】
図18はいくつかの実施形態に係る非同期管理プログラム120の例示的動作1800を示すブロック図である。この例では、非同期管理プログラムワーカ1102~1106がそれらのタスクにより何かをすべてをしたと仮定する。例えば、ワーカ1102、1104が更新1006、1008それぞれを正常に完了したと仮定する。したがって、ワーカ1102は、DUQ124から更新1006をデキューするためにデキュー更新要求1802を送信し、ワーカ1104は、DUQ124から更新1008をデキューするためにデキュー更新要求1804を送信する。
【0085】
他方で、第3のワーカ1106が更新1010を正常に完了しなかったと仮定する。その結果、第3のワーカ1106は例えば
図8に関して以下に論述されるように、リキュー更新要求1806を送信してもよい。したがって、更新1012はリキューされる。例えば、更新1010は、処理中にエラーに遭遇したかもしれない、又は追加処理を要求とするかもしれない。更新1012は、更新1010を処理する際にワーカ1106により既に完了されたかもしれない処理に基づき、元の更新1010とは、優先度、状態などの1つ又は複数の属性において異なってもよい。
【0086】
更新を処理する際、非同期管理プログラムワーカ1102~1106は最初に、例えば優先度などに基づいてインメモリキュー1002から更新を取得してもよい。ワーカがインメモリキュー1002から更新を取得した後、いかなる他のワーカも当該更新について動作しようとしない。
【0087】
処理する更新毎に、ワーカは最初に、何の種類の更新をワーカが処理しているかを、例えば
図3~
図9に関して上述されたタイプ属性308に基づき判断してもよい。これから、ワーカは、さらなる文脈のために上述されたキー属性310及び状態属性314を使用することにより、どのように更新を処理すべきかを決定してもよい。例えば、副指標が更新される必要があれば、ワーカは、主指標からこのキーに関する現在の情報を調べるために更新のキーを使用し、そして、次に、更新情報を得るために副指標を更新する可能性がある。これは、DUQ124内に列挙された更新の共通使用ケースであってもよい。
【0088】
更新の別の可能な使用は、他のある非同期処理を駆動することである。例えば、更新は、第1の方針の実行をトリガするための第1の処理によりDUQ124内へ挿入される可能性がある。例えば、第1の方針が延いては1又は複数の格納されたオブジェクト、オブジェクトメタデータなどの条件を変更する更新が行われるようにさせると仮定する。このシナリオは、いくつかの特性を有する映像へタグを追加する方針が格納場所に格納された複数の映像の下位集合に対し行われる、上述された例に対応してもよい。例えば、トリガされた方針は、指定された特性を有するデータセット内の映像を発見する可能性があり、この個々の映像を処理するために更新をDUQ124へさらに追加してもよい。いくつかの特性を満足する映像へタグを追加するなど映像に対する更新が延いては処理されてもよい。さらに、タグを当該映像へ貼り付けることの一部として、例えばストレージ上のあるファイルサイズを越えるタグ付き映像のうちの任意のものを圧縮するため等の実行される別の方針が実行されるようにするさらに別の更新がDUQ124へ追加されると仮定する。
【0089】
ある理由のために更新が処理されることに失敗した場合には、例えば
図8及び
図18に関し上述されたように、更新は、DUQ124のリキューAPIを使用することによりリキューされてもよい。更新は多くの理由のうちのいくつかの理由のために失敗する可能性がある。例えば、上記例において映像が読み出されることに失敗した場合には、映像に対する更新は、リキューされ、そして更新が次にDUQ124から出て来ると再び試みられてもよい。さらに、いくつかの例示的構成及び応用が上述されたが、非常に多くの他の変形形態が本明細書の開示の利益を有する当業者に明らかになる。
【0090】
図19はいくつかの実施形態に係る例示的処理を示す流れ図である。処理は一連の動作を表す論理フロー図内のブロックの集合として示され、そのいくつか又はすべてはハードウェア、ソフトウェア又はそれらの組み合わせで実装されてもよい。ソフトウェアの文脈では、ブロックは、1又は複数のプロセッサにより実行されるとプロセッサに列挙された動作を行うようにプログラムする1又は複数のコンピュータ可読媒体上に格納されるコンピュータ実行可能命令を表してもよい。一般的に、コンピュータ実行可能命令は、特定機能を行う又は特定データタイプを実装するルーチン、プログラム、オブジェクト、構成部、データ構造などを含む。ブロックが説明される順番は制限として解釈されるべきでない。説明されたブロックのうちの任意数のブロックは処理又は代替処理を実施するために任意の順番で及び/又は並列に組み合わせられてもよく、そしてブロックのすべてが実行される必要があるわけではない。論述目的のために、これらの処理は本明細書の例において説明される環境、フレームワーク、及びシステムを参照して説明されるが、これらの処理は幅広い種類の他の環境、フレームワーク及びシステムにおいて実装されてもよい。
【0091】
図19はいくつかの実施形態に係る更新を管理するために永続更新キューを採用するための例示的処理1900を示す流れ図である。いくつかのケースでは、処理1900は1又は複数のサービス計算装置102により少なくとも部分的に実行されてもよい。
【0092】
1902において、計算装置は、ストレージにおけるデータの格納に関係する格納動作のユーザ要求をユーザ装置から受信してもよい。
【0093】
1904において、計算装置は、格納動作の実行を示す応答をユーザ装置へ送信することに先立って格納動作を維持するために更新を更新キューへ追加してもよい。
【0094】
1906において、計算装置は、可能であれば、この更新と更新キュー内に既に存在する既存更新とを結合することにより、更新を折り畳んでもよい。
【0095】
1908において、計算装置は、少なくとも1つの他のプロセッサにより管理される少なくとも1つの他の更新キューへ更新を追加するために、更新に関する情報を少なくとも1つの他のプロセッサへ送信してもよい。
【0096】
1910において、計算装置は、更新キュー内の更新を処理するために少なくとも1つのワーカ処理をインスタンス化してもよい。
【0097】
1912において、計算装置は更新キューから更新を選択してもよい。
【0098】
1914において、計算装置は、少なくとも1つのワーカ処理を実行する1又は複数のプロセッサのプロセッサに対応するプロセッサ識別子により、更新キュー内の更新をマーキングしてもよい。
【0099】
1916において、計算装置は、更新を処理するとともに格納動作を実行するためにワーカ処理のうちの1つを実行してもよい。
【0100】
1918において、ワーカ処理による更新の処理の完了に続いて、計算装置は、更新キューから更新をデキューするための要求を送信してもよい。
【0101】
本明細書において説明される例示的処理は論述目的のために提供される処理の単なる例である。無数の他の変形形態が本明細書の開示に照らして当業者に明らかになる。さらに、本明細書の開示は処理を実行するための好適なフレームワーク、アーキテクチャ及び環境のいくつかの例を記載するが、本明細書における実施形態は示され論述された特定例に限定されない。さらに、本開示は添付図面において説明及び示したように様々な実施例を提供する。しかし、本開示は、本明細書で説明され示された実施形態に限定されないが、当業者に知られているであろう又は知られるようになるであろうような他の実施形態へ拡張し得る。
【0102】
本明細書において説明される様々な命令、処理、及び技術は、コンピュータ可読媒体上に格納され本明細書のプロセッサにより実行されるプログラムなどのコンピュータ実行可能命令の一般的文脈において考慮され得る。一般的に、プログラムは、特定タスクを行う又は特定抽象データタイプを実装するためのアプリケーション、ルーチン、オブジェクト、部品、データ構造、実行可能コードなどを含む。これらのプログラムなどは仮想マシン又は他のジャストインタイムコンパイル実行環境などにおいて固有コードとして実行されてもよいし又はダウンロードされて実行されてもよい。典型的に、プログラムの機能は、様々な実施形態において所望に従って組み合わせられてもよいし又は分散されてもよい。これらのモジュール及び技術の実施形態はコンピュータ可読記憶媒体に格納されてもよいし又はある形式の通信媒体をわたって送信されてもよい。
【0103】
本主題は構造的特徴及び/又は方法論的行為に固有の言語で説明されたが、添付の特許請求の範囲において定義される主題は必ずしも特定の特徴又は行為に限定されないということを理解すべきである。むしろ、特定の特徴及び行為は特許請求の範囲を実装する例示的形式として開示される。