(57)【特許請求の範囲】
【請求項１】
マスタデータと前記マスタデータの複製であるレプリカデータを複数のサーバ装置に分散して配置する計算機システムであって、
前記複数のサーバ装置にわたる記憶領域の管理範囲をレンジとし、該レンジ毎に、前記マスタデータが配置されるサーバ装置であるマスタサーバと前記レプリカデータが配置されるサーバ装置であるスレーブサーバとにおいて、総容量を動的に制御する一時領域を予め確保し、前記マスタサーバおよび前記スレーブサーバの一時領域の使用状況を容量管理テーブルにて管理し、データの書き込みを要求するデータ書き込みリクエストにて書き込みが要求された前記データが属するレンジの容量管理テーブルにおける前記マスタサーバの一時領域の使用状況および前記スレーブサーバの一時領域の使用状況に基づいて、前記データ書き込みリクエストの実行の可否を判定する容量管理部と、
前記容量管理部にて該データ書き込みリクエストが実行可能であると判定されたら該データ書き込みリクエストを前記マスタサーバおよび前記スレーブサーバの双方に実行させるデータ処理部と、を有する計算機システム。
【請求項２】
前記容量管理部は、前記容量管理テーブルにおいて、前記マスタサーバおよび前記スレーブサーバの双方の一時領域に前記データ書き込みリクエストの前記データを書き込めるだけの空き容量があれば、前記データ書き込みリクエストが実行可能であると判定し、前記マスタサーバおよび前記スレーブサーバのいずれか一方または両方の一時領域に前記データ書き込みリクエストの前記データを書き込めるだけの空き容量がなければ、前記データ書き込みリクエストが実行可能でないと判定する、
請求項１に記載の計算機システム。
【請求項３】
前記容量管理部は、前記容量管理テーブルにて、前記マスタサーバの前記一時領域と前記スレーブサーバの一時領域のいずれか一方または両方で前記データ書き込みリクエストに対して空き容量が不足するとき、前記データ書き込みリクエストよりも先に要求された先行リクエストが完了するのを待機し、前記先行リクエストの完了により前記空き容量の不足が解消したら前記データ書き込みリクエストを実行可能と判定する、請求項２に記載の計算機システム。
【請求項４】
前記データ書き込みリクエストを、前記マスタサーバおよび前記スレーブサーバに、該マスタサーバと該スレーブサーバとでリクエストの実行順序が揃うように実行させる順序配信部を更に有する、
請求項１に記載の計算機システム。
【請求項５】
前記サーバ装置の一時領域は主記憶装置から確保される、請求項１に記載の計算機システム。
【請求項６】
前記容量管理部は、前記データ書き込みリクエストが発生すると、該データ書き込みリクエストが実行される前に、該データ書き込みリクエストの実行に使用するために前記一時領域の記憶領域を前記容量管理テーブル上で予約し、前記データ書き込みリクエストが実行されると、該データ書き込みリクエストを実行に使用するために予約した前記記憶領域を前記容量管理テーブル上で解放する、請求項１に記載の計算機システム。
【請求項７】
前記容量管理部は、過去にリクエストを実行したときに該リクエストを実行するのに使用された記憶容量を測定し、該記憶容量の情報を蓄積した統計情報に基づいて、前記一時領域の前記総容量を制御する、請求項１に記載の計算機システム。
【請求項８】
前記容量管理部は、前記統計情報に基づいて、過去に最大発生したリクエストの単位時間当たりの件数と、所定時間と、１つのリクエストで最大使用した容量とを乗算した容量となるように前記一時領域の総容量を制御する、請求項７に記載の計算機システム。
【請求項９】
前記マスタサーバの障害で前記スレーブサーバが新たなマスタサーバとなるとき、前記容量管理部は前記新たなマスタサーバに前記容量管理テーブルを生成する、請求項１に記載の計算機システム。
【請求項１０】
マスタデータと前記マスタデータの複製であるレプリカデータを複数のサーバ装置に分散して配置する計算機システムにおけるデータ処理方法であって
容量管理手段が、前記複数のサーバ装置にわたる記憶領域の管理範囲をレンジとし、該レンジ毎に、前記マスタデータが配置されるサーバ装置であるマスタサーバと前記レプリカデータが配置されるサーバ装置であるスレーブサーバとにおいて、総容量を動的に制御する一時領域を予め確保し、
前記容量管理手段が、前記マスタサーバおよび前記スレーブサーバの一時領域の使用状況を容量管理テーブルにて管理し、データの書き込みを要求するデータ書き込みリクエストにて書き込みが要求された前記データが属するレンジの容量管理テーブルにおける前記マスタサーバの一時領域の使用状況および前記スレーブサーバの一時領域の使用状況に基づいて、前記データ書き込みリクエストの実行の可否を判定し、
データ処理手段が、前記データ書き込みリクエストが実行可能であると判定されたら該データ書き込みリクエストを前記マスタサーバおよび前記スレーブサーバの双方に実行させ、
前記データ処理手段が、前記データ書き込みリクエストが実行可能でないと判定されたら該データ書き込みリクエストを前記マスタサーバおよび前記スレーブサーバのいずれにも実行させない、データ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを多重化する情報システムに関する。
【背景技術】
【０００２】
分散データベースの一種として分散Ｋｅｙ−Ｖａｌｕｅストア（ＫＶＳ）がある。ＫＶＳでは、保存したいデータの「値（Ｖａｌｕｅ）」に任意の「キー（Ｋｅｙ）」を組み合わせ、ＫｅｙとＶａｌｕｅを一組のペアとして保存する。保存しておいたデータを取り出すときＫｅｙを指定すればＶａｌｕｅを取り出すことができる。分散ＫＶＳでは、Ｋｅｙに応じて、Ｖａｌｕｅを複数台のサーバに分散して保存できるためシステムのスケールアウトが容易である。サーバを追加することで容易に処理を高速化できる。【０００３】
また、分散ＫＶＳではレプリケーションが利用される。レプリケーションは、データを多重化する技術である。レプリケーションでは、マスタデータとその複製であるレプリカデータがそれぞれ異なるサーバに格納され、それらのサーバ間でデータが複製される。【０００４】
しかし、サーバ毎に容量が異なるヘテロ環境のシステムでは、マスタデータが格納されるサーバ（マスタサーバ）とレプリカデータが格納されるサーバ（スレーブサーバ）とで空き容量が異なるケースがある。【０００５】
また、データ数がサーバ間で均等でない場合にも空き容量がマスタサーバとスレーブサーバで異なるケースがある。マスタサーバとスレーブサーバで空き容量が異なる場合、データの書き込みを要求するデータ書き込みリクエストが発生したとき、マスタサーバとスレーブサーバのうち、あるサーバだけがリクエストを実行することができるだけの空き容量がない状態（容量不足）となることがある。容量不足が発生したサーバではデータ書き込みリクエストが失敗し、容量不足が発生していなかったサーバではデータ書き込みリクエストが成功するという事態が生じる。データ書き込みリクエストが失敗すると、要求されたデータがサーバに書き込まれない。データ書き込みリクエストが成功すると、要求されたデータがサーバに書き込まれる。マスタサーバとスレーブサーバのうち、あるサーバにデータが書き込まれ、他のサーバには同じデータが書き込まれないと、マスタデータとレプリカデータとが不整合となってしまう。【０００６】
特許文献１には、ヘテロなマシン環境において、サーバの記憶容量の使用効率を向上するために、サーバの負荷情報を利用してレンジ範囲を動的に変更する手法が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許５８５３１０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１の手法では、サーバ間の空き容量の差異を完全に抑止することができない。マスタサーバとスレーブサーバのうち、いずれか一方のサーバではデータの登録を要求するデータ書き込みリクエストが成功し、他方のサーバではデータ書き込みリクエストが失敗することがある。その場合、マスタデータとレプリカデータとが不整合となる。レプリケーションを利用するシステムでは、マスタサーバとスレーブサーバをなす複数のサーバ同士でデータが不整合となるのは不都合である。【０００９】
本発明の目的は、レプリケーションを行う複数のサーバに保存されたデータが不整合となるのを抑制する技術を提供することである。
【課題を解決するための手段】
【００１０】
本発明の一つの実施態様に従う計算機システムは、マスタデータと前記マスタデータの複製であるレプリカデータを複数のサーバ装置に分散して配置する計算機システムであって、前記複数のサーバ装置にわたる記憶領域の管理範囲をレンジとし、該レンジ毎に、前記マスタデータが配置されるサーバ装置であるマスタサーバと前記レプリカデータが配置されるサーバ装置であるスレーブサーバとにおいて、総容量を動的に制御する一時領域を予め確保し、前記マスタサーバおよび前記スレーブサーバの一時領域の使用状況を容量管理テーブルにて管理し、データの書き込みを要求するデータ書き込みリクエストにて書き込みが要求された前記データが属するレンジの容量管理テーブルにおける前記マスタサーバの一時領域の使用状況および前記スレーブサーバの一時領域の使用状況に基づいて、前記データ書き込みリクエストの実行の可否を判定する容量管理部と、前記容量管理部にて該データ書き込みリクエストが実行可能であると判定されたら該データ書き込みリクエストを前記マスタサーバおよび前記スレーブサーバの双方に実行させ、前記データ書き込みリクエストが実行可能でないと判定されたら該データ書き込みリクエストを前記マスタサーバおよび前記スレーブサーバのいずれにも実行させないデータ処理部と、を有する。
【発明の効果】
【００１１】
本発明によれば、マスタサーバとスレーブサーバで空き容量の差異があっても、判定結果に基づきリクエストを等しく成功あるいは失敗させることができ、データの一貫性を向上させ、レプリケーションを行う複数のサーバに保存されたデータが不整合となるのを抑制することができる。
【図面の簡単な説明】
【００１２】
【図１】本実施形態による計算機システムにおけるデータのレプリケーションについて説明するための図である。
【図２】本実施形態による情報システムおよびサーバ装置の構成を示すブロック図である。
【図３】本実施形態のサーバ装置のハードウェア構成を示すブロック図である。
【図４】データストア内のデータ構造を説明するための図である。
【図５】容量管理テーブルの一例を示す図である。
【図６】サーバ管理テーブルの一例を示す図である。
【図７】クラスタ管理情報の一例を示す図である。
【図８】統計情報の一例を示す図である。
【図９】サーバ装置のデータ送受信部によるデータ送受信処理のフローチャートである。
【図１０】容量予約部による容量予約処理のフローチャートである。
【図１１】データ処理部によるデータ処理のフローチャートである。
【図１２】予約解除部による予約解除処理のフローチャートである。
【図１３】容量補填部による容量補填処理のフローチャートである。
【図１４】補填結果反映部による補填結果反映処理のフローチャートである。
【図１５】起動処理部による起動処理のフローチャートである。
【図１６】フェールオーバ部によるフェールオーバ処理のフローチャートである。
【図１７】容量応答部による容量応答処理のフローチャートである。
【図１８】統計情報出力部による統計情報出力処理のフローチャートである。
【図１９】容量調整部による容量調整処理のフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態について図面を参照して説明する。
【００１４】
図１は、本実施形態による計算機システムにおけるデータのレプリケーションについて説明するための図である。
【００１５】
本実施形態による情報システムは複数のサーバ装置２００を有している。情報システムに含まれる複数のサーバ装置２００により記憶装置のクラスタが構成されている。クラスタを管理するためのクラスタ管理情報２Ｂ０が各サーバ装置２００に設定されている。
【００１６】
各サーバ装置２００は、保存したいデータの値（Ｖａｌｕｅ）に任意のキー（Ｋｅｙ）を組み合わせてＫｅｙとＶａｌｕｅをペアで保存する分散ＫＶＳのデータストア２８０を備えている。分散ＫＶＳにおいては、レプリケーションとして、マスタデータとレプリカデータが異なるサーバ装置２００に分散して格納される。
【００１７】
クラスタに含まれる複数のサーバ装置２００をまたぐ記憶領域の管理範囲がレンジとして設定されている。各レンジは、各サーバ装置２００にて確保された記憶領域である一時領域７２０を含む。レンジ毎にマスタデータとレプリカデータが複数のサーバ装置２００の一時領域７２０に分散して配置される。
【００１８】
レンジ内のいずれかのサーバ装置２００がマスタサーバとなり、それ以外のサーバ装置２００がスレーブサーバとなる。マスタサーバは、クライアント装置１００からリクエストを受信し、レンジ内の各サーバ装置２００にリクエストを実行させる役割を果たす。マスタサーバの一時領域７２０にはマスタデータが格納され、スレーブサーバの一時領域７２０にはそのマスタデータに対応するレプリカデータが格納される。マスタサーバには、そのレンジの各サーバ装置２００の一時領域７２０の記憶容量を管理する容量管理テーブル２９０が設けられる。マスタサーバに障害が発生するとフェールオーバが発生し、他のサーバ装置２００が新たなマスタサーバとなる。
【００１９】
例えば、サーバ装置２００（１）とサーバ装置２００（２）にまたがるように設定されたレンジ１は、サーバ装置２００（１）に容量管理テーブル２９０が設定されており、マスタデータがサーバ装置２００（１）の一時領域７２０（１１）に格納され、レプリカデータがサーバ装置２００（２）の一時領域７２０（２１）に格納される。
【００２０】
同様に、サーバ装置２００（２）とサーバ装置２００（３）にまたがるように設定されたレンジ２は、サーバ装置２００（２）に容量管理テーブル２９０が設定されており、マスタデータがサーバ装置２００（２）の一時領域７２０（２２）に格納され、レプリカデータがサーバ装置２００（３）の一時領域７２０（３２）に格納される。
【００２１】
また同様に、サーバ装置２００（３）とサーバ装置２００（１）にまたがるように設定されたレンジ３は、サーバ装置２００（３）に容量管理テーブル２９０が設定されており、マスタデータがサーバ装置２００（３）の一時領域７２０（３３）に格納され、レプリカデータがサーバ装置２００（１）の一時領域７２０（１３）に格納される。
【００２２】
各サーバ装置２００には、そのサーバ装置２００が各レンジのために確保した一時領域の情報を管理するサーバ管理テーブル２Ａ０が設けられる。
【００２３】
図２は、本実施形態による情報システムおよびサーバ装置の構成を示すブロック図である。図３は、本実施形態のサーバ装置のハードウェア構成を示すブロック図である。
【００２４】
図２を参照すると、情報システムでは、クライアント装置１００とサーバ装置２００が含まれる。複数のサーバ装置２００が通信ネットワーク３００を介して相互に接続されている。クライアント装置１００も通信ネットワーク３００を介してサーバ装置２００と接続されている。クライアント装置１００は通信ネットワーク３００経由で各サーバ装置２００にアクセスし、データを記録したり、記録したデータを取り出したりすることができる。
【００２５】
クライアント装置１００はデータ送受信部１１０を有している。データ送受信部１１０は通信ネットワーク３００経由でデータを送受信する。
【００２６】
サーバ装置２００は、データ送受信部２１０、容量管理部２２０、順序配信部２３０、データ処理部２４０、起動処理部２５０、フェールオーバ部２６０、統計情報出力部２７０、およびデータストア２８０を有し、容量管理テーブル２９０、サーバ管理テーブル２Ａ０、およびクラスタ管理情報２Ｂ０を管理している。容量管理部２２０には、容量予約部２２１、予約解除部２２２、容量補填部２２３、補填結果反映部２２４、容量応答部２２５、および容量調整部２２６が含まれている。容量管理テーブル２９０には、サーバ装置ＩＤ  ２９１、一時領域サイズ２９２、および使用中サイズ２９３が含まれている。サーバ管理テーブル２Ａ０には、レンジＩＤ  ２Ａ１、一時領域サイズ上限値２Ａ２、一時領域サイズ２Ａ３、使用中サイズ２Ａ４、リクエスト件数２Ａ５、およびリクエストが使用する最大サイズ２Ａ６が含まれている。クラスタ管理情報２Ｂ０には、障害検知時間２Ｂ１が含まれている。
【００２７】
データストア２８０には不図示の一時領域上にマスタデータおよび／またはレプリカデータが格納される。例えば、サーバ装置２００（１）のデータストア２８０には、マスタデータＡ  ２８１とレプリカデータＣ  ２８２が格納されている。同様に、サーバ装置２００（２）のデータストア２８０には、マスタデータＢ  ２８３とレプリカデータＡ  ２８４が格納されている。同様に、サーバ装置２００（３）のデータストア２８０には、マスタデータＣ  ２８５とレプリカデータＢ  ２８６が格納されている。
【００２８】
データ送受信部２１０、容量管理部２２０、順序配信部２３０、データ処理部２４０、起動処理部２５０、フェールオーバ部２６０、および統計情報出力部２７０のそれぞれが実行する処理はフローチャートを用いて後述する。容量管理テーブル２９０、サーバ管理テーブル２Ａ０、クラスタ管理情報２Ｂ０、および統計情報２Ｃ０についても後述する。
【００２９】
図３を参照すると、サーバ装置２００は、ハードウェアとして、ＣＰＵ５１０、ネットワークインタフェース５２０、主記憶装置５３０、二次記憶装置５４０、およびバス５５０を有している。ＣＰＵ５１０、ネットワークインタフェース５２０、主記憶装置５３０、および二次記憶装置５４０がバス５５０に接続されている。ＣＰＵ５１０は、ネットワークインタフェース５２０、主記憶装置５３０、および二次記憶装置５４０を利用して処理を実行することができる。
【００３０】
データ送受信部２１０、容量管理部２２０、順序配信部２３０、データ処理部２４０、起動処理部２５０、フェールオーバ部２６０、および統計情報出力部２７０は、ソフトウェアプログラムとして主記憶装置５３０に格納されている。ＣＰＵ５１０がそのソフトウェアプログラムを実行することにより各部の機能が実現される。
【００３１】
データストア２８０は主記憶装置５３０上に設けられ、また容量管理テーブル２９０、サーバ管理テーブル２Ａ０、およびクラスタ管理情報２Ｂ０は主記憶装置５３０に格納されている。ただし、データストア２８０は、データのバックアップを目的として、データの一部または全部を二次記憶装置５４０上に設けることにしてもよい。また、データストア２８０は、データの容量が大きくなってきた場合に、データの一部または全部を二次記憶装置５４０に設けることにしてもよい。
【００３２】
図４は、データストア内のデータ構造を説明するための図である。データは分散ＫＶＳによりサーバ装置２００のデータストア２８０内へ保存される。ＫＶＳでは、保存すべきデータの値（ｖａｌｕｅ）に任意のキー（ｋｅｙ）が組み合わされ、一組のペアがデータストア２８０に格納される。複数あるうちのどのサーバ装置２００のデータストア２８０にデータが保存されたかは分散関数に基づいて決定することができる。
【００３３】
図４を参照すると、データストア２８０内では、ｋｅｙとｖａｌｕｅのペアが記録されている。例えば、ｖａｌｕｅ１という値にｋｅｙ１というキーが組み合わされて、それらがペアとしてデータストア２８０に記録されている。同様に、ｖａｌｕｅ２という値にｋｅｙ２というキーが組み合わされて、それらがペアとしてデータストア２８０に記録されている。ｖａｌｕｅ３という値にｋｅｙ３というキーが組み合わされて、それらがペアとしてデータストア２８０に記録されている。
【００３４】
図５は、容量管理テーブルの一例を示す図である。容量管理テーブル２９０は、レンジ毎に設けられ、そのレンジに提供された一時領域の記憶容量に関する情報が格納されるテーブルである。容量管理テーブル２９０は、そのレンジのマスタであるサーバ装置２００に配置される。そのレンジのマスタデータが格納されるサーバ装置２００がそのレンジのマスタである。図５を参照すると、容量管理テーブル２９０には、レンジに一時領域を提供する各サーバを識別するサーバ装置ＩＤ  ２９１と、そのサーバがレンジに提供する一時領域のサイズ（一時領域サイズ）２９２と、その一時領域の中で既に使用中となっている記憶領域のサイズ（使用中サイズ）２９３とが対応づけて記録されている。
【００３５】
例えば、サーバ装置ＩＤが１のサーバ装置（図１のサーバ装置２００（１））には１０ＭＢの一時領域（図１の一時領域７２０（１１））がレンジ１のために確保されている。その一時領域７２０（１１）の使用中サイズが０ＭＢであり、つまり一時領域７２０（１１）はまだ使用されていない。また、サーバ装置ＩＤが２のサーバ装置（図１のサーバ装置２００（２））には１０ＭＢの一時領域（図１の一時領域７２０（２１））がレンジ１のために確保されている。その一時領域７２０（２１）の使用中サイズが０ＭＢであり、つまり一時領域７２０（２１）はまだ使用されていない。
【００３６】
図６は、サーバ管理テーブルの一例を示す図である。サーバ管理テーブル２Ａ０は、サーバ装置２００毎に設けられ、そのサーバ装置２００が各レンジに提供する一時領域に関する情報が格納される。図６を参照すると、サーバ管理テーブル２Ａ０には、当該サーバが一時領域７２０を提供するレンジを識別するレンジＩＤ  ２Ａ１と、そのレンジに一時領域７２０として提供できるサイズの上限値（一時領域サイズ上限値）２Ａ２と、実際にそのレンジに提供している一時領域７２０のサイズ（一時領域サイズ）２Ａ３と、一時領域７２０の中で使用された記憶領域のサイズ（使用中サイズ）２Ａ４と、その一時領域７２０で対処したリクエストの件数（リクエスト件数）２Ａ５と、１つのリクエストが使用する記憶領域の最大のサイズ（リクエストが使用する最大サイズ）２Ａ６とが対応づけて記録されている。
【００３７】
例えば、サーバ装置２００（１）はレンジＩＤが１のレンジ（レンジ１）に、一時領域７２０を１０ＭＢまで提供することができ、実際に１０ＭＢの一時領域７２０（図１の一時領域７２０（１１））を提供している。一時領域７２０（１１）の使用中サイズは０である。一時領域７２０（１１）は、統計情報出力部２７０によって実行された前回の統計情報出力処理時点から、リクエスト１０００件に対処している。また、一時領域７２０（１１）がこれまでに対処したリクエストのうち、リクエストが使用する記憶領域のサイズの最大値は１ＫＢである。同様に、サーバ装置２００（１）はレンジＩＤが３のレンジ（レンジ３）に、一時領域７２０を２０ＭＢまで提供することができ、実際に２０ＭＢの一時領域７２０（図１の一時領域７２０（１３））を提供している。一時領域７２０（１３）の使用中サイズは０である。一時領域７２０（１３）は、統計情報出力部２７０によって実行された前回の統計情報出力処理時点から、リクエスト２０００件に対処している。また、一時領域７２０（１３）がこれまでに対処したリクエストのうち、リクエストが使用する記憶領域のサイズの最大値は１ＫＢである。統計情報出力部２７０が実行する統計情報出力処理については後述する。
【００３８】
図７は、クラスタ管理情報の一例を示す図である。クラスタ管理情報２Ｂ０は、クラスタを構成する各サーバ装置２００に配置される。クラスタ管理情報２Ｂ０は、クラスタを構成するサーバ装置２００にて使用されるパラメータが設定される。図７を参照すると、障害を検知するのに要する時間（障害検知時間）２Ｂ１が設定されている。一時領域７２０には、障害検知時間２Ｂ１内に要求されるリクエストに対処できだけのサイズが確保される。図７では、具体的には、一例として、障害検知時間２Ｂ１が１０秒と設定されている。
【００３９】
図８は、統計情報の一例を示す図である。統計情報２Ｃ０は、サーバ装置２００においてレンジ毎に行った処理に関して取得した統計情報である。本実施形態では、統計情報２Ｃ０として、サーバ装置２００におけるレンジ毎の一秒毎のリクエストの処理件数が取得される。図８には、サーバ装置２００（１）にて取得された統計情報２Ｃ０が例示されている。
【００４０】
例えば、時刻２０１７／１／１  ００：００：０１に取得された情報によれば、レンジＩＤが１であるレンジ（レンジ１）におけるリクエストが１秒間に１０００件処理されたことが示されている。また、時刻２０１７／１／１  ００：００：０１に取得された情報によれば、レンジＩＤが３であるレンジ（レンジ３）におけるリクエストが１秒間に２０００件処理されたことが示されている。また、時刻２０１７／１／１  ００：００：０２に取得された情報によれば、レンジ１におけるリクエストが１秒間に１５００件処理されたことが示されている。また、時刻２０１７／１／１  ００：００：０２に取得された情報によれば、レンジ３におけるリクエストが１秒間に５００件処理されたことが示されている。
【００４１】
＜データ送受信＞
クライアント装置１００のデータ送受信部１１０は、分散ＫＶＳでデータが分散して格納されている複数のサーバ装置２００中からリクエストの送信先のサーバ装置２００を決定し、決定したサーバ装置２００に対してリクエストを送信する。その際、データ送受信部１１０は、キーを分散関数に入力して得られる分散関数の出力値に基づいて、リクエストの送信先のサーバ装置２００を算出することができる。データ送受信部１１０から送信されたリクエストは、サーバ装置２００のデータ送受信部２１０にて受信され、サーバ装置２００にて処理される。その後、サーバ装置２００のデータ送受信部２１０からレスポンスがクライアント装置１００に送信される。データ送受信部１１０は、サーバ装置２００のデータ送受信部２１０から送信されたレスポンスを受信する。
【００４２】
図９は、サーバ装置のデータ送受信部によるデータ送受信処理のフローチャートである。データ送受信処理はマスタサーバのデータ送受信部２１０が実行する処理である。
【００４３】
まず、マスタサーバのデータ送受信部２１０は、ステップＳ１０１にて、クライアント装置１００のデータ送受信部１１０からリクエストを受信する。次に、データ送受信部２１０は、ステップＳ１０２にて、容量管理部２２０の容量予約部２２１に対して、リクエストの実行を要求する。このとき容量予約部２２１が実行する容量予約処理については後述する。
【００４４】
その後、データ送受信部２１０は、ステップＳ１０３にて、リクエストの実行を終えた容量予約部２２１から、そのリクエストに対応するレスポンスを受信する。次に、ステップＳ１０４にて、データ送受信部２１０は、受信したレスポンスをクライアント装置１００のデータ送受信部１１０に送信する。
【００４５】
図１０は、容量予約部による容量予約処理のフローチャートである。容量予約処理はマスタサーバの容量予約部２２１が実行する処理である。
【００４６】
ステップＳ２０１にて、容量予約部２２１は、データ送受信部２１０からリクエストの実行要求を受け付ける。ステップＳ２０２にて、容量予約部２２１は、リクエスト内のＫｅｙデータとＶａｌｕｅデータを取得し、そのサイズを測定することで、リクエストを実行するのに使用する記憶領域のサイズを求める。
【００４７】
更に、ステップＳ２０３にて、容量予約部２２１は、ステップＳ２０２にて求めたサイズと、容量管理テーブル２９０に登録されている情報とに基づいて、リクエストを実行することができるか否か判定する。具体的には、ステップＳ２０４にて、容量予約部２２１は、ステップＳ２０２にて求めたサイズが、レンジに含まれる全てのサーバ装置２００の一時領域サイズ２９２よりも小さいか否か判定する。ステップＳ２０２にて求めたサイズが、全てのサーバ装置２００の一時領域サイズ２９２よりも小さければ、リクエストは実行可能である、
リクエストが実行可能であれば、ステップＳ２０５にて、容量予約部２２１は、ステップＳ２０２にて求めたサイズが、全てのサーバ装置２００の一時領域７２０の空き容量より小さいか否か判定する。一時領域７２０の空き容量は式（１）で算出することができる。
【００４８】
（一時領域の空き容量）＝（一時領域サイズ２９２）−（使用中サイズ２９３）  …（１）
いずれか１つでも、一時領域の空き容量がステップＳ２０２で算出されたサイズよりも小さいサーバ装置２００があれば（ステップＳ２０５のｎｏ）、容量予約部２２１は、ステップＳ２０６にて、先行するリクエストの実行が完了するのを待ち、ステップＳ２０４に戻る。ステップＳ２０２にて求められたサイズが全てのサーバ装置２００の一時領域７２０の空き容量よりも小さければ（ステップＳ２０５のｙｅｓ）、容量予約部２２１は、ステップＳ２０７にて、ステップＳ２０２にて求められたサイズを、容量管理テーブル２９０の使用中サイズ２９３に加算する。これは、リクエストの実行に使用するために一時領域７２０の記憶領域を容量管理テーブル２９０上で予約する処理である。次に、容量予約部２２１は、ステップＳ２０８にて、ステップＳ２０２にて求められたサイズの情報をリクエスト内に格納する。
【００４９】
更に、容量予約部２２１は、ステップＳ２０９にて、順序配信部２３０に順序配信処理を実行させる。順序配信部２３０は、データ処理部２４０に全順序配信でリクエストを配信する。配信が完了すると、順序配信部２３０は、データ処理部２４０の完了を待たずに、配信結果に基づいて、容量予約部２２１にレスポンスを返す。全順序配信とはリクエストを処理する順序を複数のサーバ装置２００で揃える配信である。例えば、サーバ装置２００は、Ｐａｘｏｓアルゴリズム等の分散合意アルゴリズムによりリクエストの処理順序を他のサーバ装置２００と合意し、合意した順序でリクエストを処理する。データ処理部２４０によるデータ処理については後述する。次に、容量予約部２２１は、ステップＳ２１０にて、順序配信部２３０の処理結果に基づいて、データ送受信部２１０にレスポンスを返す。
【００５０】
＜データ処理＞
図１１は、データ処理部によるデータ処理のフローチャートである。データ処理はマスタサーバおよびスレーブサーバの両方のデータ処理部２４０が実行する処理である。
【００５１】
データ処理部２４０は、まずステップＳ４０１にて、リクエスト内に格納されている、容量予約部２２１がステップＳ２０２にて求めたサイズの情報を取得する。次にステップＳ４０２にて、データ処理部２４０は、ステップＳ４０１で取得した、容量予約部２２１が求めたサイズをサーバ管理テーブル２Ａ０の使用中サイズ２Ａ４に加算する。更に、ステップＳ４０３にて、データ処理部２４０は、ステップＳ４０１で取得した、容量予約部２２１が求めたサイズが、リクエストが使用する最大サイズ２Ａ６よりも大きければ、リクエストが使用する最大サイズ２Ａ６をステップＳ４０１で取得した、容量予約部２２１が求めたサイズに更新する。
【００５２】
次に、データ処理部２４０は、ステップＳ４０４にて、サーバ管理テーブル２Ａ０のリクエスト件数２Ａ５をインクリメント（＋１）する。更に、データ処理部２４０は、ステップＳ４０５にて、順序配信部２３０から配信されたデータをデータストア２８０に登録する。その際、自サーバ装置２００が当該データの格納されるレンジ内でマスタデータを格納するサーバ装置２００であれば、データはマスタデータとして格納されることになる。自サーバ装置２００が当該データの格納されるレンジ内でレプリカデータを格納するサーバ装置２００であれば、データはレプリカデータとして格納されることになる。
【００５３】
次に、データ処理部２４０は、ステップＳ４０６にて、サーバ管理テーブル２Ａ０の一時領域サイズ２Ａ３と使用中サイズ２Ａ４の両方から、リクエスト実行で使用したサイズを減算する。次に、データ処理部２４０は、ステップＳ４０７にて、マスタサーバであるサーバ装置２００の予約解除部２２２にデータ登録が完了したこと、つまり、リクエストの実行が完了したことを通知する。予約解除部２２２が実行する予約解除処理については後述する。
【００５４】
更に、データ処理部２４０は、ステップＳ４０８にて、自サーバ装置２００の容量補填部２２３に対し、一時領域７２０にリクエストの実行で使用したサイズの分の記憶領域を補填するよう要求する。容量補填部２２３が実行する容量補填処理については後述する。
【００５５】
図１２は、予約解除部による予約解除処理のフローチャートである。予約解除処理はマスタサーバの予約解除部２２２が実行する処理である。
【００５６】
まず、予約解除部２２２は、ステップＳ５０１にて、データ登録が完了したサーバ装置２００のデータ処理部２４０からリクエスト実行の完了の通知を受信する。次に、予約解除部２２２は、ステップＳ５０２にて、容量管理テーブル２９０の一時領域サイズ２９２と使用中サイズ２９３の両方から、リクエストの実行で使用したサイズを減算する。これは、ステップＳ２０７で、リクエストの実行に使用するために容量管理テーブル２９０上で予約した記憶領域を容量管理テーブル２９０上で解放する処理である。
【００５７】
図１３は、容量補填部による容量補填処理のフローチャートである。容量補填処理はマスタサーバおよびスレーブサーバの両方の容量補填部２２３が実行する処理である。
【００５８】
容量補填部２２３は、ステップＳ６０１にて、自サーバ装置２００のデータ処理部２４０、またはマスタサーバであるサーバ装置２００の容量調整部２２６から一時領域７２０を確保する要求を受け付ける。次にステップＳ６０２にて、容量補填部２２３は、ステップＳ６０１で確保するように要求されたサイズ分の領域を確保する。領域を確保するとは、データストア２８０から一時領域７２０へ、要求されたサイズの記憶領域を補填（追加）することである。
【００５９】
次にステップＳ６０３にて、容量補填部２２３は、ステップＳ６０１にて要求されたサイズの記憶領域の補填（確保）に成功したか否か判定する。領域の確保に成功したら（ステップＳ６０３のｙｅｓ）、容量補填部２２３は、ステップＳ６０４にて、サーバ管理テーブル２Ａ０の一時領域サイズ２Ａ３に、領域を確保したサイズ、つまり一時領域７２０に補填した記憶領域のサイズを加算する。更に、容量補填部２２３は、ステップＳ６０５にて、マスタサーバであるサーバ装置２００の補填結果反映部２２４に、領域の確保を行った旨と確保した領域のサイズを通知する。補填結果反映部２２４が実行する補填結果反映処理については後述する。
【００６０】
図１４は、補填結果反映部による補填結果反映処理のフローチャートである。補填結果反映処理はマスタサーバの補填結果反映部２２４が実行する処理である。
【００６１】
補填結果反映部２２４は、ステップＳ７０１にて、一時領域７２０に記憶領域の補填を行ったサーバ装置２００の容量補填部２２３から、一時領域７２０に補填した記憶領域のサイズ（補填サイズ）を受信する。次に、補填結果反映部２２４は、ステップＳ７０２にて、容量管理テーブル２９０の一時領域サイズ２９２に補填サイズを加算する。
【００６２】
＜起動処理＞
図１５は、起動処理部による起動処理のフローチャートである。起動処理はマスタサーバおよびスレーブサーバの両方の起動処理部２５０が実行する処理である。
【００６３】
起動処理部２５０は、ステップＳ８０１にて、サーバプロセスを起動する。サーバプロセスとは、サーバ装置２００として動作するためのプロセスである。更に、起動処理部２５０は、ステップＳ８０２にて、主記憶装置５３０の全体領域から、自サーバ装置２００の記憶領域が含まれる各レンジについて、そのレンジの固有の記憶領域を確保する。ここでは主に主記憶装置５３０から記憶領域を確保するが、一部または全部を二次記憶装置５４０から確保してもよい。
【００６４】
次にステップＳ８０３にて、起動処理部２５０は、容量管理テーブル２９０およびサーバ管理テーブル２Ａ０を生成し、確保した記憶領域のサイズの情報を各テーブルに反映する。具体的には、容量管理テーブル２９０の一時領域サイズ２９２およびサーバ管理テーブル２Ａ０の一時領域サイズ２Ａ３に、ステップＳ８０２にて確保した記憶領域のサイズの情報を登録すればよい。次に、ステップＳ８０４にて、起動処理部２５０は、サーバ装置２００におけるリクエストの受付を開始する。
＜フェールオーバ処理＞
図１６は、フェールオーバ部によるフェールオーバ処理のフローチャートである。フェールオーバ処理は、同じレンジに属するマスタサーバに障害が発生したとき新たにマスタサーバになるサーバ装置２００のフェールオーバ部２６０が実行する処理である。
【００６５】
フェールオーバ部２６０は、ステップＳ９０１にて、マスタサーバの障害を検知する。フェールオーバ部２６０は、次にステップＳ９０２にて、フェールオーバを実行する。フェールオーバとは、障害が発生したマスタサーバに代わり、自サーバ装置２００がマスタサーバになることである。次にステップＳ９０３にて、フェールオーバ部２６０は、レンジに属する各サーバ装置２００の容量応答部２２５に対し、一時領域サイズ２Ａ３および使用中サイズ２Ａ４を取得することを要求する取得要求を送信する。その際に、容量応答部２２５が実行する容量応答処理については後述する。
【００６６】
次に、ステップＳ９０４にて、フェールオーバ部２６０は、レンジに属する各サーバ装置２００の容量応答部２２５から一時領域サイズ２Ａ３および使用中サイズ２Ａ４の情報を受信する。次にステップＳ９０５にて、フェールオーバ部２６０は、容量管理テーブル２９０を生成し、レンジに属するサーバ装置２００の容量応答部２２５から受信した一時領域サイズ２Ａ３および使用中サイズ２Ａ４を、容量管理テーブル２９０の一時領域サイズ２９２および使用中サイズ２９３に反映する。それらの処理が終わると、ステップＳ９０６にて、フェールオーバ部２６０は、自サーバ装置２００にリクエストの受付を開始させる。
【００６７】
図１７は、容量応答部による容量応答処理のフローチャートである。容量応答処理はマスタサーバおよびスレーブサーバの両方の容量応答部２２５が実行する処理である。
【００６８】
容量応答部２２５は、ステップＳＡ０１にて、フェールオーバ部２６０によるフェールオーバ処理を実行しているサーバ装置２００から、一時領域サイズ２Ａ３および使用中サイズ２Ａ４の取得を要求する取得要求を受信する。次に、容量応答部２２５は、ステップＳＡ０２にて、一時領域サイズ２Ａ３をサーバ管理テーブル２Ａ０から取得する。続いて、容量応答部２２５は、ステップＳＡ０３にて、使用中サイズ２Ａ４をサーバ管理テーブル２Ａ０から取得する。最後に、容量応答部２２５は、ステップＳＡ０４にて、取得した一時領域サイズ２Ａ３および使用中サイズ２Ａ４を、フェールオーバ部２６０によるフェールオーバ処理を実行しているサーバ装置２００、つまり、取得要求を送信したサーバ装置２００に送信する。
＜統計情報出力処理＞
図１８は、統計情報出力部による統計情報出力処理のフローチャートである。統計情報出力処理はマスタサーバの統計情報出力部２７０が実行する処理である。
【００６９】
統計情報出力部２７０は統計情報出力処理を一定周期で定期的に実行する。本実施形態では１秒間隔に統計情報出力処理を実行するものとする。
【００７０】
統計情報出力部２７０は、ステップＳＢ０１にて、サーバ管理テーブル２Ａ０のリクエスト件数２Ａ５を取得する。次に、統計情報出力部２７０は、ステップＳＢ０２にて、ステップＳＢ０１で取得したサーバ管理テーブル２Ａ０のリクエスト件数２Ａ５を、統計情報２Ｃ０のリクエスト件数(件/秒)に記録する。更に、統計情報出力部２７０は、ステップＳＢ０３にて、サーバ管理テーブル２Ａ０のリクエスト件数２Ａ５を０に設定（クリア）する。
【００７１】
図１９は、容量調整部による容量調整処理のフローチャートである。容量調整処理はマスタサーバの容量調整部２２６が実行する処理である。
【００７２】
容量調整部２２６は容量調整処理を一定周期で定期的に実行する。容量調整処理の周期は統計情報出力処理の周期よりも長い時間に設定される。
【００７３】
容量調整部２２６は、まずステップＳＣ０１にて、前回の容量調整処理を実行したタイミングを起点として統計情報２Ｃ０におけるリクエスト件数(件/秒)の最大値を取得する。本実施形態では、１秒毎に統計情報２Ｃ０におけるリクエスト件数が記録されているので、前回の容量調整処理を実行して以降に記録されたリクエスト件数の中で最大の件数を取得すればよい。
【００７４】
次に、容量調整部２２６は、ステップＳＣ０２にて、クラスタ管理情報２Ｂ０の障害検知時間２Ｂ１を取得する。更に、容量調整部２２６は、ステップＳＣ０３にて、サーバ管理テーブル２Ａ０のリクエストが使用する最大サイズ２Ａ６を取得する。
【００７５】
次に、容量調整部２２６は、ステップＳＣ０４にて、障害検知時間内に使用されうる一時領域７２０のサイズを式（２）により算出する。
【００７６】
（障害検知時間内に使用されうる一時領域７２０のサイズ）＝（最大リクエスト件数(件/秒)）*（障害検知時間(秒)）*（リクエストが使用する最大サイズ）  …（２）
次に、容量調整部２２６は、ステップＳＣ０５にて、上記式（２）で算出した値とサーバ管理テーブル２Ａ０の一時領域サイズ上限値２Ａ２とを比較する。式（２）で算出した値がサーバ管理テーブル２Ａ０の一時領域サイズ上限値２Ａ２以下であれば（ステップＳＣ０６のｎｏ）、容量調整部２２６は容量調整処理を終了する。
【００７７】
式（２）で算出した値がサーバ管理テーブル２Ａ０の一時領域サイズ上限値２Ａ２よりも大きければ（ステップＳＣ０６のｙｅｓ）、容量調整部２２６は、ステップＳＣ０７にて、レンジに属する各サーバ装置２００の容量補填部２２３に対し、式（２）で算出した値と一時領域サイズ上限値２Ａ２との差の分だけ一時領域７２０を確保することを要求する確保要求を送る。
【００７８】
更に、容量調整部２２６は、ステップＳＣ０８にて、式（２）で算出した値を、サーバ管理テーブル２Ａ０の一時領域サイズ上限値２Ａ２の新たな値として設定する。
＜全体の流れ＞
以上、説明した本実施形態における情報システムのサーバ装置２００の構成および動作を以下のように整理することもできる。
【００７９】
情報システムは、マスタデータと前記マスタデータの複製であるレプリカデータを複数のサーバ装置に分散して配置する計算機システムであって、容量管理部２２０とデータ処理部２４０を有している。
【００８０】
容量管理部２２０は、複数のサーバ装置２００にわたる記憶領域の管理範囲をレンジとし、レンジ毎に、マスタデータが配置されるサーバ装置２００であるマスタサーバとレプリカデータが配置されるサーバ装置２００であるスレーブサーバとにおいて、総容量を動的に制御する一時領域７２０を予め確保する。そして、容量管理部２２０は、マスタサーバおよびスレーブサーバの一時領域７２０の使用状況を容量管理テーブル２９０にて管理し、データの書き込みを要求するデータ書き込みリクエストにて書き込みが要求されたデータが属するレンジの容量管理テーブル２９０におけるマスタサーバの一時領域７２０の使用状況およびスレーブサーバの一時領域７２０の使用状況に基づいて、データ書き込みリクエストの実行の可否を判定する。
【００８１】
データ処理部２４０は、容量管理部２２０にてデータ書き込みリクエストが実行可能であると判定されたらデータ書き込みリクエストをマスタサーバおよびスレーブサーバの双方に実行させる。
【００８２】
マスタデータに使用するマスタサーバの一時領域とそのレプリカデータに使用するスレーブサーバの一時領域を容量管理テーブル２９０にて一括で管理し、リクエストの実行可否を容量管理テーブル２９０におけるマスタサーバおよびスレーブサーバの一時領域の使用状況に基づいて判定するので、マスタサーバとスレーブサーバで空き容量の差異があっても、判定結果に基づきリクエストを等しく成功あるいは失敗させることができ、データの一貫性を向上させることができる。
【００８３】
また、容量管理部２２０は、容量管理テーブル２９０において、マスタサーバおよびスレーブサーバの双方の一時領域７２０にデータ書き込みリクエストのデータを書き込めるだけの空き容量があれば、データ書き込みリクエストが実行可能であると判定し、マスタサーバおよびスレーブサーバのいずれか一方または両方の一時領域７２０にデータ書き込みリクエストのデータを書き込めるだけの空き容量がなければ、データ書き込みリクエストが実行可能でないと判定する。
【００８４】
マスタサーバとスレーブサーバの両方の一時領域にデータを書き込めるだけの空き容量があるときにデータ書き込みリクエストを実行可能と判定するので、マスタサーバとスレーブサーバに空き容量の差異があっても、判定結果に基づきリクエストを等しく成功あるいは失敗させることができ、データの一貫性を向上させることができる。
【００８５】
また、容量管理部２２０は、容量管理テーブル２９０にて、マスタサーバの一時領域７２０とスレーブサーバの一時領域７２０のいずれか一方または両方でデータ書き込みリクエストに対して空き容量が不足するとき、データ書き込みリクエストよりも先に要求された先行リクエストが完了するのを待機し、先行リクエストの完了により空き容量の不足が解消したらデータ書き込みリクエストを実行可能と判定する。
【００８６】
先行リクエストの完了で記憶領域が確保できればリクエストを実行可能となるので、リクエストを実行できる場合が増える。
【００８７】
また、順序配信部２３０は、データ書き込みリクエストを、マスタサーバおよびスレーブサーバに、マスタサーバとスレーブサーバとでリクエストの実行順序が揃うように実行させる。
【００８８】
マスタサーバとスレーブサーバのいずれか一方のサーバ装置２００だけで容量が不足する状況においてもリクエストの実行順序およびサーバ装置間のデータの一貫性を維持することができる。
【００８９】
また、サーバ装置２００の一時領域７２０は主記憶装置５３０から確保される。容量に十分な余裕を持たせるには比較的高コストとなる主記憶装置５３０において容量不足が発生してもサーバ装置２００間の一貫性を保証できる。
【００９０】
また、容量管理部２２０は、データ書き込みリクエストが発生すると、データ書き込みリクエストが実行される前に、データ書き込みリクエストの実行に使用するために一時領域７２０の記憶領域を容量管理テーブル２９０上で予約し、データ書き込みリクエストが実行されると、データ書き込みリクエストを実行に使用するために予約した記憶領域を容量管理テーブル２９０上で解放する。
【００９１】
容量管理テーブル２９０上で記憶容量を予約してからデータ書き込みリクエストを実行するので、データ書き込みリクエストの実行中に容量確認のためのサーバ装置２００間の通信が不要であり、システム動作の高速性を維持できる。
【００９２】
また、容量管理部２２０は、過去にリクエストを実行したときにそのリクエストを実行するのに使用された記憶容量を測定し、その記憶容量の情報を蓄積した統計情報に基づいて、一時領域７２０の総容量を制御する。
【００９３】
レンジ毎に確保する領域について過去のデータ書き込みリクエストに使用された記憶容量に基づいて調整した値を設定するので、データ書き込みリクエストが実行不可となるのを抑制することができる。また、過剰な容量の一時領域７２０を確保することが抑制されるので、他のレンジにおける領域確保が妨げられるのを抑えることができる。
【００９４】
また、容量管理部２２０は、統計情報に基づいて、過去に最大発生したリクエストの単位時間当たりの件数と、所定時間（障害検知時間）と、１つのリクエストで最大使用した容量とを乗算した容量となるように一時領域７２０の総容量を制御する。
【００９５】
統計情報において過去に最大発生したリクエストが最大容量ずつ使用した場合に必要となる記憶容量の一時領域７２０を確保することができるので、一時領域７２０が不足する事態が生じるのを抑制することができる。
【００９６】
また、マスタサーバの障害でスレーブサーバが新たなマスタサーバとなるとき、容量管理部２２０は新たなマスタサーバに容量管理テーブル２９０を生成する。
【００９７】
マスタサーバに障害が発生してレンジ内でマスタサーバが交代してもレンジの容量の管理を継続できる。
【００９８】
上述した本発明の実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【符号の説明】
【００９９】
１００…クライアント装置、１１０…データ送受信部、２００…サーバ装置、２１０…データ送受信部、２２０…容量管理部、２２１…容量予約部、２２２…予約解除部、２２３…容量補填部、２２４…補填結果反映部、２２５…容量応答部、２２６…容量調整部、２３０…順序配信部、２４０…データ処理部、２５０…起動処理部、２６０…フェールオーバ部、２７０…統計情報出力部、２８０…データストア、３００…通信ネットワーク、５１０…ＣＰＵ、５２０…ネットワークインタフェース、５３０…主記憶装置、５４０…二次記憶装置、５５０…バス
【図１】
0006663534.tif 000002
【図２】
0006663534.tif 000003
【図３】
0006663534.tif 000004
【図４】
0006663534.tif 000005
【図５】
0006663534.tif 000006
【図６】
0006663534.tif 000007
【図７】
0006663534.tif 000008
【図８】
0006663534.tif 000009
【図９】
0006663534.tif 000010
【図１０】
0006663534.tif 000011
【図１１】
0006663534.tif 000012
【図１２】
0006663534.tif 000013
【図１３】
0006663534.tif 000014
【図１４】
0006663534.tif 000015
【図１５】
0006663534.tif 000016
【図１６】
0006663534.tif 000017
【図１７】
0006663534.tif 000018
【図１８】
0006663534.tif 000019
【図１９】
0006663534.tif 000020