【実施例】
【0030】
図1は、本開示によるネットワークデータを格納する例示的なシステムの概略構造図である。このデータを格納するシステムは、下記を含む。
【0031】
データノード:データノードは、ネットワーク内のノードであり、生データおよびインデックスを格納するために用いられる。この生データは、データユニットの形式でデータノードに格納される。
【0032】
管理ノード:データ管理ノードは、ネットワーク内のノードであり、中間層として振る舞い、索引付け、冗長性ストラテジーなどのお決まりのサービスを提供するために用いられる。管理ノードは、1つのグループの関連するデータノードを管理する。
【0033】
メタノード:データノードの名称、空間および関係性マッピングを管理するメタデータノードは、ネットワーク内のノードであり、基礎的な経路情報を提供するために用いられる。メタノードによって主に保持される2つの経路の関係は、メタノードから管理ノードまでの経路(一次経路)および管理ノードからデータノードまでの経路(二次経路)である。
【0034】
トランザクションログ:ジャーナリング技術に基づくトランザクション管理ノードであり、一般的には、管理ノードに配置され、ログファイルを格納し、トランザクションデータ保護を実現するために用いられる。
【0035】
ロックノード:グローバルネットワークノードであり、ファイルの形式でデータロックを格納し、データアクセスのロック管理を実現するために用いられる。
【0036】
図1のネットワークデータストレージシステムのアーキテクチャは、
図2に示すようにツリー構造に組織化される。
【0037】
図2は、本開示による格納するネットワークデータのための例示的なシステムのツリー構造を示す概略図である。
【0038】
図に示すように、ネットワークデータストレージシステムにおけるノードは論理的に三層に分けられる。最下層から最上層までは、データノード、管理ノード、およびメタノードである。メタノードはルートノードとして振る舞い、複数のリーフノードとして管理ノードを有し、さらに、各管理ノードは、リーフノードとして複数のデータノードを順に有する。
【0039】
前記の例示的な実施例のネットワークデータストレージシステムを、下記の手段を用いて構成することができる。
【0040】
ステップ1:データユニットを判定し、IDをデータユニットに割り当て、データノードの中にデータユニットを分散して格納する。
【0041】
この例示的な実施形態におけるデータユニットは、ファイルシステムの層を超える抽象的なデータセットのことをいう。業務の特徴および業務の必要性に基づき、単独で管理することができる最小データセットとしてデータユニットを定義することができる。企業データの大部分の要求および処理は、明確な局所性の特徴を有する。例えば、電子メールシステムにおいて、電子メールを分類すること、索引作成すること、受信することおよび送信することは、1つの電子メールアカウントのような固定名称の空間内で実現される。この場合では、電子メールアカウントをデータユニットとして取り扱うことができる。
【0042】
データユニットは、例えば、データファイル、インデックスファイル、およびファイルディレクトリなど、複数のファイルまたはディレクトリをその中に含むことができる。これらのファイルおよびディレクトリは、データユニットを格納するデータノード内のローカルのファイルシステムにより管理される。
【0043】
データユニットのIDは、データユニットを一意的に識別する。データユニットのIDは、2個の情報を含む。すなわち、データユニットを格納するデータノードのID、およびデータユニットのデータノードにおける具体的な位置情報である。これらの2個の情報を、データユニットの経路演算方法を用いてデータユニットのIDから計算することができる。従って、データユニットのIDは、データユニットとデータユニットを格納するデータノードとの間の対応関係を暗に含む。
【0044】
ステップ2:経路演算方法と経路情報を判定し、メタノードに情報を格納する。
【0045】
メタノードによって保持される経路情報は、以下を含む。すなわち、メタノードから管理ノードまでの経路の情報(すなわち、一次経路情報)、および管理ノードからデータノードまでの経路の情報(すなわち、二次経路情報)である。これらの2種類の経路情報は、下記のマッピング関係およびマッピング演算方法を用いて実装される。
【0046】
データユニット情報(例えば、データユニットの名称)と関連したデータユニットのIDとの間のマッピング関係テーブル、およびデータノードIDと管理ノードIDとの間のマッピング関係テーブルを確立し、経路演算方法を用いてデータユニットを格納するデータノードのIDとこのデータユニットのデータノードにおける具体的な位置情報とをデータユニットのIDから取得することができるように、データユニットの経路演算方法を設定する。
【0047】
一次経路を実装するプロセスは、下記を含むことができる。すなわち、データユニット情報とデータユニットのIDとの間のマッピング関係テーブル、データユニットの経路演算方法、およびデータノードIDと管理ノードIDとの間のマッピング関係テーブルを順に適用することにより、メタノードから管理ノードまでの経路を取得する。
【0048】
二次経路を実装するプロセスは、下記を含む。すなわち、管理ノードからメタノードに要求を送信し、管理ノードからメタデータによるデータユニットの経路演算方法に従い要求されたデータユニットを格納するデータノードまでの経路を取得する。
【0049】
ステップ3:管理ノードを下記のように配置する。
【0050】
管理データアクセスサービス(例えば、インデックスサービス)に配置し、場合によっては冗長性ストラテジーも配置する。そして、
【0051】
管理ノード内部で、格納(入出力制約タスク)と計算(CPU制約タスク)を分離する技術を採用し、タスクを2つのキューに分ける。すなわち、計算タスクキューと格納タスクキューは、2つの分かれたスレッドプールにより同時に完了し、CPUおよびI/Oリソースを充分に利用する。
【0052】
前述の例示的な実施形態におけるネットワークデータストレージシステムに基づき、ネットワークデータにアクセスする過程が、
図3に示される。
【0053】
図3は、本開示によるネットワークデータにアクセスする例示的な過程を説明する概略図を示す。本プロセスは下記のステップを含む。
【0054】
S301で、クライアントは、メタノードへデータにアクセスする要求を送信し、アクセスを要求されているデータユニットの記述的情報(例えば、データユニットの名称)を提供する。
【0055】
S302で、メタノードは、クライアントに一次経路情報を返し、データユニットを管理する責任がある管理ノードの位置情報を提供する。
【0056】
メタノードは、クライアントの要求からデータユニットの記述的情報を取得し、データユニットの記述的情報とデータユニットIDとの間のマッピング関係テーブルに基づき、クライアントによって要求されたデータユニットのIDを取得する。データユニットの経路演算方法に基づき、データユニットを格納するデータノードのIDを、データユニットのIDから計算する。データノードIDと管理ノードIDとの間のマッピング関係テーブルを用いて、データノードを管理する管理ノードのIDを続けて取得する。獲得した管理ノードのIDは次いで、メタノードによりクライアントに送られる。
【0057】
S303で、クライアントは、一次経路情報を用いて管理ノードを探し出した後、データにアクセスする要求を管理ノードに送信する。
【0058】
S304で、管理ノードは、クライアントの識別および要求内のデータユニットの情報に従って、データユニットのネットワークにおける位置をメタノードに要求する。
【0059】
上記S302において、メタノードがクライアントに一次経路情報を返す場合に、メタノードはクライアントが要求したデータユニットのIDも同時に返すことができる。この場合、S303でデータにアクセスするクライアントの要求は、アクセスを要求されているデータユニットのIDを含み、ステップS304における管理ノードからメタノードへの要求もデータユニットのIDを含む。
【0060】
S305で、メタノードは、管理ノードに二次経路情報を返し、データユニットのネットワークにおける位置を知らせる。
【0061】
管理ノードにより送信された要求から、メタノードはデータユニットのIDを取得し、データユニットの経路演算方法を用いてデータユニットのIDから、データノードIDおよびデータノード内のデータユニットの具体的な位置を計算し、この情報を管理ノードに返す。
【0062】
S306で、管理ノードは、位置情報に基づき、データユニットを格納するデータノードおよびデータユニットのデータノードにおける位置を探し出し、クライアントの要求に従って、データユニット中のデータを処理する。
【0063】
データノードは、管理ノードの操作コマンドに従いローカルファイルシステムを介してデータユニットを処理する。
【0064】
S307で、管理ノードは、必要に応じて、データ処理結果をクライアントに返す。
【0065】
データにアクセスする上記過程において、管理ノードは格納(入出力制約タスク)と計算(CPU制約タスク)を内部で分離する技術を採用し、タスクを2つのキューに分け、計算タスクキューおよび格納タスクキューは、それぞれ2つの分かれたスレッドにより同時に完了する。
【0066】
データにアクセスする上記の過程は、また、本発明の例示的な実施形態の中でジャーナリングメカニズムおよびロック技術を含むトランザクション処理メカニズムを利用して、ネットワークデータアクセスの信頼性を保証している。
【0067】
多くのファイル操作は、非アトミックアクティビィティ(non-atomic activities)である。特に複数のファイルまたは複数のノードに渡る過程において、データの一貫性および完全性は損傷する傾向があり、異常なシステムのシャットダウンなど、異常な状態を誘引する。データベースおよびオペレーティングシステムのファイルシステムによって提供されるログ保護メカニズムの着想を取り入れて、本発明は、本発明の実施形態におけるような非データベース構造を有するデータにアクセスするためトランザクション保護メカニズムを提供する。
【0068】
本開示の例示的な実施形態におけるデータユニットがアクセスされる場合(例えば、アクセスまたは格納操作)、書き込み用ブロックのコピーがログファイルに書き込まれる。ログファイルに送られた関連した入出力データが完全に転送されたとき(すなわち、データはログファイルへ成功して提示された)、データノードのローカルのファイルシステムにブロックが書き込まれる。ファイルシステムへ送られている入出力データが完全に送信された場合(すなわち、ファイルシステムへデータが成功して提示された場合)、ログファイルからブロックのコピーが除去される。ファイルシステムへの入出力データの送信が失敗した場合、ログファイルはこのブロックのコピーを残す。
【0069】
システムがクラッシュした場合、または必要に応じてシステムを再起動する場合、システムは先ずログファイルを読み取り、ログファイル中に記録されたブロックのコピーに従い復旧を行い、例外の発生前の正常な状態にシステムは復旧することができる。
【0070】
トランザクションの分離性を強化するため、本発明の例示的な実施形態はさらに、ロックメカニズムを備える。トランザクションの分離性は、一般的には、トランザクションによってアクセスされているリソースをロックすることにより保証される。さらに、ロッキング技術は、ファイルトランザクションの特性、並行処理および高信頼性を保証するため、非常に有用なツールである。
【0071】
本発明の例示的な実施形態は、ローカルのハードディスク内で広く用いられるシングルノードのファイルロックであるDotlockおよびネットワークファイルシステムにより採用されているBSDベースのシステムのPOSIX−compliant Flock()またはFcntl()の組み合わせを使用する。具体的な実装は、下記のとおりである。
【0072】
先ず、DotLockを取得する。このステップで、複数のノードによる取得は、可能性がある。成功した取得の後で、Flock()またはFcntl()の取得を試みる。これらのロックは、ファイルの形式で、グローバルノード内に保存される。復旧の間、システムは、任意のサスペンデッドロックをチェックし、解放する。ロック粒度は、1つのデータブロック、1つのファイル、1つのディレクトリ、または1つのデータノードに対してさえ、1つのロックであってよい。
【0073】
下記では、説明のため、大容量の電子メールシステムにストレージ機能を追加した例を使用する。
【0074】
ステップ1:データプランを行い、システムによって管理される最小のデータユニットを判定する。
【0075】
電子メールアドレス(電子メールアカウント)は、一般的に、ユーザ名とドメイン名、それらの間の記号@から構成される。電子メールアカウントを最小のデータユニットとしてカウントすることや、ドメイン名をデータユニットとして取り扱うことができる。例示的な本実施形態は、電子メールアカウントをデータユニットとなるように選択する。
【0076】
ステップ2:経路演算方法およびルーティングテーブルを判定する。
【0077】
経路演算方法をプラニングする目的は、ユーザにより提供される電子メールアカウントに基づき、メールボックスの内容の格納場所をいかにして探し出すかという問題を解決することである。常時拡張するシステムの要領をサポートするため、例示的な実施形態は、ルーティングのために32ビットのアドレス空間を使用する。従って、最大1G(すなわち、約10億)のユーザをサポートすることができる。この32ビットのアドレス空間は、RID(Route ID)と呼ばれ、電子メールアカウントを一意的に識別することのために用いられる。例示的な本実施形態は、1つのデータノードは1M(2
20=1,048,576)のユーザまでをサポートすることができると仮定する。従って、データノードに対するアドレス空間のサイズは1Mであり、具体的なアドレスを、一般的にローカルのファイルシステムのディレクトリにより表すことができる。例示的な本実施形態は、具体的なディレクトリをマッピングすることのために下位20ビットを使用し、データノード内の内部アドレスデータIDと呼ばれる。各データノードは、一意の連続する番号NSN(Node Sequence Number)を有し、32ビットのRIDの上位12ビットにより、表される。具体的には、RID>>20=NSN、すなわち、RIDを20ビット右シフトするとNSNが得られる。
【0078】
メタノードに格納されたルーティングテーブルの例が、表1および表2に示される。
【0079】
【表1】
【0080】
【表2】
【0081】
表2は、各々の管理ノードが3つのノードを管理することを示す。アドレスxxx@yyy.comからの要求は、識別子worker−1を有する管理ノードによって処理される。
【0082】
ステップ3:データプランとルーティングストラテジーの制定後、容量プランを行う。
【0083】
ユーザが少ないときは、1台の管理ノードと1つのデータノード(0の連続番号を持ち、0−1Mのユーザを管理することに対して責任がある)を配置することができる。ユーザの数が増加するにつれて、1つのデータノードではもはや格納の要求を満足することができない場合に、新しいデータノードが追加される。新しいデータノードの連続番号を1、すなわち、関連したRIDの上位12ビットが000000000001と仮定する。この新しいデータノードは、RIDの下位20ビットの1Mと2Mとの間のユーザを管理することに対し責任がある。上記のように、業務が拡張し続けるにつれて、システムは直線的に拡張し続けることができるので、大量のデータの格納を実現することができる。
【0084】
ステップ4:メタノードを配置する。
【0085】
表1および表2のような経路情報テーブルを、メタノードのデータベースに格納することができ、または、ファイルの形式で格納することができる。経路情報テーブルはサイズにおいて大きくないため、サーバが起動した後、ルーティングテーブル全体を内部メモリに置くことができる。これは、クライアントの要求に対し迅速な応答を可能にする。異なるアプリケーションに対し、異なるストラテジーを採用することができる。例えば、良く組織化されたデータ規則を持つ簡単なアプリケーションに対しては、メタノードを、アプリケーションによって提供される一意のデータIDを用いて実装される2段階のハッシュアルゴリズムまで単純化することができる。
【0086】
ステップ5:管理ノードのサービスを配置し、インデックスを制定するように設定を指定する。
【0087】
格納する必要があるデータに索引付けをするために、管理ノードにデータ検索機能を追加する。関係のあるデータノードにインデックスファイルおよびデータファイルが格納される。業務に関係のあるデータ処理が要求された場合、サービス機能を果たす関係のある論理ジョブを、関連したサーバ内に配置する。管理ノードは、格納と計算とを分離する技術を使用して、システムの性能を充分に調査する。
【0088】
今後の業務の発展に伴い、システムは、要求されたように連続してその容量を拡張することができる。ユーザの数が増加するにつれて、データノードを連続的に追加することができる。3つのデータノードが追加される毎に、1つの新しい管理ノードを配置することができる。メタノードに関しては、一般的には、1台のサーバしか必要としない。代替的に、システムのシングルポイントとならないようにするため、バックアップメカニズムを採用し、バックアップ用の追加のメタノードサーバを追加することができる。