サーバ、金融情報配信方法およびプログラム
【課題】ネットワーク上の下位の装置においてより柔軟な処理を可能にすること。
【解決手段】金融情報配信システム1は、同期配信系10と、非同期配信系20と、データ配信システム30と、クライアント40とを有する。金融情報配信システム1において、同期配信系10および非同期配信系20は金融情報を含むメッセージを配信する。データ配信システム30は、同期配信系10および非同期配信系20から配信されたメッセージを加工し、クライアント40に送信する。このとき、データ配信システム30において、各サーバ31は、同期配信系10から配信されたメッセージに対してはグループ番号およびシーケンス番号を、非同期配信系20から配信されたメッセージに対してはシーケンス番号を付加する。
【解決手段】金融情報配信システム1は、同期配信系10と、非同期配信系20と、データ配信システム30と、クライアント40とを有する。金融情報配信システム1において、同期配信系10および非同期配信系20は金融情報を含むメッセージを配信する。データ配信システム30は、同期配信系10および非同期配信系20から配信されたメッセージを加工し、クライアント40に送信する。このとき、データ配信システム30において、各サーバ31は、同期配信系10から配信されたメッセージに対してはグループ番号およびシーケンス番号を、非同期配信系20から配信されたメッセージに対してはシーケンス番号を付加する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、金融情報を配信する技術に関する。
【背景技術】
【0002】
現在、有価証券市場に代表される金融商品の取引の多くは、ネットワークを利用して電子的に行なわれている。この種の取引では、投資家は、ネットワークに自らの端末を接続する。投資家は、その端末に証券取引所等から随時供給される金融情報の内容を基に、注文処理をかけるタイミングやその内容を判断している。投資家の判断は、証券取引所等から供給される金融情報の内容に依存している。したがって、端末に到達する金融情報に遅延が生じた場合、投資家は、陳腐化した古い情報に依存した判断を下してしまうことになる。すなわち、金融取引上大きな損失が生まれてしまうことがある。このように、金融情報の配信においては即時性が重要である(例えば特許文献1参照)。
【0003】
金融情報の配信においては、即時性に加えて信頼性も重要である。特許文献2は、配信サーバの負荷およびネットワークの負荷を軽減できる証券・金融データ配信システムを開示している。この証券・金融データ配信システムにおいて、受信・編集サーバは、情報提供元装置から受信したデータに順番に番号を振り、マルチキャスト配信サーバおよび問い合わせサーバに送信する。マルチキャスト配信サーバは、電文をグループ情報に基づいてマルチキャスト配信する。問い合わせサーバは、クライアントからの要求に応じて、欠落したデータを送信する。特許文献3は、マルチキャストパケット転送装置を開示している。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2006−031371号公報
【特許文献2】特開2008−147819号公報
【特許文献3】特開2007−274332号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
特許文献2に記載されているような、ネットワークの上位(上流)の装置においてデータに番号を振るシステムでは、下位(下流)の装置はその番号によってしか順序性の判断をすることができなかった。
本発明は、ネットワーク上の下位の装置においてより柔軟な処理を可能にする金融情報配信システム、サーバ、金融情報配信方法およびプログラムを提供する。
【課題を解決するための手段】
【0006】
(発明1)本発明は、各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち自装置より上位の階層にある他の装置からメッセージを受信する受信手段と、データを記憶する記憶手段と、前記受信手段により受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを前記記憶手段に記憶させ、前記受信手段により受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、そのメッセージを前記記憶手段に記憶させ、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定する特定手段と、前記特定手段により前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を行う加工手段と、前記特定手段により前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記特定手段により前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を付加する付加手段と、前記加工手段による加工および前記付加手段による付加がされたメッセージを下位の装置に送信する送信手段とを有するサーバを提供する。
【0007】
(発明2)発明1において、前記加工手段は、前記加工において所定の処理単位毎にメッセージを並列処理し、前記グループ番号は、前記処理単位毎に異なってもよい。
【0008】
(発明3)発明1において、前記記憶手段は、前記受信手段が受信したメッセージのうち、前記同期配信系から発信されたメッセージの、最新のシーケンス番号を前記グループ番号毎に記憶し、前記特定手段は、前記受信手段により受信されたメッセージが前記同期配信系から発信されたメッセージであり、そのメッセージが前記グループ番号を含み、かつ、そのグループ番号に対するシーケンス番号が前記記憶手段に記憶されている、そのグループ番号に対するシーケンス番号よりも大きい場合、そのグループ番号に対するシーケンス番号を前記記憶手段に記憶させ、そのメッセージを処理対象として特定してもよい。
【0009】
(発明4)発明1または2において、前記付加手段は、自装置よりも上位の装置により付加されたシーケンス番号の順番に従って、新たなシーケンス番号を前記メッセージに付加してもよい。
【0010】
(発明5)発明1−4のいずれかにおいて、前記受信手段により受信されたメッセージが前記対象配信単位から発信されたメッセージであり、かつ、そのメッセージのシーケンス番号が前記記憶手段に記憶されている最新のメッセージのシーケンス番号よりも2単位以上大きい場合、欠落しているシーケンス番号のメッセージの再送信を前記対象配信単位に要求する要求手段と、前記一の配信単位に障害が発生した場合、前記対象配信単位を、前記一の配信単位から前記非同期配信系の中の別の配信単位に変更する変更手段とを有してもよい。
【0011】
(発明6)本発明は、各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち一のサーバが、自装置より上位の階層にある他の装置からメッセージを受信するステップと、前記受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを、前記一のサーバが有する記憶手段に記憶させるステップと、前記受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、前記一のサーバがそのメッセージを前記記憶手段に記憶させるステップと、前記一のサーバが、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定するステップと、前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を、前記一のサーバが行うステップと、前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記特定手段により前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を、前記一のサーバが付加するステップと、前記一のサーバが、前記加工および前記付加がされたメッセージを下位の装置に送信するステップとを有する金融情報配信方法を提供する。
【0012】
(発明7)本発明は、コンピュータに、各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち一のサーバが、自装置より上位の階層にある他の装置からメッセージを受信するステップと、前記受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを、前記一のサーバが有する記憶手段に記憶させるステップと、前記受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、前記一のサーバがそのメッセージを前記記憶手段に記憶させるステップと、前記一のサーバが、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定するステップと、前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を、前記一のサーバが行うステップと、前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を付加するステップと、前記加工および前記付加がされたメッセージを下位の装置に送信するステップとを実行させるためのプログラムを提供する。
【発明の効果】
【0013】
発明1のサーバによれば、この下位の階層のサーバは、一つ上位の階層の装置により付加されたシーケンス番号のみを用いる場合と比較して、複数の階層で付加された複数のシーケンスの番号のうちどの階層で付加されたものを用いるか自由に設計でき、より柔軟な処理を行うことができる。
発明2のサーバによれば、この下位の階層のサーバは、上位の階層の装置における並列処理の単位毎に付加されたグループ番号を用いて処理を行うことができる。
発明3のサーバによれば、多重に配信されるメッセージの順序性をグループ番号に基づいて判断することができる。
発明4のサーバによれば、この下位の階層のサーバは、異なる階層のサーバで付加された異なるシーケンス番号のうち、任意のものを利用して処理をすることができる。
発明5のサーバによれば、同期配信系については冗長化されているサーバが一つでも稼動していれば配信が停止せず、非同期配信系については対象配信単位に障害が発生した場合には対象配信単位を切り替える構成を有していない場合と比較して、システムの信頼性が向上する。
発明6の金融情報配信方法によれば、各階層のサーバは、その階層で独自にシーケンス番号を付加することができる。下位の階層のサーバは、一つ上位の階層の装置により付加されたシーケンス番号のみを用いる場合と比較して、複数の階層で付加された複数のシーケンスの番号のうちどの階層で付加されたものを用いるか自由に設計でき、より柔軟な処理を行うことができる。
発明7のプログラムによれば、この下位の階層のサーバは、一つ上位の階層の装置により付加されたシーケンス番号のみを用いる場合と比較して、複数の階層で付加された複数のシーケンスの番号のうちどの階層で付加されたものを用いるか自由に設計でき、より柔軟な処理を行うことができる。
【図面の簡単な説明】
【0014】
【図1】一実施形態に係る金融情報配信システム1の構成を示す図である。
【図2】サーバ31の機能構成を示す図である。
【図3】サーバ31のハードウェア構成を示す図である。
【図4】金融情報配信システム1の動作を示すフローチャートである。
【図5】同期配信系10から配信されるメッセージを例示する図である。
【図6】非同期配信系20から配信されるメッセージを例示する図である。
【図7】ステップS130における処理の詳細を示すフローチャートである。
【図8】ステップS130における処理の詳細を示すフローチャートである。
【図9】シーケンス番号が付加された後のメッセージを例示する図である。
【図10】ステップS210における処理の詳細を示すフローチャートである。
【図11】シーケンス番号が付加された後のメッセージを例示する図である。
【図12】シーケンス番号が付加された後のメッセージを例示する図である。
【図13】シーケンス番号が付加された後のメッセージを例示する図である。
【発明を実施するための形態】
【0015】
1.構成
図1は、本発明の一実施形態に係る金融情報配信システム1の構成を示す図である。金融情報配信システム1は、同期配信系10と、非同期配信系20と、データ配信システム30と、クライアント40とを有する。金融情報配信システム1において、同期配信系10および非同期配信系20は金融情報を含むメッセージ(ある書式を有するデータ、いわゆる電文)を配信する。データ配信システム30は、同期配信系10および非同期配信系20から配信されたメッセージを加工し、クライアント40に送信する。
【0016】
同期配信系10は、配信単位11および配信単位12を有する。配信単位11および配信単位12は、それぞれ個別のサーバ装置、または単一のサーバ装置上で動作するソフトウェアにより実現される機能である。配信単位11および配信単位12は、それぞれ、メッセージを配信する。メッセージは、ヘッダおよび本文を含む。ヘッダは、シーケンス番号(またはID)を含む。シーケンス番号は、1単位ずつ単調に増加する番号である。本文は、金融情報を含む。配信単位11および配信単位12が配信するメッセージにおいて、同一のシーケンス番号を有するメッセージは、同一の金融情報を含む。例えば、配信単位11から配信されるシーケンス番号1のメッセージと、配信単位12から配信されるシーケンス番号1のメッセージとは、同一の金融情報を含む。同期配信系10の「同期」とはこの性質に由来している。この例で、データ配信システム30におけるメッセージの送信には、コネクションレスのプロトコルであるUDP(User Datagram Protocol)が用いられる。データの欠落に対応できるように、金融情報配信システム1は、複数の配信単位から同一の情報を配信する冗長な構成を採用している。配信単位11および配信単位12は、メッセージを配信すべき装置のアドレスの一覧(グループ情報)を有しており、この一覧に含まれるアドレスの複数の装置に、同一のメッセージを送信(いわゆるマルチキャスト)する。
【0017】
非同期配信系20は、配信単位21および配信単位22を有する。配信単位21および配信単位22は、それぞれ、メッセージを配信する。配信単位21および配信単位22が配信するメッセージにおいて、同一のシーケンス番号を有するメッセージは、必ずしも同一の金融情報を含むとは限らない(同一の場合もある)。例えば、配信単位21から配信されるシーケンス番号1のメッセージと、配信単位22から配信されるシーケンス番号1のメッセージとは、異なる金融情報を含む。非同期配信系20の「非同期」とはこの性質に由来している。
【0018】
データ配信システム30は、複数のサーバ31を有する。複数のサーバ31は、階層化されている。一の階層には、一または複数のサーバ31が存在する。一の階層のサーバ31は、自装置より上位の一または複数の装置からメッセージを受信し、自身より下位の一または複数の装置にメッセージを送信する。図1の例では、サーバ31は3階層に区分されている。各階層は、3つのサーバ31を含む。以下の説明において、複数のサーバ31の各々を区別する場合は、サーバ31(x,y)と表記する。サーバ31(x,y)は、第y階層におけるx番目のサーバ31を示す。例えば、サーバ31(2,1)は、第1階層における2番目のサーバ31を示す。図1の例では、同期配信系10および非同期配信系20からメッセージを直接受信するサーバ31が最上位(第1階層)に区分され、クライアント40にメッセージを直接送信するサーバ31が最下位(第3階層)に区分される。
【0019】
クライアント40は、データ配信システム30から送信されるメッセージを受信し、受信したメッセージに応じた処理を行う。例えば、クライアント40は、受信したメッセージに含まれる金融情報をリアルタイムでチャートに表示する。
【0020】
図2は、サーバ31の機能構成を示す図である。受信部301は、自装置より上位の階層にある他の装置からメッセージを受信する。記憶部302は、各種のデータを記憶する。特定部303は、処理対象となるメッセージを特定する。受信部301により受信されたメッセージが同期配信系10から発信されたメッセージである場合、特定部303は、受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを記憶部302に記憶させる。受信部301により受信されたメッセージが非同期配信系20の中から定められた一の配信単位から発信されたメッセージである場合、特定部303は、そのメッセージを記憶部302に記憶させる。特定部303は、記憶部302に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定する。加工部304は、特定部303により処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工(演算)を行う。この加工は、同一の階層にある他のサーバと同一である。特定部303により処理対象として特定されたメッセージが同期配信系10から発信されたメッセージであった場合、付加部305は、そのメッセージにグループ番号と、同一のグループ番号内で単調増加するシーケンス番号を付加する。特定部303により処理対象として特定されたメッセージが非同期配信系20から発信されたメッセージであった場合、付加部305は、そのメッセージに単調増加するシーケンス番号を付加する。送信部306は、加工部304による加工および付加部305による付加がされたメッセージを下位の装置に送信する。
【0021】
また、受信部301により受信されたメッセージが対象配信単位から発信されたメッセージであり、かつ、そのメッセージのシーケンス番号が記憶部302に記憶されている最新のシーケンス番号よりも2単位以上大きい場合、要求部307は、欠落しているシーケンス番号のメッセージの再送信を対象配信単位に要求する。変更部308は、対象配信単位に障害が発生した場合、対象配信単位を別の配信単位に変更する。
【0022】
図3は、サーバ31のハードウェア構成を示す図である。サーバ31は、CPU(Central Processing Unit)351、ROM(Read Only Memory)352、RAM(random Access Memory)353、HDD(Hard Disk Drive)354、および通信IF355を有する。CPU351は、RAM353をワークエリアとして、ROM352またはHDD354に記憶されているプログラムを実行する演算装置である。ROM352は、プログラムやデータを記憶する不揮発性の記憶装置である。RAM353は、プログラムやデータを記憶する揮発性の記憶装置である。HDD354は、プログラムやデータを記憶する不揮発性の外部記憶装置である。通信IF355はネットワークを介した通信を行うためのインターフェースである。CPU351がHDD354に記憶されているプログラムを実行することにより、サーバ31には、図2に示される機能構成が実装される。プログラムを実行しているCPU351は、特定部303、加工部304、付加部305、要求部307、および変更部308の一例である。CPU351に制御される通信IF355は、受信部301および送信部306の一例である。CPU351に制御されるRAM353は、記憶部302の一例である。
【0023】
2.動作
図4は、金融情報配信システム1の動作、特に、サーバ31の動作を示すフローチャートである。以下、次のような具体例を用いて金融情報配信システム1の動作を説明する。同期配信系10は、甲証券取引所の金融情報配信システムである。非同期配信系20は、甲証券取引所とは異なる乙証券取引所の金融情報配信システムである。同期配信系10および非同期配信系20から配信されるメッセージは、各証券取引所における株式の約定に関する金融情報を含む。データ配信システム30は、上位の装置から受信したメッセージに含まれる金融情報に対し金融工学による加工を行い、下位の装置にメッセージを送信する。以下、複数のサーバ31のうち一のサーバ31に注目してその動作を説明する。
【0024】
図5は、同期配信系10(配信単位11および配信単位12)から配信されるメッセージを例示する図である。この例で、メッセージのヘッダはシーケンス番号を有する。メッセージの本文は、金融情報として銘柄、価格および出来高の情報を含む。例えば、シーケンス番号1の金融情報は、A社の株式について1250円で100株の売買が成立したことを示している。シーケンス番号が小さいものが時間的に先に配信される。
【0025】
図6は、非同期配信系20(配信単位21および配信単位22)から配信されるメッセージを例示する図である。メッセージのヘッダおよび本文の構成は同期配信系10の場合と同様である。
【0026】
2−1.第1階層のサーバ31の動作
再び図4を参照する。ここではまず、第1階層のサーバ31に注目する。ステップS110において、受信部301は、上位階層の装置、この例では、配信単位11、配信単位12、配信単位21、および配信単位22のいずれかからメッセージを受信する。また、受信部301は、メッセージに受信時刻を付与する。
【0027】
ステップS120において、特定部303は、受信したメッセージが同期配信系から送信されたものであるか判断する。この例で、メッセージのヘッダは、そのメッセージが同期配信系から送信されたものであるか非同期配信系から送信されたものであるかを示すフラグを含んでいる。特定部303は、ヘッダに含まれるフラグに基づいて、そのメッセージが同期配信系から送信されたものであるか判断する。別の例で、メッセージのヘッダは、そのメッセージの送信元である配信系を特定する識別子を含んでいてもよい。この場合、特定部303は、配信系の識別子に基づいて、そのメッセージが同期配信系から送信されたものであるか判断する。メッセージが同期配信系から送信されたものであると判断された場合(ステップS120:YES)、特定部303は、処理をステップS130に移行する。メッセージが同期配信系から送信されたものでない、すなわち非同期配信系から送信されたものであると判断された場合(ステップS120:NO)、特定部303は、処理をステップS210に移行する。
【0028】
2−1−1.同期配信系からのメッセージの処理
図7は、ステップS130における処理の詳細、具体的にはメッセージの入力処理を示すフローチャートである。ステップS130において、特定部303は、処理対象となるメッセージを特定し、下流の処理に出力する。この処理は、メッセージをキューに入力する処理(スレッド)と、キューからメッセージを下流の処理に出力する処理(スレッド)とを含む。メッセージをキューに入力する処理の詳細は以下のとおりである。特定部303は、各グループについて、複数の配信単位から配信されたメッセージを受け、シーケンス番号に基づいて、シーケンス番号に従った順番でメッセージを下流の処理に出力する。記憶部302は、メッセージを記憶するための領域であるキューを有している。キューはグループ毎に設けられる。この例で、キューはリングバッファであり、大きさがNの配列である。配列の要素はインデックスにより識別される。データの書き込み位置および読み出し位置を示すポインタとして、変数hおよび変数tが用いられる。すなわち、変数hおよび変数tは、キューの先頭および末端をそれぞれ示す。また、ここでは、次にキューに入れるべきメッセージのシーケンス番号を示す変数として、変数kが用いられる。変数kは、ステップS130以前に初期化されている。ステップS1301において、特定部303は、受信したメッセージのシーケンス番号seqと変数kとを比較する。seq=kであった場合、特定部303は、処理をステップS1302に移行する。seq>kであった場合、特定部303は、処理をステップS1304に移行する。seq<kであった場合、特定部303は、処理をステップS1307に移行する。
【0029】
ステップS1302において、特定部303は、受信したメッセージをキューの末端に挿入する。ステップS1303において、特定部303は、k=k+1として変数kに1を加算して変数kを更新する。このとき、変数tは1つずらされて更新される。
【0030】
ステップS1304において、特定部303は、(seq−k)個の空のメッセージをキューに挿入する。空メッセージは、そのメッセージが欠落している状態であることを示す情報と、その位置に本来入るべきメッセージのシーケンス番号と、擬似的な受信時刻としてシーケンスseqを持つメッセージの受信時刻とを含む。ステップS1305において、特定部303は、受信したメッセージを空メッセージの後に挿入する。例えば、k=3、seq=5であった場合、特定部303は、5−3=2個の空のメッセージをキューに挿入し、その次にシーケンス番号5のメッセージを挿入する。すなわち、シーケンス番号2のメッセージとシーケンス番号5のメッセージとの間には、2個の空メッセージが挿入される。ステップS1306において、特定部303は、k=k+(seq−k)+1として変数kを更新する。すなわち、特定部303は、空メッセージを含め挿入されたメッセージの数だけ変数kを増加させる。このとき、変数tは、((seq−k)+1)ずらされて更新される。
【0031】
ステップS1307において、特定部303は、キューにおいて次にメッセージが入るべき位置iを算出する。位置iは、i=C−(k−seq)により算出される。ここで、Cはキューの容量すなわちエンキューされているメッセージの数を示す。ステップS1308において、特定部303は、キューにおいて次にメッセージが入るべき位置が未送信の位置であるか、すなわち、i≧hであるか判断する。キューにおいて次にメッセージが入るべき位置が未送信の位置であると判断された場合(S1308:YES)、特定部303は、処理をステップS1309に移行する。キューにおいて次にメッセージが入るべき位置が未送信の位置でないと判断された場合(S1308:NO)、特定部303は、処理をステップS1310に移行する。
【0032】
ステップS1309において、特定部303は、受信したメッセージをS1307で算出した位置iのメッセージと置換する。このとき、変数tは更新されない。ステップS1310において、特定部303は、受信したメッセージを破棄する。ステップS1303、S1306、S1309、またはS1310の処理を終了すると、特定部303は、図7の処理を終了する。特定部303は、メッセージを受信するたびにステップS1301−S1310の処理を実行する。
【0033】
図8は、メッセージの出力処理を示すフローチャートである。ステップS1320において、特定部303は、キューが空であるか判断する。キューが空であるか否かの判断は、変数hおよび変数tに基づいて行われる。h=tであれば、キューは空である。それ以外の場合は、キューは空ではない。キューが空であると判断された場合(S1320:YES)、特定部303はアイドルする。キューが空ではないと判断された場合(S1320:NO)、特定部303は、キューの先頭要素が空メッセージであるか判断する(ステップS1321)。キューの先頭要素は空メッセージではないと判断された場合(S1321:NO)、特定部303は、処理をステップS1322に移行する。キューの先頭要素が空メッセージであると判断された場合(S1321:YES)、特定部303は、処理をステップS1323に移行する。
【0034】
ステップS1322において、特定部303は、キューの先頭要素のメッセージを読み出し、下流の処理に出力する。このとき、変数hは更新される。
ステップS1323において、特定部303は、一定時間待機する。具体的には、特定部303は、キューの先頭要素に入っている空メッセージの受信時刻と現在時刻とを比較し、その差がしきい値に達するまで待機する。待機中に新たなメッセージが到着し、キューの先頭要素が空メッセージでなくなった場合、特定部303は、ステップS1322と同様に、先頭のキューのメッセージを読み出し、下流の処理に出力する。一定時間待機してもキューの先頭要素が空メッセージのままであった場合、特定部303は、空のメッセージが有するシーケンス番号(図7のステップS1304の処理で計算済み)を欠落したメッセージ番号として記憶部302に記憶する。さらに、特定部303は、ダミーのメッセージを生成し、生成したダミーメッセージを下流の処理に出力する(ステップS1324)。
【0035】
特定部303は、所定の周期で図8の処理を実行する。なお、図7の処理と図8の処理とを別々に説明したが、これらの処理は並列に行われる。
【0036】
再び図4を参照する。ステップS140において、加工部304は、処理対象のメッセージに含まれる金融情報について、金融工学に基づく加工(演算)を行う。ある階層のサーバ31の加工部304による加工は、同一の階層のサーバ31の加工部304による加工と同一である。加工部304による加工の詳細は、どのように設計されてもよい。この例で、加工部304は、複数の金融情報を並列処理する。並列処理の単位として、例えば配信系が用いられる。すなわち、加工部304は、同期配信系10から配信されるメッセージと、非同期配信系20から配信されるメッセージとを並列処理する。あるいは別の例で、並列処理の単位として、金融情報の一部、例えば銘柄が用いられてもよい。この場合、加工部304は、A社の約定情報、B社の約定情報、C社の約定情報、・・・を並列処理する。さらにこの場合、加工部304は、複数の配信系から配信されるメッセージを用いて加工を行ってもよい。例えば、加工部304は、同期配信系10から配信されるメッセージに含まれるA社の価格と、非同期配信系20から配信されるメッセージに含まれるA社の価格との差をとる加工を行ってもよい。さらに別の例で、加工部304は、n個のメッセージからn+1個のメッセージを生成する処理、またはn個のメッセージからn−1個のメッセージを生成する処理のように、上位の装置から送信されたメッセージの数を増減させる加工を行ってもよい。
【0037】
ステップS150において、付加部305は、加工が行われたメッセージに、グループ番号を付加する。この例で、グループ番号は、同期配信系と1:1に対応している。すなわち、同期配信系10に対し、グループ番号1が付加される。図1には示していないが、同期配信系10とは別の同期配信系があれば、その同期配信系に対してグループ番号2が付加される。さらに別の同期配信系があれば、その同期配信系に対してグループ番号3が付加される。メッセージは送信元である同期配信系10の識別子を含んでおり、付加部305は、この識別子に基づいてグループ番号を付加する。
【0038】
別の例で、付加部305は、加工部304における並列処理の単位毎にグループ番号を付加してもよい。例えば、加工部304が、約定情報を銘柄毎に並列処理する場合、付加部305は、銘柄毎に異なるグループ番号を付加する。この場合、付加部305は、例えば、A社の約定情報にはグループ番号1を、B社の約定情報にはグループ番号2を、C社の約定情報にはグループ番号3を付加する。さらに別の例で、付加部305は、メッセージの配信元と、加工部304における並列処理の単位との組み合わせに応じて異なるグループ番号を付加してもよい。この場合、付加部305は、例えば、同期配信系10から配信されたA社の約定情報にはグループ番号1を、非同期配信系20から配信されたA社の約定情報にはグループ番号2を、同期配信系10から配信されたB社の約定情報にはグループ番号3を、非同期配信系20から配信されたB社の約定情報にはグループ番号4を付加する。
【0039】
ステップS160におけるシーケンス番号は、同一のグループ番号を有するメッセージ群の中で単調増加するように付加される。
【0040】
図9は、ステップS160においてシーケンス番号が付加された後のメッセージを例示する図である。この例で、メッセージは、第1階層のサーバ31により付加されたグループ番号(GrID1)およびシーケンス番号(add seq1)、並びに配信元の同期配信系10により付加されたシーケンス番号(seq)を含む。なお、図中メッセージの本文としてオリジナルのデータ(銘柄、価格および出来高)が示されているが、実際にはメッセージの本文は金融工学に基づく加工がされている。
【0041】
再び図4を参照する。ステップS170において、送信部306は、下位の階層の装置にメッセージを送信する。このとき、送信部306は、付加部305が付加したシーケンス番号の順番に従ってメッセージを送信する。この例で、記憶部302は、メッセージを送信すべき下位の階層のサーバ31のアドレスの一覧を記憶している。送信部306は、記憶部302に記憶されているアドレスを宛先として、メッセージを送信する。
【0042】
2−1−2.非同期配信系からのメッセージの処理
図10は、ステップS210における処理の詳細を示すフローチャートである。この例で、特定部303は、非同期配信系20の配信単位の中から一の配信単位を対象配信単位(アクティブな配信単位)として、対象配信単位からのメッセージを使用する。特定部303は、対象配信単位以外の配信単位からのメッセージを破棄する。詳細は以下のとおりである。この処理は、図7および図8の処理と同様に、メッセージをキューに入力する処理(スレッド)と、キューからメッセージを下流の処理に出力する処理(スレッド)とを含む。ここでは、メッセージをキューに入力する処理について説明する。記憶部302は、メッセージを記憶するための領域であるキューを有している。キューは、同期配信系のためのものとは別に設けられる。図7および図8で説明したものと同様に、キューはリングバッファである。
【0043】
ステップS2101において、特定部303は、受信したメッセージが対象配信単位から配信されたものであるか判断する。この例で、メッセージは送信元である配信単位の識別子を含んでいる。また、記憶部302は、配信単位を特定する識別子(例えば、配信単位21の識別子)を記憶している。特定部303は、メッセージに含まれる識別子と、記憶部302に記憶されている識別子とを比較し、これらが一致した場合、受信したメッセージが対象配信単位から配信されたものであると判断する。受信したメッセージが対象配信単位から配信されたものであると判断された場合(S2101:YES)、特定部303は、処理をステップS2102に移行する。受信したメッセージが対象配信単位から配信されたものでないと判断された場合(S2101:NO)、特定部303は、処理をステップS2112に移行する。
【0044】
ステップS2102において、特定部303は、受信したメッセージのシーケンス番号seqと変数kとを比較する。seq=kであった場合、特定部303は、処理をステップS2103に移行する。seq>kであった場合、特定部303は、処理をステップS2105に移行する。seq<kであった場合、特定部303は、処理をステップS2109に移行する。
【0045】
ステップS2103において、特定部303は、受信したメッセージをキューの末端に挿入する。ステップS2104において、特定部303は、k=k+1として変数kに1を加算して変数kを更新する。このとき、変数tは1つずらされて更新される。
【0046】
ステップS2105において、特定部303は、(seq−k)個の空のメッセージをキューに挿入する。空メッセージは、そのメッセージが欠落している状態であることを示す情報と、その位置に本来入るべきメッセージのシーケンス番号と、擬似的な受信時刻としてシーケンスseqを持つメッセージの受信時刻とを含む。ステップS2106において、特定部303は、受信したメッセージを空メッセージの後に挿入する。ステップS2107において、特定部303は、k=k+(seq−k)+1として変数kを更新する。すなわち、特定部303は、空メッセージを含め挿入されたメッセージの数だけ変数kを増加させる。このとき、変数tは、((seq−k)+1)ずらされて更新される。ステップS2108において、要求部307は、欠落しているメッセージの再送を対象配信単位に要求する。
【0047】
ステップS2109において、特定部303は、キューにおいて次にメッセージが入るべき位置iを算出する。位置iは、i=C−(k−seq)により算出される。ここで、Cはキューの容量すなわちエンキューされているメッセージの数を示す。ステップS2110において、特定部303は、キューにおいて次にメッセージが入るべき位置が未送信の位置であるか、すなわち、i≧hであるか判断する。キューにおいて次にメッセージが入るべき位置が未送信の位置であると判断された場合(S2110:YES)、特定部303は、処理をステップS2111に移行する。キューにおいて次にメッセージが入るべき位置が未送信の位置でないと判断された場合(S2110:NO)、特定部303は、処理をステップS2112に移行する。
【0048】
ステップS2111において、特定部303は、受信したメッセージを、ステップS2109で算出した位置iに挿入する。このとき、変数tは更新されない。ステップS2112において、特定部303は、受信したメッセージを破棄する。ステップS2104、S2111、またはS2112の処理を終了すると、特定部303は、図10の処理を終了する。特定部303は、メッセージを受信するたびにステップS2101−S2112の処理を実行する。ステップS2108の再送要求に対する応答としてメッセージが再送され、受信部301がこれを受信すると、図10のフローが実行され、ステップS2109以降の処理によって処理される。
メッセージを下流の処理に出力する処理は、図8で説明したものと同様である。
【0049】
再び図4を参照する。ステップS220において、加工部304は、メッセージを加工する。ステップS230において、付加部305は、メッセージにシーケンス番号を付加する。ステップS240において、送信部306は、第2階層のサーバ31にメッセージを送信する。ステップS220、S230、およびS240の処理は、ステップS140、S160、およびS170の処理と同様に行われる。
【0050】
図11は、ステップS230においてシーケンス番号が付加された後のメッセージを例示する図である。この例で、メッセージは、第1階層のサーバ31により付加されたシーケンス番号(add seq1)、および配信元の同期配信系10により付加されたシーケンス番号(seq)を含む。図9の例とは異なり、メッセージのヘッダはグループ番号を含んでいない。それ以外の内容については図9の例と同様である。
【0051】
図4においては、例えばステップS130の処理およびステップS140の処理がこの順番で行われるように説明した。しかし、これらの処理は、並列に行われる。すなわち、あるメッセージについてステップS140の加工が行われている間、別のメッセージについてステップS130の処理が行われる。他の処理についても同様である。
【0052】
2−2.第2階層のサーバ31の動作
次に、第2階層のサーバ31に注目してその動作を説明する。第2階層のサーバ31の動作も基本的に第1階層のサーバ31と同様である。第1階層のサーバ31(1,1)、サーバ31(2,1)、およびサーバ31(3,1)において、加工部304はいずれも同一の加工を行う。すなわち、第2階層のサーバ31は、3つの送信元(サーバ31(1,1)、サーバ31(2,1)、およびサーバ31(3,1))から、内容が同一のメッセージを計3つ受信する。このメッセージは、配信元である同期配信系10または非同期配信系20により付加されたシーケンス番号と、第1階層のサーバ31により付加されたシーケンス番号および(場合により)グループ番号とを含んでいる。以下、第y階層の装置により付加されたシーケンス番号を、シーケンス番号(y)と表す。y=0は配信元(同期配信系10または非同期配信系20)を示す。グループ番号についても同様である。
【0053】
この例において、第2階層のサーバ31の特定部303は、シーケンス番号(1)を用いて処理対象のメッセージを特定する。メッセージにグループ番号(1)が含まれる場合、特定部303は、グループ毎に処理対象のメッセージを特定してもよい。この場合、記憶部302は、グループ毎にキューを設ける。あるいは別の例で、特定部303は、シーケンス番号(0)を用いて処理対象のメッセージを特定してもよい。
【0054】
この例において、第2階層のサーバ31の加工部304は、メッセージに含まれる金融情報が特定の条件を満たす場合に、メッセージの数を増やす処理を行う。
【0055】
図12は、第2階層のサーバ31によりステップS150においてシーケンス番号が付加された後のメッセージを例示する図である。この例のメッセージは、元は同期配信系10から配信されたものである。このメッセージは、第2階層のサーバ31により付加されたグループ番号(GrID2)およびシーケンス番号(add seq2)、第1階層のサーバ31により付加されたグループ番号(GrID1)およびシーケンス番号(add seq1)、並びに配信元の同期配信系10により付加されたシーケンス番号(seq)を含む。また、図中C社とG社に関する金融情報を含むメッセージについては、加工部304により、1つのメッセージから新たな2つのメッセージが生成される(既存のものとあわせて計3つ)。第2階層のサーバ31において、追加されたメッセージも含めてすべてのメッセージに対し、シーケンス番号(add seq2)が付加される。なお、図中メッセージの本文としてオリジナルのデータ(銘柄、価格および出来高)が示されているが、実際にはメッセージの本文は金融工学に基づく加工がされている点は既に説明したとおりである。
【0056】
図13は、第2階層のサーバ31によりステップS230においてシーケンス番号が付加された後のメッセージを例示する図である。この例のメッセージは、元は非同期配信系20から配信されたものである。この例で、メッセージは、第2階層のサーバ31により付加されたシーケンス番号(add seq2)、第1階層のサーバ31により付加されたシーケンス番号(add seq1)、および配信元の同期配信系10により付加されたシーケンス番号(seq)を含む。図9の例とは異なり、メッセージのヘッダはグループ番号を含んでいない。それ以外の内容については図12の例と同様である。
【0057】
第2階層のサーバ31は、図12または図13に示されるメッセージを第3階層のサーバ31に送信する。
【0058】
2−3.第3階層以降の動作
第3階層以降のサーバ31も、第2階層のサーバ31と同様に動作する。例えば第3階層のサーバ31の特定部303は、シーケンス番号(0)、シーケンス番号(1)、またはシーケンス番号(2)を用いて処理対象のメッセージを特定することができる。すなわち、特定部303は、シーケンス番号(0)、シーケンス番号(1)、またはシーケンス番号(2)のうち任意のものを、キューにおける順序性の根拠とすることができる。上位の階層の装置で付加されたシーケンス番号のうち、どの階層のシーケンス番号を用いるかは、どのように設計されてもよい。例えば、特定部303は、ある特定の階層jのシーケンス番号(j)を用いてもよい。あるいは、特定部303は、階層jのシーケンス番号(j)を用いている場合に、階層jにおいて障害が発生したとの情報を取得したときに、別の階層(例えばそれよりも上位の階層である階層j−1)のシーケンス番号を用いるように、処理を変更してもよい。この場合、記憶部302は、使用するシーケンス番号の階層を特定するパラメータjを記憶している。なお、これは第2階層、第4階層以降のサーバ31についても同様である。
【0059】
最終階層のサーバ31は、メッセージをクライアント40に送信する。最終階層のサーバ31の記憶部302は、メッセージを送信すべきクライアント40のアドレスの一覧を記憶している。送信部306は、記憶部302に記憶されているアドレスを宛先として、メッセージを送信する。
【0060】
3.他の実施形態
本発明は上述の実施形態に限定されるものではなく種々の変形実施が可能である。以下、変形例をいくつか説明する。以下の変形例のうち2つ以上のものが組み合わせて用いられてもよい。
【0061】
金融情報配信システム1の構成は図1に示したものに限定されない。金融情報配信システム1は、複数の同期配信系を有してもよい。金融情報配信システム1は、複数の非同期配信系を有してもよい。一の配信系が3つ以上の配信単位を有してもよい。データ配信システム30において、サーバ31に階層の数は3つに限定されない。また、すべての階層のサーバ31の数は同一でなくてもよい。UDP以外の別のプロトコルが用いられてもよい。さらに、サーバ31の構成は図2に示したものに限定されない。これらの機能の一部、例えば要求部307および変更部308の機能が省略されてもよい。
【0062】
上述の実施形態において、非同期配信系20から配信されたメッセージにはグループ番号が付加されない例を説明した。しかし、付加部305は、メッセージに含まれる金融情報の内容(例えば、銘柄)に応じて、非同期配信系20から配信されたメッセージにグループ番号を付加してもよい。
【0063】
シーケンス番号に基づいて処理対象のメッセージを特定する処理の詳細は、図7、図8、および図10に示したものに限定されない。シーケンス番号に従った順番で処理を行うことができるようにするものであれば、どのようなアルゴリズムが用いられてもよい。また、キューの実装はリングバッファに限定されない。
【0064】
実施形態で説明した金融情報および金融情報を用いた加工はあくまで例示であって、これ以外の金融情報および加工(演算)が用いられてもよい。
【0065】
上述の実施形態においてCPU351によって実行されるプログラムは、磁気記録媒体(磁気テープ、磁気ディスク(HDD、FD(Flexible Disk))など)、光記録媒体(光ディスク(CD(Compact Disk)、DVD(Digital Versatile Disk))など)、光磁気記録媒体、半導体メモリ(フラッシュROMなど)などのコンピュータ読取り可能な記録媒体に記憶した状態で提供されてもよい。また、このプログラムは、インターネットのようなネットワーク経由でダウンロードされてもよい。
【符号の説明】
【0066】
1…金融情報配信システム、10…同期配信系、11…配信単位、12…配信単位、20…非同期配信系、21…配信単位、22…配信単位、30…データ配信システム、31…サーバ、40…クライアント、301…受信部、302…記憶部、303…特定部、304…加工部、305…付加部、306…送信部、307…要求部、308…変更部、351…CPU、352…ROM、353…RAM、354…HDD、355…通信IF
【技術分野】
【0001】
本発明は、金融情報を配信する技術に関する。
【背景技術】
【0002】
現在、有価証券市場に代表される金融商品の取引の多くは、ネットワークを利用して電子的に行なわれている。この種の取引では、投資家は、ネットワークに自らの端末を接続する。投資家は、その端末に証券取引所等から随時供給される金融情報の内容を基に、注文処理をかけるタイミングやその内容を判断している。投資家の判断は、証券取引所等から供給される金融情報の内容に依存している。したがって、端末に到達する金融情報に遅延が生じた場合、投資家は、陳腐化した古い情報に依存した判断を下してしまうことになる。すなわち、金融取引上大きな損失が生まれてしまうことがある。このように、金融情報の配信においては即時性が重要である(例えば特許文献1参照)。
【0003】
金融情報の配信においては、即時性に加えて信頼性も重要である。特許文献2は、配信サーバの負荷およびネットワークの負荷を軽減できる証券・金融データ配信システムを開示している。この証券・金融データ配信システムにおいて、受信・編集サーバは、情報提供元装置から受信したデータに順番に番号を振り、マルチキャスト配信サーバおよび問い合わせサーバに送信する。マルチキャスト配信サーバは、電文をグループ情報に基づいてマルチキャスト配信する。問い合わせサーバは、クライアントからの要求に応じて、欠落したデータを送信する。特許文献3は、マルチキャストパケット転送装置を開示している。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2006−031371号公報
【特許文献2】特開2008−147819号公報
【特許文献3】特開2007−274332号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
特許文献2に記載されているような、ネットワークの上位(上流)の装置においてデータに番号を振るシステムでは、下位(下流)の装置はその番号によってしか順序性の判断をすることができなかった。
本発明は、ネットワーク上の下位の装置においてより柔軟な処理を可能にする金融情報配信システム、サーバ、金融情報配信方法およびプログラムを提供する。
【課題を解決するための手段】
【0006】
(発明1)本発明は、各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち自装置より上位の階層にある他の装置からメッセージを受信する受信手段と、データを記憶する記憶手段と、前記受信手段により受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを前記記憶手段に記憶させ、前記受信手段により受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、そのメッセージを前記記憶手段に記憶させ、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定する特定手段と、前記特定手段により前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を行う加工手段と、前記特定手段により前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記特定手段により前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を付加する付加手段と、前記加工手段による加工および前記付加手段による付加がされたメッセージを下位の装置に送信する送信手段とを有するサーバを提供する。
【0007】
(発明2)発明1において、前記加工手段は、前記加工において所定の処理単位毎にメッセージを並列処理し、前記グループ番号は、前記処理単位毎に異なってもよい。
【0008】
(発明3)発明1において、前記記憶手段は、前記受信手段が受信したメッセージのうち、前記同期配信系から発信されたメッセージの、最新のシーケンス番号を前記グループ番号毎に記憶し、前記特定手段は、前記受信手段により受信されたメッセージが前記同期配信系から発信されたメッセージであり、そのメッセージが前記グループ番号を含み、かつ、そのグループ番号に対するシーケンス番号が前記記憶手段に記憶されている、そのグループ番号に対するシーケンス番号よりも大きい場合、そのグループ番号に対するシーケンス番号を前記記憶手段に記憶させ、そのメッセージを処理対象として特定してもよい。
【0009】
(発明4)発明1または2において、前記付加手段は、自装置よりも上位の装置により付加されたシーケンス番号の順番に従って、新たなシーケンス番号を前記メッセージに付加してもよい。
【0010】
(発明5)発明1−4のいずれかにおいて、前記受信手段により受信されたメッセージが前記対象配信単位から発信されたメッセージであり、かつ、そのメッセージのシーケンス番号が前記記憶手段に記憶されている最新のメッセージのシーケンス番号よりも2単位以上大きい場合、欠落しているシーケンス番号のメッセージの再送信を前記対象配信単位に要求する要求手段と、前記一の配信単位に障害が発生した場合、前記対象配信単位を、前記一の配信単位から前記非同期配信系の中の別の配信単位に変更する変更手段とを有してもよい。
【0011】
(発明6)本発明は、各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち一のサーバが、自装置より上位の階層にある他の装置からメッセージを受信するステップと、前記受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを、前記一のサーバが有する記憶手段に記憶させるステップと、前記受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、前記一のサーバがそのメッセージを前記記憶手段に記憶させるステップと、前記一のサーバが、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定するステップと、前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を、前記一のサーバが行うステップと、前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記特定手段により前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を、前記一のサーバが付加するステップと、前記一のサーバが、前記加工および前記付加がされたメッセージを下位の装置に送信するステップとを有する金融情報配信方法を提供する。
【0012】
(発明7)本発明は、コンピュータに、各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち一のサーバが、自装置より上位の階層にある他の装置からメッセージを受信するステップと、前記受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを、前記一のサーバが有する記憶手段に記憶させるステップと、前記受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、前記一のサーバがそのメッセージを前記記憶手段に記憶させるステップと、前記一のサーバが、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定するステップと、前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を、前記一のサーバが行うステップと、前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を付加するステップと、前記加工および前記付加がされたメッセージを下位の装置に送信するステップとを実行させるためのプログラムを提供する。
【発明の効果】
【0013】
発明1のサーバによれば、この下位の階層のサーバは、一つ上位の階層の装置により付加されたシーケンス番号のみを用いる場合と比較して、複数の階層で付加された複数のシーケンスの番号のうちどの階層で付加されたものを用いるか自由に設計でき、より柔軟な処理を行うことができる。
発明2のサーバによれば、この下位の階層のサーバは、上位の階層の装置における並列処理の単位毎に付加されたグループ番号を用いて処理を行うことができる。
発明3のサーバによれば、多重に配信されるメッセージの順序性をグループ番号に基づいて判断することができる。
発明4のサーバによれば、この下位の階層のサーバは、異なる階層のサーバで付加された異なるシーケンス番号のうち、任意のものを利用して処理をすることができる。
発明5のサーバによれば、同期配信系については冗長化されているサーバが一つでも稼動していれば配信が停止せず、非同期配信系については対象配信単位に障害が発生した場合には対象配信単位を切り替える構成を有していない場合と比較して、システムの信頼性が向上する。
発明6の金融情報配信方法によれば、各階層のサーバは、その階層で独自にシーケンス番号を付加することができる。下位の階層のサーバは、一つ上位の階層の装置により付加されたシーケンス番号のみを用いる場合と比較して、複数の階層で付加された複数のシーケンスの番号のうちどの階層で付加されたものを用いるか自由に設計でき、より柔軟な処理を行うことができる。
発明7のプログラムによれば、この下位の階層のサーバは、一つ上位の階層の装置により付加されたシーケンス番号のみを用いる場合と比較して、複数の階層で付加された複数のシーケンスの番号のうちどの階層で付加されたものを用いるか自由に設計でき、より柔軟な処理を行うことができる。
【図面の簡単な説明】
【0014】
【図1】一実施形態に係る金融情報配信システム1の構成を示す図である。
【図2】サーバ31の機能構成を示す図である。
【図3】サーバ31のハードウェア構成を示す図である。
【図4】金融情報配信システム1の動作を示すフローチャートである。
【図5】同期配信系10から配信されるメッセージを例示する図である。
【図6】非同期配信系20から配信されるメッセージを例示する図である。
【図7】ステップS130における処理の詳細を示すフローチャートである。
【図8】ステップS130における処理の詳細を示すフローチャートである。
【図9】シーケンス番号が付加された後のメッセージを例示する図である。
【図10】ステップS210における処理の詳細を示すフローチャートである。
【図11】シーケンス番号が付加された後のメッセージを例示する図である。
【図12】シーケンス番号が付加された後のメッセージを例示する図である。
【図13】シーケンス番号が付加された後のメッセージを例示する図である。
【発明を実施するための形態】
【0015】
1.構成
図1は、本発明の一実施形態に係る金融情報配信システム1の構成を示す図である。金融情報配信システム1は、同期配信系10と、非同期配信系20と、データ配信システム30と、クライアント40とを有する。金融情報配信システム1において、同期配信系10および非同期配信系20は金融情報を含むメッセージ(ある書式を有するデータ、いわゆる電文)を配信する。データ配信システム30は、同期配信系10および非同期配信系20から配信されたメッセージを加工し、クライアント40に送信する。
【0016】
同期配信系10は、配信単位11および配信単位12を有する。配信単位11および配信単位12は、それぞれ個別のサーバ装置、または単一のサーバ装置上で動作するソフトウェアにより実現される機能である。配信単位11および配信単位12は、それぞれ、メッセージを配信する。メッセージは、ヘッダおよび本文を含む。ヘッダは、シーケンス番号(またはID)を含む。シーケンス番号は、1単位ずつ単調に増加する番号である。本文は、金融情報を含む。配信単位11および配信単位12が配信するメッセージにおいて、同一のシーケンス番号を有するメッセージは、同一の金融情報を含む。例えば、配信単位11から配信されるシーケンス番号1のメッセージと、配信単位12から配信されるシーケンス番号1のメッセージとは、同一の金融情報を含む。同期配信系10の「同期」とはこの性質に由来している。この例で、データ配信システム30におけるメッセージの送信には、コネクションレスのプロトコルであるUDP(User Datagram Protocol)が用いられる。データの欠落に対応できるように、金融情報配信システム1は、複数の配信単位から同一の情報を配信する冗長な構成を採用している。配信単位11および配信単位12は、メッセージを配信すべき装置のアドレスの一覧(グループ情報)を有しており、この一覧に含まれるアドレスの複数の装置に、同一のメッセージを送信(いわゆるマルチキャスト)する。
【0017】
非同期配信系20は、配信単位21および配信単位22を有する。配信単位21および配信単位22は、それぞれ、メッセージを配信する。配信単位21および配信単位22が配信するメッセージにおいて、同一のシーケンス番号を有するメッセージは、必ずしも同一の金融情報を含むとは限らない(同一の場合もある)。例えば、配信単位21から配信されるシーケンス番号1のメッセージと、配信単位22から配信されるシーケンス番号1のメッセージとは、異なる金融情報を含む。非同期配信系20の「非同期」とはこの性質に由来している。
【0018】
データ配信システム30は、複数のサーバ31を有する。複数のサーバ31は、階層化されている。一の階層には、一または複数のサーバ31が存在する。一の階層のサーバ31は、自装置より上位の一または複数の装置からメッセージを受信し、自身より下位の一または複数の装置にメッセージを送信する。図1の例では、サーバ31は3階層に区分されている。各階層は、3つのサーバ31を含む。以下の説明において、複数のサーバ31の各々を区別する場合は、サーバ31(x,y)と表記する。サーバ31(x,y)は、第y階層におけるx番目のサーバ31を示す。例えば、サーバ31(2,1)は、第1階層における2番目のサーバ31を示す。図1の例では、同期配信系10および非同期配信系20からメッセージを直接受信するサーバ31が最上位(第1階層)に区分され、クライアント40にメッセージを直接送信するサーバ31が最下位(第3階層)に区分される。
【0019】
クライアント40は、データ配信システム30から送信されるメッセージを受信し、受信したメッセージに応じた処理を行う。例えば、クライアント40は、受信したメッセージに含まれる金融情報をリアルタイムでチャートに表示する。
【0020】
図2は、サーバ31の機能構成を示す図である。受信部301は、自装置より上位の階層にある他の装置からメッセージを受信する。記憶部302は、各種のデータを記憶する。特定部303は、処理対象となるメッセージを特定する。受信部301により受信されたメッセージが同期配信系10から発信されたメッセージである場合、特定部303は、受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを記憶部302に記憶させる。受信部301により受信されたメッセージが非同期配信系20の中から定められた一の配信単位から発信されたメッセージである場合、特定部303は、そのメッセージを記憶部302に記憶させる。特定部303は、記憶部302に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定する。加工部304は、特定部303により処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工(演算)を行う。この加工は、同一の階層にある他のサーバと同一である。特定部303により処理対象として特定されたメッセージが同期配信系10から発信されたメッセージであった場合、付加部305は、そのメッセージにグループ番号と、同一のグループ番号内で単調増加するシーケンス番号を付加する。特定部303により処理対象として特定されたメッセージが非同期配信系20から発信されたメッセージであった場合、付加部305は、そのメッセージに単調増加するシーケンス番号を付加する。送信部306は、加工部304による加工および付加部305による付加がされたメッセージを下位の装置に送信する。
【0021】
また、受信部301により受信されたメッセージが対象配信単位から発信されたメッセージであり、かつ、そのメッセージのシーケンス番号が記憶部302に記憶されている最新のシーケンス番号よりも2単位以上大きい場合、要求部307は、欠落しているシーケンス番号のメッセージの再送信を対象配信単位に要求する。変更部308は、対象配信単位に障害が発生した場合、対象配信単位を別の配信単位に変更する。
【0022】
図3は、サーバ31のハードウェア構成を示す図である。サーバ31は、CPU(Central Processing Unit)351、ROM(Read Only Memory)352、RAM(random Access Memory)353、HDD(Hard Disk Drive)354、および通信IF355を有する。CPU351は、RAM353をワークエリアとして、ROM352またはHDD354に記憶されているプログラムを実行する演算装置である。ROM352は、プログラムやデータを記憶する不揮発性の記憶装置である。RAM353は、プログラムやデータを記憶する揮発性の記憶装置である。HDD354は、プログラムやデータを記憶する不揮発性の外部記憶装置である。通信IF355はネットワークを介した通信を行うためのインターフェースである。CPU351がHDD354に記憶されているプログラムを実行することにより、サーバ31には、図2に示される機能構成が実装される。プログラムを実行しているCPU351は、特定部303、加工部304、付加部305、要求部307、および変更部308の一例である。CPU351に制御される通信IF355は、受信部301および送信部306の一例である。CPU351に制御されるRAM353は、記憶部302の一例である。
【0023】
2.動作
図4は、金融情報配信システム1の動作、特に、サーバ31の動作を示すフローチャートである。以下、次のような具体例を用いて金融情報配信システム1の動作を説明する。同期配信系10は、甲証券取引所の金融情報配信システムである。非同期配信系20は、甲証券取引所とは異なる乙証券取引所の金融情報配信システムである。同期配信系10および非同期配信系20から配信されるメッセージは、各証券取引所における株式の約定に関する金融情報を含む。データ配信システム30は、上位の装置から受信したメッセージに含まれる金融情報に対し金融工学による加工を行い、下位の装置にメッセージを送信する。以下、複数のサーバ31のうち一のサーバ31に注目してその動作を説明する。
【0024】
図5は、同期配信系10(配信単位11および配信単位12)から配信されるメッセージを例示する図である。この例で、メッセージのヘッダはシーケンス番号を有する。メッセージの本文は、金融情報として銘柄、価格および出来高の情報を含む。例えば、シーケンス番号1の金融情報は、A社の株式について1250円で100株の売買が成立したことを示している。シーケンス番号が小さいものが時間的に先に配信される。
【0025】
図6は、非同期配信系20(配信単位21および配信単位22)から配信されるメッセージを例示する図である。メッセージのヘッダおよび本文の構成は同期配信系10の場合と同様である。
【0026】
2−1.第1階層のサーバ31の動作
再び図4を参照する。ここではまず、第1階層のサーバ31に注目する。ステップS110において、受信部301は、上位階層の装置、この例では、配信単位11、配信単位12、配信単位21、および配信単位22のいずれかからメッセージを受信する。また、受信部301は、メッセージに受信時刻を付与する。
【0027】
ステップS120において、特定部303は、受信したメッセージが同期配信系から送信されたものであるか判断する。この例で、メッセージのヘッダは、そのメッセージが同期配信系から送信されたものであるか非同期配信系から送信されたものであるかを示すフラグを含んでいる。特定部303は、ヘッダに含まれるフラグに基づいて、そのメッセージが同期配信系から送信されたものであるか判断する。別の例で、メッセージのヘッダは、そのメッセージの送信元である配信系を特定する識別子を含んでいてもよい。この場合、特定部303は、配信系の識別子に基づいて、そのメッセージが同期配信系から送信されたものであるか判断する。メッセージが同期配信系から送信されたものであると判断された場合(ステップS120:YES)、特定部303は、処理をステップS130に移行する。メッセージが同期配信系から送信されたものでない、すなわち非同期配信系から送信されたものであると判断された場合(ステップS120:NO)、特定部303は、処理をステップS210に移行する。
【0028】
2−1−1.同期配信系からのメッセージの処理
図7は、ステップS130における処理の詳細、具体的にはメッセージの入力処理を示すフローチャートである。ステップS130において、特定部303は、処理対象となるメッセージを特定し、下流の処理に出力する。この処理は、メッセージをキューに入力する処理(スレッド)と、キューからメッセージを下流の処理に出力する処理(スレッド)とを含む。メッセージをキューに入力する処理の詳細は以下のとおりである。特定部303は、各グループについて、複数の配信単位から配信されたメッセージを受け、シーケンス番号に基づいて、シーケンス番号に従った順番でメッセージを下流の処理に出力する。記憶部302は、メッセージを記憶するための領域であるキューを有している。キューはグループ毎に設けられる。この例で、キューはリングバッファであり、大きさがNの配列である。配列の要素はインデックスにより識別される。データの書き込み位置および読み出し位置を示すポインタとして、変数hおよび変数tが用いられる。すなわち、変数hおよび変数tは、キューの先頭および末端をそれぞれ示す。また、ここでは、次にキューに入れるべきメッセージのシーケンス番号を示す変数として、変数kが用いられる。変数kは、ステップS130以前に初期化されている。ステップS1301において、特定部303は、受信したメッセージのシーケンス番号seqと変数kとを比較する。seq=kであった場合、特定部303は、処理をステップS1302に移行する。seq>kであった場合、特定部303は、処理をステップS1304に移行する。seq<kであった場合、特定部303は、処理をステップS1307に移行する。
【0029】
ステップS1302において、特定部303は、受信したメッセージをキューの末端に挿入する。ステップS1303において、特定部303は、k=k+1として変数kに1を加算して変数kを更新する。このとき、変数tは1つずらされて更新される。
【0030】
ステップS1304において、特定部303は、(seq−k)個の空のメッセージをキューに挿入する。空メッセージは、そのメッセージが欠落している状態であることを示す情報と、その位置に本来入るべきメッセージのシーケンス番号と、擬似的な受信時刻としてシーケンスseqを持つメッセージの受信時刻とを含む。ステップS1305において、特定部303は、受信したメッセージを空メッセージの後に挿入する。例えば、k=3、seq=5であった場合、特定部303は、5−3=2個の空のメッセージをキューに挿入し、その次にシーケンス番号5のメッセージを挿入する。すなわち、シーケンス番号2のメッセージとシーケンス番号5のメッセージとの間には、2個の空メッセージが挿入される。ステップS1306において、特定部303は、k=k+(seq−k)+1として変数kを更新する。すなわち、特定部303は、空メッセージを含め挿入されたメッセージの数だけ変数kを増加させる。このとき、変数tは、((seq−k)+1)ずらされて更新される。
【0031】
ステップS1307において、特定部303は、キューにおいて次にメッセージが入るべき位置iを算出する。位置iは、i=C−(k−seq)により算出される。ここで、Cはキューの容量すなわちエンキューされているメッセージの数を示す。ステップS1308において、特定部303は、キューにおいて次にメッセージが入るべき位置が未送信の位置であるか、すなわち、i≧hであるか判断する。キューにおいて次にメッセージが入るべき位置が未送信の位置であると判断された場合(S1308:YES)、特定部303は、処理をステップS1309に移行する。キューにおいて次にメッセージが入るべき位置が未送信の位置でないと判断された場合(S1308:NO)、特定部303は、処理をステップS1310に移行する。
【0032】
ステップS1309において、特定部303は、受信したメッセージをS1307で算出した位置iのメッセージと置換する。このとき、変数tは更新されない。ステップS1310において、特定部303は、受信したメッセージを破棄する。ステップS1303、S1306、S1309、またはS1310の処理を終了すると、特定部303は、図7の処理を終了する。特定部303は、メッセージを受信するたびにステップS1301−S1310の処理を実行する。
【0033】
図8は、メッセージの出力処理を示すフローチャートである。ステップS1320において、特定部303は、キューが空であるか判断する。キューが空であるか否かの判断は、変数hおよび変数tに基づいて行われる。h=tであれば、キューは空である。それ以外の場合は、キューは空ではない。キューが空であると判断された場合(S1320:YES)、特定部303はアイドルする。キューが空ではないと判断された場合(S1320:NO)、特定部303は、キューの先頭要素が空メッセージであるか判断する(ステップS1321)。キューの先頭要素は空メッセージではないと判断された場合(S1321:NO)、特定部303は、処理をステップS1322に移行する。キューの先頭要素が空メッセージであると判断された場合(S1321:YES)、特定部303は、処理をステップS1323に移行する。
【0034】
ステップS1322において、特定部303は、キューの先頭要素のメッセージを読み出し、下流の処理に出力する。このとき、変数hは更新される。
ステップS1323において、特定部303は、一定時間待機する。具体的には、特定部303は、キューの先頭要素に入っている空メッセージの受信時刻と現在時刻とを比較し、その差がしきい値に達するまで待機する。待機中に新たなメッセージが到着し、キューの先頭要素が空メッセージでなくなった場合、特定部303は、ステップS1322と同様に、先頭のキューのメッセージを読み出し、下流の処理に出力する。一定時間待機してもキューの先頭要素が空メッセージのままであった場合、特定部303は、空のメッセージが有するシーケンス番号(図7のステップS1304の処理で計算済み)を欠落したメッセージ番号として記憶部302に記憶する。さらに、特定部303は、ダミーのメッセージを生成し、生成したダミーメッセージを下流の処理に出力する(ステップS1324)。
【0035】
特定部303は、所定の周期で図8の処理を実行する。なお、図7の処理と図8の処理とを別々に説明したが、これらの処理は並列に行われる。
【0036】
再び図4を参照する。ステップS140において、加工部304は、処理対象のメッセージに含まれる金融情報について、金融工学に基づく加工(演算)を行う。ある階層のサーバ31の加工部304による加工は、同一の階層のサーバ31の加工部304による加工と同一である。加工部304による加工の詳細は、どのように設計されてもよい。この例で、加工部304は、複数の金融情報を並列処理する。並列処理の単位として、例えば配信系が用いられる。すなわち、加工部304は、同期配信系10から配信されるメッセージと、非同期配信系20から配信されるメッセージとを並列処理する。あるいは別の例で、並列処理の単位として、金融情報の一部、例えば銘柄が用いられてもよい。この場合、加工部304は、A社の約定情報、B社の約定情報、C社の約定情報、・・・を並列処理する。さらにこの場合、加工部304は、複数の配信系から配信されるメッセージを用いて加工を行ってもよい。例えば、加工部304は、同期配信系10から配信されるメッセージに含まれるA社の価格と、非同期配信系20から配信されるメッセージに含まれるA社の価格との差をとる加工を行ってもよい。さらに別の例で、加工部304は、n個のメッセージからn+1個のメッセージを生成する処理、またはn個のメッセージからn−1個のメッセージを生成する処理のように、上位の装置から送信されたメッセージの数を増減させる加工を行ってもよい。
【0037】
ステップS150において、付加部305は、加工が行われたメッセージに、グループ番号を付加する。この例で、グループ番号は、同期配信系と1:1に対応している。すなわち、同期配信系10に対し、グループ番号1が付加される。図1には示していないが、同期配信系10とは別の同期配信系があれば、その同期配信系に対してグループ番号2が付加される。さらに別の同期配信系があれば、その同期配信系に対してグループ番号3が付加される。メッセージは送信元である同期配信系10の識別子を含んでおり、付加部305は、この識別子に基づいてグループ番号を付加する。
【0038】
別の例で、付加部305は、加工部304における並列処理の単位毎にグループ番号を付加してもよい。例えば、加工部304が、約定情報を銘柄毎に並列処理する場合、付加部305は、銘柄毎に異なるグループ番号を付加する。この場合、付加部305は、例えば、A社の約定情報にはグループ番号1を、B社の約定情報にはグループ番号2を、C社の約定情報にはグループ番号3を付加する。さらに別の例で、付加部305は、メッセージの配信元と、加工部304における並列処理の単位との組み合わせに応じて異なるグループ番号を付加してもよい。この場合、付加部305は、例えば、同期配信系10から配信されたA社の約定情報にはグループ番号1を、非同期配信系20から配信されたA社の約定情報にはグループ番号2を、同期配信系10から配信されたB社の約定情報にはグループ番号3を、非同期配信系20から配信されたB社の約定情報にはグループ番号4を付加する。
【0039】
ステップS160におけるシーケンス番号は、同一のグループ番号を有するメッセージ群の中で単調増加するように付加される。
【0040】
図9は、ステップS160においてシーケンス番号が付加された後のメッセージを例示する図である。この例で、メッセージは、第1階層のサーバ31により付加されたグループ番号(GrID1)およびシーケンス番号(add seq1)、並びに配信元の同期配信系10により付加されたシーケンス番号(seq)を含む。なお、図中メッセージの本文としてオリジナルのデータ(銘柄、価格および出来高)が示されているが、実際にはメッセージの本文は金融工学に基づく加工がされている。
【0041】
再び図4を参照する。ステップS170において、送信部306は、下位の階層の装置にメッセージを送信する。このとき、送信部306は、付加部305が付加したシーケンス番号の順番に従ってメッセージを送信する。この例で、記憶部302は、メッセージを送信すべき下位の階層のサーバ31のアドレスの一覧を記憶している。送信部306は、記憶部302に記憶されているアドレスを宛先として、メッセージを送信する。
【0042】
2−1−2.非同期配信系からのメッセージの処理
図10は、ステップS210における処理の詳細を示すフローチャートである。この例で、特定部303は、非同期配信系20の配信単位の中から一の配信単位を対象配信単位(アクティブな配信単位)として、対象配信単位からのメッセージを使用する。特定部303は、対象配信単位以外の配信単位からのメッセージを破棄する。詳細は以下のとおりである。この処理は、図7および図8の処理と同様に、メッセージをキューに入力する処理(スレッド)と、キューからメッセージを下流の処理に出力する処理(スレッド)とを含む。ここでは、メッセージをキューに入力する処理について説明する。記憶部302は、メッセージを記憶するための領域であるキューを有している。キューは、同期配信系のためのものとは別に設けられる。図7および図8で説明したものと同様に、キューはリングバッファである。
【0043】
ステップS2101において、特定部303は、受信したメッセージが対象配信単位から配信されたものであるか判断する。この例で、メッセージは送信元である配信単位の識別子を含んでいる。また、記憶部302は、配信単位を特定する識別子(例えば、配信単位21の識別子)を記憶している。特定部303は、メッセージに含まれる識別子と、記憶部302に記憶されている識別子とを比較し、これらが一致した場合、受信したメッセージが対象配信単位から配信されたものであると判断する。受信したメッセージが対象配信単位から配信されたものであると判断された場合(S2101:YES)、特定部303は、処理をステップS2102に移行する。受信したメッセージが対象配信単位から配信されたものでないと判断された場合(S2101:NO)、特定部303は、処理をステップS2112に移行する。
【0044】
ステップS2102において、特定部303は、受信したメッセージのシーケンス番号seqと変数kとを比較する。seq=kであった場合、特定部303は、処理をステップS2103に移行する。seq>kであった場合、特定部303は、処理をステップS2105に移行する。seq<kであった場合、特定部303は、処理をステップS2109に移行する。
【0045】
ステップS2103において、特定部303は、受信したメッセージをキューの末端に挿入する。ステップS2104において、特定部303は、k=k+1として変数kに1を加算して変数kを更新する。このとき、変数tは1つずらされて更新される。
【0046】
ステップS2105において、特定部303は、(seq−k)個の空のメッセージをキューに挿入する。空メッセージは、そのメッセージが欠落している状態であることを示す情報と、その位置に本来入るべきメッセージのシーケンス番号と、擬似的な受信時刻としてシーケンスseqを持つメッセージの受信時刻とを含む。ステップS2106において、特定部303は、受信したメッセージを空メッセージの後に挿入する。ステップS2107において、特定部303は、k=k+(seq−k)+1として変数kを更新する。すなわち、特定部303は、空メッセージを含め挿入されたメッセージの数だけ変数kを増加させる。このとき、変数tは、((seq−k)+1)ずらされて更新される。ステップS2108において、要求部307は、欠落しているメッセージの再送を対象配信単位に要求する。
【0047】
ステップS2109において、特定部303は、キューにおいて次にメッセージが入るべき位置iを算出する。位置iは、i=C−(k−seq)により算出される。ここで、Cはキューの容量すなわちエンキューされているメッセージの数を示す。ステップS2110において、特定部303は、キューにおいて次にメッセージが入るべき位置が未送信の位置であるか、すなわち、i≧hであるか判断する。キューにおいて次にメッセージが入るべき位置が未送信の位置であると判断された場合(S2110:YES)、特定部303は、処理をステップS2111に移行する。キューにおいて次にメッセージが入るべき位置が未送信の位置でないと判断された場合(S2110:NO)、特定部303は、処理をステップS2112に移行する。
【0048】
ステップS2111において、特定部303は、受信したメッセージを、ステップS2109で算出した位置iに挿入する。このとき、変数tは更新されない。ステップS2112において、特定部303は、受信したメッセージを破棄する。ステップS2104、S2111、またはS2112の処理を終了すると、特定部303は、図10の処理を終了する。特定部303は、メッセージを受信するたびにステップS2101−S2112の処理を実行する。ステップS2108の再送要求に対する応答としてメッセージが再送され、受信部301がこれを受信すると、図10のフローが実行され、ステップS2109以降の処理によって処理される。
メッセージを下流の処理に出力する処理は、図8で説明したものと同様である。
【0049】
再び図4を参照する。ステップS220において、加工部304は、メッセージを加工する。ステップS230において、付加部305は、メッセージにシーケンス番号を付加する。ステップS240において、送信部306は、第2階層のサーバ31にメッセージを送信する。ステップS220、S230、およびS240の処理は、ステップS140、S160、およびS170の処理と同様に行われる。
【0050】
図11は、ステップS230においてシーケンス番号が付加された後のメッセージを例示する図である。この例で、メッセージは、第1階層のサーバ31により付加されたシーケンス番号(add seq1)、および配信元の同期配信系10により付加されたシーケンス番号(seq)を含む。図9の例とは異なり、メッセージのヘッダはグループ番号を含んでいない。それ以外の内容については図9の例と同様である。
【0051】
図4においては、例えばステップS130の処理およびステップS140の処理がこの順番で行われるように説明した。しかし、これらの処理は、並列に行われる。すなわち、あるメッセージについてステップS140の加工が行われている間、別のメッセージについてステップS130の処理が行われる。他の処理についても同様である。
【0052】
2−2.第2階層のサーバ31の動作
次に、第2階層のサーバ31に注目してその動作を説明する。第2階層のサーバ31の動作も基本的に第1階層のサーバ31と同様である。第1階層のサーバ31(1,1)、サーバ31(2,1)、およびサーバ31(3,1)において、加工部304はいずれも同一の加工を行う。すなわち、第2階層のサーバ31は、3つの送信元(サーバ31(1,1)、サーバ31(2,1)、およびサーバ31(3,1))から、内容が同一のメッセージを計3つ受信する。このメッセージは、配信元である同期配信系10または非同期配信系20により付加されたシーケンス番号と、第1階層のサーバ31により付加されたシーケンス番号および(場合により)グループ番号とを含んでいる。以下、第y階層の装置により付加されたシーケンス番号を、シーケンス番号(y)と表す。y=0は配信元(同期配信系10または非同期配信系20)を示す。グループ番号についても同様である。
【0053】
この例において、第2階層のサーバ31の特定部303は、シーケンス番号(1)を用いて処理対象のメッセージを特定する。メッセージにグループ番号(1)が含まれる場合、特定部303は、グループ毎に処理対象のメッセージを特定してもよい。この場合、記憶部302は、グループ毎にキューを設ける。あるいは別の例で、特定部303は、シーケンス番号(0)を用いて処理対象のメッセージを特定してもよい。
【0054】
この例において、第2階層のサーバ31の加工部304は、メッセージに含まれる金融情報が特定の条件を満たす場合に、メッセージの数を増やす処理を行う。
【0055】
図12は、第2階層のサーバ31によりステップS150においてシーケンス番号が付加された後のメッセージを例示する図である。この例のメッセージは、元は同期配信系10から配信されたものである。このメッセージは、第2階層のサーバ31により付加されたグループ番号(GrID2)およびシーケンス番号(add seq2)、第1階層のサーバ31により付加されたグループ番号(GrID1)およびシーケンス番号(add seq1)、並びに配信元の同期配信系10により付加されたシーケンス番号(seq)を含む。また、図中C社とG社に関する金融情報を含むメッセージについては、加工部304により、1つのメッセージから新たな2つのメッセージが生成される(既存のものとあわせて計3つ)。第2階層のサーバ31において、追加されたメッセージも含めてすべてのメッセージに対し、シーケンス番号(add seq2)が付加される。なお、図中メッセージの本文としてオリジナルのデータ(銘柄、価格および出来高)が示されているが、実際にはメッセージの本文は金融工学に基づく加工がされている点は既に説明したとおりである。
【0056】
図13は、第2階層のサーバ31によりステップS230においてシーケンス番号が付加された後のメッセージを例示する図である。この例のメッセージは、元は非同期配信系20から配信されたものである。この例で、メッセージは、第2階層のサーバ31により付加されたシーケンス番号(add seq2)、第1階層のサーバ31により付加されたシーケンス番号(add seq1)、および配信元の同期配信系10により付加されたシーケンス番号(seq)を含む。図9の例とは異なり、メッセージのヘッダはグループ番号を含んでいない。それ以外の内容については図12の例と同様である。
【0057】
第2階層のサーバ31は、図12または図13に示されるメッセージを第3階層のサーバ31に送信する。
【0058】
2−3.第3階層以降の動作
第3階層以降のサーバ31も、第2階層のサーバ31と同様に動作する。例えば第3階層のサーバ31の特定部303は、シーケンス番号(0)、シーケンス番号(1)、またはシーケンス番号(2)を用いて処理対象のメッセージを特定することができる。すなわち、特定部303は、シーケンス番号(0)、シーケンス番号(1)、またはシーケンス番号(2)のうち任意のものを、キューにおける順序性の根拠とすることができる。上位の階層の装置で付加されたシーケンス番号のうち、どの階層のシーケンス番号を用いるかは、どのように設計されてもよい。例えば、特定部303は、ある特定の階層jのシーケンス番号(j)を用いてもよい。あるいは、特定部303は、階層jのシーケンス番号(j)を用いている場合に、階層jにおいて障害が発生したとの情報を取得したときに、別の階層(例えばそれよりも上位の階層である階層j−1)のシーケンス番号を用いるように、処理を変更してもよい。この場合、記憶部302は、使用するシーケンス番号の階層を特定するパラメータjを記憶している。なお、これは第2階層、第4階層以降のサーバ31についても同様である。
【0059】
最終階層のサーバ31は、メッセージをクライアント40に送信する。最終階層のサーバ31の記憶部302は、メッセージを送信すべきクライアント40のアドレスの一覧を記憶している。送信部306は、記憶部302に記憶されているアドレスを宛先として、メッセージを送信する。
【0060】
3.他の実施形態
本発明は上述の実施形態に限定されるものではなく種々の変形実施が可能である。以下、変形例をいくつか説明する。以下の変形例のうち2つ以上のものが組み合わせて用いられてもよい。
【0061】
金融情報配信システム1の構成は図1に示したものに限定されない。金融情報配信システム1は、複数の同期配信系を有してもよい。金融情報配信システム1は、複数の非同期配信系を有してもよい。一の配信系が3つ以上の配信単位を有してもよい。データ配信システム30において、サーバ31に階層の数は3つに限定されない。また、すべての階層のサーバ31の数は同一でなくてもよい。UDP以外の別のプロトコルが用いられてもよい。さらに、サーバ31の構成は図2に示したものに限定されない。これらの機能の一部、例えば要求部307および変更部308の機能が省略されてもよい。
【0062】
上述の実施形態において、非同期配信系20から配信されたメッセージにはグループ番号が付加されない例を説明した。しかし、付加部305は、メッセージに含まれる金融情報の内容(例えば、銘柄)に応じて、非同期配信系20から配信されたメッセージにグループ番号を付加してもよい。
【0063】
シーケンス番号に基づいて処理対象のメッセージを特定する処理の詳細は、図7、図8、および図10に示したものに限定されない。シーケンス番号に従った順番で処理を行うことができるようにするものであれば、どのようなアルゴリズムが用いられてもよい。また、キューの実装はリングバッファに限定されない。
【0064】
実施形態で説明した金融情報および金融情報を用いた加工はあくまで例示であって、これ以外の金融情報および加工(演算)が用いられてもよい。
【0065】
上述の実施形態においてCPU351によって実行されるプログラムは、磁気記録媒体(磁気テープ、磁気ディスク(HDD、FD(Flexible Disk))など)、光記録媒体(光ディスク(CD(Compact Disk)、DVD(Digital Versatile Disk))など)、光磁気記録媒体、半導体メモリ(フラッシュROMなど)などのコンピュータ読取り可能な記録媒体に記憶した状態で提供されてもよい。また、このプログラムは、インターネットのようなネットワーク経由でダウンロードされてもよい。
【符号の説明】
【0066】
1…金融情報配信システム、10…同期配信系、11…配信単位、12…配信単位、20…非同期配信系、21…配信単位、22…配信単位、30…データ配信システム、31…サーバ、40…クライアント、301…受信部、302…記憶部、303…特定部、304…加工部、305…付加部、306…送信部、307…要求部、308…変更部、351…CPU、352…ROM、353…RAM、354…HDD、355…通信IF
【特許請求の範囲】
【請求項1】
各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち自装置より上位の階層にある他の装置からメッセージを受信する受信手段と、
データを記憶する記憶手段と、
前記受信手段により受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを前記記憶手段に記憶させ、前記受信手段により受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、そのメッセージを前記記憶手段に記憶させ、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定する特定手段と、
前記特定手段により前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を行う加工手段と、
前記特定手段により前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記特定手段により前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を付加する付加手段と、
前記加工手段による加工および前記付加手段による付加がされたメッセージを下位の装置に送信する送信手段と
を有するサーバ。
【請求項2】
前記加工手段は、前記加工において所定の処理単位毎にメッセージを並列処理し、
前記グループ番号は、前記処理単位毎に異なる
ことを特徴とする請求項1に記載のサーバ。
【請求項3】
前記記憶手段は、前記受信手段が受信したメッセージのうち、前記同期配信系から発信されたメッセージの、最新のシーケンス番号を前記グループ番号毎に記憶し、
前記特定手段は、前記受信手段により受信されたメッセージが前記同期配信系から発信されたメッセージであり、そのメッセージが前記グループ番号を含み、かつ、そのグループ番号に対するシーケンス番号が前記記憶手段に記憶されている、そのグループ番号に対するシーケンス番号よりも大きい場合、そのグループ番号に対するシーケンス番号を前記記憶手段に記憶させ、そのメッセージを処理対象として特定する
ことを特徴とする請求項1に記載のサーバ。
【請求項4】
前記付加手段は、自装置よりも上位の装置により付加されたシーケンス番号の順番に従って、新たなシーケンス番号を前記メッセージに付加する
ことを特徴とする請求項1−3のいずれかの項に記載のサーバ。
【請求項5】
前記受信手段により受信されたメッセージが前記対象配信単位から発信されたメッセージであり、かつ、そのメッセージのシーケンス番号が前記記憶手段に記憶されている最新のメッセージのシーケンス番号よりも2単位以上大きい場合、欠落しているシーケンス番号のメッセージの再送信を前記対象配信単位に要求する要求手段と、
前記一の配信単位に障害が発生した場合、前記対象配信単位を、前記一の配信単位から前記非同期配信系の中の別の配信単位に変更する変更手段と
を有する
ことを特徴とする請求項1−4のいずれかの項に記載のサーバ。
【請求項6】
各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち一のサーバが、自装置より上位の階層にある他の装置からメッセージを受信するステップと、
前記受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを、前記一のサーバが有する記憶手段に記憶させるステップと、
前記受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、前記一のサーバがそのメッセージを前記記憶手段に記憶させるステップと、
前記一のサーバが、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定するステップと、
前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を、前記一のサーバが行うステップと、
前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記特定手段により前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を、前記一のサーバが付加するステップと、
前記一のサーバが、前記加工および前記付加がされたメッセージを下位の装置に送信するステップと
を有する金融情報配信方法。
【請求項7】
コンピュータに、
各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち一のサーバが、自装置より上位の階層にある他の装置からメッセージを受信するステップと、
前記受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを、前記一のサーバが有する記憶手段に記憶させるステップと、
前記受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、前記一のサーバがそのメッセージを前記記憶手段に記憶させるステップと、
前記一のサーバが、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定するステップと、
前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を、前記一のサーバが行うステップと、
前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を付加するステップと、
前記加工および前記付加がされたメッセージを下位の装置に送信するステップと
を実行させるためのプログラム。
【請求項1】
各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち自装置より上位の階層にある他の装置からメッセージを受信する受信手段と、
データを記憶する記憶手段と、
前記受信手段により受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを前記記憶手段に記憶させ、前記受信手段により受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、そのメッセージを前記記憶手段に記憶させ、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定する特定手段と、
前記特定手段により前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を行う加工手段と、
前記特定手段により前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記特定手段により前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を付加する付加手段と、
前記加工手段による加工および前記付加手段による付加がされたメッセージを下位の装置に送信する送信手段と
を有するサーバ。
【請求項2】
前記加工手段は、前記加工において所定の処理単位毎にメッセージを並列処理し、
前記グループ番号は、前記処理単位毎に異なる
ことを特徴とする請求項1に記載のサーバ。
【請求項3】
前記記憶手段は、前記受信手段が受信したメッセージのうち、前記同期配信系から発信されたメッセージの、最新のシーケンス番号を前記グループ番号毎に記憶し、
前記特定手段は、前記受信手段により受信されたメッセージが前記同期配信系から発信されたメッセージであり、そのメッセージが前記グループ番号を含み、かつ、そのグループ番号に対するシーケンス番号が前記記憶手段に記憶されている、そのグループ番号に対するシーケンス番号よりも大きい場合、そのグループ番号に対するシーケンス番号を前記記憶手段に記憶させ、そのメッセージを処理対象として特定する
ことを特徴とする請求項1に記載のサーバ。
【請求項4】
前記付加手段は、自装置よりも上位の装置により付加されたシーケンス番号の順番に従って、新たなシーケンス番号を前記メッセージに付加する
ことを特徴とする請求項1−3のいずれかの項に記載のサーバ。
【請求項5】
前記受信手段により受信されたメッセージが前記対象配信単位から発信されたメッセージであり、かつ、そのメッセージのシーケンス番号が前記記憶手段に記憶されている最新のメッセージのシーケンス番号よりも2単位以上大きい場合、欠落しているシーケンス番号のメッセージの再送信を前記対象配信単位に要求する要求手段と、
前記一の配信単位に障害が発生した場合、前記対象配信単位を、前記一の配信単位から前記非同期配信系の中の別の配信単位に変更する変更手段と
を有する
ことを特徴とする請求項1−4のいずれかの項に記載のサーバ。
【請求項6】
各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち一のサーバが、自装置より上位の階層にある他の装置からメッセージを受信するステップと、
前記受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを、前記一のサーバが有する記憶手段に記憶させるステップと、
前記受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、前記一のサーバがそのメッセージを前記記憶手段に記憶させるステップと、
前記一のサーバが、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定するステップと、
前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を、前記一のサーバが行うステップと、
前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記特定手段により前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を、前記一のサーバが付加するステップと、
前記一のサーバが、前記加工および前記付加がされたメッセージを下位の装置に送信するステップと
を有する金融情報配信方法。
【請求項7】
コンピュータに、
各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが同一の内容を有する同期配信系、および各々がメッセージにシーケンス番号を付与して配信する複数の配信単位を有し、複数の配信単位間で同一のシーケンス番号を付与されたメッセージが必ずしも同一の内容を有さない非同期配信系が階層化された金融情報配信システムのうち一のサーバが、自装置より上位の階層にある他の装置からメッセージを受信するステップと、
前記受信されたメッセージが前記同期配信系から発信されたメッセージである場合、前記受信されたメッセージのシーケンス番号に従ってそのメッセージを記憶すべきか判断し、そのメッセージを記憶すべきと判断したときにはそのメッセージを、前記一のサーバが有する記憶手段に記憶させるステップと、
前記受信されたメッセージが前記非同期配信系の中から定められた一の配信単位から発信されたメッセージである場合、前記一のサーバがそのメッセージを前記記憶手段に記憶させるステップと、
前記一のサーバが、前記記憶手段に記憶されているメッセージの中から順番に一のメッセージを処理対象として特定するステップと、
前記処理対象として特定されたメッセージに含まれる金融情報に対し、金融工学による加工であって、同一の階層にある他のサーバと同一の加工を、前記一のサーバが行うステップと、
前記処理対象として特定されたメッセージが前記同期配信系から発信されたメッセージであった場合、そのメッセージにグループ番号と、同一の前記グループ番号内で単調増加するシーケンス番号を付加し、前記処理対象として特定されたメッセージが前記非同期配信系から発信されたメッセージであった場合、そのメッセージに単調増加するシーケンス番号を付加するステップと、
前記加工および前記付加がされたメッセージを下位の装置に送信するステップと
を実行させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2012−18602(P2012−18602A)
【公開日】平成24年1月26日(2012.1.26)
【国際特許分類】
【出願番号】特願2010−156697(P2010−156697)
【出願日】平成22年7月9日(2010.7.9)
【特許番号】特許第4771266号(P4771266)
【特許公報発行日】平成23年9月14日(2011.9.14)
【出願人】(301007308)株式会社イースティル (3)
【Fターム(参考)】
【公開日】平成24年1月26日(2012.1.26)
【国際特許分類】
【出願日】平成22年7月9日(2010.7.9)
【特許番号】特許第4771266号(P4771266)
【特許公報発行日】平成23年9月14日(2011.9.14)
【出願人】(301007308)株式会社イースティル (3)
【Fターム(参考)】
[ Back to top ]