(58)【調査した分野】(Int.Cl.,DB名)
1以上のデータネットワークによって、メタデータサーバ及び第2のコンテンツアイテムブロックサーバと動作可能に連結された第1のコンテンツアイテムブロックサーバによって実行される方法であって、前記第1のコンテンツアイテムブロックサーバは、1以上のプロセッサと、該方法を実行する前記1以上のプロセッサによって実行される命令を格納する記憶媒体とを備え、前記方法は、
複数のコンテンツアイテムブロックの識別子を前記メタデータサーバから受信することであって、コンテンツアイテムは前記複数のコンテンツアイテムブロックを含む、ことと、
前記受信した識別子の少なくとも一部に基づいて、複製タスクログに複製ログエントリを格納することであって、前記複製ログエントリは複数のコンテンツアイテムブロックの前記識別子と、前記第2のコンテンツアイテムブロックサーバの識別子とを含む、ことと、
前記複製ログエントリの処理の少なくとも一部に基づいて、前記複製ログエントリにおいて識別される前記第2のコンテンツアイテムブロックサーバへ、前記コンテンツアイテムを構成する前記複数のコンテンツアイテムブロックの少なくとも1つのコンテンツアイテムブロックを、前記複製ログエントリにおいて識別される前記第2のコンテンツアイテムブロックサーバへ送信するオファーを送信することと、
前記第2のコンテンツアイテムブロックサーバから、前記少なくとも1つのコンテンツアイテムブロックを送信する前記オファーの承認を受信することと、
前記受信した承認の少なくとも一部に基づいて、前記少なくとも1つのコンテンツアイテムブロックを前記第2のコンテンツアイテムブロックサーバに送信することと
を含み、
前記方法は、さらに、
前記複製ログエントリを処理する前に、前記コンテンツアイテムを構成する前記複数のコンテンツアイテムブロックの少なくとも1つを、前記第2のコンテンツアイテムブロックサーバではない第3のコンテンツアイテムブロックサーバからダウンロードすることを含むことを特徴とする方法。
1以上のデータネットワークによって、メタデータサーバ及び構外コンテンツアイテムブロックサーバと動作可能に連結された構内コンテンツアイテムブロックサーバによって実行される方法であって、前記構内コンテンツアイテムブロックサーバは、1以上のプロセッサと、該方法を実行する前記1以上のプロセッサによって実行される命令を格納する記憶媒体とを備え、前記方法は、
複数のコンテンツアイテムブロックの識別子を前記メタデータサーバから受信することであって、コンテンツアイテムは前記複数のコンテンツアイテムブロックを含む、ことと、
前記受信した識別子の少なくとも一部に基づいて、複製ログに複製ログエントリを格納することであって、前記複製ログのエントリは複数のコンテンツアイテムブロックの前記識別子と、コンテンツ管理サービスの前記構外コンテンツアイテムブロックサーバの識別子とを含む、ことと、
前記複製ログのエントリの処理の少なくとも一部に基づいて、前記複製ログのエントリにおいて識別される前記構外コンテンツアイテムブロックサーバから、前記コンテンツアイテムを構成する前記複数のコンテンツアイテムブロックのうち少なくとも1つのコンテンツアイテムブロックをダウンロードすることと
を含むことを特徴とする方法。
【発明を実施するための形態】
【0009】
[0018]以下の詳細な説明において、本発明の実施形態の十分な理解を提供するために、説明の目的で多くの特定事例を記載する。しかしながら、本例示の実施形態がそれらの特定事例なしで実行されうるということが明らかであろう。他の例では、本例示の実施形態を不必要に不明りょうにすることを避けるために、既知の構成やデバイスがブロック図の形式で示される。
【0010】
[0019]本例示の実施形態を以下の概要に従って説明する。
1.0 実施例
2.0 例示のシステム環境
3.0 コンテンツアイテムブロックの複製
3.1 複製メタデータ
3.2 サーバジャーナル
3.3 複製ログ
3.4 複製タスクの提供
3.5 複製タスクの処理
4.0 コンテンツアイテムブロックの削除
5.0 割り当ての際のコンテンツアイテムブロックの複製
6.0 ベーシックコンピューティングハードウェア及びソフトウェア
6.1 ベーシックコンピューティングデバイス
6.2 ベーシックソフトウェアシステム
7.0 拡張及び代替例。
【0011】
<1.0 実施例>
[0020]本発明の例示の実施形態は、オンラインコンテンツ管理サービスのユーザに対して、彼らのコンテンツアイテムがそのようなサービスでホストされる、より詳細な制御を提供する。以下では、多くのコンピュータで実施する処理及びインターネットインタラクションについて説明する。それらの処理及びネットワークインタラクションを説明するために、いくつかの例示のユーザを紹介する。本例示は、本発明のいくつかの実施形態の特徴を説明するために使用され、本発明のいくつかの実施形態の所定の特徴を説明するために使用される。本例示は、限定することを意図しておらず、単に説明のために提供されるものである。
【0012】
[0021]第1の例示のユーザは、”Corporation Alpha”として参照される。第1例として、Corporation Alphaは、彼らのワークコンピュータに格納されるコンテンツアイテムを、当該サービスによって運用されるインターネット上のサーバに格納されるコンテンツアイテムと同期するオンラインコンテンツ管理サービスを使用する多くの従業員を有している。Corporation Alphaでは、コンテンツアイテムが彼らのワークコンピュータに格納されるため、従業員は、彼らのワークコンピュータがインターネットへ接続していない場合でもコンテンツアイテムへのアクセスを有することが好まれている。同時に、Corporation Alphaではまた、コンテンツアイテムがバックアップと共有目的でオンラインコンテンツ管理サービスのサーバに同期されることが好まれている。Corporation Alphaはまた、可能な場合、従業員のワークコンピュータ間でコンテンツアイテムの変更を同期するために必要とする時間を低減することを望んでいる。
【0013】
[0022]第2例として、Corporation Alphaの従業員は地理的に分散してもよい。例えば、Corporation Alphaの本部は、サンフランシスコにあってもよいが、ニューヨーク、オースティン、及びシアトルのサテライトオフィスを有してもよい。Corporation Alpha内のチームはまた、地理的に分散してもよい。例えば、サンフランシスコの従業員とオースティンのオフィスとがプロジェクトを共に協働して行ってもよい。Corporation Alphaは、チームが協働するコンテンツアイテムへの変更がサンフランシスコとオースティンのオフィスのコンピュータ間で素早く同期されることを望むであろう。
【0014】
[0023]第3の例として、サンフランシスコとオースティンのCorporation Alphaの従業員が協働して行うプロジェクトが非常に機密性(例えば、コンフィデンシャル)の高いものであってもよい。この場合、Corporation Alphaは、プロジェクトに関連付けられるコンテンツアイテム上でより高い制御と監視を維持することを望んでもよい。例えば、Corporation Alphaは、プロジェクトのコンテンツアイテムが構内にのみ格納され、オンラインコンテンツ管理サービスによって運用されるサーバ上には格納されないことを望んでもよい。
【0015】
[0024]本発明の特徴を利用すると、Corporation Alphaなどのユーザや他のユーザは、オンラインコンテンツ管理サービスによって管理されるコンテンツアイテムがどこでホストされるかを制御することができる。特に、例示の実施形態は、ユーザが、彼らのコンテンツアイテムを構内でのみ、構外でのみ、又は、構内及び構内の両方でホストすることを許容する。構内でコンテンツアイテムをホストする場合、ユーザは彼ら自身のストレージハードウェアを使用することができる(いくつかの例示の実施形態では構内でのコンテンツアイテムのストレージハードウェアを提供するオンラインコンテンツ管理サービスを含むが)。例示の実施形態は、エンドユーザのデバイスが、エンドユーザのデバイスで行われたコンテンツアイテムへの変更を構内のストレージに、構外のストレージに、又は、構内のストレージ及び構外のストレージの両方に、同期することを許容する。例示の実施形態はまた、エンドユーザのデバイスが、他のエンドユーザのデバイスによって行われたコンテンツアイテムへの変更を、構内のストレージから、構外のストレージから、又は、構内のストレージ及び構外のストレージの両方から、同期することを許容する。
【0016】
[0025]これらの実施例は、本発明のいくつかの実施形態の特徴を説明するために以下の説明の一部と関連して利用される。
【0017】
<2.0 例示のシステム環境>
[0026]本発明のいくつかの実施形態の特徴について、本発明の例示の実施形態が実施される例示のシステム環境100のブロック図である
図1を参照して説明する。図示するように、ユーザ(例えば、102−1)は、パーソナルコンピューティングデバイス(例えば、110−1)を有するか又は使用しうる。パーソナルコンピューティングデバイスは、ローカルストレージ(例えば、112−1)とコンテンツアイテム同期エージェント(例えば、114−1)とを有しうる。パーソナルコンピューティングデバイスのローカルストレージは1以上のコンテンツアイテム113を格納しうる。構内のブロックサーバ120は、ブロックサービス122、ブロックストレージ124、及びブロック管理エージェント126から構成されうる。ブロックストレージ124は複数のコンテンツアイテムブロック125を格納しうる。オンラインコンテンツ管理サービスは制御プレーン、ストレージプレーン、及びデータプレーンから構成されうる。制御プレーンは通知サーバ140、メタデータサーバ150、及びウェブサイト170を含みうる。ストレージプレーンは構内のブロックサーバ130を含みうる。構内のブロックサーバ130は、ブロックサービス132、及びブロックストレージ134から構成されうる。構内のブロックサーバ130のブロックストレージ124は1以上のコンテンツアイテムブロック125を格納しうる。バックエンドデータバスは、サーバ130、140、150、170を含む制御プレーン及びストレージプレーン内で、及び、制御プレーンとストレージプレーンとの間でのデータのネットワーク通信及び移動を容易にする、コンピューティングデバイス、ネットワーク、及びネットワークデバイスの集合から構成されうる。バックエンドデータバスはまた、サーバ130、140、150、170を含む制御プレーン及びストレージプレーンによって、メタデータプレーン180へのアクセスを容易にすることができる。データプレーン180は、データを読み出したり格納したりするための、1以上の揮発性又は不揮発性メモリベースの分散型のデータシステムを含んで構成されうる(例えば、memcache、RDBMS、分散key-valueストアなど)。
【0018】
[0027]
図1の例において、システム環境100は、それぞれパーソナルコンピューティングデバイス110−1及びパーソナルコンピューティングデバイス110−2を含む又は用いるユーザ102−1及びユーザ102−2を含む。パーソナルコンピューティングデバイス110−1は、ローカルストレージ112−1とコンテンツアイテム同期エージェント114−1とを有する。パーソナルコンピューティングデバイス110−2はまた、ローカルストレージ112−2とコンテンツアイテム同期エージェント114−2とを有する。
図1において簡潔な説明を提供すべく、システム環境100において二人のユーザ(102−1、102−2)及び2つのパーソナルコンピューティングデバイス(110−1、110−2)のみを示しているが、システム環境100は二人のユーザより多くを含み、及び、それぞれがローカルストレージとコンテンツアイテム同期エージェントを含む二つのパーソナルコンピューティングデバイスより多くを含んでもよいことが理解されるべきである。例えば、システム環境100は、何百、何千、何百万のユーザ、又は何百、何千、何百万のパーソナルコンピューティングデバイスを含んでもよい。さらに、ユーザとパーソナルコンピューティングデバイスが一対一で対応する必要性はない。例えば、単一のパーソナルコンピューティングデバイスが複数のユーザによって使用されてもよく、単一のユーザが複数のパーソナルコンピューティングデバイスを有するか又は使用してもよい。
【0019】
[0028]本発明のいくつかの例示の実施形態に従って、ユーザ102−1は、パーソナルコンピューティングデバイス110−1のローカルストレージ112−1にコンテンツアイテム113を追加するか又はコンテンツアイテム113を変更するために、パーソナルコンピューティングデバイス110−1を使用することができる。パーソナルコンピューティングデバイス110−1のコンテンツアイテム同期エージェント114−1はその後、ローカルストレージ112−1へのコンテンツアイテム113の追加又は変更を自動的に検出し、構内ブロックサーバ120又は構外ブロックサーバ130へコンテンツアイテム113をアップロードする。いくつかの例示の実施形態によれば、以下でより詳細に説明するように、上記アップロードは、コンテンツアイテム同期プロトコルに従って、コンテンツアイテム同期エージェント114−1とメタデータサーバ150との間のネットワーク通信によって容易に行われる。
【0020】
[0029]本発明のいくつかの例示の実施形態に従って、他のパーソナルコンピューティングデバイス110−2は、追加又は変更されたコンテンツアイテム113を、パーソナルコンピューティングデバイス112−2のローカルストレージ112−2へ自動的にダウンロードする。最初に、通知サーバ140は、パーソナルコンピューティングデバイス112−2のコンテンツアイテム同期エージェント114−2に対して、コンテンツアイテム113の新たなバージョンが利用可能であることを通知する。その後、コンテンツアイテム同期プロトコルに従って同期エージェント114−2とメタデータサーバ150との間の直接的なネットワーク通信によって、コンテンツアイテム同期エージェント114−2は、構内ブロックサーバ120又は構外ブロックサーバ130からコンテンツアイテム113の新たなバージョンをダウンロードする。ダウンロード後、コンテンツアイテム113の新たなバージョンは、ローカルストレージ112−2においてユーザ102−2に利用可能となる。
【0021】
[0030]パーソナルコンピューティングデバイス(例えば、110−1又は110−2)は、固定型の又は携帯型のパーソナルコンピューティングデバイスであってもよい。例えば、パーソナルコンピューティングデバイスは、デスクトップコンピュータ、ワークステーションコンピュータ、モバイル電話機、ラップトップコンピュータ、タブレットコンピュータ、又は、他の固定型の若しくは携帯型のパーソナルコンピューティングデバイスであってもよい。パーソナルコンピューティングデバイスは、例えば
図8を参照して以下で説明されるベーシックコンピューティングデバイス800などの1以上のベーシックハードウェアコンポーネントを含んで構成されてもよい。パーソナルコンピューティングデバイスはまた、例えば
図9を参照して以下で説明されるソフトウェアシステム900などの1以上のベーシックソフトウェアシステムで構成されてもよい。
【0022】
[0031]ローカルストレージ(例えば、112−1又は112−2)は、物理ホストインタフェース(シリアル接続SCSI、シリアルATA、PCI Express、ファイバーチャネル、USBなど)によってパーソナルコンピューティングデバイス110のバスへ接続される電子、磁気又は光学のデータストレージ機構であってもよい。例えば、データストレージ機構は、パーソナルコンピューティングデバイスのハードディスク、半導体ドライブ、又は光学ドライブであってもよい。代替的に、ローカルストレージは、パーソナルコンピューティングデバイス上に”マウントされた”ローカルエリアネットワーク(LAN)上の例えばネットワークデータストレージデバイスなどのネットワークドライブであってもよい。ネットワークドライブをマウントすることによって、ネットワークドライブに格納されたデータは、ネットワークドライブがデバイスから離れてネットワークを介して物理的に配置される場合であっても、ユーザや、パーソナルコンピューティングデバイスに格納されるパーソナルコンピューティングデバイス上で実行するアプリケーションに見えるようになる。一度マウントされると、パーソナルコンピューティングデバイスは、通常、UNIX用のネットワークファイルシステムプロトコル(NFS)又はWINDOWS用のサーバメッセージブロック(SMB)などのネットワークファイルシステムブロックに従ってネットワークドライブからデータを読み出し、ネットワークドライブへデータを書き込む。
【0023】
[0032]パーソナルコンピューティングデバイスのローカルストレージはコンテンツアイテム113を格納してもよい。”コンテンツアイテム”はデジタル情報の集合である。ローカルストレージに格納されると、コンテンツアイテムはファイルシステムのファイルに対応しうる。例えば、コンテンツアイテムは、ドキュメントファイル(例えば、ワード処理ドキュメント、プレゼンテーションドキュメント、スプレッドシートドキュメント、又は他のタイプのドキュメント)、画像ファイル(例えば、.jpg、.tiff、.gif、又は他のタイプの画像ファイル)、音声ファイル(例えば、.mp3、.aiff、.mp4、wav、又は他のタイプの音声ファイル)、ビデオファイル(例えば、.mov、.mp4、.m4v、又は他のタイプのビデオファイル)、ウェブページファイル(例えば、.htm、.html、又は他のタイプのウェブページファイル)、テキストファイル又はリッチテキストファイル(例えば、.txt、.rtf、又は他のタイプのテキスト若しくはリッチテキストファイル)、又は他のタイプのファイルであってもよい。ローカルストレージに格納されると、コンテンツアイテムは、ファイルシステムのファイルフォルダ階層内のファイルシステムパスを有しうる。例えば、ローカルストレージに格納されるコンテンツアイテムについてのファイルシステムパスは、文字列として”C:\folder1\folder2\my.file”で表され、ここで、“C:\”は、ファイルシステムのルートを示し、“folder1”はファイルシステムのルートでのファイルシステムフォルダを示し、“folder2”はファイルシステムフォルダ“folder1”内のファイルシステムフォルダを示し、“my.file”はコンテンツアイテムに対応するファイルシステムフォルダ“folder2”内のファイルを示す。文字“\”は、異なるファイルシステムフォルダや文字列表現のファイルリファレンスを描く文字列表現において使用される。
【0024】
[0033]パーソナルコンピューティングデバイス110−1及び110−2と、構内ブロックサーバ120とは、ローカルエリアネットワーク(LAN)160へ接続されてもよい。例えば、LAN160は、限定はしないが、IEEE802.3又はIEEE802.11ベースのネットワークを含むIEEE802ベースのネットワーク、又は複数のそのようなネットワークの組み合わせであってもよい。LAN160は、ネットワークファイアウォールによってワイドエリアネットワーク(WAN)190から保護されてもよい。一実施形態において、WAN190は、インターネット又は他の公衆ネットワークである。特に、ネットワークファイアウォールは、サーバ130、140、150及び170を含む、WAN190へ接続されるデバイスが、パーソナルコンピューティングデバイス110−1及び110−2と構内ブロックサーバ120とを含む、LAN160へ接続されるデバイスとのネットワーク接続の開始を禁止することができる。しかしながら、ネットワークファイアウォールは、サーバ130、140、150及び170を含む、WAN190へ接続されるデバイスと確立される、パーソナルコンピューティングデバイス110−1及び110−2と、構内ブロックサーバ120とを含む、LAN160へ接続されるデバイスを起点とする所定のタイプのネットワーク接続を許容するように構成されうる。通常、LAN160は、WAN190と比較して、短いネットワーク待ち時間と、広いネットワーク帯域幅とを有するが、所与の実装においてこれが必須である必要はない。
【0025】
[0034]構内ブロックサーバ120、構外ブロックサーバ130、通知サーバ140、メタデータサーバ150、ウェブサイト170及びメタデータプレーン180の何れか又は全ては、例えば
図8を参照して以下で説明するベーシックコンピューティングデバイス800などの1以上のベーシックハードウェアコンポーネントを含んで構成され、かつ、例えば
図9を用いて以下で説明するソフトウェアシステム900などのベーシックソフトウェアシステムで構成される、1以上のサーバコンピューティングデバイスによって実装されてもよい。複数のサーバコンピューティングデバイスによって実装される場合、それらのサーバコンピューティングデバイスは、負荷分散型、クラスタ型、または他の分散型のコンピューティング構成で構成されてもよい。
【0026】
[0035]コンテンツアイテム同期エージェント、ブロックサービス122、ブロックエージェント126、ブロックサービス132、通知サーバ140、メタデータサーバ150、ウェブサイト170、及びメタデータプレーン180のそれぞれについて、ここで説明する機能は、1以上のコンピューティングデバイスによって実行される際に、当該機能を実行するための命令を含む1以上のコンピュータプログラムとして実装されてもよい。しかしながら、当該機能は、ハードウェア(例えば、1以上の特定用途向け集積回路(ASICS)又は1以上のフィールド・プログラマブル・ゲート・アレイ(FPGAs))、又は、手近な特定の実装の要件に応じたハードウェアとソフトウェアの組み合わせで実装されてもよい。
【0027】
[0036]
図1の例示は簡潔な例示を提供する目的で単一の構内ブロックサーバ120のみを示しているが、本システム環境100は、オンラインコンテンツ管理サービスのユーザの関連グループの数に従って、何十、何百、何千、何百万又はそれ以上の構内ブロックサーバを含んでもよい。例えば、オンラインコンテンツ管理サービスは、種々の異なる組織、企業、団体、学校、大学、他のグループに属する何百万又はそれ以上のユーザをサポートしてもよい。それらの組織、企業、団体、学校、大学及び他のグループのそれぞれは、1以上の構内ブロックサーバを有するか、又は使用してもよい。
【0028】
[0037]ここで使用する用語”構内(on-premises)”は、1以上のパーソナルコンピューティングデバイス及びコンテンツ管理サービス、特に、オンラインコンテンツ管理サービスの構外ブロックサーバ130に関連することを意図している。構内ブロックサーバ(例えば、120)は、パーソナルコンピューティングデバイスと同じ施設又は同じ建物内に配置されるが、そうである必要はない。また、パーソナルコンピューティングデバイスと同じローカルエリアネットワーク(例えば、160)に構内ブロックサーバを接続する必要はないが、そのようにしてもよい。従って、ここでの”構内”ブロックサーバという参照は、構外ブロックサーバ130から所定のパーソナルコンピューティングデバイスまでよりも、当該ブロックサーバが地理的な及び/又はネットワークに関して所定のパーソナルコンピューティングデバイスにより近いことを意味する。構内ブロックサーバへのパーソナルコンピューティングデバイスのネットワーク接続が一般的に、構外ブロックサーバ130へのパーソナルコンピューティングデバイスのネットワーク接続よりも短いネットワーク待ち時間及び/又は広いネットワーク帯域幅の性能を提供する場合、パーソナルコンピューティングデバイスは、ネットワーク上において構外ブロックサーバ130よりも構内ブロックサーバにより近いといえる。
【0029】
[0038]パーソナルコンピューティングデバイスは、例えば、構内ブロックサーバ120、構外ブロックサーバ130、メタデータサーバ150、及びウェブサイト170を含む種々のサーバのネットワーク要求、又は単に”要求”を行うことができる。そして、サーバ120、130、150及び170は、パーソナルコンピューティングデバイスからの要求に対して、ネットワーク応答、又は単に”応答”を返すことができる。上記要求は、通常、ヘッダとペイロードを含む。上記要求のヘッダは、通常、当該要求を受信するサーバへ、当該要求のペイロードの内容を提供する。要求への上記応答もまた、通常、ヘッダとペイロードを含む。応答の上記ヘッダは、通常、当該応答を受信するパーソナルコンピューティングデバイスへ、当該応答のペイロードの内容を提供する。パーソナルコンピューティングデバイスからの要求と、サーバによってそれらに返される応答とは、1以上のネットワーク(例えば、160及び190)を介して送信され、例えばハイパー・テキスト・トランスファープロトコル(HTTP)などの要求−応答ネットワークプロトコルに従って行われてもよい。要求とそれらへの応答とは、例えば、送信制御プロトコル(TCP)などの接続指向ネットワークプロトコルに従ってパーソナルコンピューティングデバイスとサーバとによって確立されたネットワーク接続を介して送信されてもよい。ネットワーク接続は、2以上の要求及び応答のペアが当該ネットワーク接続を介して送信されるという意味で長寿命であってもよい。ネットワーク接続はまた、例えば、トランポート・レイヤ・セキュリティ(TLS)又はセキュア・ソケット・レイヤ(SSL)などの暗号ネットワークプロトコルに従って暗号化されてもよい。しかしながら、特定のネットワークプロトコル又はネットワークプロトコルの特定の組合せが、例示の実施形態によって必要とされず、HTTP、TCP、TLS又はSSL以外のプロトコルが手近な特定の実装の要件に従って使用されてもよい。
【0030】
<3.0 コンテンツアイテムブロックの複製>
[0039]本発明の種々の実施形態によれば、コンテンツアイテムネームスペースは、2つ以上のブロックサーバに割り当てることができる。例えば、コンテンツアイテムネームスペースは、1以上の構内ブロックサーバと構外ブロックサーバ、又は2以上の構内ブロックサーバへ割り当てられてもよい。そのようなコンテンツアイテムネームスペースに属する新たなコンテンツアイテムがオンラインコンテンツ管理サービスに委託されると、新たなコンテンツアイテムの新たなコンテンツアイテムブロックがコンテンツアイテムネームスペースが割り当てられた1以上のブロックサーバへアップロードされる。しかしながら、パーソナルコンピューティングデバイスのコンテンツアイテム同期エージェントは、新たなコンテンツアイテムブロックがアップロードされたものとは異なる、割り当てられたブロックサーバから新たなコンテンツアイテムの欠落したコンテンツアイテムブロックをダウンロードすることを選択することができる。例えば、コンテンツアイテム同期エージェントは、欠落したコンテンツアイテムブロックがダウンロードされるブロックサーバよりもネットワーク上でより近い、割り当てられたブロックサーバを選択することができる。
【0031】
[0040]本発明のいくつかの例示の実施形態によれば、コンテンツアイテムネームスペースが割り当てされたブロックサーバにおいてコンテンツアイテムブロックの利用可能性を増大させるために、構内ブロックサーバ(例えば、120)のブロックエージェント(例えば、126)は、オンラインコンテンツ管理サービスと協働して、コンテンツアイテムブロックの複製プロトコルを実行する。コンテンツアイテムブロックの複製プロトコルによれば、新たなコンテンツアイテムの新たなコンテンツアイテムブロックが構内ブロックサーバへアップロードされると、構内ブロックサーバは、新たなコンテンツアイテムブロックを、新たなコンテンツアイテムが属するコンテンツアイテムネームスペースへ割り当てられた他のブロックサーバに複製することができる。また、コンテンツアイテムブロックの複製プロトコルによれば、新たなコンテンツアイテムの新たなコンテンツアイテムブロックが構外ブロックサーバへアップロードされると、構外ブロックサーバは、新たなコンテンツアイテムブロックを、新たなコンテンツアイテムが属するコンテンツアイテムネームスペースへも割り当てられた任意の構内ブロックサーバに複製することができる。この方法で、ブロックサーバへアップロードされた新たなコンテンツアイテムの新たなコンテンツアイテムブロックは、新たなコンテンツアイテムが属するコンテンツアイテムネームスペースに割り当てられたすべてのブロックサーバで利用可能となる。
【0032】
[0041]例えば、
図2を参照し、所定のコンテンツアイテムネームスペース”ABC123”が構内ブロックサーバ120−1、構内ブロックサーバ120−2、及び構外ブロックサーバ130に割り当てられていることを想定する。構内ブロックサーバ120−1と構内ブロックサーバ120−2は、同一のローカルエリアネットワーク又は異なるローカルエリアネットワークへ接続されてもよい。
図2の例において、構内ブロックサーバ120−1と構内ブロックサーバ120−2とは、異なるローカルエリアネットワーク、特に、LAN160−1及びLAN160−2のそれぞれに接続されてもよい。構内ブロックサーバ120−1及び120−2と、割り当てられたLAN160−1及び160−2は、地理的に分散されてもよく、同一の地理的エリアに存在する必要はない。例えば、構内ブロックサーバ120−1とLAN160−1は、会社のサンブランシステムの本部に配置されてもよく、一方で、構内ブロックサーバ120−2とLAN160−2は、会社のニューヨークのオフィスに配置されてもよい。代替的に、構内ブロックサーバ120−1及び120−2と、LAN160−1及び160−2は、異なる企業又は団体によって所有されるか又は運用されてもよい。例えば、コンテンツアイテムネームスペース”ABC123”は、会社Alphaと会社Betaと協働で使用する共有フォルダを表してもよい。構内ブロックサーバ120−1及び120−2と、LAN160−1及び160−2が同一の又は異なる会社によって所有又は運用されるかどうかに関わらず、コンテンツアイテムブロックの複製プロトコルについて、パーソナルコンピューティングデバイス110−1によって構内ブロックサーバ120−1へアップロードされたコンテンツアイテムネームスペース”ABC123”の新たなコンテンツアイテムについての新たなコンテンツアイテムブロックは、自動的に、構内ブロックサーバ120−2及び構外ブロックサーバ130からパーソナルコンピューティングデバイス110−2によってダウンロード可能となる。同様に、パーソナルコンピューティングデバイス110−2によって構内ブロックサーバ120−2へアップロードされたコンテンツアイテムネームスペース”ABC123”の新たなコンテンツアイテムについての新たなコンテンツアイテムブロックは、自動的に、構内ブロックサーバ120−1及び構外ブロックサーバ130からパーソナルコンピューティングデバイス110−1によってダウンロード可能となる。さらに、パーソナルコンピューティングデバイス110−1又はパーソナルコンピューティングデバイス110−2の何れかによって構外ブロックサーバ130へアップロードされたコンテンツアイテムネームスペース”ABC123”の新たなコンテンツアイテムについての新たなコンテンツアイテムブロックは、自動的に、構内ブロックサーバ120−1及び構内ブロックサーバ120−2からダウンロード可能となる。
【0033】
[0042]高レベルでは、コンテンツアイテムブロックの複製プロトコルの動作は、以下のように処理される。各構内ブロックサーバのブロックエージェントは、構内ブロックサーバへ割り当てられた各コンテンツアイテムネームスペースについての現在のクライアントカーソル値を保持する。コンテンツアイテムネームスペースについての現在のクライアントカーソル値は、コンテンツアイテムネームスペースに対する何れのサーバジャーナルエントリを構内ブロックサーバが既に知っているかを表す。コンテンツアイテムネームスペースについての現在のクライアントジャーナルカーソル値は、構内ブロックサーバに格納されたコンテンツアイテムネームスペースにおけるコンテンツアイテムのどのコンテンツアイテムブロックが他のブロックサーバへオファーされるべきかと、構外ブロックサーバに格納されたコンテンツアイテムネームスペースにおけるコンテンツアイテムのどのコンテンツアイテムブロックが構内ブロックサーバへダウンロードされるべきかとを判定するために、構内ブロックサーバのブロックエージェントによって使用される。
【0034】
[0043]各構内のブロックサーバのブロックエージェントは、オンラインコンテンツ管理サービスの通知サーバ(例えば、140)へのロングポーリング接続を維持してもよい。構内ブロックサーバへ割り当てられたコンテンツアイテムネームスペースの新たなコンテンツアイテムがオンラインコンテンツ管理サービスに委託されると、新たなコンテンツアイテムの新たなコンテンツアイテムブロックが構内ブロックサーバ又は構外ブロックサーバへアップロードされていれば、ロングポーリング接続上でピンメッセージ(ping message)が構内ブロックサーバへ送信されうる。例えば、コンテンツアイテムネームスペース”ABC123”に属している新たなコンテンツアイテムの新たなコンテンツアイテムブロックが構内ブロックサーバ120−1又は構外ブロックサーバ130へアップロードされていれば、構内ブロックサーバ120−1は、通知サーバ140からピンメッセージを受信してもよい。
【0035】
[0044]通知サーバからのピンメッセージを受信することに応じて、構内ブロックサーバは、オンラインコンテンツ管理サービスのメタデータサーバ(例えば、150)に”ブロックサーバリスト”要求を行ってもよい。ブロックサーバ要求は、構内ブロックサーバへ割り当てられた各コンテンツアイテムネームスペースについての現在のクライアントカーソル値を特定しうる。ブロックサーバリストの要求は、ブロックサーバリストの要求を送信する構内ブロックサーバブロックサーバ識別子などの他の情報を含んでもよい。
【0036】
[0045]構内ブロックサーバからのブロックサーバの要求を受信したことに応じて、メタデータサーバは、ブロックサーバリストの要求に応じて構内ブロックサーバへ送信する1以上のより新しいサーバジャーナルエントリを判定してもよい。各新しいサーバジャーナルエントリは、構内ブロックサーバに割り当てられ、かつ、ブロックサーバリストの要求に特定されるコンテンツアイテムネームスペースの1つに対応する。コンテンツアイテムネームスペースについての各新しいサーバジャーナルエントリは、ブロックサーバリストの要求のコンテンツアイテムネームスペースについて構内ブロックサーバによって特定された現在のクライアントカーソル値よりも大きいサーバジャーナルカーソル値を有する。コンテンツアイテムネームスペースについての各新しいサーバジャーナルエントリは、a)構内ブロックサーバがコンテンツアイテムネームスペースへ割り当てられる他のブロックサーバへオファーすることができるように構内ブロックサーバへアップロードされるコンテンツアイテムブロック、又は、b)構内ブロックサーバが構外ブロックサーバからダウンロードすることができるように構外ブロックサーバへアップロードされるコンテンツアイテムブロックの何れかに対応する。ここでは、新しいサーバジャーナルエントリの前者のタイプa)は、”オファー”新サーバジャーナルエントリとして参照される。ここでは、新しいサーバジャーナルエントリの後者のタイプb)は、”ダウンロード”新サーバジャーナルエントリとして参照される。構内ブロックサーバによる、オファー新サーバジャーナルエントリ及びダウンロード新サーバジャーナルエントリの処理について、以下でより詳細に説明する。
【0037】
<3.1 複製メタデータ>
[0046]次に、
図3を参照し、構内ブロックサーバにおけるブロックエージェントによって保持されうるコンテンツアイテムブロックの複製メタデータ300のブロック図について説明する。メタデータ300は、1以上の割り当てられたコンテンツアイテムネームスペースエントリ302−1、302−2、・・・、302−Nを含んでもよい。各エントリ302は、構内ブロックサーバへ割り当てられるコンテンツアイテムネームスペースを表す。
【0038】
[0047]エントリ302は、構内ブロックサーバに割り当てられるコンテンツアイテムネームスペースの識別子314を含んでもよい。エントリ302はまた、構内ブロックサーバに割り当てられるコンテンツアイテムネームスペースについての現在のクライアントカーソル値317を含んでもよい。現在のクライアントカーソル値317は、構内ブロックサーバがコンテンツアイテムブロックの複製目的について既に知っている、オンラインコンテンツ管理サービスへ委託されるコンテンツアイテムネームスペースのコンテンツアイテムへの変更を表す。エントリ302はまた、1以上の割り当てられたブロックサーバ識別子313−1、313−2、・・・、313−Nを含んでもよい。割り当てられるブロックサーバ識別子313は、コンテンツアイテムネームスペースへ割り当てられるブロックサーバを識別する。
【0039】
[0048]構内ブロックサーバのブロックエージェントは、以下で詳細に説明するように、コンテンツアイテムブロックの複製プロトコルの一部として保持されるメタデータ300を使用してもよい。
【0040】
<3.2 サーバジャーナル>
[0049]次に、
図4を参照して、メタデータサーバによってオンラインコンテンツ管理サービスのメタデータプレーンで保持されうるコンテンツアイテムサーバジャーナル410のブロック図について説明する。サーバジャーナル410は、1以上のサーバジャーナルエントリ412−1、412−2、・・・、412−Nを含む。各サーバジャーナルエントリ412は、オンラインコンテンツ管理サービスへ委託される新たなコンテンツアイテムを表す。例えば、サーバジャーナルエントリ412は、アップロード処理200及び1000に関して上述したように、第2の委託要求を受信することに応じて、メタデータサーバ150によってコンテンツアイテムサーバジャーナル410へ追加されうる。
【0041】
[0050]サーバジャーナルエントリ412は、サーバジャーナルエントリ412によって表される新たなコンテンツアイテムが属するコンテンツアイテムネームスペースの識別子414を含んでもよい。サーバジャーナルエントリ412はまた、新たなコンテンツアイテムの新たなコンテンツアイテムブロックがアップロードされたターゲットブロックサーバの識別子413を含んでもよい。ターゲットブロックサーバ識別子413は、例えば、アップロード処理200のステップ226、及びアップロード処理1000のステップ1028の一部として、コンテンツアイテムの同期エージェントからの第2の委託要求で特定されてもよい。サーバジャーナルエントリ412はまた、新たなコンテンツアイテムについての相対パス415を含んでもよい。サーバジャーナルエントリ412はまた、新たなコンテンツアイテムを作成するコンテンツアイテムブロックを識別する新たなコンテンツアイテムについてのコンテンツアイテムブロックリストを含んでもよい。サーバジャーナルエントリ412はまた、サーバジャーナルカーソル値417を含んでもよい。サーバジャーナルカーソル値417は、エントリ412のコンテンツアイテムネームスペース識別子414に特定されうる。或いは、サーバジャーナルカーソル値417は、エントリ412のコンテンツアイテムネームスペースとターゲットブロックサーバ識別子(それぞれ2214、及び413)の組み合わせに特定されうる。
【0042】
<3.3 複製ログ>
[0051]本発明のいくつかの実施形態によれば、構内ブロックサーバは、構内ブロックサーバのローカルストレージ(例えば、124−1)にコンテンツアイテムブロックの複製ログを保持する。複製ログは、1以上の複製ログエントリを格納する。各ログエントリは、構内ブロックサーバのブロックサーバについての複製タスクを表す。複製タスクは、a)1以上の他のブロックサーバへ1以上のコンテンツアイテムブロックの送信をオファーすること、又は、b)構外ブロックサーバから1以上のコンテンツアイテムブロックをダウンロードすることを含むことができる。
【0043】
[0052]次に、
図5を参照し、構内ブロックサーバにローカルに格納されうるコンテンツアイテムブロックの複製ログ500のブロック図について説明する。複製ログ500は、1以上の複製ログエントリ502を含む。各複製ログエントリ502は、メタデータサーバ150によって決定される、オファー新サーバジャーナルエントリ、又は、ダウンロード新サーバジャーナルエントリの何れかに対応する。ブロックエージェントは、新しいサーバジャーナルエントリと、メタデータサーバ150から受信したダウンロード新ジャーナルエントリとについての複製ログ500へ複製ログエントリ502を追加してもよい。
【0044】
[0053]複製ログエントリ502は、複製ログエントリのタイプ識別子518、コンテンツアイテムネームスペース識別子514、コンテンツアイテムブロックリスト516、及び1以上のブロックサーバタスクエントリ519を含んでもよい。複製ログエントリのタイプ識別子518は、対応する新サーバジャーナルエントリ412がオファータイプの新サーバジャーナルエントリであるか、又はダウンロードタイプの新サーバジャーナルエントリであるかどうかを示す。コンテンツアイテムネームスペースの識別子514は、対応する新サーバジャーナルエントリ412のコンテンツアイテムネームスペースの識別子414に対応する。コンテンツアイテムのブロックリスト516は、対応する新サーバジャーナルエントリ412のコンテンツアイテムブロックリスト416に対応する。各ブロックサーバタスクエントリ519は、コンテンツアイテムネームスペースに割り当てられる他のブロックサーバとともに、構内ブロックサーバのブロックエージェントによって実行されるべき複製タスクを表わす。
【0045】
[0054]ブロックサーバタスクエントリ519は、コンテンツアイテムネームスペースに割り当てられる他のブロックサーバを識別することができ(513)、タスクエントリ519によって表される複製タスクのパフォーマンスに関連するタスクメタデータ520を含む。タスクメタデータ520は、複製タスクが完了したかどうかを示す。タスクメタデータ520は、既に行われている複製タスクの試みの失敗数と、失敗の試みに関連するエラーコード及びエラーメッセージと、複製タスクの実行を反映するログメッセージとなどの他の情報を含んでもよい。
【0046】
[0055]いくつかの実施形態において構内ブロックサーバのみが複製ログを保持する一方で、構内ブロックサーバが複製ログを保持するのに追加して又は代わりに、他の実施形態において、構外ブロックサーバ130が複製ログを保持する。この場合、構外ブロックサーバによって保持される複製ログのログエントリは、a)1以上のコンテンツアイテムブロックを1以上の構外ブロックサーバへ送信するようにオファーし、オファーを受け付ける構外ブロックサーバへ1以上のコンテンツアイテムブロックを送信する構外ブロックサーバ130における複製タスク、又は、b)構外ブロックサーバから1以上のコンテンツアイテムブロックをダウンロードすることの何れかを表すことができる。
【0047】
<3.4 複製タスクの提供>
[0056]
図6は、複製タスクを構内ブロックサーバ(例えば、120−1又は120−2)へ提供する処理600のフローチャートである。処理600の各ステップを以下に示す。ステップ602で、構内ブロックサーバのブロックエージェント(例えば、126−1又は126−2)は、構内ブロックサーバに割り当てられる各コンテンツアイテムネームスペースについての現在のクライアントカーソル値(例えば、317)を判定する。前述したように、この情報は、構内ブロックサーバに格納されるコンテンツアイテムブロックの複製メタデータ(例えば、300)の一部として格納されうる。ステップ604で、構内ブロックサーバのブロックエージェントは、オンラインコンテンツ管理サービスのメタデータサーバ(例えば、150)へブロックサーバリスト要求を送信する。ブロックサーバリスト要求は、それらが属するコンテンツアイテムネームスペースの識別子(例えば、314)に関連して、ステップ602で判定された現在のクライアントカーソル値を含む。ブロックサーバリスト要求はまた、認証が成功しているユーザアカウントを識別するユーザアカウント識別子(例えば、312)と、ブロックサーバリスト要求を行う構内ブロックサーバを識別するブロックサーバ識別子とを含んでもよい。
【0048】
[0057]ステップ606で、オンラインコンテンツ管理サービスのメタデータサーバは、ブロックサーバリスト要求を受信し、それを認証する。これは、ブロックサーバリスト要求で識別されるユーザアカウントがブロックサーバリスト要求で識別される構内ブロックサーバに対してブロックサーバリスト要求を行うために認証されたことを検証するために、メタデータプレーン(例えば、180)のデータにアクセスすることを含んでもよい。そうでない場合、メタデータサーバはブロックサーバリスト要求を否定してもよく、これにより処理600を終了する。要求を認証することはまた、ブロックサーバリスト要求で識別されるコンテンツアイテムネームスペースが当該要求で識別されるブロックサーバに割り当てられるものであることを検証することを含んでもよい。処理600の残りの処理に関し、メタデータサーバは、構内ブロックサーバへ現在割り当てられていない、ブロックサーバリスト要求で識別される任意のコンテンツアイテムネームスペースを無視してもよい。
【0049】
[0058]ステップ608において、メタデータサーバは、ブロックサーバリスト要求で識別される各コンテンツアイテムネームスペースについての任意の新しいサーバジャーナルエントリを判定するために、メタデータプレーンのサーバジャーナル(例えば、410)にアクセスする。この判定は、全ての”条件を満たす(qualifying)”新しいサーバジャーナルエントリが各コンテンツアイテムネームスペースについて収集されるまで、最新のサーバジャーナルエントリから開始してサーバジャーナルをスキャンし、サーバジャーナルを遡ってスキャンすることを含む。いくつかの実施形態によれば、条件を満たす新しいサーバジャーナルエントリは、以下のプロパティの全て、それらのサブセット(部分集合)、又はスーパーセット(上位集合)を有するものである。
【0050】
[0059]サーバジャーナルエントリ(例えば、412−2)で識別される(例えば、414)コンテンツアイテムネームスペースは、ブロックサーバリスト要求で識別されるコンテンツアイテムネームスペースの1つである。
【0051】
[0060]1以上のブロックサーバがコンテンツアイテムネームスペースへ割り当てられる。
【0052】
[0061]サーバジャーナルエントリで識別される(例えば、413)ブロックサーバは、ブロックサーバリスト要求を行うブロックサーバ、又は、オンラインコンテンツ管理サーバの構外ブロックサーバ(例えば、130)を識別する。
【0053】
[0062]サーバジャーナルエントリのサーバジャーナルカーソル値(例えば、417)は、ブロックサーバリスト要求で特定されるコンテンツアイテムネームスペースについての現在のクライアントカーソル値より大きい。
【0054】
[0063]ステップ610で、メタデータサーバは、構内ブロックサーバのブロックエージェントへブロックサーバリスト要求への応答を返す。当該応答は、ステップ608で識別したそれぞれ条件を満たす新しいサーバジャーナルエントリからの情報を含んでもよい。特に、それぞれ条件を満たす新しいサーバジャーナルエントリに対して返される情報は、以下の情報、又は、それらのサブセット、又は、スーパーセットを含んでもよい。
【0055】
[0064]条件を満たす新しいサーバジャーナルエントリのコンテンツアイテムネームスペースの識別子。
【0056】
[0065]条件を満たす新しいサーバジャーナルエントリのターゲットブロックサーバ識別子に依存して変わるエントリについての複製タスクのタイプ指標。特に、条件を満たすエントリのターゲットブロックサーバの識別子がブロックサーバリスト要求を行ったブロックサーバを識別する場合、その結果、複製タスクのタイプ指標は、エントリについての複製タスクがオファータイプの複製タスクであることを示す。一方、条件を満たすエントリのターゲットブロックサーバの識別子が構外ブロックサーバを識別する場合、その結果、複製タスクのタイプ指標は、エントリについての複製タスクがダウンロードタイプの複製タスクであることを示す。
【0057】
[0066]条件を満たすエントリのコンテンツアイテムブロックリスト(例えば、416)、又は、
[0067]条件を満たすエントリのサーバジャーナルカーソル値。
【0058】
[0068]ステップ612で、構内ブロックサーバのブロックエージェントは、メタデータサーバからのブロックサーバリスト要求への応答を受信し、構内ブロックサーバで複製ログ(例えば、500)の1以上の複製ログエントリ(例えば、502−2)を格納する。特に、当該応答で返されるそれぞれ条件を満たす新しいサーバジャーナルエントリについての情報は、複製ログの対応する複製ログエントリを格納するために使用される。各コンテンツアイテムネームスペースについて、条件を満たす新しいサーバジャーナルエントリについての情報は、それらのサーバジャーナルカーソル値の昇順で処理されうる。それぞれ条件を満たす新しいサーバジャーナルエントリについて、条件を満たす新しいサーバジャーナルエントリについての複製タスクのタイプエントリに基づくログエントリタイプ(例えば、518)、条件を満たすエントリのコンテンツアイテムネームスペースの識別子に基づくコンテンツアイテムネーム識別子(例えば、514)、条件を満たすエントリのコンテンツアイテムブロックリストであるコンテンツアイテムブロックリスト(例えば、516)、1以上のブロックサーバタスクエントリ(例えば、519−2)。
【0059】
[0069]ブロックサーバタスクエントリは、ログエントリで識別されるコンテンツアイテムネームスペースに割り当てられる、他のブロックサーバのそれぞれに対して作成されうる。ダウンロード複製タスクタイプのログエントリの場合、構外ブロックサーバについてのただ1つのブロックサーバタスクエントリであってもよい。オファー複製タスクタイプのログエントリの場合、ブロックサーバタスクエントリは、コンテンツアイテムネームスペースに割り当てられる他のブロックサーバのそれぞれについて作成されてもよい。
【0060】
[0070]ブロックサーバタスクエントリのタスクメタデータ(例えば、520)は、複製タスクがまだ完了していないことを示すように最初に設定される。複製ログエントリが複製ログに追加されると、構内ブロックサーバの対応の割り当てられたコンテンツアイテムネームスペースエントリ(例えば、302−2)におけるログエントリのコンテンツアイテムネームスペースについての現在のクライアントカーソル値(例えば、317)は、対応の条件を満たすエントリのサーバジャーナルカーソル値と等しくなるように設定される。そうすることにより、ブロックエージェントは、ブロックエージェントによって行われる次のブロックサーバリスト要求に応じて再び条件を満たすエントリについての情報を受信することはない。
【0061】
<3.5 複製タスクの処理>
[0071]
図7A乃至
図7Cは、構内ブロックサーバに格納される(例えば、ストレージ124−1に)複製ログ(例えば、530)で特定される複製タスクの処理において、構内ブロックサーバ(例えば、120−1)のブロックエージェント(例えば、126−1)の動作を示すフローチャート700を含む。ステップ702で、ブロックエージェントは、複製ログから複製ログエントリ(例えば、502−2)を取得する。例えば、ブロックエージェントは、保留している複製ログエントリについての複製ログを定期的にスキャンしてもよい。
【0062】
[0072]複製ログエントリは、複製ログエントリのブロックサーバタスクエントリ(例えば、519−2)の少なくとも1つが保留されている場合に保留であってもよい。ブロックサーバタスクエントリは、そのタスクメタデータ(例えば、520)によってそう示される場合に保留であってもよい。ブロックサーバタスクエントリのタスクメタデータは、ブロックサーバタスクエントリが多くの種々の方法で保留されていることを示してもよい。例えば、タスクメタデータは、ブロックサーバタスクエントリが保留されている、又は完了していないことを示す値、又は値の集合を含んでもよい。いくつかの実施形態によれば、タスクメタデータは、ブロックエージェントがブロックサーバタスクエントリを完了するために既に行った多数の試みを反映する値を含む。当該数値が閾値以下の場合、その結果、ブロックサーバタスクエントリは保留される。当該数値が閾値を超える場合、その結果、ブロックサーバタスクエントリは保留されない。以前の失敗が発生した場合に、ブロックサーバタスクエントリを完了するために複数回試みることによって、より高い復元力(resiliency)と対故障性(fault tolerance)が提供される。
【0063】
[0073]ステップ704で、ブロックエージェントは、保留ログエントリの複製タスクタイプ(例えば、518)を判定する。複製タスクタイプは、”ダウンロード”又は”オファー”の1つであってもよい。構内ブロックサーバに格納されない(つまり、構内ブロックサーバで欠落している)、構外ブロックサーバ(例えば、130)へアップロードされたコンテンツアイテムブロックをダウンロードするように、ダウンロード複製タスクタイプがブロックエージェントによって実行される。”オファー側(offeror)”の構内ブロックサーバへアップロードされるコンテンツアイテムブロックを、1以上の他の”被オファー側(offeree)”のブロックサーバへ送信するようにオファーし、当該オファーを受け付ける他のブロックサーバへそれらを送信するように、オファー複製タスクタイプが、ブロックエージェントによって実行される。
【0064】
[0074]構内ブロックサーバは、ピアリング関係を有する他の構内ブロックサーバとのみ、オファー複製タスクを実行することができる。2つの構内ブロックサーバ間のピアリング関係は、2つの構内ブロックサーバのブロックエージェント間でネットワーク接続を確立することが可能な場合に存在する。2つの構内ブロックサーバ間のネットワーク上に介在したネットワークファイアウォールのため、或いは、単に、2つの構内ブロックサーバを接続するネットワークがないため、2つの構内ブロックサーバ間でネットワーク接続を確立できない可能性がある。例えば、
図2を簡単に参照すると、ネットワークファイアウォール165−1、又はファイアウォール165−2は、構内ブロックサーバ120−1と構内ブロックサーバ120−2とがWAN160−3又はインターネット190を介してそれらの間のネットワーク接続を確立することを妨げうる。或いは、ネットワークファイアウォール165−1及び165−2は、ブロックエージェント126−1及び126−2が、インターネット190ではなく、WAN160−3を介してそれらの間のネットワーク接続を確立することを許容してもよい。他のネットワークファイアウォールの構成が可能である。例えば、ネットワークファイアウォール165−1及び165−2は、ブロックエージェント126−1及び126−2が、WAN160−3又はインターネット190を介してそれらの間のネットワーク接続を確立することを許容してもよい。構内ブロックサーバのペアの両方が当該構内ブロックサーバ間のネットワーク接続の確立を開始することができる構内ブロックサーバ間のペア間でピアリング関係が存在する必要はないことに注意されるべきである。例えば、ネットワークファイアウォール165−1及び165−2は、構内ブロックサーバ120−1のブロックエージェント126−1がWAN160−3を介して構内ブロックサーバ120−1のブロックエージェント126−2とHTTPS接続の確立を開始することを許容してもよいが、その逆はない。
【0065】
[0075]いくつかの実施形態によれば、構内ブロックサーバAが構内ブロックサーバBとピアリング関係を有していない場合、その結果、構内ブロックサーバAは、複製ログにおけるオファータイプの複製ログエントリを格納する際にその複製ログに、構内ブロックサーバBについてのブロックサーバタスクエントリを格納することができない。これは、ピアリング関係の欠如で、構内ブロックサーバAが、構内ブロックサーバBへ任意のコンテンツアイテムブロックをオファーすることができないためである。オファータイプ複製ログエントリは、複製ログエントリのブロックサーバタスクエントリの全てが構内ブロックサーバAがピアリング関係を有しない構内ブロックサーバに対するものであれば、全体的に複製ログから省略されうる。これは、ピアリングの欠如で、構内ブロックサーバAがピアリング関係を有していない任意の他の構内ブロックサーバへそのコンテンツアイテムブロックのいずれかをオファーすることができないためである。或いは、ピアリング関係の欠如で、ブロックサーバタスクエントリ又は複製ログエントリを省略する代わりに、構内ブロックサーバに対するブロックサーバタスクエントリは、ブロックサーバタスクエントリで識別される構内ブロックサーバとピアリング関係がないことを示すタスクメタデータとともに複製ログエントリの一部として格納されうる。
【0066】
[0076]ステップ704で、保留複製ログエントリがダウンロードタイプ複製ログエントリであるとブロックサーバエージェントが判定すると、その結果、処理700は、ステップ706へ進む(
図7B)。ダウンロードタイプ複製ログエントリは、オンラインコンテンツ管理サービスの構外ブロックサーバを識別する単一のブロックサーバタスクエントリを含んでもよい。ステップ706で、ブロックエージェントは、ダウンロードタイプ複製ログエントリで識別される、任意の欠落したコンテンツアイテムブロックを判定する。この判定は、当該エントリのコンテンツアイテムブロックリスト(例えば、516)に基づくことができる。ステップ708で、ブロックエージェントは、構外ブロックサーバから任意の欠落したコンテンツアイテムブロックをダウンロードする。ステップ710で、欠落したコンテンツアイテムブロックのダウンロードが成功したかどうかに従って、ブロックエージェントは、ブロックサーバタスクエントリのタスクメタデータを更新する。例えば、コンテンツアイテムブロックの全てがダウンロードすることができない場合、その結果、ブロックエージェントは、そのように示すタスクメタデータを更新してもよい。例えば、ブロックエージェントは、欠落したコンテンツアイテムブロックの全てをダウンロードすることに成功するために行う試みの回数を追跡する試みカウンタをインクリメントさせてもよい。一方で、ブロックエージェントが欠落したコンテンツアイテムブロックの全てのダウンロードに成功した場合、その結果、タスクメタデータは、ブロックサーバタスクエントリがもう保留されていないことを示すように更新されうる。ステップ710の後、処理700は、次の保留複製ログエントリを処理するためにステップ702へ処理を戻してもよい。
【0067】
[0077]一方、ステップ704で、保留複製ログエントリがオファータイプ複製ログエントリであるとブロックサーバエージェントが判定すると、その結果、処理700は、ステップ712へ進む(
図7C)。ステップ712で、ブロックエージェントは、保留複製ログエントリで識別されたコンテンツアイテムブロックのうちいずれが構内ブロックサーバが保持している(即ち、構内ブロックサーバに格納されている)かを判定する。この判定は、ログエントリのコンテンツアイテムブロックリストに基づくことができる。ログエントリのコンテンツアイテムブロックリストで識別される全てのコンテンツアイテムブロックは、コンテンツアイテムブロックの一部又は全てが構内ブロックサーバから削除又は移動されていない限り、構内ブロックサーバに格納されるべきである。例えば、コンテンツアイテムブロックは、最近使用されていない方法(例えば、最近ダウンロードされていない又は最近更新されていないこと)に従って、構内ブロックサーバから削除又は移動されてもよい。
【0068】
[0078]ステップ714で、ブロックエージェントは、オファー側の構内ブロックサーバがピアリング関係を有する保留複製ログエントリの保留ブロックサーバタスクエントリで識別される他のブロックサーバのそれぞれへオファー要求を送信する。オファー側構内ブロックサーバが構外ブロックサーバとのピアリング関係を有するいくつかの実施形態が想定されうる。当該オファー要求は、オファーされるコンテンツアイテムブロックを識別することができる。特に、オファー要求は、オファー側構内ブロックサーバが保持する保留複製ログエントリで識別されるコンテンツアイテムブロックのコンテンツアイテムブロックハッシュ値を含んでもよい。オファー要求は、オファー側構内ブロックサーバのブロックエージェントと被オファー側ブロックサーバのブロックエージェントとの間で確立されるネットワーク接続(例えば、HTTPS接続)を介して送信されうる。
【0069】
[0079]ステップ716で、オファー側構内ブロックサーバのブロックエージェントは、オファー側構内ブロックサーバからのオファー要求を受信することに応じて被オファー側ブロックサーバによって送信される任意の受領応答を受信する。被オファー側ブロックサーバからの各受領応答は、被オファー側ブロックサーバで現在格納されていない(即ち、被オファー側ブロックサーバで欠落している)オファーされたコンテンツアイテムブロックの1以上を識別することができる。任意の欠落したコンテンツアイテムブロックは、当該欠落したコンテンツアイテムブロックのコンテンツアイテムブロックハッシュ値によって受領応答において識別されうる。被オファー側ブロックサーバからの受領応答はまた、オファーされたコンテンツアイテムブロックが被オファー側ブロックサーバにおいて欠落していないことを示してもよい。
【0070】
[0080]ステップ718で、オファー側構内ブロックサーバのブロックエージェントは、被オファー側ブロックサーバの任意の欠落したコンテンツアイテムブロックを送信(アップロード)する。特に、被オファー側ブロックサーバからの所定の受領応答に関し、オファー側ブロックサーバのブロックエージェントは、被オファー側ブロックサーバからの受領応答で識別される任意の欠落したコンテンツアイテムブロックを送信(アップロード)する。
【0071】
[0081]ステップ720で、オファー側構内ブロックサーバのブロックエージェントは、保留ログエントリの保留ブロックサーバタスクエントリのタスクメタデータを更新する。特に、受領応答がブロックサーバタスクエントリに対応する被オファー側ブロックサーバから受信された場合、その結果、全ての欠落したコンテンツアイテムブロックの被オファー側ブロックサーバへの送信が成功したかどうかに従って、又は、受領応答が被オファー側ブロックサーバでコンテンツアイテムブロックが欠落していないことを示すがどうかに従って、ブロックサーバタスクエントリのタスクメタデータが更新される。何れかの場合、タスクメタデータは、ブロックサーバタスクエントリがもう保留でないことを示すように更新されうる。一方、受領応答が受信されていない場合、又は、被オファー側ブロックサーバへの欠落したコンテンツアイテムブロックの送信(アップロード)で失敗した場合、その結果、ブロックサーバタスクエントリが保留されている場合には、タスクメタデータの試みカウンタがインクリメントされうる。ステップ720の後、処理700は、次の保留複製ログエントリを処理するためにステップ702に処理を戻してもよい。
【0072】
<4.0 コンテンツアイテムブロックの削除>
[0082]一般的に、要件ではないが、構内ブロックサーバ(例えば、120)は、構外ブロックサーバ(例えば、130)がそのローカルストレージ(例えば、134)に有するものよりも非常に少ない、そのローカルストレージ(例えば、124)のローカルデータストレージスペースが予測される。例えば、構内ブロックサーバにおけるトータルのローカルストレージが数テラバイトのオーダである一方で、構外ブロックサーバにおけるトータルのローカルストレージはエイト(8)ゼタバイトのオーダとなる場合がある。このように、構外ブロックサーバは、所定の構内ブロックサーバよりも最大で10億倍ものストレージスペースを有する可能性がある。所定の構内ブロックサーバに割り当てられるコンテンツアイテムネームスペースの数が構外ブロックサーバよりも少ない場合であっても、構内ブロックサーバは、構内ブロックサーバに割り当てられる全てのコンテンツアイテムネームスペースに、全てのコンテンツアイテムの全てのコンテンツアイテムブロックを格納するには、依然として十分なローカルストレージを有していないかもしれない。
【0073】
[0083]いくつかの例示の実施形態において、構内ブロックサーバにローカルに格納されたコンテンツアイテムブロックは、他のコンテンツアイテムブロックに利用可能な構内ブロックサーバのローカルストレージスペースを作り出すために、当該ローカルストレージから削除または移動される。例えば、他のコンテンツアイテムブロックは、アップロード中若しくはアップロード間近である、又は、構内ブロックサーバーにアップロードされる予定のコンテンツアイテムブロックであるかもしれない。
【0074】
[0084]いずれのコンテンツアイテムブロックを削除又は移動させるかを判定する種々のアプローチが採用されうる。いくつかの例示の実施形態によれば、最も長い時間未使用(LRU)のアプローチが採用される。LRUアプローチによれば、コンテンツアイテムブロックによって私用される構内ブロックサーバのローカルストレージスペースの量が閾値を満足しない場合に、その結果、最も長い時間未使用のコンテンツアイテムブロックがローカルストレージから削除または移動される。当該閾値は、構内ブロックサーバのコンテンツアイテムブロックについてトータルのローカルストレージスペースの割合に基づくものであってもよい。ここで、トータルのローカルストレージスペースは、そのストレージスペースの一部または全てがコンテンツアイテムブロックを記憶するために現在使用されているかどうかにかかわらず、コンテンツアイテムブロックを格納するために利用可能なストレージスペースの現在の最大のトータル量を示す。現在の使用量が上記割合より大きい場合に、その結果、現在の使用量は閾値を満足しない。代わりに、閾値は、ローカルストレージに格納されたコンテンツアイテムブロックによって現在使用されているストレージスペースの量を差し引いた後に残る、現在の最大のローカルストレージスペースの量に基づくこともできる。この場合、現在の使用量を計算した後に残るローカルストレージスペースが閾値量より少ない場合、その結果、現在の使用量は閾値を満足しない。
【0075】
[0085]現在の使用量が閾値を満足するか否かの判定は、種々の異なる時刻に行われうる。1つの可能性のある時刻は、1以上のコンテンツアイテムブロックが構内ブロックサーバにアップロードされるときである。特に、ローカルストレージに格納されたアップロードされたコンテンツアイテムの現在の使用量が閾値を満足しない場合、その結果、1以上のコンテンツアイテムブロックがLRUアプローチに従ってローカルストレージから削除又は移動されてもよい。
【0076】
[0086]ローカルストレージに格納されるコンテンツアイテムブロックは、その最近のアップロード時刻、及び/又は、その最近のダウントード時刻に基づいて最も長く使用されていないかが考慮されてもよい。コンテンツアイテムブロックの最近アップロードされた時刻は、コンテンツアイテムが構内ブロックサーバに最近アップロードされた時刻を反映する。例えば、コンテンツアイテムブロックの最近のアップロード時刻に従って、構内ブロックサーバに最も長くアップロードされていなかったローカルストレージに格納されるコンテンツアイテムブロックが削除又は移動されてもよい。コンテンツアイテムブロックの最近ダウンロードされた時刻は、コンテンツアイテムが構内ブロックサーバから最近ダウンロードされた時刻を反映する。例えば、コンテンツアイテムブロックの最近のダウンロード時刻に従って、構内ブロックサーバから最も長くダウンロードされていなかったローカルストレージに格納されるコンテンツアイテムブロックが削除又は移動されてもよい。構内ブロックサーバは、構内ブロックサーバに格納されるコンテンツアイテムブロックについての最近のアップロード時刻及びダウンロード時刻を反映するメタデータを格納して、保持してもよい。
【0077】
[0087]いくつかの例示の実施形態によれば、制限されたLRUアプローチが使用される。制限されたLRUアプローチによれば、上述したLRUアプローチに従った削除又は移動を制限するコンテンツアイテムブロックは追加の条件が満たされない限り、削除又は移動されない。
【0078】
[0088]1つの可能性のある追加の条件は、削除又は移動の候補であるコンテンツアイテムブロックが、構外ブロックサーバ、1以上の他の構内ブロックサーバ、又は、1以上の他の構内ブロックサーバ及び構外ブロックサーバの何れかである1以上の他のブロックサーバに格納されることである。候補のコンテンツアイテムブロックが削除又は移動の候補である構内ブロックサーバのみに格納される場合、その結果、コンテンツアイテムブロックは、潜在的に唯一のコンテンツアイテムブロックを保存するために、削除又は移動されない。
【0079】
[0089]他の可能性のある条件は、削除又は移動の候補となるコンテンツアイテムブロックが、削除の候補であるコンテンツアイテムブロックの構内ブロックサーバに加えて、少なくとも1つの他のブロックサーバに割り当てられたコンテンツアイテムネームスペースに属するコンテンツアイテムに含まれることである。コンテンツアイテムネームスペースが削除又は移動の候補であるコンテンツアイテムブロックの構内ブロックサーバのみに割り当てられている場合、その結果、コンテンツアイテムブロックは、潜在的に唯一のコンテンツアイテムブロックを保存するために、削除又は移動されない。
【0080】
[0090]他の可能性のある条件は、コンテンツアイテムブロックが”固定された(sticky:スティッキー)”コンテンツアイテムブロックとして特別にマークされている場合である。固定されたコンテンツアイテムブロックは、全ての固定されていないコンテンツアイテムブロックが削除又は移動されるまで、削除又は移動されない。スティッキーとしてコンテンツアイテムブロックを指定することは、重要である、又は、比較的将来ダウンロードされそうなコンテンツアイテムブロックの削除又は移動を防ぐ助けとなりうる。コンテンツアイテムブロックは、関連付けられるコンテンツアイテネームスペースに基づいて、スティッキーとして指定されてもよい。特に、コンテンツアイテムネームスペースは、オンラインコンテンツ管理サービスによって提供されるグラフィカルユーザインタフェースを通じて(例えば、ウェブサイト170を介して)、オンラインコンテンツ管理サービスのユーザによってスティッキーとして指定されてもよい。代替的に、コンテンツアイテムネームスペースは、コンテンツアイテムネームスペースの特性及び使用に基づいて、スティッキーとして自動的に指定されてもよい。例えば、コンテンツアイテムネームスペースが多数のユーザ(例えば10以上)間で共有されている場合、結果、コンテンツアイテムネームスペースはスティッキーとして自動的に指定されうる。これは、多数のユーザ間で供給されるコンテンツアイテムブロックの削除又は移動を防ぐのに有用である。いくつかの例示の実施形態において、共有されるコンテンツアイテムネームスペースは、当該コンテンツアイテムネームスペースでの最近のユーザアクティビティがある場合にのみスティッキーとして指定される。これは、最近使用されていないコンテンツアイテムブロックを保持し続けることを防止するのに有用である。最近のアクティビティは、最近(例えば、過去1日、1週間、1か月又は1年以内)のコンテンツアイテムネームスペースに属するコンテンツアイテムのダウンロード、アップロード、又はアクセスを含んでもよい。最初にスティッキーとして指定されたコンテンツアイテムネームスペースは、当該コンテンツアイテムネームスペースをスティッキーとして指定するための条件がもはや存在しない場合、後の2回目においてはもはやスティッキーとして自動的に指定されなくてもよい。例えば、最初に最近のアクティビティに基づいてスティッキーとしてされたコンテンツアイテムネームスペースが後の2回目においてもはや最近のアクティビティを有していない場合、その後、2回目以降において、当該コンテンツアイテムネームスペースはもはやスティッキーとして指定されなくてもよい。構内ブロックサーバは、ローカルに格納されたコンテンツアイテムブロック、及び/又は、割り当てされたコンテンツアイテムネームスペースがスティッキーとして指定されていることを示すメタデータを格納して保持してもよい。
【0081】
[0091]いくつかの実施形態によれば、スティッキー性(stickiness)には複数のレベルがあり、スティッキー性のそれらのレベル順に、制限されたLRUアプローチに従って、コンテンツアイテムブロックが削除又は移動される。例えば、スティッキー性A、B、及びCの3つのレベルがあり、レベルCはレベルBより低く、レベルBはレベルAより低い。この場合、レベルCの最初のコンテンツアイテムブロックが削除又は移動される前に、任意のスティッキー性のレベルが指定されていないコンテンツアイテムブロックが削除又は移動される。レベルBの最初のコンテンツアイテムブロックが削除又は移動される前に、レベルCのコンテンツアイテムブロックが削除又は移動される。レベルAの最初のコンテンツアイテムブロックが削除又は移動される前に、レベルBのコンテンツアイテムブロックが削除又は移動される。
【0082】
<5.0 割り当ての際のコンテンツアイテムブロックの複製>
[0092]コンテンツアイテムネームスペースは、現在割り当てられていないブロックサーバに割り当てることができる。例えば、コンテンツアイテムネームスペースは、構外ブロックサーバ130にのみ割り当てられてもよい。その後、後のタイミングで、当該コンテンツアイテムネームスペースは、構外ブロックサーバ130と、構内ブロックサーバ120−1に割り当てられてもよい。その後、さらに後のタイミングで、当該コンテンツアイテムネームスペースは、構外ブロックサーバ130と、構内ブロックサーバ120−1と、構内ブロックサーバ120−2に割り当てられてもよい。他の実施形態において、コンテンツアイテムネームスペースは、構内ブロックサーバ120−1に割り当てられ、その後、構内ブロックサーバ120−1及び構外ブロックサーバ130へ割り当てられてもよい。このように、コンテンツアイテムネームスペースにあるときに割り当てられるブロックサーバの組合せは、コンテンツアイテムネームスペースに他のときに割り当てられるブロックサーバの組合せと異なってもよい。
【0083】
[0093]コンテンツアイテムネームスペースが新たなブロックサーバに割り当てられると、ブロックサーバは、当該コンテンツアイテムネームスペースに属するコンテンツアイテムを構成するコンテンツアイテムの一部のみを格納するか、又は全く格納しなくてもよい。結果として、パーソナルコンピューティングデバイスのコンテンツアイテム同期エージェントは、コンテンツアイテムネームスペースのコンテンツアイテムのコンテンツアイテムブロックを当該ブロックサーバからダウンロードすることができないかもしれない。
【0084】
[0094]本発明のいくつかの例示の実施形態によれば、コンテンツアイテムネームスペースが当該コンテンツアイテムネームスペースが1以上の他のブロックサーバに現在割り当てられている状況で、新たなブロックサーバに割り当てられる場合、当該コンテンツアイテムネームスペースのコンテンツアイテムのコンテンツアイテムブロックは、当該他のブロックサーバから新たなブロックサーバに複製される。例えば、コンテンツアイテムネームスペース”ABC123”が構外ブロックサーバ130に割り当てられ、その後構内ブロックサーバ120−1に割り当てられる場合、結果、構内ブロックサーバ120−1は、”ABC123”のコンテンツアイテムネームスペースのコンテンツアイテムを構成するコンテンツアイテムブロックを構外ブロックサーバ130からダウンロードすることができる。他の形態において、コンテンツアイテムネームスペース”DEF456”が構内ブロックサーバ120−1に割り当てられ、その後構内ブロックサーバ120−2に割り当てられる場合、結果、構内ブロックサーバ120−1は、”DEF456”のコンテンツアイテムネームスペースのコンテンツアイテムを構成するコンテンツアイテムブロックを構内ブロックサーバ120−2へオファーして提供することができる。
【0085】
[0095]いくつかの例示の実施形態によれば、1以上のブロックサーバに現在割り当てられているコンテンツアイテムネームスペース新たなブロックサーバに割り当てられる場合、コンテンツアイテムブロックは、上述のコンテンツアイテムブロックの複製プロトコルに従って、現在割り当てられているブロックサーバから新たなブロックサーバに複製される。特に、新たなブロックサーバのブロックサーバ識別子が、現在割り当てられている構内ブロックサーバと新たなブロックサーバのそれぞれにおいて保持されるコンテンツアイテムブロックの複製メタデータ300において、コンテンツアイテムネームスペースにおける割当コンテンツアイテムネームスペースエントリ302に、割当ブロックサーバ識別子313として追加される。例えば、現在割り当てられている構内ブロックサーバと新たなブロックサーバのそれぞれにおいてブロックエージェントは、メタデータサーバ150から受信する情報に基づいて、当該情報をローカルに格納するコンテンツアイテムブロックの複製メタデータ300に追加してもよい。例えば、現在割り当てられている構内ブロックサーバ及び新たなブロックサーバのブロックエージェントは、ブロックサーバリストの要求に応じて、メタデータサーバ150から当該情報を受信してもよい。例えば、コンテンツアイテムネームスペースが新たなブロックサーバに割り当てられた後に、通知サーバ140は、ピンメッセージを現在割り当てられている構内ブロックサーバ及び新たなブロックサーバのそれぞれのブロックエージェントに送信してもよい。当該ピンメッセージの受信に応じて、現在割り当てられている構内ブロックサーバ及び新たなブロックサーバのブロックエージェントは、ブロックサーバリストの要求をメタデータサーバ150へ送信し、コンテンツアイテムネームスペースが新たなブロックサーバに割り当てられるブロックサーバリストの要求に応答して、メタデータサーバ150から受信してもよい。
【0086】
[0096]現在割り当てられている構内ブロックサーバのそれぞれにおけるブロックエージェントはその後、オファータイプのログエントリ502についてのその複製ログ500を、新たなブロックサーバに新たに割り当てられたコンテンツアイテムネームスペースの識別子と一致するコンテンツアイテムネームスペース識別子514と、ダウンロードタイプのログエントリとは対照的にログエントリがオファータイプであることを示すログエントリタイプ518とでスキャンすることができる。新たなブロックサーバタスクエントリ519は、そのようなオファータイプのログエントリのそれぞれに追加される。新たなブロックサーバタスクエントリは、新たなブロックサーバを識別するブロックサーバ識別子513と、複製タスクがまだ完了していないことを示すタスクメタデータ520とを有する。現在割り当てられている構内ブロックサーバのそれぞれのブロックエージェントはその後、上述したコンテンツアイテムブロックの複製処理700に従って、新たなブロックサーバで所有される、当該コンテンツアイテムネームスペースのコンテンツアイテムブロックをオファーすることができる。
【0087】
[0097]また、新たなブロックサーバのブロックエージェントは、新たなブロックサーバに割り当てられたコンテンツアイテムネームスペースの任意のコンテンツアイテムブロックを、構外ブロックサーバからダウンロードするために、上述したコンテンツアイテムブロックの複製処理600及び700を実行する。
【0088】
<6.0 ベーシックコンピューティングハードウェア及びソフトウェア>
<6.1 ベーシックコンピューティングデバイス>
[0098]
図8は、本発明の例示の実施形態を具現化しうるベーシックコンピューティングデバイス800を示すブロック図である。コンピューティングデバイス800、及びそれらの接続、関係、及び機能を含むそのコンポーネントは、単なる一例であって、例示の実施形態の実装に限定する意図はない。例示の実施形態を実施するのに適切な他のコンピューティングデバイスは、異なる接続、関係及び機能を有するコンポーネントを含む異なるコンポーネントを含みうる。
【0089】
[0099]コンピューティングデバイス800は、メインメモリ806をアドレス解決し、かつ、コンピューティングデバイス800の種々のコンポーネント間で及び種々のコンポーネントの中でデータを転送するための、バス802又は他の通信機構を含みうる。
【0090】
[0100]コンピューティングデバイス800はまた、情報を処理するためのバス802と結合した1以上のハードウェアプロセッサ804を含みうる。ハードウェアプロセッサ804は、一般用途マイクロプロセッサ、システム・オン・チップ(SoC)、又は他のプロセッサであってもよい。
【0091】
[0101]ランダムアクセスメモリ(RAM)又は他の動的ストレージデバイスなどのメインメモリ806はまた、情報やプロセッサ804によって実行されるソフトウェア命令を格納するためのバス802に結合されうる。メインメモリ806はまた、プロセッサ804によって実行されるべきソフトウェア命令の実行中に一時変数又は他の中間情報を格納するために使用されうる。
【0092】
[0102]プロセッサ804へアクセス可能な記憶媒体に格納される場合、ソフトウェア命令は、コンピューティングデバイス800を当該ソフトウェア命令で指定された動作を実行するようにカスタマイズされた特定用途のコンピューティングデバイスへ変換する。用語”ソフトウェア”、”ソフトウェア命令”、”コンピュータプログラム”、”コンピュータで実行可能な命令”、及び”プロセッサで実行可能な命令”は、人間が読取可能かどうかにかかわらず、特定の動作を実行するようにコンピューティングデバイスに命令するための、任意の機械可読情報をカバーするように、広く解釈されるべきであり、限定はしないが、アプリケーションソフトウェア、デスクトップアプリケーション、スクリプト、バイナリ、オペレーティングシステム、デバイスドライバ、ブートローダ、シェル、ユーティリティ、システムソフトウェア、JAVASCRIPT、ウェブページ、ウェブアプリケーション、プラグイン、組み込みソフトウェア、マイクロコード、コンパイラ、デバッガ、インタプリタ、仮想マシン、リンカー、及びテキストエディタを含む。
【0093】
[0103]コンピューティングデバイス800はまた、静的情報及びプロセッサ804へのソフトウェア命令を格納するためにバス802に結合された読み取り専用メモリ(ROM)808又は他の静的ストレージデバイスを含みうる。
【0094】
[0104]1以上の大容量ストレージデバイス810は、磁性式メモリ、光学式メモリ、半導体メモリ、光磁気メモリ、フラッシュメモリ、又は大容量ストレージ技術を利用可能な他のものなどの固定媒体若しくは取り外し可能な媒体に、情報及びソフトウェア命令を永続的に格納するためのバス802に結合されうる。大容量ストレージデバイスは、ネットワーク上で共有されえ、或いは、専用の大容量ストレージでありうる。通常、大容量ストレージデバイス810(例えば、デバイスに対するメインハードディスク)の少なくとも1つは、オペレーティングシステム、ユーザアプリケーションプログラム、ドライバ、他のサポートファイル、及び全ての種類の他のデータファイルを含む、コンピュータデバイスの動作を方向付けるためのプログラム本体とデータを格納する。
【0095】
[0105]コンピューティングデバイス800は、バス802を介して、情報をコンピュータユーザに表示するための液晶ディスプレイ(LCD)又は他の電子的な視覚ディスプレイなどのディスプレイ812へ結合されうる。いくつかの構成において、タッチ検出技術(例えば、抵抗性、容量性など)を組み込むタッチセンサ式サーフェイスが、プロセッサ804へタッチジェスチャ(例えば指又はスタイラス)入力をやり取りするためのタッチセンサー式ディスプレイの形式でディスプレイ812上に敷かれてもよい。
【0096】
[0106]アルファベットキー及び他のキーを含む入力デバイス814は、情報及びコマンドの選択をプロセッサ804へ通知するためのバス802へ結合されうる。英数字キーや他のキーに追加して、或いは、代わりに、入力デバイス814は、例えば、電源(On/Off)ボタン、”ホーム”ボタン、音量制御ボタンなどの1以上の物理的なボタン又はスイッチを含むことができる。
【0097】
[0107]ユーザ入力デバイスの他のタイプは、プロセッサ804へ方向情報やコマンドの選択を通知し、ディスプレイ812上でのカーソルの移動を制御するためのマウス、トラックボール、又はカーソル方向キーなどのカーソル制御816でありうる。当該入力デバイスは、典型的に、デバイスが平面上の位置を特定できるようにする第1軸(例えば、x)と第2軸(例えば、y)の二軸の2つの自由度を有する。
【0098】
[0108]
図8に示される構成などのいくつかの構成において、1以上のディスプレイ812、入力デバイス814、及びカーソル制御816がコンピューティングデバイス800の外部コンポーネント(即ち、周辺デバイス)である一方で、ディスプレイ812、入力デバイス814、及びカーソル制御816のいくつか又は全ては、他の構成において、コンピューティングデバイス800のフォームファクタの一部として統合されてもよい。
【0099】
[0109]開示のシステム、方法及びモジュールの機能は、メインメモリ806に含まれる1以上のソフトウェア命令の1以上のプログラムを実行するプロセッサ804に応じて、コンピューティングデバイス800によって実行されうる。そのようなソフトウェア命令は、ストレージデバイス810などの他の記憶媒体からメインメモリ806へと読み込まれてもよい。メインメモリ806に含まれるソフトウェア命令の実行は、プロセッサ804に例示の実施形態の機能を実行させる。
【0100】
[0110]例示の実施形態の機能及び動作がソフトウェア命令で全体的に実装されうる一方で、コンピューティングデバイス800のハード・ワイヤード又はプログラマブル回路(例えば、ASIC、FPGAなど)は、手近な特定の実装の要件に従って、機能を実行するためにソフトウェア命令の一部として又は組み合わせて他の実施形態において使用されうる。
【0101】
[0111]ここで使用される用語“記憶媒体”は、コンピューティングデバイスを特定の様式で動作させるデータ及びソフトウェア命令の少なくとも1つを格納する非一時的な媒体として参照される。そのようなストレージ媒体は、不揮発性の媒体及び/又は揮発性の媒体を備えうる。不揮発性媒体は、ストレージデバイス810などの、例えば、不揮発性のランダムアクセスメモリ(NVRAM)、フラッシュメモリ、光学ディスク、磁性ディスク、又は半導体ドライバを含む。揮発性媒体はメインメモリ806などの動的メモリを含む。記憶媒体の一般的な形式は、例えば、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、半導体ドライブ、磁性テープ、若しくは任意の他の時期的データ記憶媒体、CD-ROM、若しくは穴のパターンを伴う任意の他の光学的データ記憶媒体、RAM、PROM、及びEPROM、FLASH-EPROM、NVRAM、フラッシュメモリ、任意の他のメモリチップ又はカートリッジを含む。
【0102】
[0112]記憶媒体は、送信媒体とは区別されるものの、当該送信媒体と連結して使用されうる。送信媒体は、ストレージ媒体間で情報を転送することに使用されてもよい。例えば、送信媒体は、バス802を備える有線を含む同軸ケーブル、銅線、及び光ファイバーを含む。送信媒体はまた、電波及び赤外データ通信中に生成されるものなどの、音波又は光波の形式をとることもできる。
【0103】
[0113]媒体の様々な形式は、実行のためにプロセッサ804へ1つ以上のソフトウェア命令の1つ以上のシーケンスを運ぶことに含まれうる。例えば、ソフトウェア命令は、リモートコンピュータの磁性ディスク又は半導体ドライバ上でまず実行されうる。リモートコンピュータは、その動的メモリへソフトウェア命令をロードし、モデムを用いて電話線を介してソフトウェア命令を送信することができる。コンピューティングデバイス800のローカルなモデムは、電話回線でデータを受信し、データを赤外線信号に変換するための赤外線送信機を用いることができる。赤外線検出機は赤外線信号で運搬されたデータを受信することができ、適切な回路がそのデータをバス802に乗せる。バス802は、プロセッサ804がソフトウェア命令を読み出して実行するメインメモリ806にデータを運搬する。メインメモリ806によって受信される本ソフトウェア命令は、プロセッサ804によって実行される前又は実行された後の何れかにストレージデバイス810に選択的に格納されうる。
【0104】
[0114]コンピューティングデバイス800はまた、バス802へ結合される1以上の通信インタフェース818を含みうる。通信インタフェース818は、ローカルネットワーク822(例えば、イーサネットネットワーク、無線ローカルエリアネットワーク、セルラー電話ネットワーク、Bluetooth無線ネットワーク、又は同様のもの)へ接続された、有線又は無線のネットワークリンク820へ結合する2つの方法のデータ通信を提供する。通信インタフェース818は、種々のタイプの情報を表すデジタルデータストリームを伝達する電気信号、電磁信号、又は光信号を送受信する。例えば、通信インタフェース818は、有線のネットワークインタフェースカード、一体化された無線アンテナを有する無線ネットワークインタフェースカード、又はモデム(例えば、ISDN、DSL、又はケーブルモデム)でありうる。
【0105】
[0115]ネットワークリンク820は、通常、1以上のネットワークを通じて、他のデータデバイスへのデータ通信を提供する。例えば、ネットワークリンク820は、ローカルネットワーク822を通じて、ホストコンピュータ824への又はインターネットサービスプロバイダ(ISP)826によって運用されるデータ装置への接続を提供しうる。ISP826は順に、”Internet”828として通常参照されるワールド・ワイド・パケットデータ通信ネットワークを通じてデータ通信サービスを提供する。ローカルネットワーク822及びInternet828は、デジタルデータストリームを伝達する電気信号、磁性信号、又は光信号を使用する。コンピューティングデバイス800への及びコンピューティングデバイス800からのデジタルデータを伝達する、種々のネットワークを通じた信号、及び、ネットワークリンク820上の、及び通信インタフェース818を通じた信号は、送信媒体の例示の形式である。
【0106】
[0116]コンピューティングデバイス800は、ネットワーク、ネットワークリンク820、及び通信インタフェース818を通じて、プログラムコードを含む、メッセージを送信し、データを受信することができる。例えば、サーバ830は、インターネット828、ISP826、ローカルネットワーク822、及び通信インタフェース818を通じて、アプリケーションプログラムに対して要求されるコードを送信しうる。
【0107】
[0117]受信コードは、受信した際にプロセッサ804によって実行されえ、及び/又は、後の実行のためにストレージデバイス810又は他の不揮発性のストレージに格納されうる。
【0108】
<6.2 ベーシックソフトウェアシステム>
[0118]
図9は、コンピューティングデバイス800の動作を制御するために使用されうるベーシックソフトウェアシステム900を示す概略図である。ソフトウェアシステム900、及びそれらの接続、関係、及び機能を含むそのコンポーネントは、単なる一例であって、例示の実施形態の実装に限定する意図はない。例示の実施形態を実施するのに適切な他のソフトウェアシステムは、異なる接続、関係及び機能を有するコンポーネントを含む異なるコンポーネントを含んでもよい。
【0109】
[0119]ソフトウェアシステム900は、コンピューティングデバイス800の動作を方向付けるために提供される。システムメモリ(RAM)806及び固定ストレージ(例えば、ハードディスク、又はフラッシュメモリ)810に格納されるソフトウェアシステム900はカーネル又はオペレーティングシステム(OS)910を含む。
【0110】
[0120]OS910は、プロセス、メモリ配置、ファイル入力及び出力(I/O)、及びデバイスI/Oの実行を管理することを含む、コンピュータ動作のローレベルの態様を管理する。902A、902B、902C・・・902Nとして表される、1以上のアプリケーションプログラムは、システム900による実行のために”ロードされ”うる(例えば、固定ストレージ810からメモリ806へ転送される)。アプリケーション又はデバイス900上での使用を意図した他のソフトウェアはまた、ダウンロード可能で、コンピュータで実行可能な命令のトークンのセットとして、例えば、インターネット上の記憶場所から(例えば、ウェブサーバ、アプリストア、又は他のオンラインサービスから)ダウンロード及びインストールするために格納されうる。
【0111】
[0121]ソフトウェアシステム900は、グラフィカルな(例えば、”ポイント・アンド・クリック”又は”タッチジェスチャ”)形式で、ユーザコマンド及びデータを受信するためのグラフィカルユーザインタフェース(GUI)915を含む。これらの入力は順に、オペレーティングシステム910及びアプリケーション902の少なくとも1つからの命令に従ってシステム900によって作動されうる。GUI915はまた、ユーザが追加の入力を供給したり、又は、セッションを終了させたりする(例えば、ログオフする)とすぐに、OS910及びアプリケーション902からの動作結果を表示するように務める。
【0112】
[0122]OS910は、デバイス800のベアハードウェア920(例えば、プロセッサ804)上で直接的に実行することができる。代替的に、ハイパーバイザ又は仮想マシンモニタ(VMM)930は、ベアハードウェア920及びOS910の間に割り込んで設けられてもよい。この構成において、VMM930はグデバイス800のOS910及びベアハードウェア920の間のソフトウェア”クッション”又は仮想レイヤとして作動する。
【0113】
[0123]VMM930は、1以上の仮想マシンインスタンス(”ゲストマシン”)を作成し実行する。各ゲストマシンは、OS910などの”ゲスト”オペレーティングシステムと、ゲストオペレーティングシステム上で実行するように設計された、アプリケーション902などの1以上のアプリケーションを含む。VMM930は、仮想オペレーティングプラットフォームを有するゲストオペレーティングシステムを提示し、ゲストオペレーティングシステムの実行を管理する。
【0114】
[0124]いくつかの例において、VMM930は、デバイス800のベアハードウェア920上で直接実行されているかのように、ゲストオペレーティングシステムを実行することを許容することができる。これらの例において、ベアハードウェア920上で実行するように構成されたゲストオペレーティングシステムの同一のバージョンはまた、修正又は再構成なしにVMM930上で実行されうる。言い換えれば、VMM930は、いくつかの例において、ゲストオペレーティングシステムへ完全なハードウェアと、CPU仮想化を提供することができる。
【0115】
[0125]他の例において、ゲストオペレーティングシステムは、効率的にVMM930上で実行されるように特別に設計されるか、又は、構成されうる。それらの例において、ゲストオペレーティングシステムは、仮想マシンモニタ上で実行する”aware”であってもよい。言い換えれば、VMM930は、いくつかの例において、ゲストオペレーティングシステムへ準仮想化を提供することができる。
【0116】
[0126]上述のベーシックコンピュータハードウェア及びソフトウェアは、本実施形態を実施するために採用されうる基本的な下層のコンピュータコンポーネントを示す目的で提示される。しかしながら、例示の実施形態は、任意の特定のコンピューティング環境又はコンピューティングデバイス構成に限定されない。代わりに、実施形態が本開示の分野の当業者がここで提示した実施形態の特徴及び機能をサポートできることができるものとして理解するであろう、任意の種別のシステムアーキテクチャ又は処理環境で実装されうる。
【0117】
<7.0拡張及び代替例>
[0127]前述の明細書において、本発明の例示の実施形態は、多数の特定の詳細を参照して説明した。しかしながら、これらの詳細は、特定の実装の要件に従って実装ごとに変化することができる。例示の実施形態は、従って、限定的な意味というよりはむしろ例示とみなされるものである。