(57)【特許請求の範囲】
【請求項１】
リクエスタから送信されたリクエストを、プロセッサに振り分ける複数の呼処理データ振り分け装置と、前記呼処理データ振り分け装置から受信したリクエストに基づき、呼処理データをデータストアに保存させる複数の前記プロセッサと、前記プロセッサの指示により前記呼処理データを保存する複数の前記データストアとを備えるデータベースクラスタの呼処理データ保存方法であって、
前記呼処理データ振り分け装置は、
前記リクエスタから前記リクエストを受信し、前記受信したリクエストの内容を構文解析するステップと、
前記構文解析した結果、前記リクエストが前記呼処理データの書き込み要求であると解析した場合に、
前記複数のプロセッサのうちから２以上のプロセッサを、前記書き込み要求を示すリクエストの送信先に決定するステップと、
前記決定した２以上のプロセッサそれぞれに、前記書き込み要求を示すリクエストを送信するステップと、を実行し、
前記２以上のプロセッサそれぞれは、
前記書き込み要求を示すリクエストを受信し、自身と接続する前記データストアそれぞれに前記呼処理データを保存させるステップを実行し、
前記呼処理データ振り分け装置は、
前記書き込み要求を示すリクエストの送信先を決定するステップにおいて、
コンシステントハッシュに基づき、前記複数のプロセッサの担当領域をハッシュ空間上に設定するステップと、
前記書き込み要求を示すリクエストに含まれるユニークな識別情報をキーとして抽出するステップと、
前記抽出したキーを、２以上のハッシュ関数それぞれに導入することにより、ハッシュ値を計算し、前記ハッシュ空間上の前記プロセッサの担当領域に基づき、前記書き込み要求を示すリクエストの送信先となる前記２以上のプロセッサを決定するステップと、を含んで実行し、
前記呼処理データ振り分け装置は、
前記リクエスタから第２の前記リクエストを受信し、前記受信した第２のリクエストの内容を構文解析するステップにおいて、前記構文解析した結果、前記第２のリクエストが前記データストアそれぞれに保存した呼処理データの読み込み要求であると解析した場合に、
前記読み込み要求を示す第２のリクエストに含まれるユニークな識別情報をキーとして抽出するステップと、
前記抽出したキーを、前記２以上のハッシュ関数のうちの１つを選択して導入することにより、ハッシュ値を計算し、前記ハッシュ空間上の前記プロセッサの担当領域に基づき、前記読み込み要求を示す第２のリクエストの送信先となる前記プロセッサを決定するステップと、
前記決定したプロセッサに、前記読み込み要求を示す第２のリクエストを送信するステップと、を実行し、
前記読み込み要求を示す第２のリクエストを受信したプロセッサは、
自身と接続する前記データストアから前記呼処理データを取得して、前記呼処理データ振り分け装置に返信するステップを実行し、
前記呼処理データ振り分け装置は、
前記返信された前記呼処理データを、前記リクエスタに送信するステップを実行すること
を特徴とする呼処理データ保存方法。
【請求項２】
リクエスタから送信されたリクエストを、複数のプロセッサに振り分けることにより、呼処理データをデータストアに保存させる呼処理データ振り分け装置であって、
前記リクエスタから前記リクエストを受信し、前記受信したリクエストの内容を構文解析する構文解析部と、
前記構文解析部が構文解析した結果、前記リクエストが前記呼処理データの書き込み要求であると解析した場合に、
コンシステントハッシュに基づき、前記複数のプロセッサの担当領域をハッシュ空間上に設定し、
前記書き込み要求を示すリクエストに含まれるユニークな識別情報をキーとして抽出し、
前記抽出したキーを、２以上のハッシュ関数それぞれに導入することにより、ハッシュ値を計算し、前記ハッシュ空間上の前記プロセッサの担当領域に基づき、前記複数のプロセッサのうち、前記書き込み要求を示すリクエストの送信先となる２以上のプロセッサを決定し、前記決定した２以上のプロセッサそれぞれに、前記書き込み要求を示すリクエストを送信する振り分け処理部と、を備え、
前記構文解析部が、前記リクエスタから第２の前記リクエストを受信し構文解析した結果、前記第２のリクエストが前記データストアそれぞれに保存した呼処理データの読み込み要求であると解析した場合に、
前記振り分け処理部が、
前記読み込み要求を示す第２のリクエストに含まれるユニークな識別情報をキーとして抽出し、
前記抽出したキーを、前記２以上のハッシュ関数のうちの１つを選択して導入することにより、ハッシュ値を計算し、前記ハッシュ空間上の前記プロセッサの担当領域に基づき、前記読み込み要求を示す第２のリクエストの送信先となる前記プロセッサを決定し、前記決定したプロセッサに、前記読み込み要求を示す第２のリクエストを送信すること
を特徴とする呼処理データ振り分け装置。
【請求項３】
コンピュータを、請求項２に記載の呼処理データ振り分け装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、セッション制御サーバが扱う加入者データ等の呼処理データを保存するデータベースを、複数マシンのクラスタ構成で実現するための、呼処理データ保存方法、呼処理データ振り分け装置およびプログラムに関する。
【背景技術】
【０００２】
２つ以上のクライアントの間でセッションを確立するプロトコルとしてＳＩＰ（Session Initiation Protocol）が知られている（非特許文献１参照）。また、このＳＩＰを利用した技術として、マルチメディアサービスを実現するＩＭＳ（IP Multimedia Subsystem）（非特許文献２参照）や、ＮＧＮ（Next Generation Network）（非特許文献３参照）がある。
また、あるデータについてのハッシュ値を生成するアルゴリズムであるハッシュアルゴリズムの１つとして、コンシステントハッシュ（Consistent Hashing）（非特許文献４参照）が知られている。
【０００３】
近年、クラウドコンピューティングの隆盛に伴い、分散並列処理技術が発展、普及している。また、設備維持コストの低減を目的として通信網のＩＰ（Internet Protocol）化が進んでおり、従来の交換機のような専用ハードウェアではなく、汎用サーバを用いて通信ネットワークを構築し、通信サービスを実現することが一般化している。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】J.Rosenberg, et.al, “SIP: Session Initiation Protocol,” RFC3261, IETF, 2002.6
【非特許文献２】Miikka Poikselka, Georg Mayer ,“The IMS: IP Multimedia Concepts and Services,” Wiley, 2009.3
【非特許文献３】ITU-T Recommendation Y.2012, “Functional requirements and architecture of the NGN,” 2006
【非特許文献４】David Karger, “Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web,”［online］、［平成23年7月14日検索］、インターネット<http://www.akamai.com/dl/technical_publications/ConsistenHashingandRandomTreesDistributedCachingprotocolsforrelievingHotSpotsontheworldwideweb.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般的にデータベースを、複数台の汎用サーバを用いてクラスタ構成として実現する場合、データの複製を保持することで、サーバが故障しても他のサーバで処理を継続し、データの冗長化を実現している。しかし、呼制御サーバで扱うデータ、主に加入者情報等を保存するデータベースには、データの一貫性、応答時間等の要件が数多く存在し、汎用サーバのクラスタ構成を採った際、様々な要因により、要件を満たさない可能性がある。
【０００６】
従来の呼制御において用いられるデータベースはＲＤＢ（Relational DataBase）を使用し、冗長化を図る際には、Active-Standbyの構成を採用している。そのため、常に必要なデータベースサーバの倍以上のサーバ筐体を用意しなければならない。一方、データベース分散技術として、Cassandra（非特許文献５：Avinash Lakshman, Prashant Malik, “Cassandra - A Decentralized Structured Storage System, ”ACM SIGOPS Operating Systems Review archive Volume 44 Issue 2, April 2010）を初めとする複数台の汎用サーバを用いてデータベースをクラスタ構成で実現する技術が知られている。このデータベースクラスタでは、データを分散配置することで冗長性、可用性を高めているが、複数の複製データ間の一貫性を完全に担保しようとすると可用性が低下し、一貫性を維持しつつ可用性をある程度確保しようとすると冗長性を下げる必要がある等、トレードオフの関係にあるため、一貫性、可用性、冗長性のいずれかを犠牲にしている場合が多い。
【０００７】
また、既存の呼処理における問題点として、アクセス頻度が偏在することが挙げられる。例えば、イベント予約向け特別電話番号等に対するバースト的な着呼処理時に、特定のデータに対して参照処理が集中するような場合がある。加入者データベースを既存のデータベースクラスタにおいて実現した場合、加入者データを複数サーバに分散保存しているが、複数サーバに対する複製の分散は、ハッシュ関数に基づいてまず１つのサーバに対してマスタデータとしてのデータを送信し、さらに複製となるデータを他サーバに対して割り振って送信している。そして、集中呼による参照時には、マスタデータに対してのみ参照処理を行うため、そのマスタデータを保存する１つのサーバに対して負荷が集中し、処理オーバヘッドが発生してしまう。
【０００８】
このような背景を鑑みて本発明がなされたのであり、本発明は、呼制御サーバが扱う呼処理データを保存するクラスタ構成のデータベースにおいて、複数の複製データ間の一貫性を保ちつつ、可用性や冗長性を低下させず、スケーラブルにデータを書き込むことができる、呼処理データ保存方法、呼処理データ振り分け装置およびプログラムを提供することを課題とする。
【課題を解決するための手段】
【０００９】
前記した課題を解決するため、請求項１に記載の発明は、リクエスタから送信されたリクエストを、プロセッサに振り分ける複数の呼処理データ振り分け装置と、前記呼処理データ振り分け装置から受信したリクエストに基づき、呼処理データをデータストアに保存させる複数の前記プロセッサと、前記プロセッサの指示により前記呼処理データを保存する複数の前記データストアとを備えるデータベースクラスタの呼処理データ保存方法であって、前記呼処理データ振り分け装置が、前記リクエスタから前記リクエストを受信し、前記受信したリクエストの内容を構文解析するステップと、前記構文解析した結果、前記リクエストが前記呼処理データの書き込み要求であると解析した場合に、前記複数のプロセッサのうちから２以上のプロセッサを、前記書き込み要求を示すリクエストの送信先に決定するステップと、前記決定した２以上のプロセッサそれぞれに、前記書き込み要求を示すリクエストを送信するステップと、を実行し、前記２以上のプロセッサそれぞれが、前記書き込み要求を示すリクエストを受信し、自身と接続する前記データストアそれぞれに前記呼処理データを保存させるステップを実行し、前記呼処理データ振り分け装置が、前記書き込み要求を示すリクエストの送信先を決定するステップにおいて、コンシステントハッシュに基づき、前記複数のプロセッサの担当領域をハッシュ空間上に設定するステップと、前記書き込み要求を示すリクエストに含まれるユニークな識別情報をキーとして抽出するステップと、前記抽出したキーを、２以上のハッシュ関数それぞれに導入することにより、ハッシュ値を計算し、前記ハッシュ空間上の前記プロセッサの担当領域に基づき、前記書き込み要求を示すリクエストの送信先となる前記２以上のプロセッサを決定するステップと、を含んで実行し、前記呼処理データ振り分け装置が、前記リクエスタから第２の前記リクエストを受信し、前記受信した第２のリクエストの内容を構文解析するステップにおいて、前記構文解析した結果、前記第２のリクエストが前記データストアそれぞれに保存した呼処理データの読み込み要求であると解析した場合に、前記読み込み要求を示す第２のリクエストに含まれるユニークな識別情報をキーとして抽出するステップと、前記抽出したキーを、前記２以上のハッシュ関数のうちの１つを選択して導入することにより、ハッシュ値を計算し、前記ハッシュ空間上の前記プロセッサの担当領域に基づき、前記読み込み要求を示す第２のリクエストの送信先となる前記プロセッサを決定するステップと、前記決定したプロセッサに、前記読み込み要求を示す第２のリクエストを送信するステップと、を実行し、前記読み込み要求を示す第２のリクエストを受信したプロセッサが、自身と接続する前記データストアから前記呼処理データを取得して、前記呼処理データ振り分け装置に返信するステップを実行し、前記呼処理データ振り分け装置が、前記返信された前記呼処理データを、前記リクエスタに送信するステップを実行することを特徴とする呼処理データ保存方法とした。
【００１０】
また、請求項２に記載の発明は、リクエスタから送信されたリクエストを、複数のプロセッサに振り分けることにより、呼処理データをデータストアに保存させる呼処理データ振り分け装置であって、前記リクエスタから前記リクエストを受信し、前記受信したリクエストの内容を構文解析する構文解析部と、前記構文解析部が構文解析した結果、前記リクエストが前記呼処理データの書き込み要求であると解析した場合に、コンシステントハッシュに基づき、前記複数のプロセッサの担当領域をハッシュ空間上に設定し、前記書き込み要求を示すリクエストに含まれるユニークな識別情報をキーとして抽出し、前記抽出したキーを、２以上のハッシュ関数それぞれに導入することにより、ハッシュ値を計算し、前記ハッシュ空間上の前記プロセッサの担当領域に基づき、前記複数のプロセッサのうち、前記書き込み要求を示すリクエストの送信先となる２以上のプロセッサを決定し、前記決定した２以上のプロセッサそれぞれに、前記書き込み要求を示すリクエストを送信する振り分け処理部と、を備え、前記構文解析部が、前記リクエスタから第２の前記リクエストを受信し構文解析した結果、前記第２のリクエストが前記データストアそれぞれに保存した呼処理データの読み込み要求であると解析した場合に、前記振り分け処理部が、前記読み込み要求を示す第２のリクエストに含まれるユニークな識別情報をキーとして抽出し、前記抽出したキーを、前記２以上のハッシュ関数のうちの１つを選択して導入することにより、ハッシュ値を計算し、前記ハッシュ空間上の前記プロセッサの担当領域に基づき、前記読み込み要求を示す第２のリクエストの送信先となる前記プロセッサを決定し、前記決定したプロセッサに、前記読み込み要求を示す第２のリクエストを送信することを特徴とする呼処理データ振り分け装置とした。
【００１１】
このようにすることで、本発明によれば、呼処理データ振り分け装置が、書き込み要求を示すリクエストを受信した際に、複数のプロセッサのうちから２以上のプロセッサをリクエストの送信先に決定することにより、複数の複製データ間の一貫性を保ちつつ、可用性や冗長性を低下させず、スケーラブルにデータの書き込みを行うことができる。
また、呼処理データ振り分け装置は、コンシステントハッシュに基づいて、書き込み要求を示すリクエストに含まれるユニークな識別情報をキーとして、２以上のハッシュ関数それぞれに導入することにより、書き込み要求を示すリクエストの送信先となる２以上のプロセッサを決定する。よって、本発明によれば、複数の複製データ間の一貫性を保ちつつ、可用性や冗長性を低下させず、スケーラブルにデータの書き込みを行うことができる。
さらに、呼処理データ振り分け装置は、コンシステントハッシュに基づいて、読み込み要求を示す第２のリクエストに含まれるユニークな識別情報をキーとして、２以上のハッシュ関数のうちの１つを選択して導入することにより、呼処理データをデータストアに保存させた２以上のプロセッサのうちから１つのプロセッサを選択して、読み込み要求を示す第２のリクエストを送信し、データを送信することができる。よって、本発明によれば、アクセス頻度が高い場合でも、呼処理データへの対等な振り分けが可能となり、オーバヘッドを防ぐことができる。
【００２１】
請求項３に記載の発明は、コンピュータを、請求項２に記載の呼処理データ振り分け装置として機能させるためのプログラムとした。
【００２２】
このようなプログラムによれば、請求項２に記載の呼処理データ振り分け装置としての機能を、一般的なコンピュータで実現させることができる。
【発明の効果】
【００２３】
本発明によれば、呼制御サーバが扱う呼処理データを保存するクラスタ構成のデータベースにおいて、複数の複製データ間の一貫性を保ちつつ、可用性や冗長性を低下させず、スケーラブルにデータを書き込むことができる、呼処理データ保存方法、呼処理データ振り分け装置およびプログラムを提供することができる。
【図面の簡単な説明】
【００２４】
【図１】比較例である従来のデータベースクラスタの全体構成を示す概念図である。
【図２】比較例のデータベースクラスタにおけるディスパッチャの振り分け処理を説明するための図である。
【図３】比較例であるデータベースクラスタにおける冗長化処理を説明するための図である。
【図４】本実施形態に係るディスパッチャ（呼処理データ振り分け装置）を含むデータベースクラスタの全体構成を示す概念図である。
【図５】本実施形態に係るディスパッチャ（呼処理データ振り分け装置）の構成例を示すブロック図である。
【発明を実施するための形態】
【００２５】
次に、本発明を実施するための形態（以下、「本実施形態」という）におけるクラスタ構成のデータベース（以下、「データベースクラスタ」という）の比較例となる従来技術について説明し、その後に、本実施形態について、適宜図面を参照しながら詳細に説明する。
【００２６】
（比較例）
図１は、比較例である従来のデータベースクラスタの全体構成を示す概念図である。
比較例である従来のデータベースクラスタは、図１に示すように、ロードバランサ（Balancer：各図において「Ｂ」と表記）と、複数のディスパッチャ（Dispatcher：各図において「Ｄ」と表記）と、複数のプロセッサ（Processor：各図において「Ｐ」と表記）と、複数のデータストア(Storage：各図において「Ｓ」と表記）とを含んで構成される。
【００２７】
図１に示すこのデータベースクラスタに対するリクエストは、ＳＱＬ（Structured Query Language）のクエリ文書やＸＣＡＰ（XML Configuration Access Protocol）のような、データベースからデータを取得するための要求のことであり、データベースに記憶されたデータの更新時には、ＸＭＬファイル等が入力として渡されてもよい。ここで、リクエストを行う不図示のリクエスタは、データベースにデータの書き込みや読み出しを要求する他のシステムであり、例えば、呼制御データの投入や参照を行うオペレータシステムや、呼制御サーバである。
【００２８】
図１に示すように、データベースクラスタに対してのリクエストは、まずロードバランサＢに到着する。ロードバランサＢは、機械的にリクエストの振り分けを行う既存の負荷分散装置である。このロードバランサＢは、クラスタ構成の隠蔽や負荷の分散を目的とした、単純（ＴＣＰ（Transmission Control Protocol）／ＵＤＰ（User Datagram Protocol）レベル）かつ高速な振り分け処理を行う。そして、ロードバランサＢは、リクエストを受信すると、より高度なリクエストの振り分けを行う高レイヤのロードバランサであるディスパッチャＤにリクエストを振り分ける。具体的には、ロードバランサＢは、リクエストの宛先ＩＰアドレスを元に、ラウンドロビンでそのリクエストをディスパッチャＤに振り分けることで、複数のディスパッチャＤ（図１ではディスパッチャＤ１，Ｄ２，Ｄ３）に対して均等にリクエストを割り振ることができる。
【００２９】
ロードバランサＢからリクエストを受信したディスパッチャＤは、プロセッサＰにリクエストを更に振り分ける。ディスパッチャＤでは、例えばコンシステントハッシュ（前記した非特許文献４）のアルゴリズムを用いて、各プロセッサＰ（図１ではプロセッサＰ１，Ｐ２，Ｐ３）にリクエストを分散させる。このとき、ディスパッチャＤは、受信したリクエストから、例えばリクエストに含まれるＵＲＬ（Uniform Resource Locator）の一部を用いてキー情報を作成し、ハッシュ関数により導出されたハッシュ値を担当するプロセッサＰに対し、リクエストを割り振る。ここで、ハッシュ値の空間（以下、「ハッシュ空間」という）はすべてのディスパッチャＤで共有するようにし、各ディスパッチャＤ（Ｄ１，Ｄ２，Ｄ３）は、プロセッサＰの追加や削除に伴い、ハッシュ空間情報を同期する。また、新たなディスパッチャＤが追加された場合でも、例えば、他のディスパッチャＤからこのハッシュ空間情報を取得する等して、最新のハッシュ空間情報を各ディスパッチャＤで同期する。
【００３０】
次に、ディスパッチャＤからリクエストを受信したプロセッサＰは、受信したリクエストのプロトコル解析や、ファイル形式の確認を行い、データストアＳにそのリクエストを送信する。そして、データストアＳが、リクエストに基づき、データの書き込みや読み込み等の処理を行う。
【００３１】
＜振り分け処理＞
図２は、比較例のデータベースクラスタにおけるディスパッチャＤの振り分け処理を説明するための図である。図２（ａ）は、データを書き込むリクエストをデータベースクラスタが受信した場合の振り分け処理を示し、図２（ｂ）は、データを読み込むリクエストをデータベースクラスタが受信した場合の処理を示している。なお、扱うデータは、ＸＭＬ形式でデータストアＳが保存するものとする。
【００３２】
図２（ａ）に示すように、ロードバランサＢの振り分け処理により、データを書き込むリクエストを受信したディスパッチャＤ（ここでは、ディスパッチャＤ１）は、コンシステントハッシュによる振り分けを行う。具体的には、ディスパッチャＤ１が、ｈｔｔｐのＰＵＴに含まれるＵＲＬの一部（例えば、auid/users/0990@example/a.xml）から、コンフィグ(Config)で指定した部分（0990@example/a.xml等、ファイルをユニークに識別可能な箇所）をキーにハッシュ関数にかけることでハッシュ値を求め、割り振り先となるプロセッサＰに振り分ける。図２においては、プロセッサＰ２に振り分けている。
【００３３】
プロセッサＰ２は、ディスパッチャＤ１から受信したリクエストに含まれるＸＭＬファイル等について、スキーマ定義が記述されたＸＳＤ（XML Schema Definition）ファイルと照合することで、ファイル形式が正しいか等の判定を行った上で、データストアＳ（ここではデータストアＳ２）に、そのＸＭＬファイル等を書き込む処理を指示する。データストアＳ（データストアＳ２）では、プロセッサＰ（ここではプロセッサＰ２）から受信したＸＭＬファイル等を保存する（書き込む）。
【００３４】
また、図２（ｂ）を参照して、データ読み込み時のデータベースクラスタの処理について説明する。ロードバランサＢの振り分け処理により、データを読み込むリクエストを受信したディスパッチャＤ３は、書き込み時と同様にコンシステントハッシュによる振り分けを行う。具体的には、ディスパッチャＤ３が、ｈｔｔｐのＧＥＴに含まれるＵＲＬの一部（auid/users/0990@example/a.xml）から、コンフィグで指定した部分（0990@example/a.xml等）をキーにハッシュ関数にかけることでハッシュ値を求め、振り分け先となるプロセッサＰ２にリクエストを振り分ける。プロセッサＰ２は、ＸＳＤファイルとの照合等を行った上で、データストアＳ２からリクエストで指定されたＸＭＬデータを取得し、ディスパッチャＤ３、ロードバランサＢを経由して、そのＸＭＬデータをリクエスタに送信する。
【００３５】
なお、ここでのデータストアＳは、メモリで実現しても、ＳＡＳ（Serial Attached SCSI）のようなハードディスクで実現してもよい。また、ディスパッチャＤ、プロセッサＰ、データストアＳは、それぞれ論理的な構成要素であり、本例では、別々のサーバ筐体に実装しているものとして説明するが、同一のサーバ筐体においてプロセスとして分離されている形で実装してもよい。
【００３６】
＜冗長化処理＞
次に、比較例であるデータベースクラスタにおける冗長化処理について説明する。既存のデータベースクラスタでは、プロセッサＰがデータストアＳに対してデータを書き込む際に、データの冗長化、可用性を高めるために複製を作成する。
図３は、比較例である既存のデータベースクラスタにおける冗長化処理を説明するための図である。図３（ａ）は、データの書き込み時の複製処理を示し、図３（ｂ）は、データの読み込み時の処理を示している。
【００３７】
既存のデータベースクラスタでは、図３（ａ）に示すように、書き込み時に、ディスパッチャＤ（ここでは、ディスパッチャＤ１）が、ハッシュ関数により特定のプロセッサＰ（ここでは、プロセッサＰ１）にリクエストの振り分けを行う。そして、振り分けられたプロセッサＰ１は、特定のデータストアＳ（ここではデータストアＳ１）をマスタデータの保存先としてデータを書き込み、他のデータストアＳのうち予め設定された１つ以上のデータストアＳ（ここでは、データストアＳ２，Ｓ３）に対して順次複製を作成する。一方、正常時の読み込み処理では、図３（ｂ）に示すように、各ディスパッチャＤ（ここでは、ディスパッチャＤ１）は、ハッシュ関数によりプロセッサＰ１にリクエストを振り分け、複製データに対しては読み込みを行わず、マスタデータに対してのみ読み込み処理を行う。
【００３８】
既存のデータベースクラスタでは、書き込み時に、プロセッサＰがすべての複製に対して同期をとったことを確認してから処理を完了としているものではなく、マスタデータの書き込みが正常完了すると、処理が正常完了としている。そして、その後に（非同期で）、複製データを他のデータストアＳに作成する。
【００３９】
このような既存のデータベースクラスタの処理には、前記したように次に示す問題がある。マスタデータへの書き込み完了後、即座に複製データの作成を行うものではないため、マスタデータと複製データとの間でデータが異なる状況が発生する。例えば、複製を行う前にマスタデータを保存するノード（データストアＳ）が故障してしまった場合、古い複製データをマスタデータとして復元してしまうため、データの一貫性がとれない。既存の処理は、可用性を高めるための方式であるが、すべての複製データについて一貫性が担保できないというトレードオフが存在する。また、データの読み込み時には、マスタデータに対してのみ参照しているため、特定の呼番号に対して集中リクエストがあった場合に、処理オーバヘッドが発生し、スループットが低下してしまうという問題がある。本発明は、これらの問題を解決するものである。
【００４０】
（本実施形態）
次に、本実施形態に係る呼処理データ保存方法について説明する。
図４は、本実施形態に係るディスパッチャＤ（呼処理データ振り分け装置）を含むデータベースクラスタの全体構成を示す概念図である。図４（ａ）は、書き込み時における処理を示し、図４（ｂ）は、読み込み時における処理を示している。
【００４１】
図４に示すデータベースクラスタの全体構成は、図１〜図３に示した従来のデータベースクラスタの構成と同じであるが、本実施形態に係る呼処理データ保存方法においては、次の点が従来のデータベースクラスタの処理とは異なる。従来は、ロードバランサＢからリクエストを受信したディスパッチャＤが、複数のプロセッサＰの中から、ハッシュ関数によりプロセッサＰを１つ選択してそのリクエストを振り分けていた。これに対し、本実施形態に係る呼処理データ保存方法では、ディスパッチャＤ（図４（ａ）のディスパッチャＤ１）が複数のハッシュ関数（ｈ１，ｈ２，ｈ３）を備えており、データ書き込み時に、複数のハッシュ関数（ｈ１，ｈ２，ｈ３）に同一キーを入力することで、複数のプロセッサＰ（Ｐ１，Ｐ２，Ｐ３）を選択してリクエストを送信し、各データストアＳ（Ｓ１，Ｓ２，Ｓ３）にデータを書き込む処理をする際に、すべての複製に対して同期をとったことを確認してから処理を完了とする。
【００４２】
このように、複数のプロセッサＰ（Ｐ１，Ｐ２，Ｐ３）に対してリクエストを振り分けて複製を作成することにより冗長化させ、データを均等配分し、可用性を高めるとともに、各複製データにおいて一貫性を保つことができる。
【００４３】
また、データ読み込み時には、ディスパッチャＤ（図４（ｂ）のディスパッチャＤ１）が、複数のハッシュ関数（ｈ１，ｈ２，ｈ３）のうちの１つを選択し、そのハッシュ関数にキー情報を入力することで、１つのプロセッサＰ（ここでは、プロセッサＰ１）を決定し、そのプロセッサＰ（Ｐ１）がデータストアＳ（ここでは、データストアＳ１）からデータを取得する。このようにすることで、アクセス頻度が偏在している参照時であっても、複製データへの対等な振り分けが可能になるため、オーバヘッドを防ぐことができる。
【００４４】
＜ディスパッチャ＞
次に、本実施形態に係るディスパッチャＤ（呼処理データ振り分け装置）について詳細に説明する。
図５は、本実施形態に係るディスパッチャＤ（呼処理データ振り分け装置）の構成例を示すブロック図である。
ディスパッチャＤは、ロードバランサＢおよび複数のプロセッサＰと通信可能に接続され（適宜図４参照）、ロードバランサＢから取得したリクエストを、プロセッサＰに振り分ける装置であり、図５に示すように、制御部１０と、入出力部２０と、メモリ部３０と、記憶部４０とを含んで構成される。
【００４５】
入出力部２０は、ロードバランサＢや、各プロセッサＰとの間の情報の入出力を行う。例えば、入出力部２０は、ロードバランサＢが送信したリクエストを受信し、各プロセッサＰに対し、そのリクエストの送信を行う。また、データストアＳに保存されていたデータをプロセッサＰから受信し、ロードバランサＢに対して送信する等の処理を行う。
また、この入出力部２０は、通信回線を介して情報の送受信を行う通信インタフェースと、不図示のキーボード等の入力装置やモニタ等の出力装置等との間で入出力を行う入出力インタフェースとから構成される。
【００４６】
制御部１０は、ディスパッチャＤ全体の制御を司り、情報受信部１１と、構文解析部１２と、振り分け処理部１３と、情報送信部１４とを含んで構成される。なお、この制御部１０は、例えば、ディスパッチャＤの記憶部４０に格納されたプログラムをＣＰＵ（Central Processing Unit）がメモリ部３０であるＲＡＭ（Random Access Memory）に展開し実行することで実現される。
【００４７】
情報受信部１１は、入出力部２０を介して、ロードバランサＢからのリクエストや、プロセッサＰ等からのデータを取得する。
【００４８】
構文解析部１２は、情報受信部１１からリクエストを受け取り、そのリクエストの内容を構文解析する。例えば、構文解析部１２は、そのリクエストがデータストアＳに対する「ＰＵＴ（書き込み）」を要求するリクエストであるか、「ＧＥＴ（読み込み）」を要求するリクエスト（第２のリクエスト）であるか等を解析し、その解析情報とともに、リクエストを振り分け処理部１３に引き渡す。
【００４９】
振り分け処理部１３は、リクエストの振り分け先となるプロセッサＰを決定する処理を行う。この振り分け処理部１３は、関数選択部１３１と複数のハッシュ値計算部１３２（１３２ａ，１３２ｂ，１３２ｃ）とを備える。
【００５０】
関数選択部１３１は、構文解析部１２の解析情報に基づき、振り分け先となるプロセッサＰをハッシュ関数を用いて決定するハッシュ値計算部１３２を選択する。
具体的には、関数選択部１３１は、構文解析部１２が、リクエストの内容を、「ＰＵＴ（書き込み）」であると解析した場合には、設定されている各ハッシュ値計算部１３２（１３２ａ，１３２ｂ，１３２ｃ）を選択し、その選択したハッシュ値計算部１３２に対して、リクエストを引き渡す。
また、関数選択部１３１は、構文解析部１２が、リクエストの内容を、「ＧＥＴ（読み込み）」であると解析した場合には、ランダム若しくはラウンドロビンで、設定されているハッシュ値計算部１３２（１３２ａ，１３２ｂ，１３２ｃ）のうちの１つを選択し、その選択したハッシュ値計算部１３２に対して、リクエストを引き渡す。
【００５１】
ハッシュ値計算部１３２は、コンシステントハッシュを用いて、例えば、記憶部４０に記憶された、各プロセッサＰ（Ｐ１，Ｐ２，Ｐ３，…）のＩＤ（ＩＰアドレス等）のハッシュ値を計算し、閉じたハッシュ空間上に配置しておく。なお、このハッシュ値計算部１３２は、プロセッサＰが故障等で減設された場合や、システム設計者等によりプロセッサＰが増設された場合ごとに、ハッシュ空間上での各プロセッサＰの担当領域の再設定を行う。
【００５２】
そして、ハッシュ値計算部１３２は、取得したリクエストに含まれるＵＲＬの一部から、コンフィグで指定した部分であるユニークな識別箇所（識別情報）をキーとしてハッシュ関数（ｈ）にかけることでハッシュ値を計算し、ハッシュ空間上に配置する。
続いて、ハッシュ値計算部１３２は、ハッシュ空間上での配置から、その領域を担当するプロセッサＰを、リクエストの振り分け先として決定する。
【００５３】
このハッシュ値計算部１３２は、システム設計者等により、データの冗長化が必要な数として複数設定される。つまり、２以上のハッシュ関数が設定される。図５に示すように、例えば、データを３重化する場合には、３つのハッシュ値計算部１３２（１３２ａ，１３２ｂ，１３２ｃ）が設けられ、３つのハッシュ関数（ｈ１，ｈ２，ｈ３）が設定される。そして、ハッシュ値計算部１３２ａは、ハッシュ関数（ｈ１）によりハッシュ値を計算し、ハッシュ値計算部１３２ｂは、ハッシュ関数（ｈ２）によりハッシュ値を計算し、ハッシュ値計算部１３２ｃは、ハッシュ関数（ｈ３）によりハッシュ値を計算する。このハッシュ関数（ｈ１，ｈ２，ｈ３）は、リクエストに含まれるＵＲＩの一部をキー（同一キー）として計算されるハッシュ値を、異なるプロセッサＰの担当領域に配置するように演算する。このようにすることで、２以上のプロセッサＰがリクエストの振り分け先として決定される。従って、ハッシュ値計算部１３２を設けた数だけ、冗長化することができる。
また、関数選択部１３１により、複数のハッシュ値計算部１３２（１３２ａ，１３２ｂ，１３２ｃ）のうちの１つのハッシュ値計算部１３２が、ランダム若しくはラウンドロビンで選択されることで、アクセス頻度が偏在している読み込み時であっても、複製データへの対等な振り分けが可能になる。
なお、ディスパッチャＤ１，Ｄ２，Ｄ３は、それぞれ同じ複数のハッシュ関数（ｈ１，ｈ２，ｈ３）を備えたハッシュ値計算部１３２（１３２ａ，１３２ｂ，１３２ｃ）を備える。
【００５４】
情報送信部１４は、振り分け処理部１３が決定した振り分け先となるプロセッサＰに対し、リクエスト等を送信する。また、プロセッサＰから受信したデータをロードバランサＢへ送信する等の制御を行う。
【００５５】
次に、記憶部４０は、ハードディスクやフラッシュメモリ等の記憶装置からなり、制御部１０や入出力部２０を制御するためのプログラム等を記憶している。
【００５６】
メモリ部３０は、ＲＡＭ等の一次記憶装置からなり、制御部１０によるデータ処理に必要な情報、例えば、各プロセッサＰのＩＤ（ＩＰアドレス）等を一時的に記憶している。
【００５７】
＜呼処理データ保存方法＞
次に、本実施形態に係る呼処理データ保存方法について、図４を参照して詳細に説明する（適宜図５参照）。
【００５８】
≪書き込み時≫
まず、図４（ａ）を参照して、書き込み時の処理について説明する。
リクエスタ（不図示）からの書き込み要求としてのリクエストを取得したロードバランサＢは、ラウンドロビンで振り分け先のディスパッチャＤを決定し、そのリクエストを送信する。ここでは、振り分け先としてディスパッチャＤ１が選択される。
【００５９】
ディスパッチャＤ１は、リクエストを受信すると、構文解析部１２が、そのリクエストの内容を構文解析する。そして、ここでは、構文解析部１２が、そのリクエストがデータストアＳに対する「ＰＵＴ（書き込み）」を要求するものであると解析し、この解析情報とともに、リクエストを振り分け処理部１３に引き渡す。
【００６０】
振り分け処理部１３は、解析情報とリクエストとを受け取ると、まず、関数選択部１３１が、受け取った解析情報に基づき、ハッシュ値計算部１３２を選択する。ここで、関数選択部１３１は、解析情報により、リクエストの内容が「ＰＵＴ（書き込み）」であるので、振り分け処理部１３内に設定された複数のハッシュ値計算部１３２（１３２ａ，１３２ｂ，１３２ｃ）を振り分け先として選択する。そして、関数選択部１３１は、リクエストをハッシュ値計算部１３２（１３２ａ，１３２ｂ，１３２ｃ）それぞれに引き渡す。
【００６１】
ハッシュ値計算部１３２（１３２ａ，１３２ｂ，１３２ｃ）それぞれは、取得したリクエストに含まれるＵＲＬの一部から、コンフィグで指定した部分であるユニークな識別箇所（識別情報）をキーとして、それぞれに設定されているハッシュ関数（ｈ１，ｈ２，ｈ３）にかけることでハッシュ値を計算し、ハッシュ空間上に配置する。
続いて、ハッシュ値計算部１３２（１３２ａ，１３２ｂ，１３２ｃ）それぞれは、ハッシュ空間上での配置から、その領域を担当するプロセッサＰを、リクエストの振り分け先として決定する。
【００６２】
例えば、ハッシュ値計算部１３２ａは、ＵＲＬの一部をキーとして、ハッシュ関数（ｈ１）にかけることで、ハッシュ値を計算し、ハッシュ空間上での配置から、振り分け先をプロセッサＰ１に決定する。ハッシュ値計算部１３２ｂは、同じＵＲＬの一部をキーとして、ハッシュ関数（ｈ２）にかけることで、ハッシュ値を計算し、ハッシュ空間上での配置から、振り分け先をプロセッサＰ２に決定する。また、ハッシュ値計算部１３２ｃは、同じＵＲＬの一部をキーとして、ハッシュ関数（ｈ３）にかけることで、ハッシュ値を計算し、ハッシュ空間上での配置から、振り分け先をプロセッサＰ３に決定する。
そして、各ハッシュ値計算部１３２ａ，１３２ｂ，１３２ｃは、情報送信部１４を介して、リクエストをそれぞれが決定したプロセッサＰ（Ｐ１，Ｐ２，Ｐ３）に送信する。
【００６３】
プロセッサＰ１，Ｐ２，Ｐ３それぞれは、ディスパッチャＤ１から受信したリクエストを受信すると、そのリクエストに含まれるＸＭＬファイル等について、スキーマ定義が記述されたＸＳＤファイルと照合することで、ファイル形式が正しいか等の判定を行った上で、データストアＳ（Ｓ１，Ｓ２，Ｓ３）それぞれに、そのＸＭＬファイル等を書き込む処理を行う。その際、すべての複製に対して同期をとったことを確認して、ディスパッチャＤ１は、処理を完了とする。
【００６４】
≪読み込み時≫
次に、図４（ｂ）を参照して、読み込み時の処理について説明する（適宜図５参照）。なお、ここでは、図４（ａ）の書き込み処理により、同じＸＭＬファイルのデータがデータストアＳ（Ｓ１，Ｓ２，Ｓ３）に書き込まれているものとする。
【００６５】
リクエスタ（不図示）からの読み込み要求としてのリクエスト（第２のリクエスト）を取得したロードバランサＢは、ラウンドロビンで振り分け先のディスパッチャＤを決定し、そのリクエストを送信する。ここでは、振り分け先としてディスパッチャＤ１が選択される。
【００６６】
ディスパッチャＤ１は、リクエストを受信すると、構文解析部１２が、そのリクエストの内容を構文解析する。そして、ここでは、構文解析部１２が、そのリクエストがデータストアＳに対する「ＧＥＴ（読み込み）」を要求するものであると解析し、この解析情報とともに、リクエストを振り分け処理部１３に引き渡す。
【００６７】
振り分け処理部１３は、解析情報とリクエストとを受け取ると、まず、関数選択部１３１が、受け取った解析情報に基づき、ハッシュ値計算部１３２を選択する。ここで、関数選択部１３１は、解析情報により、リクエストの内容が「ＧＥＴ（読み込み）」であるので、ランダム若しくはラウンドロビンで、設定されている複数のハッシュ値計算部１３２（１３２ａ，１３２ｂ，１３２ｃ）のうちの１つを選択し、その選択したハッシュ値計算部１３２に対して、リクエストを引き渡す。ここでは、ハッシュ値計算部１３２ａが選択されたものとする。
【００６８】
ハッシュ値計算部１３２ａは、取得したリクエストに含まれるＵＲＬの一部から、コンフィグで指定した部分であるユニークな識別箇所（識別情報）をキーとして、ハッシュ関数（ｈ１）にかけることでハッシュ値を計算し、ハッシュ空間上での配置から、振り分け先をプロセッサＰ１に決定する。
そして、ハッシュ値計算部１３２ａは、情報送信部１４を介して、リクエストを決定したプロセッサＰ１に送信する。
【００６９】
プロセッサＰ１は、ディスパッチャＤ１から受信したリクエストを受信すると、そのリクエストに含まれるＸＭＬファイルについて、スキーマ定義が記述されたＸＳＤファイルと照合することで、ファイル形式が正しいか等の判定を行った上で、データストアＳ１からデータを取得する。そして、プロセッサＰ１、ディスパッチャＤ１、ロードバランサＢを経由して、リクエスタにそのデータを送信する。
【００７０】
以上のように、本実施形態に係る呼処理データ保存方法、ディスパッチャＤ（呼処理データ振り分け装置）およびプログラムによれば、ディスパッチャＤから複数のプロセッサＰにリクエストを分散させて、複数のデータストアＳに複製データを記憶するため、複数のデータ間の一貫性を保ちつつ、可用性や冗長性を低下させることなくスケーラブルな構成が可能となる。つまり、ディスパッチャＤや、プロセッサＰ、データストアＳが故障等の理由で減設した場合でも、他のデータストアＳが複製情報を保持しているため、データベースへのアクセスを中断することなく実行でき、高い可用性が実現できる。また、アクセス頻度が偏在している参照時に、プロセッサＰを、複数のプロセッサＰからランダム若しくはラウンドロビンで振り分けて実行させることができるため、複製データへの対等な振り分けが可能となりオーバヘッドを防ぐことができる。さらに、それでも処理の応答時間の増加や、保存データ容量が逼迫した場合、動的にディスパッチャＤ、プロセッサＰ、データストアＳを追加することも可能となる。
【００７１】
なお、本実施形態の構成は、従来技術と同様に、データストアＳを、メモリで実現しても、ＳＡＳ（Serial Attached SCSI）のようなハードディスクで実現してもよい。また、ディスパッチャＤ、プロセッサＰ、データストアＳそれぞれは、別々のサーバ筐体に実装されていてもよいし、同一のサーバ筐体においてプロセスとして分離されている形で実装してもよい。また、ロードバランサＢをなくし、リクエスタから直接各ディスパッチャＤ（Ｄ１，Ｄ２，Ｄ３）がリクエストを受信するようにしてもよいし、本実施形態のように、ロードバランサＢがリクエスタからリクエストを受信し、各ディスパッチャＤ（Ｄ１，Ｄ２，Ｄ３）に振り分けるようにしてもよい。
【符号の説明】
【００７２】
１０    制御部
１１    情報受信部
１２    構文解析部
１３    振り分け処理部
１４    情報送信部
２０    入出力部
３０    メモリ部
４０    記憶部
１３１  関数選択部
１３２  ハッシュ値計算部
Ｂ      ロードバランサ
Ｄ      ディスパッチャ（呼処理データ振り分け装置）
Ｐ      プロセッサ
Ｓ      データストア
【図１】
0005576836.tif 000002
【図２】
0005576836.tif 000003
【図３】
0005576836.tif 000004
【図４】
0005576836.tif 000005
【図５】
0005576836.tif 000006