以下、本発明の実施例を添付図面に基づいて説明する。
図1は、本発明のシステム構成の一例である。
携帯端末101は、モバイルネットワーク102を介してキャリア設備網103と接続している。モバイルネットワーク102は携帯端末101とキャリア設備網103を接続している、無線ネットワークである。キャリア設備網103は、モバイルネットワーク102、インターネット104、メールゲートウェイ106、データストアサーバ107を接続しているネットワークである。
送信先サーバ105は、インターネット104を介してメールゲートウェイ106とメールの送受信を行う。メールゲートウェイ106は、キャリア設備網103に接続されており、携帯端末101がキャリア設備網103へ送信したメールを受信し、送信先サーバ105へメールを中継する。データストアサーバ107はキャリア設備網103に接続されており、メールゲートウェイ106から送られたメールを保持する。
図2は、メールゲートウェイ106を実現する情報処理装置のハードウェア構成である。
メールゲートウェイ106を実現する情報処理装置は、ネットワークI/F202と、プロセッサ203と、揮発性メモリ204と、不揮発性メモリ205と、これらを接続するバスなどの内部通信線と、を含んで構成される。メールゲートウェイ106はネットワークI/F202を介してキャリア設備網103に接続している。
揮発性メモリ204は、メールゲートウェイプログラム206を格納しており、また、データを格納する揮発性記憶部207を備えている。
メールゲートウェイプログラム206は、メール中継部212と、データストアサーバI/F部213と、を含んで構成される。メール中継部212は、メールゲートウェイ106が携帯端末101からメールを受信し、そのまま送信先サーバ105へ中継する処理と、データストアサーバ107から取得されたメールを、送信先サーバ105へ中継する処理を実現する各種制御プログラムが記録され、プロセッサ203により実行される。
データストアサーバI/F部213は、送信先サーバ105へのメール中継が失敗した際の、受信したメールをデータストアサーバ107へ格納する処理と、データストアサーバ107からメールを取得する処理を実現する各種制御プログラムが記録され、プロセッサ203により実行される。 揮発性記憶部207には、メールゲートウェイプログラム206が管理するデータを格納する。
不揮発性メモリ205は、不揮発性記憶部208を備えている。不揮発性記憶部208には、メールゲートウェイプログラム206が管理するデータを格納する。
メール中継部212は、携帯端末101とメールゲートウェイ106、およびメールゲートウェイ106と送信先サーバ105の間で生じる処理を担当する。
データストアサーバI/F部213は、メールゲートウェイ106とデータストアサーバ107間で生じる処理を担当する。
図3は、データストアサーバ107を実現する情報処理装置のハードウェア構成である。
データストアサーバ107を実現する情報処理装置は、ネットワークI/F302と、プロセッサ303と、揮発性メモリ304と、不揮発性メモリ305と、これらを接続するバスなどの内部通信線と、を含んで構成される。データストアサーバ107はネットワークI/F302を介してキャリア設備網103に接続している。
揮発性メモリ304は、データストアサーバプログラム306を格納しており、また、データを格納する揮発性記憶部307を備えている。データストアサーバプログラム306には、データストアサーバ107がメールゲートウェイ106から受信したKeyとValueの組を、揮発性記憶部307へ格納する処理、もしくはデータストアサーバ107がメールゲートウェイ106から受信したKeyに対応したValueを返す処理、あるいはデータストアサーバ107がメールゲートウェイ106から受信したKeyに対応したValueを削除する処理を実現する各種制御プログラムが記録され、プロセッサ303により実行される。
揮発性記憶部307には、データストアサーバプログラム306が管理するデータを格納する。
不揮発性メモリ305は、不揮発性記憶部308を備えている。不揮発性記憶部308には、データストアサーバプログラム306が管理するデータを格納する。
メールデータ313は、データストアサーバプログラム306が格納したメールのデータであり、順序管理情報312はメールデータ313を送信時刻順に管理するための情報である。順序管理情報312の内容に関しては、後述する。
図4は順序管理情報312の構成を例示する図である。本実施例では、全メールは宛先アドレスのドメイン毎にグループ分けされる。本実施例ではさらに、宛先アドレスのドメイン毎に分けられたメールは、宛先アドレスのHash値によって、グループ分けされる。グループ分けに用いるHash関数は、MD5やSHA−1など、均等にグループ分け可能である一般的なHash関数であれば、何を用いても良い。
順序管理情報312は、総合管理部402と、ドメイン別管理部403と、ドメイン別グループ始端部404と、ドメイン別グループ終端部405と、メールデータ順序管理部406と、を含んで構成される。本実施例では、ドメイン別管理部403と、ドメイン別グループ始端部404と、ドメイン別グループ終端部405と、メールデータ順序管理部406は、データストアサーバ107上に複数個存在するため、ドメイン別管理部403aのようにアルファベットを添え字として表記したものは特定のデータ単体を示し、総称する場合は、添え字をつけずに表記する。
総合管理部402は、データサイズ412と、キューサイズ413と、各ドメイン別管理部へのKey414と、各ドメイン別管理部のデータサイズ415と、各ドメイン別管理部のキューサイズ416と、を含んで構成される。総合管理部402は、データストアサーバ107に格納されているメールおよび関連情報を一括管理するデータである。
データサイズ412は、データストアサーバ107に格納されている全メールの総バイト数である。この値は、各ドメイン別管理部のデータサイズ415の総和で表すことができる。この値が、データストアサーバ107に格納可能なバイト数に達した場合には、新規メールの格納が規制される。ここで、データストアサーバ107に格納可能なバイト数は、メールゲートウェイ106のメールゲートウェイプログラム206に規定値として与えても良いし、データストアサーバ107の揮発性記憶部307上に管理し、参照しても良い。
キューサイズ413は、データストアサーバ107に格納されている全メールの数である。この値は、各ドメイン別管理部のキューサイズ416の総和で表すことができる。この値が、データストアサーバ107に格納可能な全メール数に達した場合には、新規メールの格納が規制される。ここで、データストアサーバ107に格納可能な全メール数は、メールゲートウェイ106のメールゲートウェイプログラム206に規定値として与えても良いし、データストアサーバ107の揮発性記憶部307上に管理し、参照しても良い。
各ドメイン別管理部へのKey414は、単体のドメイン別管理部403aをValueとするKeyが、全ドメイン別管理部403分格納される。
各ドメイン別管理部のデータサイズ415は、単体のドメイン別管理部403aが管理する全メールの総バイト数が、ドメイン別管理部403aに一意につけられるID名とともに全ドメイン別管理部403分格納される。
各ドメイン別管理部のキューサイズ416は、単体のドメイン別管理部403aが管理する全メールの数が、ドメイン別管理部403aに一意につけられるID名とともに全ドメイン別管理部403分格納される。
ドメイン別管理部403は、データサイズ422と、キューサイズ423と、秒間送信数424と、受信規制フラグ425と、送信規制フラグ426と、コネクション数427と、各ドメイン別グループ始端部へのKey428と、各ドメイン別グループ終端部へのKey429と、各メールデータ順序管理部のデータサイズ430と、各メールデータ順序管理部のキューサイズ431と、を含んで構成される。
データサイズ422は、データストアサーバ107に格納されている全メールのうち、各ドメイン別管理部403の管理下にあるものの総バイト数である。この値は、各メールデータ順序管理部のデータサイズ430の総和で表すことができる。この値が、データストアサーバ107に格納可能な各ドメインに設定されたバイト数に達した場合には、新規メールの格納が規制される。ここで、データストアサーバ107に格納可能な各ドメインに設定されたバイト数は、メールゲートウェイ106のメールゲートウェイプログラム206に規定値として与えても良いし、データストアサーバ107の揮発性記憶部307上に管理し、参照しても良い。
キューサイズ423は、データストアサーバ107に格納されている全メールのうち、各ドメイン別管理部403の管理下にあるものの数である。この値は、各メールデータ順序管理部のキューサイズ431の総和で表すことができる。この値が、データストアサーバ107に格納可能な各ドメインに設定されたメール数に達した場合には、新規メールの格納が規制される。ここで、データストアサーバ107に格納可能な各ドメインに設定されたメール数は、メールゲートウェイ106のメールゲートウェイプログラム206に規定値として与えても良いし、データストアサーバ107の揮発性記憶部307上に管理し、参照しても良い。
秒間送信数424は、データストアサーバ107に格納されている全メールのうち、各ドメイン別管理部403の管理下にあるものを、1秒間に送信している件数および最後に送信した時刻の2つの値で表される。この値は、特定の宛先へのメール送信が相次いだ場合に、送信規制を行う(スロットリング)ために、必要とされる。この値が、各ドメインの規定の秒間送信数に達した場合には、再送メールの送信が規制される。ここで、各ドメインの規定の秒間送信数は、メールゲートウェイ106のメールゲートウェイプログラム206に規定値として与えても良いし、データストアサーバ107の揮発性記憶部307上に管理し、参照しても良い。
受信規制フラグ425は、受信したメールが、宛先アドレスによって一意に定められた、該当のドメイン別管理部403aの管理下のデータに、格納可能であるかどうかを示す。受信フラグ425がセットされている場合には、該当のドメイン別管理部403aの管理下となる受信メールの格納は失敗する。
送信規制フラグ426は、データストアサーバ107に格納されている全メールのうち、各ドメイン別管理部403の管理下にあるものが、送信可能であるかどうかを示す。
コネクション数427は、データストアサーバ107に格納されている全メールのうち、各ドメイン別管理部403の管理下にあるものに関して、メールゲートウェイサーバ107と送信先サーバ105間にいくつのコネクションを張って送信されているかを示す。この値が、各ドメインの規定のコネクション数に達した場合には、再送メールの送信が規制される。ここで、各ドメインの規定の秒間送信数は、メールゲートウェイ106のメールゲートウェイプログラム206に規定値として与えても良いし、データストアサーバ107の揮発性記憶部307上に管理し、参照しても良い。
各ドメイン別グループ始端部へのKey428は、各ドメイン別グループ始端部404をValueとしたときのKeyを保持する。
各ドメイン別グループ終端部へのKey429は、各ドメイン別グループ終端部405をValueとしたときのKeyを保持する。
各メールデータ順序管理部のデータサイズ430は、該当ドメインが管理している各グループのメールデータ順序管理部406内に格納されているメールのデータサイズが、メールデータ順序管理部406に一意につけられるID名とともに全メールデータ順序管理部406分格納される。
各メールデータ順序管理部のキューサイズ431は、該当ドメインが管理している各グループのメールデータ順序管理部406内に格納されているメール数が、メールデータ順序管理部406に一意につけられるID名とともに全メールデータ順序管理部406分格納される。
ドメイン別グループ始端部404は、メールデータ順序管理部へのKey442と、送信規制フラグ443と、送信中フラグ444と、を含んで構成される。
メールデータ順序管理部へのKey442は、該当のドメイン別グループが管理しているメール群の中で、最も送信時刻が早いメール群を管理しているメールデータ順序管理部406へのKeyを保持する。
送信規制フラグ443は、該当のドメイン別グループに管理されているメールを、送信先サーバ105へ送信することができるか否かを示す。この値は、特定の宛先へのメール送信が相次いだ場合にセットされる。
送信中フラグ444は、該当のドメイン別グループに管理されているメールが、メールゲートウェイ106によって、送信先サーバ105へ送信されているか否かを示す。該当ドメイン別グループに管理されているメールがあるメールゲートウェイ106によって送信されている最中に、メールゲートウェイ106bが該当ドメイン別グループに管理されているメールを送信すると、順序逆転や二重配信を発生させる原因となるため、送信中フラグ444を設けることで、これを防ぐ。送信中フラグ444がセットされている場合には、あるメールゲートウェイ106によって該当ドメイン別グループに管理されているメールが送信されているため、該当ドメイン別グループに管理されているメールの送信は行わない。また、該当ドメイン別グループに管理されているメールを送信する際には、送信前に送信中フラグ444の設定を行い、送信が終了しだい送信中フラグ444の解除を行う。
ドメイン別グループ終端部405は、メールデータ順序管理部へのKey452と、フィードバック値453と、受信規制フラグ454と、メールデータ順序管理部の格納メールデータ数閾値455と、メールデータ順序管理部の格納メールデータ時刻閾値456と、を含んで構成される。
メールデータ順序管理部へのKey452は、該当のドメイン別グループが管理しているメール群の中で、最も送信時刻が遅いメール群を管理しているメールデータ順序管理部406へのKeyを保持する。
フィードバック値453は、総合管理部402およびドメイン別管理部403内に格納されている管理情報を更新する頻度を表す。フィードバック値は1以上の整数値をとり、この値が小さければ更新頻度が高く、この値が大きければ更新頻度が低下する。この値は、固定としても良いし、データストアサーバ107に格納されているメール数によって動的に変更しても良い。
受信規制フラグ454は、現在該当のドメイン別グループのメール格納が規制されているか否かを示す。ここで、この受信規制フラグが有効となるのは、新規に受信したメールを格納する際であり、再送に失敗して再格納となったメールを格納する際には、このフラグは無効である。このフラグがセットされている場合には、メールの格納は失敗し、携帯端末101にはエラー応答が返される。受信規制フラグは454が設定されるのは、全メール格納数が規定数を上回っている場合、該当ドメインのメール格納数が規定数を上回っている場合等が挙げられる。
メールデータ順序管理部の格納メールデータ数閾値455は、メールデータ順序管理部406内に格納できるメール数の上限値を示す。この値は固定としても良いし、データストアサーバ107の揮発性記憶部307上に管理パラメータを一括管理する情報を設置し、それらを参照し、定期的に変更しても良い。
メールデータ順序管理部の格納メールデータ時刻閾値456は、メールデータ順序管理部406内に格納できるメールの送信時刻の差の上限値を示す。つまり、メールデータ順序管理部406内に格納されているメールのうち、最も送信時刻が早いものと、最も送信時刻が遅いものの差が、メールデータ順序管理部の格納メールデータ時刻閾値456以内でなければならない。この値は固定としても良いし、データストアサーバ107の揮発性記憶部307上に管理パラメータを一括管理する情報を設置し、それらを参照し、定期的に変更しても良い。
メールデータ順序管理部406は、各メールデータへのKey462と、各メールデータの送信時刻463と、格納メールデータ数464と、格納メールデータのデータサイズ465と、次のメールデータ順序管理部へのKey466と、を含んで構成される。
各メールデータへのKey462は、該当のメールデータ順序管理部406が管理しているメールの、メール本体をValueとしたときのKeyが格納される。
各メールデータの送信時刻463は、該当のメールデータ順序管理部406が管理しているメールの送信時刻が格納される。
格納メールデータ数464は、該当のメールデータ順序管理部406が管理しているメール数が格納される。
格納メールデータのデータサイズ465は、該当のメールデータ順序管理部406が管理しているメールの総データサイズが格納される。
次のメールデータ順序管理部へのKey466は、該当のメールデータ順序管理部406aが管理しているメール群の次に送信されるメール群を格納しているメールデータ順序管理部406bへのKeyが格納される。次に送信されるメール群を格納しているメールデータ順序管理部406bがない場合には、NULLが格納される。
図5は、データストアサーバ107内の揮発性記憶部307上に格納される、図4で示した順序管理情報312に含まれる各データとメールデータ313の関係図を例示した図である。順序管理情報312を構成する各データは、該当データ内に含まれている他のデータへのKeyを参照することによって、参照先である他データを得ることができるため、該当データと参照先データとの間にリレーションを持つことになる。図5では、該当データが保持しているKeyを参照して得られるデータを表すために、該当Keyを参照することで得られるデータを、参照元から参照先への矢印で表現している。なお、図5では全データの構成の説明を重視するため、各データ内には他のデータへのKeyを図示している。
総合管理部402は、各ドメイン別管理部へのKey414を保持しており、このKeyを参照することでドメイン別管理部403を取得することができる。
ドメイン別管理部403は、ドメイン別グループ始端部へのKey428およびドメイン別グループ終端部へのKey429を保持しており、これらのKeyを参照することでドメイン別グループ始端部404とドメイン別グループ終端部405を取得することができる。
ドメイン別グループ始端部404は、メールデータ順序管理部へのKey442を保持しており、ドメイン別グループ終端部405は、メールデータ順序管理部へのKey452を保持している。ドメイン別グループ始端部404、ドメイン別グループ終端部405は、ともに保持しているKeyを参照することでメールデータ順序管理部406を取得することができる。
メールデータ順序管理部406は、次のメールデータ順序管理部へのKey466を保持しており、このKeyを参照することで次のメールデータ順序管理部を取得することができる。また、メールデータ順序管理部406は、各メールデータへのKey462を保持しており、これらのKeyを参照することでメールデータ313を取得することができる。 順序管理情報312の総合管理部402はドメイン別管理部403へのKeyを持ち、ドメイン別管理部403はドメイン別グループ始端部404およびドメイン別グループ終端部405へのKeyを持つため、総合管理部402、ドメイン別管理部403、ドメイン別グループ始端部404およびドメイン別グループ終端部405は階層構造をとることとなる。また、ドメイン別グループ始端部404およびドメイン別グループ終端部405はメールデータ順序管理部406へのKeyを持ち、メールデータ順序管理部406は次のメールデータ順序管理部へのKeyを持っており、メールデータ順序管理部が連結される形となるため、ドメイン別グループ始端部404、ドメイン別グループ終端部405およびメールデータ順序管理部406は連結リスト構造をとることとなる。
図6、図7、図8は、メールゲートウェイ106がメールを受信する際、および送信する際のシーケンスを例示する図である。本発明では、データストアサーバ107へのメールの格納および取得、削除動作に特化したシーケンスを説明するため、データストアサーバ107へのメール格納が発生しない場合、つまり送信先サーバ105への中継が成功した場合のシーケンスに関しては、今回取り上げない。
メールの受信、および送信する際のシーケンスでは、メールゲートウェイ106のデータストアサーバI/F部213とデータストアサーバ107間でメールや各種要求および通知を交換するが、実際の交換データはヘッダ情報やデータ本体を示すペイロードなどを含む形となる。以降の説明では、メールの受信および送信処理に特化したシーケンスを説明するために、実際の交換データではなく、ペイロード部分となるメールおよび各種要求、各種通知と表記する。これは、携帯端末101とメールゲートウェイ106のメール中継部212間で交換するメールおよび各種通知も同様である。また、メールをデータストアサーバ107の揮発性記憶部307へ格納もしくは取得、削除する際には、メールゲートウェイ106のデータストアサーバI/F部213とデータストアサーバ107間で順序管理情報312の交換が何度か行われるが、メールの受信および送信処理に特化したシーケンスを説明するため、順序管理情報312の交換も含め、メールの格納もしくは取得、削除に要するやりとりは1リクエスト1レスポンスの形で表現する。
図6は送信先サーバ105へメールが送信できない状態が一定期間継続した場合の、メールゲートウェイ106のメール受信シーケンスを例示する図である。送信先サーバ105へメールが送信できない状態が継続する原因は、送信先サーバ105への障害中または輻輳中である、またはメールゲートウェイ106と送信先サーバ105間のネットワーク不通などがある。上記の場合、メールゲートウェイ106は、送信に失敗した送信先サーバ105向けのメールは全てエラーとなり、送信先サーバ105へ送信可能になるまでメールを保持しなければならない。
最初に、携帯端末101は、メールをメールゲートウェイ106へ送信する(ステップ501)。そして、メールゲートウェイ106のメール中継部212は、メールを受信し(ステップ502)、揮発性記憶部207にメールを格納する(ステップ503)。
次に、メールゲートウェイ106のメール中継部212は、送信先サーバ105へメールを送信する(ステップ504)。
メールを送信後、応答が受信できない時間がタイムアウト値を超えた時点で、メール中継部212は、メールの送信時刻を更新する(ステップ505)。この送信時刻は、タイムアウト値を越えた時点での送信時刻に、規定の再送時刻を加えた時刻となる。
次に、メールゲートウェイのデータストアサーバI/F部213は、メール格納要求およびメールをデータストアサーバ107へ送信する(ステップ506)。
次に、データストアサーバ107のデータストアプログラム306はメール格納要求およびメールを受信し(ステップ507)、揮発性メモリにメールを格納する(ステップ508)。図6には記述していないが、ステップ506において格納に失敗した場合、データストアプログラム306はメールゲートウェイ106へメール格納失敗通知を返し、メールゲートウェイ106は携帯端末101へメール送信失敗通知を返す。
次に、データストアサーバ107のデータストアプログラム306は、メール格納完了通知をメールゲートウェイ106に送信し(ステップ509)、メールゲートウェイ106のデータストアサーバI/F部213はメール格納完了通知を受信する(ステップ510)。
次に、メールゲートウェイ106のメール中継部212はメール送信完了通知を携帯端末101に送信し(ステップ511)、携帯端末101がメール送信完了通知を受信する(ステップ512)。ステップ509の後、メールゲートウェイ106のメール中継部212は、揮発性記憶部307からメールを削除する。
図7は再送メールの送信シーケンスを例示する図である。
最初に、メールゲートウェイ106のデータストアサーバI/F部213は、メール取得要求をデータストアサーバ107へ送信する(ステップ601)。そして、データストアサーバ107のデータストアプログラム306は、メール取得要求を受信し(ステップ602)、データストアサーバ107のデータストアプログラム306は、取得完了通知およびメールをメールゲートウェイ106へ送信する(ステップ603)。
次に、メールゲートウェイ106のデータストアサーバI/F部213は取得完了通知およびメールを受信し(ステップ604)、揮発性記憶部207へ受信したメールを格納した後(ステップ605)、メールゲートウェイ106のメール中継部212は、取得したメールの送信時刻に、送信先サーバ105へメールを送信する(ステップ606)。
次に、送信先サーバ105がメールゲートウェイ106から送信されたメールを受信し(ステップ607)、メールゲートウェイ106に対してメール送信完了通知を返す(ステップ608)。
次に、メールゲートウェイ106のメール中継部212は、送信先サーバ105からのメール送信完了通知を受信し(ステップ609)、揮発性記憶部207からメールを削除する(ステップ610)。そして、メールゲートウェイ106のデータストアサーバI/F部213は、データストアサーバ107へメール削除要求を送信する(ステップ612)。 次に、データストアサーバ107のデータストアプログラム306は、メール削除要求を受信し(ステップ612)、揮発性記憶部307からメールを削除し(ステップ613)、メールゲートウェイ106へ削除完了通知を送信する(ステップ614)。
最後に、メールゲートウェイ106のデータストアサーバI/F部213は、データストアサーバ107から送信された削除完了通知を受信する(ステップ615)。
図8は、送信先サーバ105へメールが送信できない状態が一定期間継続した場合の、メールゲートウェイ106の再送メール送信シーケンスを例示する図である。
最初に、メールゲートウェイ106のデータストアサーバI/F部213は、メール取得要求をデータストアサーバ107へ送信する(ステップ701)。そして、データストアサーバ107のデータストアプログラム306は、メール取得要求を受信し(ステップ702)、データストアサーバ107のデータストアプログラム306は、取得完了通知およびメールをメールゲートウェイ106へ送信する(ステップ703)。
次に、メールゲートウェイ106のデータストアサーバI/F部213は取得完了通知およびメールを受信し(ステップ704)、揮発性記憶部207へ受信したメールを格納した後(ステップ705)、メールゲートウェイ106のメール中継部212は、取得したメールの送信時刻に、送信先サーバ105へメールを送信する(ステップ706)。
メールを送信後、応答が受信できない時間がタイムアウト値を超えた時点で、メール中継部212は、メールの送信時刻を更新する(ステップ707)。この送信時刻は、タイムアウト値を越えた時点での送信時刻に、規定の再送時刻を加えた時刻となる。
次に、メールゲートウェイのデータストアサーバI/F部213は、メール格納要求およびメールをデータストアサーバ107へ送信する(ステップ708)。ここで送信するメールは、ステップ707において送信時刻を更新したメールである。
次に、データストアサーバ107のデータストアプログラム306はメール格納要求およびメールを受信し(ステップ709)、揮発性メモリにメールを格納する(ステップ710)。
次に、データストアサーバ107のデータストアプログラム306は、メール格納完了通知をメールゲートウェイ106に送信し(ステップ711)、メールゲートウェイ106のデータストアサーバI/F部213はメール格納完了通知を受信する(ステップ712)。
次に、メールゲートウェイ106のメール中継部212は、揮発性記憶部207からメールを削除し(ステップ713)、メールゲートウェイ106のデータストアサーバI/F部213は、データストアサーバ107へメール削除要求を送信する(ステップ714)。ここで、削除要求を行ったメールは、送信時刻を更新する前のメールである。現時点では送信時刻を更新する前のメール、送信時刻を更新した後のメールが1通ずつデータストアサーバ107の揮発性記憶部307に格納されているため、古いほうのメールを削除する必要がある。
次に、データストアサーバ107のデータストアプログラム306は、メール削除要求を受信し(ステップ715)、揮発性記憶部307からメールを削除し(ステップ716)、メールゲートウェイ106へ削除完了通知を送信する(ステップ717)。
最後に、メールゲートウェイ106のデータストアサーバI/F部213は、データストアサーバ107から送信された削除完了通知を受信する(ステップ718)。
図9はメールゲートウェイ106のデータストアサーバI/F部213のメール格納処理フローを示す図である。この処理フローは、図6に示したシーケンス図のステップ506からステップ510、および図8に示したシーケンス図のステップ708からステップ712までの間に発生する、メールゲートウェイ106のデータストアサーバI/F部213の動作を例示したものである。
最初に、データストアサーバI/F部213はドメイン別グループ終端部405をデータストアサーバ107から取得する(ステップ801)。ここで、ドメイン別グループ終端部405の取得に関して、格納するメールの宛先アドレスを元に、該当のドメイン別部ループ終端部405aをValueとするKeyを直接指定して取得してもよいし、総合管理部402を取得し、総合管理部402内の各ドメイン別管理部へのKey414を元に該当のドメイン別管理部403aを取得し、取得したドメイン管理部403a内の各ドメイン別グループ終端部へのKey429を元に、該当のドメイン別グループ終端部405aをValueとするKeyを取得してもよい。
前者の方法では、ドメイン別グループ終端部405の取得がメールゲートウェイ106のデータストアサーバI/F部213によって支配される形となるため、取得ルールの変更はメールゲートウェイプログラム206の変更でしか行えない。しかしながら、直接該当のドメイン別グループ終端部405を取得することができるため、メールゲートウェイ106とデータストアサーバ107間の通信処理を減らすことができる。
後者の方法では、ドメイン別グループ終端部405の取得が総合管理部402もしくはドメイン管理部403によって支配される形となるため、取得ルールの変更はこれらの順序管理情報の変更で行うことができ、柔軟であるといえる。しかしながら、総合管理部402およびドメイン別管理部403の取得が必要なため、メールゲートウェイ106とデータストアサーバ107間の通信処理が増加する。
これら2つの方法は、基本は後者の方法をとり、一定時間の間ドメイン別グループ終端部405の情報をキャッシュとして、揮発性記憶部207に保持しておき、キャッシュにデータが存在する場合に前者の方法をとれば、柔軟さと低い通信処理コストを両立することも可能である。
次に、格納するメールが新規かつ、取得したドメイン別グループの終端部405a内の受信規制フラグ454がセットされていた場合には処理を終了し、そうでない場合はステップ803へ進む(ステップ802)。受信規制フラグ454は、データストアサーバ107内に保持されているメールが規定以上の場合や、データストアサーバ107に格納されている全メールのうち、各ドメイン別管理部403の管理下にあるものが規定以上の場合などのときに設定される。この受信規制フラグは新規メールに対して有効であり、再送扱いとなって格納されるメールの場合は、この受信規制は行われない。
次に、取得したドメイン別グループの終端部405内のメールデータ順序管理部へのKey452を用いて、メールデータ順序管理部406を取得し(ステップ803)、取得したメールデータ順序管理部406へメールを格納できるかどうかを判定し(ステップ804)、格納条件を満たさない場合にはステップ806へ進み、格納条件を満たす場合には805へ進む。
上記格納条件は、取得したドメイン別グループの終端部405内のメールデータ順序管理部の格納メールデータ数閾値455およびメールデータ順序格納部の格納メールデータ時間閾値456を元に設定され、以下の2つを満たす場合に、格納条件を満たしているとする。
・取得したメールデータ順序管理部406の格納メールデータ数464が、メールデータ順序管理部の格納メールデータ数閾値455の示す値未満である。
・取得したメールデータ順序管理部406の各メールデータの送信時刻463のうち、もっとも早い送信時刻と、格納するメールの送信時刻の差が、メールデータ順序管理部の格納メールデータ時間閾値456の示す値未満である。
これらの条件を設けることによって、各順序管理部406内に格納されるメール群を、送信先サーバ105へ一括送信可能な形でまとめることが可能となる。
ステップ806において、データストアサーバI/F部213は、新しいメールデータ順序管理情報部406を作成し、データストアサーバ107へ新しいメールデータ順序管理情報部406を格納する。この処理によって、順序管理情報406を上記2つの条件により、メールの送信単位毎に分割されることとなる。また、取得したドメイン別グループの終端部405内のメールデータ順序管理部へのKey452を新しいメールデータ順序管理情報部406をValueとするKeyに変更し、変更したドメイン別グループの終端部405をデータストアサーバ107へ格納する。
ステップ805において、データストアサーバI/F部213は、取得したメールデータ順序管理部406内の各メールデータへのKey406へ、格納するメールをValueとするKeyを格納する。合わせて、取得したメールデータ順序管理部406内の各メールデータの送信時刻463へ、格納するメールの送信時刻を追加し、取得したメールデータ順序管理部406内の格納メールデータ数464を1増加させ、取得したメールデータ順序管理部406内の格納メールデータのデータサイズ465へ、格納するメールのデータサイズを加算する処理を行う。
ステップ807において、データストアサーバI/F部213は、データストアサーバ107の揮発性記憶部307に格納されているメールデータ順序管理部406が、ステップ801において取得したものと一致しているかどうかを調査する。一致している場合にはステップ808へ進み、一致していない場合には、このまま格納するとデータの不整合が発生するため、ステップ801へ進む。この処理はCAS(Compare And Swap)操作と呼ばれるものであり、データストアサーバ107の揮発性記憶部307に格納されるデータのアトミックな操作を保証するものである。CAS操作では、格納を行うデータが、該当データの取得時から更新されていないことを確認したうえで、格納処理を行う。CAS操作は、前述のステップ806でも利用する必要があり、ステップ806においてアトミックな操作が失敗した場合には、同様にステップ801へ進む。CAS操作は、データストアサーバ107の揮発性記憶部307に既に格納されているデータを更新する際に必ず必要とされ、新しく追加するデータの格納や、データの削除の際には必要とされない。
メールデータ順序管理部406の格納にアトミックな操作が成功した場合には、メールデータ順序管理部406は正常にデータストアサーバ107の揮発性記憶部307へ格納される(ステップ808)。
次に、データストアサーバI/F部213は、格納するメールをValueとし、ステップ805においてメールデータ順序管理部406内の各メールデータへのKey406へ格納した、格納するメールをValueとするKeyをKeyとして、データストアサーバ107の揮発性記憶部307へ格納する(ステップ809)。
メールの格納をメールデータ順序管理部406の格納よりも先に行うと、メールの格納動作を行った後に、メールゲートウェイ106が電源障害やサーバ障害によって停止となった場合、格納したメールデータ313のKeyを持つメールデータ順序管理部406が存在せず、格納したメールデータ313を取り出すことが困難となる。この状況が頻繁に発生すると、データストアサーバ107の揮発性記憶部307が取り出すことのできないメールデータ313によって格納可能領域が圧迫される原因となる。そのため、本実施例ではメールデータ順序管理部406の格納(ステップ808)後にメールの格納(ステップ809)を行う。この結果、データストアサーバ107の揮発性記憶部307に取り出すことのできないメールデータが作成されることを防ぐことができる。
ステップ810において、データストアサーバI/F部213は、一連の処理の中で、新しいメールデータ順序管理部406を作成したか、もしくはステップ808において格納したメールデータ順序管理部406内の格納メールデータ数464がドメイン別グループ終端部405内のフィードバック値453の倍数であるかを調査し、どちらかの条件を満たす場合には、ステップ811へ進み、どちらの条件も満たさない場合には処理を終了する。
フィードバック値453は、ドメイン別管理部403および総合管理部402の更新頻度を表す値であり、小さく設定することで、更新頻度が上昇し、大きく設定することで、更新頻度が低下する。更新頻度が上昇した場合には、ドメイン別管理部403および総合管理部402の情報の精度が高くなるが、その分処理負荷が増加する。また、更新頻度が低下した場合には、ドメイン別管理部403および総合管理部402の情報の精度が低くなるが、その分処理負荷が軽減できる。そのため、格納メール数が格納上限に達しつつある場合など、情報の精度を必要とする場合にはフィードバック値453を小さくし、情報の制度が特別必要でない場合にはフィードバック値453を大きくするといった運用を行うことができる。
ステップ811において、データストアサーバI/F部213は、ドメイン別管理部403および総合管理部402を更新する。
ドメイン別管理部403の更新は、ドメイン別管理部403内の各メールデータ情報管理部のデータサイズ430および各メールデータ順序管理情報部のキューサイズ431に、ステップ808にて格納したメールデータ順序管理部406の格納メールデータ数464および格納メールデータのデータサイズ465の値を反映する。その後、反映したドメイン別管理部403内の各メールデータ情報管理部のデータサイズ430および各メールデータ順序管理情報部のキューサイズ431を元に、データサイズ422およびキューサイズ423を各メールデータ情報管理部のデータサイズ430および各メールデータ順序管理情報部のキューサイズ431の総和から算出し、反映する。ここで、データサイズ422が、各ドメイン別のメール格納数上限に達している場合には、受信規制フラグ425をセットし、さらに各ドメイン別グループ終端部へのKey429を参照し、各ドメイン別グループ終端部405内の受信規制フラグ454をセットする。
総合管理部402の更新は、総合管理部402内の各ドメイン別管理部のデータサイズ415および各ドメイン別管理部のキューサイズ416に、上記手順によって更新した、ドメイン別管理部403のデータサイズ422およびキューサイズ423の値を反映する。その後、反映した総合管理部402内の各ドメイン別管理部のデータサイズ415および各ドメイン別管理部のキューサイズ416を元に、データサイズ412およびキューサイズ413を各ドメイン別管理部のデータサイズ415および各ドメイン別管理部のキューサイズ416の総和から算出し、反映する。ここで、データサイズ412が、全体のメール格納数上限に達している場合には、各ドメイン別管理部へのKey414を参照し、ドメイン別管理部内の受信規制フラグ425をセットし、さらに各ドメイン別グループ終端部へのKey429を参照し、各ドメイン別グループ終端部405内の受信規制フラグ454をセットする。
ステップ810以降に関しては、新規メールの場合には、ステップ809後に携帯端末101へ送信完了通知を配信した後、行っても良い。これによって、携帯端末101への送信完了通知が早い段階で送信することが可能となる。
図10はメールゲートウェイ106のデータストアサーバI/F部213のメール取得処理フローを示す図である。この処理フローは、図7に示したシーケンス図のステップ601からステップ604、および図7に示したシーケンス図のステップ701からステップ704までの間に発生する、メールゲートウェイ106のデータストアサーバI/F部213の動作を例示したものである。
最初に、データストアサーバI/F部213はドメイン別グループ始端部404をデータストアサーバ107から取得する(ステップ901)。ここで、ドメイン別グループ始端部404の取得に関しても、ドメイン別グループ終端部405の取得と同様に、格納するメールの宛先アドレスを元に、該当のドメイン別グループ始端部404をValueとするKeyを直接指定して取得してもよいし、総合管理部402を取得し、総合管理部402内の各ドメイン別管理部へのKey414を元に該当のドメイン別管理部403を取得し、取得したドメイン管理部403内の各ドメイン別グループ始端部へのKey428を元に、該当のドメイン別グループ始端部404を取得してもよい。また、基本は後者の方法をとり、一定時間の間ドメイン別グループ終端部405の情報をキャッシュとして、揮発性記憶部207に保持しておき、キャッシュにデータが存在すれば前者の方法をとるようにしてもよい。
次に、取得したドメイン別グループの始端部404内の送信規制フラグ443もしくは送信中フラグ444がセットされていた場合には処理を終了し、そうでない場合はステップ903へ進む(ステップ902)。送信規制フラグは、規定数以上のメール送信が行われ、メールの送信に規制がかかっている場合に設定される。送信中フラグ444は、既に該当のドメイン別グループのメールを取得し、送信しているメールゲートウェイ106が存在する場合に設定される。
ステップ903において、ドメイン別グループの始端部404内の送信中フラグ444をセットする。ここでセットすることで、該当のドメイン別グループのメールの取得および送信動作を行っていることを表すことが可能となる。
ステップ904において、データストアサーバI/F部213は、データストアサーバ107の揮発性記憶部307に格納されているドメイン別グループ始端部404が、ステップ901において取得したものと一致しているかどうかを調査する。一致している場合にはステップ905へ進み、一致していない場合には、処理を終了する。この処理は前述のCAS操作と呼ばれるものであり、データストアサーバ107の揮発性記憶部307に格納されるデータのアトミックな操作を保証するものである。
ドメイン別グループ始端部404の格納にアトミックな操作が成功した場合には、ドメイン別グループ始端部404は正常にデータストアサーバ107の揮発性記憶部307へ格納される(ステップ905)。
次に、取得したドメイン別グループの始端部404内のメールデータ順序管理部へのKey442を用いて、メールデータ順序管理部406を取得し(ステップ906)、取得したメールデータ順序管理部406内の各メールデータへのKey462を用いて、メールデータ313を取得し、処理を終了する。
図11はメールゲートウェイ106のメール送信および削除処理フローを示す図である。この処理フローは、図7に示したシーケンス図のステップ606からステップ615、および図8に示したシーケンス図のステップ714からステップ718までの間に発生する、メールゲートウェイ106のメールゲートウェイプログラム206の動作を例示したものである。
最初に、メール中継部212は送信先サーバ105へメールを送信し、送信先サーバ105からメール送信完了通知を取得し(ステップ1001)、揮発性記憶部207からメールの削除を行う(ステップ1002)。
次に、データストアサーバI/F部213はドメイン別グループ始端部404をデータストアサーバ107から取得し、(ステップ1003)取得したドメイン別グループの始端部404内のメールデータ順序管理部へのKey442を用いて、メールデータ順序管理部406を取得する(ステップ1004)。ここで、ドメイン別グループ始端部404の取得に関しては、これまでと同様にどのような手順で取得してもかまわない。
ステップ1005において、取得したメールデータ順序管理部406内の、各メールデータへのKey462、各メールデータの送信時刻463から、送信が完了したメールに関する情報を削除する。
ステップ1006において、データストアサーバI/F部213は、データストアサーバ107の揮発性記憶部307に格納されているメールデータ順序管理部406が、ステップ1004において取得したものと一致しているかどうかを調査する。一致している場合にはステップ1007へ進み、一致していない場合には、ステップ1004へ進む。この処理は前述のCAS操作と呼ばれるものであり、データストアサーバ107の揮発性記憶部307に格納されるデータのアトミックな操作を保証するものである。
ドメイン別グループ始端部404の格納にアトミックな操作が成功した場合には、メールデータ順序管理部406は正常にデータストアサーバ107の揮発性記憶部307へ格納される(ステップ1007)。
ステップ1008において、これまでの工程を経て更新されたメールデータ順序管理部406内の各メールデータへのKey462、各メールデータの送信時刻463を参照し、格納されているメールが存在するか否かを調査する。調査の結果、格納されているメールが存在する場合には処理を終了し、存在しない場合にはステップ1009へ進む。
ステップ1009において、データストアサーバI/F部213は、ドメイン別グループ始端部404の更新、メールデータ順序管理部406の削除、ドメイン別管理部403の更新および総合管理部402の更新を行う。
ドメイン別グループ始端部404の更新は、メールデータ順序管理部へのKey442を、メールデータ順序管理部406内の次のメールデータ順序管理部へのKey466の内容に置き換え、さらに送信中フラグ444を解除する。
ドメイン別管理部403の更新は、ドメイン別管理部403内の各メールデータ情報管理部のデータサイズ430および各メールデータ順序管理情報部のキューサイズ431から、削除したメールデータ順序管理部406に関連する情報を削除する。その後、反映したドメイン別管理部403内の各メールデータ情報管理部のデータサイズ430および各メールデータ順序管理情報部のキューサイズ431を元に、データサイズ422およびキューサイズ423を各メールデータ情報管理部のデータサイズ430および各メールデータ順序管理情報部のキューサイズ431の総和から算出し、反映する。また、秒間送信数424を処理時点での時刻と、今回の処理中に送信したメール数を元に、最新の値に反映し、さらにコネクション数427を1デクリメントする。
ここで、秒間送信数424が、各ドメイン別のメール秒間送信数上限に達している場合には、送信規制フラグ426をセットし、さらに各ドメイン別グループ終端部へのKey429を参照し、各ドメイン別グループ始端部404内の送信規制フラグ443をセットする。また、更新したドメイン別管理部403のデータサイズ422およびキューサイズ423から、受信規制が必要なくなった場合には、受信規制フラグ425を解除し、さらに各ドメイン別グループ終端部へのKey429を参照し、各ドメイン別グループ終端部405内の受信規制フラグ454を解除する。
総合管理部402の更新は、総合管理部402内の各ドメイン別管理部のデータサイズ415および各ドメイン別管理部のキューサイズ416に、上記手順によって更新した、ドメイン別管理部403のデータサイズ422およびキューサイズ423の値を反映する。その後、反映した総合管理部402内の各ドメイン別管理部のデータサイズ415および各ドメイン別管理部のキューサイズ416を元に、データサイズ412およびキューサイズ413を各ドメイン別管理部のデータサイズ415および各ドメイン別管理部のキューサイズ416の総和から算出し、反映する。ここで、データサイズ412から、メールの受信規制が必要なくなった場合には、各ドメイン別管理部へのKey414を参照し、ドメイン別管理部内の受信規制フラグ425を解除し、さらに各ドメイン別グループ終端部へのKey429を参照し、各ドメイン別グループ終端部405内の受信規制フラグ454を解除する。