【実施例1】
【0017】
図1は、本実施例に係る通信制御システムの構成を示す図である。
図1に示す通信制御システム1は、ネットワークを通じて接続される接続先装置2との間でデータをやり取りするシステムであり、接続先装置2からのデータの受信をトリガーにして業務処理を開始するコールバック方式を採用した業務処理システムである。
【0018】
通信制御システム1は、通信制御装置10と、業務装置30と、通信制御装置10と業務装置30との間に設けられた流量制御装置20と、から構成されている。
【0019】
通信制御装置10は、主に、接続先装置2からのデータを業務装置30に向けて送信することで接続先装置2(第1の装置)と業務装置30(第2の装置)の間の通信を制御するという役割を担っている。通信制御装置10は、通信制御プログラム11を実行することにより、接続先装置2から受信したデータを順番に業務装置30に向けて送信する。なお、通信制御装置10は、先に送信したデータについての流量制御装置20からの応答を待って次のデータを送信するように構成されている。
【0020】
流量制御装置20は、主に、通信制御装置10から業務装置30へ向けて送信されたデータが業務装置30の処理能力を超えて業務装置30へ送信されないようにデータの流量を制御するという役割と、接続先装置2からのデータが通信制御システム10に過度に滞留しないように通信制御装置10にデータの送信を促すという役割を担っている。流量制御装置20は、流量制御プログラム21を実行することにより、通信制御装置10を介して接続先装置2から受信したデータをキュー23に一旦格納し、格納したデータを格納動作とは非同期で取り出して業務装置30へ送信する。流量制御装置20がデータの格納と送信を非同期で行うことで、通信制御装置10から業務装置30へのデータの流量が制御される。また、流量制御装置20がデータの格納後直ぐに通信制御装置10に応答を返すことで、通信制御装置10からのデータの送信が促される。なお、流量制御装置20も、先に送信したデータについての業務装置30からの応答を待って次のデータを送信するように構成されている。
【0021】
業務装置30は、接続先装置2からのデータに基づいて業務処理を実行するという役割を担っている。業務装置30は、業務アプリケーションプログラム31を実行することにより、接続先装置2からのデータの受信をトリガーに発生するコールバックイベントで、受信したデータに基づいて業務処理を実行する。
【0022】
本実施例に係る通信制御システム1は、通信制御装置10と業務装置30との間に流量制御装置20を含む点が従来の通信制御システムと異なっている。以降、接続先装置2が各銘柄の価格データを送信する証券取引所のサーバであり、通信制御システム1が証券取引所のサーバから各銘柄の価格データを受信し、受信した価格データに基づいて売買価格を指定して注文を発注する証券取引システムである場合を例にして、流量制御装置20についてさらに詳細に説明する。
【0023】
図2は、本実施例に係る通信制御システムの機能を示すブロック図である。
図3は、本実施例に係る流量制御装置の動作を示すフローチャートである。
図4は、本実施例に係る流量制御装置の動作環境定義ファイルの一例を示す図である。
図5は、本実施例に係る流量制御装置のエンキューイング処理の動作を示すフローチャートである。
図6は、本実施例に係る流量制御装置の通知処理の動作を示すフローチャートである。
【0024】
まず、
図2を参照しながら、流量制御装置20の論理構成について説明する。流量制御装置20は、
図2に示されるように、エンキューイング処理部22と、複数のキュー(キュー23a、キュー23b、キュー23c)と、複数の通知処理部(通知処理部24a、通知処理部24b、通知処理部24c)を備えている。
【0025】
エンキューイング処理部22は、証券取引所のサーバから受信した価格データの銘柄に基づいて複数のキューのいずれかに受信した価格データを格納させるように構成されている。つまり、エンキューイング処理部22は、価格データの銘柄に基づいて、格納先のキューを決定する。
【0026】
キュー23a、キュー23b、キュー23cは、予め決められた互いに異なる銘柄の価格データを格納するFIFO(First In First Out)形式のキューであり、それぞれ、内部に格納することができる価格データの件数である閾値を有している。なお、以降では、キュー23a、キュー23b、キュー23cをキュー23と総称する。
【0027】
通知処理部24a、通知処理部24b、通知処理部24cの各々は、対応するキュー23a、キュー23b、キュー23cから、格納された価格データを取り出して、業務アプリケーションプログラム31が実行されている業務装置30に送信するように構成されている。つまり、複数の通知処理部は、全体として、複数のキューのいずれかから格納された価格データを取り出して業務装置30へ送信するように構成されている。なお、通知処理部24a、通知処理部24b、通知処理部24cを通知処理部24と総称する。
【0028】
次に、
図2から
図6を参照しながら、流量制御装置20の動作について説明する。
流量制御プログラム21が開始されると、流量制御装置20は、まず動作環境定義ファイル25を読み込んで(
図3のステップS1)、初期設定を行う。動作環境定義ファイル25には、
図4に示されるように、少なくとも、エンキューイング処理部22がデータの種別を判別するための設定情報と、各キュー(キュー23a、キュー23b、キュー23c)の設定情報とが記載されている。
【0029】
ここでは、動作環境定義ファイル25に従った初期設定により、エンキューイング処理部22は、受信した価格データの“銘柄コード”によって価格データの種別を判別するように構成される。また、キュー23aは、銘柄コードYYYYで特定される銘柄の価格データのみを格納する閾値が1のキューとして、キュー23bは、銘柄コードXXXXで特定される銘柄の価格データのみを格納する閾値が1のキューとして、キュー23cは、銘柄コードXXXX及びYYYY以外の銘柄コードで特定される銘柄の価格データを格納する閾値が5のキューとして、構成される。
【0030】
初期設定が完了すると、流量制御装置20では、エンキューイング処理部22がエンキューイング処理を開始し(
図3のステップS10)、通知処理部24が通知処理を開始する(
図3のステップS20)。
【0031】
エンキューイング処理を開始したエンキューイング処理部22は、通信制御プログラム11を介した証券取引所のサーバからの価格データの到着を監視し、証券取引所のサーバからの価格データを受信する(
図5のステップS11)。価格データを受信すると、エンキューイング処理部22は、受信した価格データの銘柄コードに基づいて、格納先のキュー23を決定する(
図5のステップS12)。その後、格納先のキュー23の深さ(即ち、キュー23に格納されているデータの件数)が閾値(即ち、キューが許容する最大深さ)に達しているか否かを判断する(
図5のステップS13)。格納先のキュー23の深さが閾値に達しているときには、そのキュー23に格納されている最も古いデータを削除してから(
図5のステップS14)、受信した価格データをキュー23に格納する(
図5のステップS15)。格納先のキュー23の深さが閾値に達していないときには、キュー23に格納された価格データを削除することなく受信した価格データをキュー23に格納する(
図5のステップS15)。
【0032】
キュー23への価格データの格納が完了すると、流量制御装置20は、受信した価格データを処理したことを通信制御プログラム11に通知する(
図5のステップS16)。つまり、通信制御プログラム11に応答を返す。最後に、エンキューイング処理の終了指示の有無を確認し(
図5のステップS17)、終了指示がある場合には、エンキューイング処理を終了する。終了指示がない場合には、ステップS11に戻って上記の処理を繰り返す。
【0033】
従って、
図2に示すように、企業の銘柄コードなど、企業の識別であり得るYYYY、XXXX、ZZZZの価格データをエンキューイング処理部22が順に受信する場合を例に説明すると、エンキューイング処理部22は具体的には次のように動作する。
【0034】
最初に受信した銘柄コードYYYYの価格データについては、格納先として決定したキュー23aの深さがすでに閾値である1に達しているので、エンキューイング処理部22は、キュー23aに格納されている銘柄コードYYYYの古いデータを削除してから、受信した新しい銘柄コードYYYYのデータをキュー23aに格納させる。そして、キュー23aへのデータの格納完了後、その旨を通信制御プログラム11に通知する。
【0035】
上記通知を受けて通信制御プログラム11から送信された銘柄コードXXXXの価格データについても、格納先として決定されたキュー23bの深さがすでに閾値である1に達しているので、エンキューイング処理部22は、銘柄コードYYYYの価格データの場合と同様に、キュー23bに格納されている銘柄コードXXXXの古いデータを削除してから、受信した新しい銘柄コードXXXXのデータをキュー23bに格納させる。そして、キュー23bへのデータの格納完了後、その旨を通信制御プログラム11に通知する。
【0036】
最後に受信する銘柄コードZZZZの価格データについては、格納先として決定されたキュー23cの深さが閾値である5に達していないので、エンキューイング処理部22は、キュー23cに格納されている価格データを削除することなく、受信した銘柄コードZZZZのデータをキュー23cに格納させる。この場合も、キュー23cへのデータの格納完了後、その旨を通信制御プログラム11に通知する。
【0037】
一方、通知処理を開始した通知処理部24は、まず、価格データを取り出すキュー23を選択する(
図6のステップS21)。キュー23の選択方法としては、任意の選択方法が採用し得る。例えば、キュー23a、キュー23b、キュー23cを順に選択する方法を採用してもよい。また、通知処理部24がエンキューイング処理部22からキュー23への格納を知らせる通知を受けて、その通知により対応するキュー23を選択する方法を採用してもよい。キュー23が選択されると、対応する通知処理部24が選択されたキュー23から価格データを取り出し(
図6のステップS22)、取り出した価格データを業務アプリケーションプログラム31に送信する(
図6のステップS23)。その後、業務アプリケーションプログラム31からの応答があるまで待機し(
図6のステップS24)、応答を確認後、ステップS22におけるキューからのデータの取り出しを確定する(
図6のステップS25)。さらに、通知処理の終了指示の有無を確認し(
図6のステップS26)、終了指示がある場合には、通知処理を終了する。終了指示がなければ、ステップS21に戻って、上記の処理を繰り返す。
【0038】
従って、
図2に示すように、キュー23a、キュー23b、キュー23cが順に選択され、通知処理部24a、通知処理部24b、通知処理部24cが順にキューから価格データを取り出して業務アプリケーションプログラム31に送信する場合を例に説明すると、通知処理部24は具体的には次のように動作する。
【0039】
まず、通知処理部24aがキュー23aに格納されている銘柄コードYYYYの価格データを取り出して、業務アプリケーションプログラム31に送信する。この価格データは、銘柄コードYYYYの最新の価格データである。次に、業務アプリケーションプログラム31からの応答を待って、通知処理部24bがキュー23bに格納されている銘柄コードXXXXの価格データを取り出して、業務アプリケーションプログラム31に送信する。この価格データも、銘柄コードXXXXの最新の価格データである。さらに、業務アプリケーションプログラム31からの応答を待って、通知処理部24cがキュー23cに格納されている価格データのうち最も古い価格データを取り出して、業務アプリケーションプログラム31に送信する。
【0040】
以上のように、本実施例に係る流量制御装置20は、格納先のキューの深さが閾値に達していれば最も古い価格データを削除して、また、閾値に達していなければ価格データを削除することなく、最新の価格データである受信した価格データを対応するキュー23に格納させて通信制御プログラム11に応答を返す。従って、キューの状態によらず、通信制御プログラム11に速やかに応答を返すことができる。このため、流量制御装置20及び通信制御システム1によれば、通信制御プログラム11が管理するキュー、その上位装置である証券取引所のサーバ、その他それらの間の伝送路などに価格データが過度に滞留することを防止することが可能であり、データの滞留に起因する取引機会の損失を防止することが可能となる。
【0041】
また、本実施例に係る流量制御装置20は、各キューの閾値を超えて価格データを保持することがない。従って、通信制御プログラム11から大量の価格データが送信された場合であっても、キューの設定により業務アプリケーションプログラム31に送信される価格データの流量を制限することができる。このため、流量制御装置20及び通信制御システム1によれば、業務装置30の処理能力に応じたキューの設定を行うことで、業務アプリケーションプログラム31を実行する業務装置30に過度に負荷がかかることが避けることができるため、処理能力が低い業務装置30が使用される場合であっても、処理を遅滞なく行うことが可能であり、業務処理の遅延に起因する取引機会の損失を防止することができる。
【0042】
さらに、本実施例に係る流量制御装置20は、価格データの銘柄に基づいて決定される格納先のキューの深さが閾値に達している場合には、最も古い価格データを削除する一方で、新しい価格データをキューの閾値により許容される範囲内で維持する。このため、流量制御装置20及び通信制御システム1によれば、証券取引システムのように、取り扱うデータに有効期限があり、古いデータで処理した場合に業務エラーが生じ得るシステムにおいては、業務エラーの発生を抑制することができる。
【0043】
さらに、本実施例に係る流量制御装置20は、異なる銘柄の価格データを格納する複数のキューを有している。従って、通知処理部24が複数のキューから順番にデータを取り出して送信する場合であれば、特定の銘柄の価格データが大量に発生した場合であっても、他の銘柄の価格データも確実に業務装置30へ送信することができる。このため、流量制御装置20及び通信制御システム1によれば、すべての銘柄の価格データを安定して業務装置30に送信することが可能であり、価格データの送信遅延に起因する取引機会の損失を防止することが可能となる。
【0044】
なお、流量制御装置20のキューの設定は業務装置30の処理能力に応じて任意に設定可能であるが、複数のキューのうちの少なくとも1つのキューは、キュー23aまたはキュー23bのように、所定の一種類の種別のデータのみを格納する閾値が1のキュー(以降、単に、閾値が1のキューと記す。)として設定されることが望ましい。このようにキューを設定することで、そのキューに格納される種別のデータについては、業務装置30への最新のデータの送信を保証することが可能となる。
【0045】
ただし、閾値が1のキューをデータの種別毎に用意すると、必要なキューの数が非常に多くなってしまう場合がある。このような場合には、閾値が1のキューをデータの種別毎に設ける設定は、流量制御装置20のリソースの観点から現実的ではない。従って、流量制御装置20のリソースとの関係で、閾値が1のキューの数を決定し、発生頻度の高い種別のデータを優先的に閾値が1のキューに割り当てることが望ましい。また、閾値が1のキューに割り当てられなかった残りの種別のデータは、キュー23cのような、複数の種別のデータを格納する閾値が2以上のキューに割り当てられる。この場合、このキューは、割り当てられたデータの種別の数以上の閾値を有するように設定されることが望ましい。そのようにキューを設定することで、複数の種別のデータを格納するキューにおいて、割り当てられた種別の最新のデータが削除される可能性を低くすることができる。なお、閾値が1のキューも割り当てられたデータの種別の数以上の閾値を有していることを考慮すると、流量制御装置20が有する複数のキューの各々は、そのキューに格納されるべきデータの種別の数以上の閾値を有することが望ましい。
【0046】
また、キュー23毎に通知処理部24が設けられている例について上述したが、通知処理部24は、必ずしもキュー23毎に設けられる必要はない。一つの通知処理部24が、複数のキュー23からデータが取り出すように構成されてもよい。通知処理部24は、所定の順番で複数のキュー23から特定のキューを選択してデータを取り出してもよく、また、キューイングがあった順番で複数のキュー23から特定のキューを選択してデータを取り出してもよい。
【0047】
また、通信制御装置10と流量制御装置20が別々に設けられた例について上述したが、通信制御装置10と流量制御装置20は一体として構成され、通信制御プログラム11と流量制御プログラム21の間でプロセス間通信を行ってもよい。
【0048】
最後に、
図7を参照しながら、本実施例に係る流量制御装置のハードウェア構成について説明する。
図7は、本実施例に係る流量制御装置のハードウェア構成を示す図である。本実施例に係る流量制御装置20は、流量制御プログラム21を実行するコンピュータであり、
図7に示されるように、CPU(Central Processing Unit)41、ROM(Read Only Memory)42、RAM(Random Access Memory)43、補助記憶装置としてのHDD(Hard Disk Drive)44、表示処理部45、入力インタフェース46、及び、通信インタフェース47を備えていて、それらがバス48で接続されていることにより各種データが各要素間で互いに授受可能となっている。補助記憶装置は、HDD44に限られず、たとえばSSD(Solid State Drive)であってもよい。表示処理部45は、例えば液晶ディスプレイなどのモニタ50に接続されている。入力インタフェース46は、キーボード60及びマウス70などの入力装置に接続されている。通信インタフェース47はネットワークに接続されていて、そのネットワークを介して通信制御装置10及び業務装置30と接続されている。
【0049】
流量制御装置20では、CPU41がROM42またはHDD44が予め記憶している流量制御プログラム21を読み出して実行することにより、キュー23がRAM43またはHDD44に作成され、上述した流量制御動作が実現される。
【実施例2】
【0050】
本実施例に係る流量制御装置は、エンキューイング処理部の動作が実施例1に係る流量制御装置20と異なっている。装置の物理構成及び論理構成などその他の点については、実施例1に係る流量制御装置20と同様である。このため、本実施例に係る流量制御装置の構成要素は、実施例1に係る流量制御装置20の構成要素と同一の符号で参照する。
【0051】
図8は、本実施例に係る流量制御装置のエンキューイング処理の動作を示すフローチャートである。以下、
図8を参照しながら、本実施例に係る流量制御装置のエンキューイング処理部22の動作について説明する。
【0052】
エンキューイング処理を開始したエンキューイング処理部22は、通信制御プログラム11を介した証券取引所のサーバからの価格データの到着を監視し、証券取引所のサーバからの価格データを受信する(
図8のステップS31)。そして、受信した価格データの銘柄コードに基づいて、格納先のキュー23を決定する(
図8のステップS32)。これらの動作は、実施例1に係る流量制御装置20と同様である。
【0053】
次に、受信した価格データと同じ銘柄の価格データが格納先のキュー23に存在するか否かを判断する(
図8のステップS33)。格納先のキュー23に同じ銘柄の価格データが存在しているときには、そのキュー23に格納されている同じ銘柄の価格データを削除してから(
図8のステップS34)、受信した価格データをキュー23に格納する(
図8のステップS37)。格納先のキュー23に同じ銘柄の価格データが存在しないときには、さらに、格納先のキュー23の深さが閾値(最大深さ)に達しているか否かを判断する(
図8のステップS35)。格納先のキュー23の深さが閾値に達しているときには、そのキュー23に格納されている最も古いデータを削除してから(
図8のステップS36)、受信した価格データをキュー23に格納する(
図8のステップS37)。格納先のキュー23の深さが閾値に達していないときには、キュー23に格納された価格データを削除することなく受信した価格データをキュー23に格納する(
図8のステップS37)。
【0054】
キュー23への価格データの格納が完了すると、流量制御装置は、受信した価格データを処理したことを通信制御プログラム11に通知する(
図8のステップS38)。最後に、エンキューイング処理の終了指示の有無を確認し(
図8のステップS39)、終了指示がある場合には、エンキューイング処理を終了する。終了指示がない場合には、ステップS31に戻って上記の処理を繰り返す。
【0055】
以上のように動作する本実施例に係る流量制御装置及びそれを備えた本実施例に係る通信制御システムによっても、実施例1に係る流量制御装置20及び通信制御システム1と同様に、取引機会の損失を防止することができる。また、本実施例に係る流量制御装置及び通信制御システムによれば、キュー23に同じ種別のデータが存在する場合には、そのデータを削除してから最新のデータをキュー23に格納するため、業務装置30への古いデータの送信を防止することができる。さらに、複数の種別のデータを格納する閾値が2以上のキューにおいて、割り当てられた種別の最新のデータが削除される可能性をさらに低くすることができる可能であり、特に、キューが格納されるべきデータの種別の数以上の閾値を有する場合には、種別の最新のデータが削除されることを確実に防止することができる。
【0056】
以上では、流量制御装置を備えた通信制御システムとして証券取引システムを例示して説明したが、上述した流量制御技術は証券取引システムに限られず、任意の通信システムに適用可能である。上述した実施例は、発明の理解を容易にするために本発明の具体例を示したものであり、本発明はこれらに実施例に限定されるものではない。本発明の流量制御装置、通信制御システム、流量制御方法及びプログラムは、特許請求の範囲に規定された本発明の思想を逸脱しない範囲において、さまざまな変形、変更が可能である。