JP6197692B2 - サーバ - Google Patents

サーバ Download PDF

Info

Publication number
JP6197692B2
JP6197692B2 JP2014036075A JP2014036075A JP6197692B2 JP 6197692 B2 JP6197692 B2 JP 6197692B2 JP 2014036075 A JP2014036075 A JP 2014036075A JP 2014036075 A JP2014036075 A JP 2014036075A JP 6197692 B2 JP6197692 B2 JP 6197692B2
Authority
JP
Japan
Prior art keywords
controller
information
switch
queue
server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2014036075A
Other languages
English (en)
Other versions
JP2015162029A (ja
Inventor
翔 清水
翔 清水
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014036075A priority Critical patent/JP6197692B2/ja
Priority to US14/628,793 priority patent/US10382349B2/en
Publication of JP2015162029A publication Critical patent/JP2015162029A/ja
Application granted granted Critical
Publication of JP6197692B2 publication Critical patent/JP6197692B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/621Individual queue per connection or flow, e.g. per VC

Description

本開示は、サーバに関する。
近年、ネットワーク業界においてSoftware Defined Networking(SDN)が注目され
ている。SDNでは、ネットワーク全体をコントローラと呼ばれるソフトウェアが集中的に制御、管理する。これによって、ネットワークのプログラマビリティを高め、制御の自動化を達成することを目的としている。
SDNでは、コントローラによるスイッチの集中制御モデルを採用している。すなわち、コントローラには、複数のスイッチが接続され、各スイッチの動作を制御プロトコルに従って制御する。このため、コントローラの性能が全体のボトルネックとなりやすい傾向がある。そこで、複数のコントローラを連携させることにより、例えば、物理構成は複数のサーバによる分散構成であるが論理的には集中制御となる分散コントローラを用いたネットワークシステム(分散コントローラシステム)によってスケーラビリティを向上させることが考えられている。
分散コントローラでは、スイッチの動作を制御するためのプロセスが、コントローラプロセスとアプリケーションプロセスとに分離され、両者がメッセージングシステムを介して情報をやりとりする。この種の分散コントローラは、コントローラプロセスとアプリケーションプロセスとがメッセージングシステムを介して疎結合される。このため、「疎結合型分散コントローラ」と呼ばれることがある。分散コントローラは、コントローラ及びアプリケーションのそれぞれを単独でスケールアウトさせることを可能とする。以下の説明において、コントローラプロセスを単にコントローラと表記し、アプリケーションプロセスを単にアプリケーションと表記することもある。
メッセージングシステムとしては、コントローラとアプリケーションとの間でやりとりされる情報を格納する複数のキューを備えるメッセージキューサーバ(MQサーバ)が用いられる。MQサーバにおいて、キューはプロセス毎に備えられる。上述したように、分散コントローラは、プロセスとしてコントローラとアプリケーションとを含む。このため、MQサーバは、アプリケーション毎に作成されたキューと、コントローラ毎に作成されたキューとを含む。各キューには、対応するプロセス(アプリケーション又はコントローラ)を宛先とするメッセージが格納される。
特開平7−200494号公報
上述した分散コントローラ(関連技術)では、スケールアウト又はスケールインのため、或いは、障害の発生によって、アプリケーションの数やコントローラの数が増減することがある。また、分散コントローラでは、プロセス(コントローラ、アプリケーション)数の増加によって、システム全体の処理能力を向上させることが考えられている。このように、関連技術では、プロセス(コントローラ、アプリケーション)の数が増減することが想定されている。
しかしながら、関連技術では、上記したように、キューがプロセス単位で作成されている。このため、例えば、コントローラの数が増減すると、或るコントローラが自身に対応するキューに格納された情報だけでなく、自身以外のコントローラに対応するキューに格納された情報を得るという変則的な処理を行う状態となる。このように、関連技術では、コントローラの数の増減時に対応するために、キューからの情報の読み出し及びコントローラへの送信処理が複雑化する問題があった。
また、或る処理の負荷分散のために或る処理を行う複数のアプリケーションが存在する場合には、コントローラは、或る処理を実行可能なアプリケーションの数を把握して、上記複数のアプリケーションに対応する複数のキューに情報を分散配置する。このように、関連技術では、キューへの情報の格納にあたりキューからの情報の配信先の数を考慮するために、キューへの情報の格納処理が複雑化する問題があった。
以上のように、関連技術では、プロセス(コントローラ、アプリケーション)の増減に対応するために、キューからの情報の読み出し及び送信処理やキューへの情報の格納処理のようなキューに関わる処理が複雑になる問題があった。
本開示の目的は、コントローラ又はアプリケーションの増減を要因としてキューに関わる処理が複雑化することを抑制可能な技術を提供することにある。
本開示は、複数のコントローラがアプリケーションからの情報に基づいて複数のスイッチを制御するネットワークシステムに設けられるサーバであって、
スイッチ単位で設けられ、それぞれが自身に対応するスイッチに向けられた前記アプリケーションからの情報を格納する複数のキューと、
キューの指定情報と当該指定情報によって指定されたキューから読み出される情報を当該情報の送信先に該当するコントローラへ送信するための情報とを含む送信先情報を前記各コントローラから受信する受信部と、
前記複数のキューのそれぞれから読み出される情報を、前記送信先情報に従って前記各キューに対応するスイッチを制御する前記複数のコントローラの1つへ送信する送信部とを含むサーバである。
本開示によれば、キューに関わる処理がコントローラ又はアプリケーションの増減を要因として複雑化することを抑えることが可能となる。
図1は、関連技術における第1の問題の説明図であり、プロセス毎に作成されたキューと、コントローラと、スイッチとの関係を示す。 図2は、コントローラ#1の障害発生時における様子を示す。 図3は、関連技術における第2の問題の説明図である。 図4は、複数のMQサーバを配置するときの例(関連技術)である。 図5は、図4に示した構成における問題点を示す。 図6は、分散コントローラが適用されるネットワークシステムの構成例を示す。 図7は、CPUがプログラムを実行することによって実現される分散コントローラ(疎結合型分散コントローラ)を用いたネットワークシステムを模式的に示す図である。 図8は、本実施形態に係るコントローラに対するキュー割り当て方法の説明図である。 図9は、本実施形態に係るコントローラに対するキュー割り当て方法の説明図である。 図10は、本実施形態に係るアプリケーションに対するキュー割り当て方法の説明図である。 図11は、本実施形態に係るアプリケーションに対するキュー割り当て方法の説明図である。 図12は、複数のMQサーバが用意された例を示す。 図13は、スイッチの構成例を示す。 図14は、コントローラの構成例を示す。 図15は、アプリケーションの構成例を示す。 図16は、レジストリの構成例を示す図である。 図17は、コントローラ情報格納部が有するテーブルのデータ構造例を示す。 図18は、スイッチ情報格納部が有するテーブルのデータ構造例を示す。 図19は、アプリケーション情報格納部が有するテーブルのデータ構造例を示す。 図20は、MQサーバ情報格納部が有するテーブルのデータ構造例を示す。 図21は、MQサーバの構成例を示す図である。 図22は、コントローラの起動時におけるコントローラの動作例を説明するフローチャートである。 図23は、コントローラの終了時における動作例を示すフローチャートである。 図24は、スイッチとの接続時におけるコントローラの動作例を示すフローチャートである。 図25は、スイッチとの切断時におけるコントローラの動作例を示すフローチャートである。 図26は、アプリケーションの起動時におけるアプリケーションの動作例を示すフローチャートである。 図27は、アプリケーションの終了時におけるアプリケーションの動作例を示すフローチャートである。 図28は、MQサーバの起動時におけるMQサーバの動作例を示すフローチャートである。 図29は、MQサーバの終了時におけるMQサーバの動作例を示すフローチャートである。 図30は、非同期イベント発生時におけるコントローラの動作例を示すフローチャートである。 図31は、MQサーバからメッセージを受信したコントローラの動作例を示すフローチャートである。 図32は、MQサーバからメッセージを受信したアプリケーションの動作例を示すフローチャートである。 図33は、アプリケーションが或るスイッチの制御を行う場合におけるアプリケーションの動作例を示すフローチャートである。 図34は、コントローラの数が増加した場合の動作例を示すフローチャートである。 図35は、コントローラが障害等によって減少した場合の動作例を示すフローチャートである。
以下、図面を参照して本発明の実施形態について説明する。実施形態の構成は例示であ
り、本発明は実施形態の構成に限定されない。
〔関連技術〕
本発明の実施形態を説明する前に、プロセス毎にキューが作成される分散コントローラを用いたネットワークシステム(関連技術)についての問題点を詳細に説明する。
<<第1の問題>>
第1の問題として、コントローラに障害が発生した際に生じる問題を説明する。分散コントローラシステム(分散コントローラ環境)では、各コントローラはネットワーク中の複数のスイッチの一部を制御し、全てのコントローラでネットワーク中の全てのスイッチの制御をカバーする。
すなわち、各スイッチにはマスタコントローラが存在し、通常時はマスタコントローラのみから制御を受ける。或るコントローラに障害が発生すると(コントローラの数が減少すると)、残りの正常なコントローラのうちの少なくとも1つが新たなマスタコントローラとなって或るコントローラが行っていた動作を継続する。
図1は、第1の問題の説明図であり、プロセス毎に作成されたキューと、コントローラと、スイッチとの関係を示す。図1では、スイッチ(SW)#1,スイッチ(SW)#2,スイッチ(SW)#3のマスタコントローラとしてコントローラ(Controller)#1が動作している。コントローラ#2は、スイッチ(SW)#4及びスイッチ(SW)#5のマスタコントローラとして動作し、コントローラ#3は、スイッチ(SW)#6のマスタコントローラとして動作する。
MQサーバは、コントローラプロセス(コントローラ#1〜#3)毎に作成されたキューQ1,キューQ2,キューQ3を有している。各キューQ1〜Q3は、対応するコントローラがマスタコントローラとして制御しているスイッチを制御するためのメッセージを一時的に格納(蓄積)する。コントローラ#1に対応するキューQ1は、SW#1〜SW#3向けのメッセージを格納する。コントローラ#2に対応するキューQ2は、SW#4及びSW#5向けのメッセージを格納する。コントローラ#3に対応するキューQ3は、SW#6向けのメッセージを格納する。
図1に示す状態で、コントローラ#1に障害が発生した場合を考える。図2は、コントローラ#1の障害発生時における様子を示す。この場合、SW#1,SW#2,SW#3のそれぞれは、残りの正常なコントローラ#2及びコントローラ#3の一方を新たなマスタコントローラとして、マスタコントローラの配下に入る。例えば、SW#1がコントローラ#2の配下となり、SW#2及びSW#3がコントローラ#3の配下となったケースを仮定する。
図2において、キューQ1には、コントローラ#1が未処理のSW#1,SW#2,SW#3に関するメッセージが未処理の状態で格納されている。このため、コントローラ#2及びコントローラ#3のそれぞれは、キューQ1から自身が新たにマスタコントローラとして制御するスイッチに関するメッセージのみを選択的にキューQ1から読み出す。
すなわち、コントローラ#2は、キューQ1からSW#1に関するメッセージを読み出してコントローラ#2に送信することをMQサーバに依頼する。コントローラ#3は、キューQ1からSW#2及びSW#3に関するメッセージを読み出してコントローラ#3に送信することをMQサーバに依頼する。
このように、通常時(障害発生前)では、各コントローラ#1〜#3は、コントローラ
自身に対応するキューQ1〜Q3の何れかのみからメッセージの読み出すための動作(MQサーバへの読み出し及び送信依頼)を行っている。これに対し、障害発生時(障害発生後)では、コントローラ#2及びコントローラ#3のそれぞれは、対応するキューQ2又はQ3からメッセージを読み出す動作だけでなく、他のコントローラ#1(障害が発生したコントローラ)に対応するキューQ1からメッセージを読み出す動作を行う。このように、障害が発生したコントローラの動作を引き継ぐコントローラの動作が、障害発生前の動作に比べて変則的な(複雑な)動作となっていた。
これに対し、既存のMQサーバの仕様では、既にキューに格納されたメッセージをそのメッセージ内容(例:メッセージの宛先)に応じて新たなマスタコントローラに送信する動作をサポートしていなかった。
<<第2の問題>>
第2の問題として、アプリケーション増加時におけるロードバランスへの対処に係る問題について説明する。MQサーバがプロセス毎に作成されたキューを有する場合において、アプリケーションがスケールアウトのために複数のプロセスで動作している場合を考える。アプリケーションは、スケールアウトのために、同一の機能を提供する複数のプロセスから形成される場合がある。図3は、関連技術における第2の問題の説明図である。図3では、負荷分散(ロードバランス)による処理能力向上のために同一機能を提供する3つのアプリケーションプロセス(App.#1,App.#2,及びApp.#3,)が例
示されている。
MQサーバは、アプリケーション#1(App.#1)に対応するキューQA1と、ア
プリケーション#2(App.#2)に対応するキューQA2と、アプリケーション#3
(App.#3)に対応するキューQA3とを有している。
処理能力向上のために同一機能を複数のプロセス(複数のアプリケーション#1〜#3)で処理していることに鑑みると、各アプリケーション#1〜#3に偏りなくメッセージを配信することが試行される。この場合、アプリケーション側にメッセージを送信するコントローラ(図3ではコントローラ#1〜#3を例示)が、アプリケーションプロセス数を意識して、メッセージをキューQA1,QA2,QA3の何れかに配置(格納)する。
さらに、スケールアウトのために、アプリケーションプロセス数が1つ増加した(各アプリケーション#1〜#3と同一機能を有する図示しないアプリケーション#4(App.#4)が追加された)場合を考える。この場合、MQサーバには、アプリケーション#4に対応するキューQA4(図示せず)が作成される。すると、各コントローラ#1〜#3は、MQサーバにキューQA4が作成された(アプリケーションプロセスが4つに増えた)ことを意識して、キューQA1〜QA4の何れかにメッセージを分散配置する。このように、各コントローラ#1〜#3は、アプリケーションの数を含むアプリケーションの状態を意識してメッセージを複数のキューに分散配置する。従って、動作が複雑となる。
<<第3の問題>>
関連技術に係る分散コントローラシステムは、メッセージングシステムとして、単一のMQサーバを有する構成を採用している。この場合、メッセージングシステム自体のスケーラビリティがボトルネックになり分散コントローラシステムのスケーラビリティが制約される。
このため、メッセージングシステムのスケーラビリティを高めて、スケーラブルな分散コントローラシステムを実現することが考えられる。換言すれば、単一のMQサーバではなく、複数のMQサーバを用いてスケーラビリティが高められたメッセージングシステム
を形成することが考えられる。
ここで、プロセス毎にキューを作成する方法が適用された分散コントローラにおいて、複数のMQサーバを用いる構成を考える。最も単純な方法としては、データベース(DB)技術において“シャーディング”と呼ばれているデータ分割手法に準じた方法が考えられる。具体的には、図4に示すように、1つのMQサーバ内に存在していたプロセス毎のキューを分割して複数のMQサーバに配置する。
図4に示す例では、MQサーバ#1は、コントローラ(CNT)#1〜#4並びにアプリケーション(APP)#1及び#2にそれぞれ対応する複数のキューを有している。これに対し、複数のキューの分割によって、コントローラ#1及び#2並びにアプリケーション#1のキューがMQサーバ#1に配置されている。一方、MQサーバ#2には、コントローラ#3及び#4並びにアプリケーション#2のキューが配置されている。当該手法では、1つのMQサーバが有していたキューが、複数のMQサーバ(MQサーバ群)の何れか1つに配置される。
図5は、図4に示した構成における問題点を示す。上記したキューの分割配置の手法では、メッセージの宛先が全プロセスに均等に分散している場合には、各MQサーバに対する負荷が均等となることで、各MQサーバを効率的に動作させることができる。
これに対し、図5に示すように、コントローラ#1〜#4からアプリケーション#1向けのメッセージが集中的に発行される場合では、MQサーバ#1に負荷が集中し、MQサーバ#2への負荷がない非効率な状態となる。換言すれば、上記した分割配置の手法では、或るプロセスに対応するキューがMQサーバ群の一つにしか配置されないため、メッセージの宛先に偏りが生じると、複数のMQサーバを設けた意義(負荷分散による効率化)が損なわれる虞があった。
以下に説明する実施形態に係る分散コントローラを用いたネットワークシステムは、上述した第1〜第3の問題を解決する。
〔実施形態〕
以下、実施形態に係る分散コントローラを用いたネットワークシステムについて説明する。
<ネットワークシステムの構成例>
図6は、分散コントローラが適用されるネットワークシステムの構成例を示す。図6において、ネットワークシステムは、ネットワーク(NW)1を介して接続された複数のスイッチ2と、単数又は複数のサーバ3とを含む。
ネットワーク1は、例えば、インターネットやイントラネットに代表されるInternet Protocol (IP)ネットワーク、或いはLocal Area Network(LAN)である。スイッチ2は、例えば、ルータやレイヤ3スイッチである。スイッチ2は、レイヤ2スイッチやスイッチングHUBを含み得る。スイッチ2は、物理的なスイッチ(実スイッチ)であっても、コンピュータ上で仮想的に生成される仮想スイッチであっても良い。
サーバ3は、プロセッサ及びメモリを含むコンピュータの一例である。サーバ3として、専用のサーバマシン,或いは、パーソナルコンピュータ(PC)やワークステーション(WS)のような汎用のコンピュータを適用することができる。
サーバ3は、バスBを介して相互に接続されたCentral Processing Unit(CPU)4
と、メモリ5と、通信インタフェース(通信IF)6とを含み、通信IF6が物理回線を介してネットワーク1に接続されている。メモリ4は、不揮発性記憶媒体と、揮発性記憶媒体とを含む。CPU4は、プロセッサ(制御装置)の一例である。
不揮発性記憶媒体は、例えば、Read Only Memory(ROM),ハードディスク,Solid State Drive(SSD),EEPROM,フラッシュメモリなどであり、CPU4によっ
て実行されるプログラムや、プログラムの実行に際して使用されるデータを記憶する。揮発性記憶媒体は、例えばRandom Access Memory(RAM)であり、CPU4の作業領域として使用される。メモリ5は、「記憶装置」、「記憶媒体」の一例である。
通信IF6は、通信に係る信号変換、プロトコル変換を司る装置であり、例えば、ネットワークカード、或いはLANカードと呼ばれる通信機器が適用される。CPU4は、メモリ5に記憶されたプログラムをロードして実行することによって、分散コントローラとして動作し、各スイッチ2の動作を制御する。
図7は、CPU4がプログラムを実行することによって実現される分散コントローラ(疎結合型分散コントローラ)を用いたネットワークシステムを模式的に示す図である。分散コントローラを用いたネットワークシステムは、複数のスイッチ2と、複数のコントローラ11と、単数又は複数のアプリケーション12と、コーディネーションシステム13、メッセージングシステム15とを含む。
一つのコントローラ11は、ネットワーク上の複数のスイッチ2の一部分の制御を行い、全てのコントローラプロセスでネットワーク上の全てのスイッチ2の制御をカバーする。アプリケーション12(アプリケーションプロセス)は、コントローラ11に対し、スイッチ2の制御に係る情報を与える。
コーディネーションシステム13とメッセージングシステム15は、アプリケーション12とコントローラ11との間における情報のやりとりを仲介するシステムであり、役割によってシステムが分けられている。
コーディネーションシステム13は、主にアプリケーション12やコントローラ11のメンバーシップや状態などの分散コントローラ全体で共有すべき情報を格納する役割を担っている。コーディネーションシステム13は、レジストリ14を含み、レジストリ14は、コントローラ11,アプリケーション12などに関する情報が格納され、他のプロセスは、レジストリ14に格納された情報を参照することができる。
メッセージングシステム15は、コントローラ11とアプリケーション12との間の通信(情報の送受信)を仲介するシステムである。分散コントローラでは、各コントローラ11と各アプリケーション12とが互いにメッセージ(情報の一例)を送り合うことでシステム全体の動作が行われる。
コントローラ11は、自身がマスタコントローラとして割り当てられたスイッチ2(配下のスイッチ)を制御する。配下のスイッチ2は、イベント(例えば、Packet Inイベン
ト)を発生させると、マスタコントローラに該当するコントローラ11へイベントの発生を通知する。イベントの発生の通知を受信したコントローラ11は、アプリケーション12へ向けて、イベントの発生を示すメッセージをメッセージングシステム15を介して通知する。イベント発生を示すメッセージは、「スイッチ関連情報」の一例である。
アプリケーション12は、メッセージングシステム15を介してイベントの発生を示すメッセージを受信し、アプリケーション12自身の制御ロジックに従って、イベントに対
する対応(処理)を決定する。この結果、アプリケーション12は、該当のスイッチ2を制御する場合には、指定したスイッチ2を制御するためのメッセージをメッセージングシステム15を介してコントローラ11に送信する。
メッセージングシステム15は、コントローラ11とアプリケーション12との間でやりとりされる情報が格納される複数のキューを備えたメッセージキューサーバ(MQ)サーバ16を含む。MQサーバ16は、スケールアウトによってその個数を増やすことができる。図7の例では、2つのMQサーバ16が例示されている。MQサーバ16は、「サーバ」の一例である。
コントローラ11,アプリケーション12,コーディネーションシステム13(レジストリ14),メッセージングシステム15(MQサーバ16)は、CPU4がプログラムを実行することによって生じるエンティティである。コントローラ11,アプリケーション12は、例えば、オブジェクト指向プログラミングにおけるインスタンスである。
図7に示すような分散コントローラは、1つのサーバ3(物理サーバ:コンピュータ)によって生成されるようにしても良く、図6に示すような、2以上の物理サーバ(コンピュータ)間の連携処理によって生成されるようにしても良い。以下の説明は、説明を簡単にするため、各コントローラ11,各アプリケーション12,コーディネーションシステム13(レジストリ14),メッセージングシステム15(MQサーバ16)が、単一のサーバ3上で生成されている場合を想定している。
<第1〜第3の問題に対する解決方法>
次に、関連技術における第1〜第3の問題を解決する方法(処理)について説明する。本実施形態では、第1及び第2の問題を解決するために、プロセス(コントローラ11,
アプリケーション12)に対するキューの割り当て方法によって、動作の単純化を図る。以下、コントローラ11及びアプリケーション12のそれぞれに対するキューの割り当て方法について説明する。
<<コントローラに対するキュー割り当て>>
本実施形態では、スイッチ2毎にキューを作成し、各コントローラ11は自身がマスタコントローラとして制御するスイッチ2用のキューを読み込む(MQサーバ16から対応するスイッチ2の情報を受信する)。
図8及び図9は、本実施形態に係るコントローラに対するキュー割り当て方法の説明図である。図8に示す例では、スイッチ2として、スイッチ(SW)#1〜#6が示されており、コントローラ11として、3つのコントローラ#1〜#3が示されている。コントローラ(CNT)#1は、スイッチ(SW)#1及びスイッチ#2のマスタコントローラである。また、コントローラ(CNT)#2は、スイッチ(SW)#3,スイッチ#4及びスイッチ#5のマスタコントローラである。また、コントローラ(CNT)#3は、スイッチ(SW)#6のマスタコントローラである。
MQサーバ16は、スイッチ毎にキューQを作成する。すなわち、MQサーバ16には、スイッチ#1〜#6に対応する複数のキューQが設けられている。各コントローラ#1〜#3は、マスタコントローラとして制御するスイッチ2に対応するキューQを読み込む(MQサーバ16からキューQ内の情報(メッセージ)を受信する)。
コントローラ#1,コントローラ#2,コントローラ#3のそれぞれは、自身の配下のスイッチ2に対応するキューQから読み出されるメッセージが自身に送信されるようにするために、MQサーバ16にキューの指定を含む送信先情報を送る。送信先情報は、指定
キューを示す情報であるキュー指定情報と、メッセージを所定の送信先(コントローラ11)へ送るための情報である送信先指定情報(ネットワークアドレスなど)を含む。
MQサーバ16は、各コントローラ#1〜#3からの送信先情報に基づいて、各キューQの先頭から読み出されるメッセージを対応するコントローラ11へ送信するための設定(コネクション設定)を行う。これによって、各キューQからメッセージが読み出される毎に、当該メッセージの送信先の判定が行われることなく、予め設けられたコネクションを用いて、メッセージの転送が行われる。
このようにして、コントローラ#1は、スイッチ#1及び#2に対応するキューQに格納されたメッセージをMQサーバ16から受信する。コントローラ#2は、スイッチ#3〜#5に対応するキューQに格納されたメッセージをMQサーバ16から受信する。コントローラ#3は、スイッチ#6に対応するキューQに格納されたメッセージをMQサーバ16から受信する。
なお、上述した事前のコネクション設定は必須の要件ではなく、メッセージの読み出し毎に送信先情報を参照して送信先判定を行う場合もあり得る。
図9は、図8に示した状態において、コントローラ#3に障害が発生しコントローラ11の数がコントローラ#1及び#2の2つに減少した場合の動作を示す。図9は、コントローラ#3の障害によって、スイッチ#6のマスタコントローラがコントローラ#2に変更された例を示す。換言すれば、スイッチ#6とコントローラ#3との対応関係が、コントローラ#3の障害(コントローラの減少)によって、スイッチ#6とコントローラ#2との対応関係に変更されている。
コントローラ#2は、スイッチ#6のマスタコントローラになったとき、スイッチ#6に対応するキューQをコントローラ#2へ送信することを指示する送信先情報をMQサーバ16に与え、MQサーバ16は、送信先情報に従ってキューQ(スイッチ#6)から読み出されるメッセージの送信先をコントローラ#2に変更する。これによって、コントローラ#2は、スイッチ#6に対応するキューQに格納されたメッセージ(情報)を読み込む(MQサーバ16から送信される情報を受信する)状態となる。
このように、各コントローラ#1〜#3は、自身がマスタとなっているスイッチ2に対応するキューを指定した送信先情報をMQサーバ16に送り、MQサーバ16に指定キューから読み出される情報を自身に送ることを依頼する。MQサーバ16は送信先情報を用いた依頼に応じて、指定キューからのメッセージを対応するコントローラに送る設定を行う。
コントローラ#3の障害によって、コントローラ#2がスイッチ#6のマスタコントローラとなったときには、コントローラ#2は、スイッチ#6に対応するキューQから読み出される情報が自身に送られるようにするための送信先情報をMQサーバ16に送信し、MQサーバ16が、該当キューQに係る送信先を変更する設定を行う。
このように、本実施形態では、コントローラ11は、自身が受信を所望する(自身がマスタとなっているスイッチ向けの)メッセージを格納するキューの指定と、送信先(コントローラ自身)の指定とを含む送信先情報を送る処理を行う。MQサーバ16は、送信先情報に基づき、指定されたキューに格納されたメッセージを指定された送信先に送る処理を行う。
上記のような、コントローラ11及びMQサーバ16の処理は、コントローラ11の障
害の前後において変わらない。従って、コントローラ11及びMQサーバ16の動作が単純化される。このように、本実施形態によれば、関連技術のようなキューQからの情報の読み出し及び送信処理の複雑化が抑止される。
なお、図8及び図9は、コントローラ11の数が減少した場合について説明したが、コントローラ11が増加した場合も同様の動作となる。すなわち、コントローラ11の動作の前後において、キューに関わる処理内容に変化はない。従って、処理の簡素化(複雑化の抑止)が図られる。
<<アプリケーションのキュー割り当て>>
本実施形態では、アプリケーション12の機能(機能グループ)単位でキューを作成し、各アプリケーション12は自身が属する機能グループに対応するキューを読み込む。図10及び図11は、本実施形態に係るアプリケーションに対するキュー割り当て方法の説明図である。
図10に示す例では、アプリケーション12の機能グループ(アプリケーション機能)の例として、パス計算,トポロジ発見,QoS制御が定義されており、パス計算を行うアプリケーションプロセス群として、複数のアプリケーション12(アプリケーション(APP)#1〜#3)が設けられている例を示す。
この場合、MQサーバ16には、パス計算,トポロジ発見,QoS制御のそれぞれに対応するキューQAが設けられる。各コントローラ11(図10ではコントローラ(CNT)#1〜#3を例示)は、書き込み先のキューの指定を含むメッセージをMQサーバ16に送る。MQサーバ16は、指定されたキューにメッセージを書き込む。
各アプリケーション#1〜#3は、上記したコントローラ11と同様に、MQサーバ16に対して、キュー指定情報及び送信先指定情報を含む送信先情報を送る。MQサーバ16は、送信先情報を用いて指定されたキューQAから読み出される情報を指定された送信先へ送る設定を行う。このように、各キューQAから読み出される情報の送信先の設定方法は、コントローラ11とアプリケーションとで同じである。
但し、図10に示すアプリケーション#1〜#3は、それぞれ同一の機能を提供する(同一の処理を行う)。このため、MQサーバ16は、パス計算に対応するキューQAから読み出した情報(メッセージ)を、所定のルールに従ってアプリケーション#1〜#3の何れかに配信する。例えば、MQサーバ16は、ラウンドロビン方式や、負荷が小さいアプリケーションにメッセージを配信するといった様々なルールに従って、キューQAから読み出したメッセージを何れかのアプリケーション12に分散的に配信する。
図11は、図10に示す状態からアプリケーションプロセス数(アプリケーション12の数)が減少した場合の動作を示す。図11に示す例では、アプリケーション#3の消滅によって、アプリケーション12の数が減少した例を示している。この場合、MQサーバ16とアプリケーション#3とのセッションが切断されるので、アプリケーション#3へのキューQA(パス計算)に格納された情報(メッセージ)の配信が行われなくなるだけである。残りのアプリケーション#1及び#2には、送信先情報に従った送信が行われる。
したがって、コントローラ11(コントローラ#1〜#3を例示)側の処理を見れば、アプリケーション#3の消滅の前後(アプリケーション12の数の減少の前後)において、処理に変化はない、すなわち、アプリケーション12の減少に関わらず、各コントローラ#1〜#3から送信されるパス計算に係るメッセージがパス計算に対応するキューQA
に格納される処理が行われる。このように、本実施形態では、コントローラ11は、アプリケーションの数の変化を把握しなくて良い。従って、キューに関わる処理(キューへの書き込み処理)が簡素化される(複雑化が抑止される)。
なお、図10及び図11に示した例では、アプリケーション12の減少時の動作を説明したが、アプリケーション12が増加しても、コントローラ11(コントローラ#1〜#3)からのパス計算に係るメッセージがキューQAに格納されるための動作(処理)が変化することはない。MQサーバ16が、追加(増加)に係るアプリケーション12(図示せず)からの送信先情報を受けて、該当するキューQA(パス計算)から読み出したメッセージを選択的に追加に係るアプリケーション12へ配信するようになるだけである。
<複数MQサーバへのキューの割り当て>
本実施形態では、第3の問題を解決するために、MQサーバ16間で担当するキューを分割するのではなく、全てのMQサーバ16で同一のキュー構成を備える。すなわち、本実施形態では、キュー構成が同一の複数のMQサーバ16が用意される。換言すれば、本実施形態では、複数のMQサーバ16のそれぞれに、或るプロセス(コントローラ11、アプリケーション12)に提供されるメッセージを格納するキューが存在することになる。
図12は、複数のMQサーバ16が用意された例を示す。図12に示す例では、コントローラ11として、コントローラ#1及び#2が示されており、アプリケーション12として、アプリケーション#1及び#2が示されている。スイッチ2として複数のスイッチ#1〜#4が示されている。
スイッチ#1及びスイッチ#2のマスタコントローラはコントローラ#1であり、スイッチ#3及びスイッチ#4のマスタコントローラはコントローラ#2である。MQサーバ16として、同一のキュー構成を有する2つのMQサーバ#1及びMQサーバ#2が用意されている。各MQサーバ16には、各スイッチ#1〜#4に対応するキューQと、アプリケーション12によって提供される機能グループ“パス計算”に対応するキューQAとが設けられている。
同一のキューQ(QA)を有する2つのMQサーバ#1及び#2が設けられているため、情報(メッセージ)の書き込み側(コントローラ11,アプリケーション12)は、MQサーバ#1及び#2のうちの一方を選択してメッセージをキューに書き込む(メッセージを送る)ことができる。
コントローラ11及びアプリケーション12は、MQサーバ#1及び#2の双方に存在するキューQ(キューQA)から、並列的にメッセージを受け取ることができる。例えば、コントローラ#1に注目すると、コントローラ#1は、MQサーバ#1とMQサーバ#2のキューQに存在するスイッチ#1,スイッチ#2用のメッセージを並列的に受け取ることができる。
例として、スイッチ#1用のメッセージは、アプリケーション#1によってMQサーバ#1及びMQサーバ#2の一方に書き込まれ、スイッチ#2用のメッセージは、アプリケーション#1によってMQサーバ#1及びMQサーバ#2の一方に書き込まれる。
また、アプリケーション#1に注目すると、アプリケーション#1は、MQサーバ#1及びMQサーバ#2の一方に存在するパス計算用のキューQAに格納されたメッセージを並列的に受け取ることができる。
上記動作によれば、情報(メッセージ)の書き込み側(送信側:コントローラ11,アプリケーション12)は、メッセージの送信先(書き込み先のキュー)を複数のMQサーバ16からメッセージ毎に選択することができる。このため、適度に書き込み先のMQサーバ16が分散するように、MQサーバ16の選択を行うことで、MQサーバ16が増えた分だけ書き込みメッセージ処理数を増加させることができる。
また、メッセージの読み出し側(受信側:コントローラ11,アプリケーション12)は、複数のMQサーバ16からメッセージを並列的に受け取る。このため、読み出し側でも、MQサーバ16が増えた分だけ読み込みメッセージ処理数を増加させることができる。単純にキューを分割する方式(図4)と比較すると、特定のプロセス宛てのメッセージ数が多いという偏った状態であっても、本実施形態に係るキュー構成では全てのMQサーバ16を有効に利用することができる。
このように、本実施形態に係る分散コントローラを用いたネットワークシステムによれば、プロセス増減時における動作の単純化(複雑化の抑止)を図ることができるとともに、複数のMQサーバ16を用いることによるスケーラビリティ向上を図ることができる。
<構成要素の詳細な説明>
次に、上記した作用効果を奏する分散コントローラを形成するスイッチ2、コントローラ11、アプリケーション12、レジストリ14、MQサーバ16の詳細について説明する。これまでの説明で理解されるように、スイッチ2,コントローラ11,アプリケーション12,MQサーバ16は、それぞれ複数個存在し得る。
<<スイッチ>>
スイッチ2は、所定の制御プロトコル(例えば、OpenFlow)に従って、マスタコントローラに該当するコントローラ11により制御される。スイッチ2は、コントローラ11と情報の交換を行う。すなわち、スイッチ2は、コントローラ11から制御メッセージを受信し、制御メッセージに応じた動作を行う。一方、スイッチ2は、スイッチ2内で発生したイベントをコントローラに通知すべく、イベントを示す情報をコントローラ11に送信する。
図13は、スイッチ2の構成例を示す。スイッチ2は、制御プロトコル処理部21と、パケット転送部22とを含む。制御プロトコル処理部21は、コントローラ11から受信された制御メッセージに従った処理を行う。パケット転送部22は、制御メッセージに従った処理の一環として、自身が受信したパケットを所定の方路(ポート)へ送出することによって、パケットの転送処理を行う。
<<コントローラ>>
コントローラ11は、制御プロトコルを用いてスイッチ2を制御しつつ、スイッチ2で発生したイベントをアプリケーション12にMQサーバ16を介して通知する、また、コントローラ11は、アプリケーション12が送信したメッセージに従って、スイッチ2に対する制御メッセージを発行する。また、コントローラ11は、MQサーバ16とメッセージのやりとりを行う。
図14は、コントローラの構成例を示す。コントローラ11は、制御プロトコル処理部31と、レジストリ関連部32と、MQ関連部33とを含む。レジストリ関連部32は、レジストリ14と連携した処理を行う。レジストリ関連部32は、レジストリ接続部321と、コントローラ情報取得・更新部322と、スイッチ情報取得・更新部323と、MQサーバ情報取得部324と、アプリケーション情報取得部325とを含む。
レジストリ接続部321は、レジストリ14に格納(記憶)された情報を参照・取得するためにコントローラ11をレジストリ14と接続する処理を司る。コントローラ情報取得・更新部322は、レジストリ14に記憶されたコントローラ11に係る情報(コントローラ情報)を取得したり、更新したりする処理を司る。
スイッチ情報取得・更新部323は、レジストリ14に記憶されたスイッチ2に係る情報(スイッチ情報)を取得したり、更新したりする処理を司る。MQサーバ情報取得部324は、レジストリ14に記憶されたMQサーバ16に係る情報(MQサーバ情報)を取得する処理を司る。アプリケーション情報取得部325は、レジストリ14に記憶されたアプリケーション12に係る情報(アプリケーション情報)を取得する処理を司る。
MQ関連部33は、MQサーバ16と連携する処理を行う。MQ関連部33は、MQサーバ接続部331と、キュー名算出部332と、キュー作成部333と、メッセージ受信部334と、メッセージ送信部335とを含む。
MQサーバ接続部331は、MQサーバ16とのセッション確立及びセッション切断に係る処理を行う。キュー名算出部332は、MQサーバ16に備えられるキューの名称(識別子)であるキュー名を算出する処理を行う。キュー作成部333は、MQサーバ16にてキューQを作成するための処理を司る。
メッセージ受信部334は、MQサーバ16から送信されるメッセージの受信処理を司る。メッセージ送信部335は、MQサーバ16へ送る(所定のキューQAに書き込まれる)メッセージの送信処理を司る。制御プロトコル処理部31は、MQサーバ16から受信されるメッセージを用いて、配下のスイッチ2に対する制御メッセージを発行(生成)し、当該スイッチ2へ送る処理を行う。
<<アプリケーション>>
アプリケーション12は、コントローラ11からのメッセージ(例えば、或るスイッチ2でのイベント発生を示す)をMQサーバ16を介して受信し、メッセージの内容に従って、自身の固有の制御ロジック43に基づく処理(例えば、パス計算、トポロジ発見、QoS制御など)を行う。
また、アプリケーション12は、固有の制御ロジック43の処理結果としてスイッチ2の制御を行う場合には、MQサーバ16を介してコントローラ11にメッセージを送信する。さらに、アプリケーション12は、MQサーバ16とメッセージのやりとりを行う。
図15は、アプリケーションの構成例を示す図である。アプリケーション12は、レジストリ関連部41と、MQ関連部42と、上記した固有のロジック43とを含む。レジストリ関連部41は、レジストリ接続部411と、スイッチ情報取得412と、アプリケーション情報取得・更新部413と、MQサーバ情報取得部414とを含む。
レジストリ接続部411は、レジストリ14に格納(記憶)された情報を参照・取得するためにアプリケーション12をレジストリ14と接続する処理を司る。スイッチ情報取得部412は、レジストリ14に記憶されたスイッチ2に係る情報(スイッチ情報)を取得する処理を司る。
アプリケーション情報取得・更新部413は、レジストリ14に記憶されたアプリケーション12に係る情報(アプリケーション情報)を取得したり、更新したりする処理を司る。MQサーバ情報取得部414は、レジストリ14に記憶されたMQサーバ16に係る情報(MQサーバ情報)を取得する処理を司る。
MQ関連部42は、MQサーバ16と連携する処理を行う。MQ関連部42は、MQサーバ接続部421と、キュー名算出部422と、キュー作成部423と、メッセージ受信部424と、メッセージ送信部425とを含む。
MQサーバ接続部421は、MQサーバ16とのセッション確立及びセッション切断に係る処理を行う。キュー名算出部422は、MQサーバ16に備えられるキューの名称(識別子)であるキュー名を算出する処理を行う。キュー作成部423は、MQサーバ16にてキューQAを作成するための処理を司る。
メッセージ受信部424は、MQサーバ16から送信されるメッセージの受信処理を司る。メッセージ送信部425は、MQサーバ16へ送る(所定のキューQに書き込む)メッセージの送信処理を司る。
<<レジストリ>>
図16は、レジストリの構成例を示す図である。レジストリ14は、コントローラ11、アプリケーション12、スイッチ2、MQサーバ16に関する情報を格納(記憶)する。レジストリ14は、メモリ5上に作成される。レジストリ14は、コントローラ情報格納部141と、スイッチ情報格納部142と、アプリケーション情報格納部143と、MQサーバ情報格納部144と、情報変更検出部145と、情報変更通知部146とを含む。
図17は、コントローラ情報格納部141が有するテーブルのデータ構造例を示す。コントローラ情報格納部141は、コントローラ情報として、現在動作するコントローラ11のID(コントローラID)毎に生成された1以上のレコード(エントリ)を有するリストを記憶(保持)している。
レコードには、コントローラIDと関連づけられた、マスタコントローラとして管理するスイッチ2(配下のスイッチ2)のスイッチIDと、スレーブコントローラとして接続されている(セッションが確立されている)スイッチ2のスイッチIDとが記憶されている。また、各レコードに対応づけて、エラーフラグが管理される。コントローラ11の障害が検知されたとき、エラーフラグはオンに設定される。
図18は、スイッチ情報格納部142が有するテーブルのデータ構造例を示す。スイッチ情報格納部142は、コントローラ11と接続されているスイッチ2のスイッチID毎に生成された1以上のレコード(エントリ)を有するリスト(一覧)を記憶(保持)している。レコードには、スイッチIDと関連づけられた、マスタコントローラのコントローラIDと、スレーブコントローラのコントローラIDと、エラーフラグとが記憶される。エラーフラグは、対応するスイッチ2に障害が生じたときにオンとなる。
図19は、アプリケーション情報格納部143が有するテーブルのデータ構造例を示す。アプリケーション情報格納部143は、現在動作するアプリケーション12のID(アプリケーションID)毎に、当該アプリケーションIDを有するアプリケーション12によって提供されるアプリケーション機能(アプリケーションプロセス群)の種別を示す識別子(機能グループID)と、エラーフラグとを記憶(保持)している。エラーフラグは、該当するアプリケーション12の障害が検知されたときにオンとなる。
上記のように、本実施形態では、アプリケーションプロセス群の識別子(機能グループID)と、アプリケーションプロセスの識別子(アプリケーションID)とを含む。機能グループIDは、或る機能をもたらすためのアプリケーションプロセス群を特定する識別
子であり、アプリケーション機能を特定する識別子として使用される。アプリケーションプロセスの識別子はアプリケーション12自身を他のアプリケーションから区別するための固有の識別子である。
図20は、MQサーバ情報格納部144が有するテーブルのデータ構造例を示す。MQサーバ情報格納部144には、現在動作しているMQサーバ16のIPアドレス及びポート番号の一覧と、スイッチIDとキュー名との対応ルール(スイッチIDとキュー名との対応づけに係るルール)と、アプリケーション機能種別(機能グループID)とキュー名との対応ルール(機能グループIDとキュー名との対応づけに係るルール)と、エラーフラグとが格納される。エラーフラグは、障害(エラー)の生じたMQサーバ16に対してセットされる。
情報変更検出部145は、レジストリ14に記憶されたコントローラ情報,スイッチ情報,アプリケーション情報,MQサーバ情報が変更されたことを検出する処理を司る。情報変更通知部146は、情報変更検出部145にて検出された情報の変更をコントローラ11,アプリケーション12などに通知する処理を司る。
<<MQサーバ>>
図21は、MQサーバの構成例を示す図である。MQサーバ16は、メッセージングシステム15の中核になるコンポーネントである。MQサーバ16は、メッセージ受信部161と、メッセージ送信部162と、メッセージ分配先選択部163と、キュー追加・削除部164とを含んでいる。また、MQサーバ16は、接続クライアント管理部165と、送信先情報(Subscribe情報)管理部166と、複数のキューQ及びQAとを含む。
メッセージ受信部161は、コントローラ11やアプリケーション12からの情報を受信し、対応するキューQ又はQAに書き込む処理を司る。メッセージ送信部162は、送信先情報管理部166に記憶された送信先情報(送信先情報に基づく設定)に従ってキューQ又はQAの先頭から読み出される情報(メッセージ)を送信先(コントローラ11,アプリケーション12)へ送信する処理を司る。メッセージ受信部161は受信部の一例であり、メッセージ送信部162は送信部の一例である。
メッセージ分配先選択部163は、複数のアプリケーション12の何れかにキューQAに格納されたメッセージを送信する場合に、所定のルールに従って、送信先のアプリケーション12を決定する処理を司る。キュー追加・削除部164は、コントローラ11やアプリケーション12からの要求に応じて、キューの追加や削除を行う。
接続クライアント管理部165は、現在セッションが確立されているクライアント(コントローラ11,アプリケーション12)とのセッション情報(クライアントのIPアドレス,ポート番号など)を記憶する。
送信先情報管理部166は、各キューQ及びQAに格納されたメッセージの送信先を示す送信先情報を格納する。送信先情報は、例えば、コントローラ11やアプリケーション12からMQサーバ16がメッセージ受信部161で受信するsubscribe(購読)コマン
ドに含まれるsubscribe情報である。subscribe情報は、例えば、キュー名及びセッション情報(送信先のIPアドレスなど)を含む。
ここで、subscribe設定に関して説明する。subscribe設定は、コンシューマ(コントローラ11,アプリケーション12)のsubscribe宣言によって、コンシューマにより指定
されたキューQ(QA)に格納された情報(メッセージ)がコンシューマに届くようにする設定である。
コントローラ11及びアプリケーション12は、或るキューQ又はキューQAに格納された情報(メッセージ)の配信を所望する場合、subscribeコマンド(subscribe宣言)をMQサーバ16に送る。subscribeコマンドは、上記したsubscribe情報を含んでいる。
MQサーバ16は、subscribeコマンドを受け取ると、subscribe情報に含まれるキュー名を有するキューQ又はキューQAをセッション情報で特定される宛先(送信先)へ送信するためのコネクション設定を行う。コネクション設定がなされると、該当するキューQ(QA)の先頭から読み出される(プッシュされる)メッセージは、コネクションを通じて送信先へ送信される。このように、キューQ及びキューQAに格納された情報(メッセージ)は、送信先情報に基づいて送信される。
subscribeコマンドのやりとりは、MQサーバ16とコントローラ11(アプリケーシ
ョン12)とのセッション確立時、或いはセッション確立後の適宜のタイミングで実施される。subscribeコマンド中のsubscribe情報が、上記した送信先情報に相当し、キュー名がキュー指定情報に相当する。セッション情報は、送信先指定情報(指定されたキューから読み出された情報を送信先に該当するコントローラ11へ送信するための情報)に相当する。
MQサーバ16が備える複数のキューとして、MQサーバ16は、複数のスイッチのそれぞれに対応する1又は2以上のキューQと、アプリケーション機能(機能グループID)毎に設けられた1又は2以上のキューQAとを備える。
各キューQは、アプリケーション12から送信された、各キューQに対応するスイッチ2向けのメッセージを一時的に格納する。格納されたメッセージは、送信先情報を用いた送信先設定に従って、各キューQに対応するスイッチ2を制御するコントローラ11(マスタコントローラ)へ転送(配信)される。
各キューQAは、コントローラ11から送信された、各キューQAに対応するアプリケーション機能に係るメッセージを一時的に格納する。格納された情報は、送信先情報を用いた送信先設定に従って、各キューQAに対応するアプリケーション機能を提供するアプリケーション12へ転送される。
キューQ又はキューQAに格納される情報(メッセージ)は、書き込み先のキュー名(キューの識別情報:書き込み先指定情報)を含んでいる。MQサーバ16は、書き込み対象のメッセージを受信すると、当該メッセージに付与された書き込み先情報(キュー名)を参照し、該当するキューQ又はキューQAへの書き込み(格納)を行う。
<動作例>
次に、分散コントローラにおける動作例について説明する。以下に説明するコントローラ11,アプリケーション12,MQサーバ16の動作は、CPU4によるプログラムの実行によってなされる。
<<コントローラ起動時>>
図22は、コントローラの起動時におけるコントローラ11の動作例を説明するフローチャートである。01において、コントローラ11が起動すると、レジストリ接続部321がレジストリ14との接続を行う。コントローラ11のコントローラ情報取得・更新部322は、レジストリ14のコントローラ情報格納部141にコントローラ11自身のコントローラ情報を格納する。
次の02において、コントローラ11のMQサーバ情報取得部324は、レジストリ14のMQサーバ情報格納部144から、MQサーバ情報として、動作中のMQサーバ16のIPアドレス及びポート番号の一覧を取得する。
次の03において、コントローラ11のMQサーバ情報取得部324は、レジストリ14のMQサーバ情報格納部144からスイッチIDとキュー名との対応ルールを取得する。続いて、コントローラ11のスイッチ情報取得・更新部323は、レジストリ14のスイッチ情報格納部142に格納されたスイッチ情報を取得する。コントローラ11のキュー名算出部332は、スイッチ情報を参照と対応ルールとを用いて、自身がマスタコントローラに該当するスイッチ2のスイッチIDから対応するキュー名を生成する。
次の04において、コントローラ11のMQサーバ接続部331は、02の処理で得られたIPアドレス及びポート番号を用いて、動作中の全てのMQサーバ16とのセッションを確立する。
次の05において、コントローラ11は、03にて生成したキュー名を有するキューがMQサーバ16に存在するかを確認する。当該確認は、MQサーバ16に対して問合せを行っても良く、レジストリ14のMQサーバ情報に、キュー名とスイッチとの対応関係が保持されるようにして、当該対応関係を参照するようにしても良い。
このとき、MQサーバ16において、03で生成したキュー名を有するキューQが存在しない場合には(05,NO)、コントローラ11のキュー作成部333は、生成したキュー名のキューをMQサーバ16に依頼する(06)。MQサーバ16のキュー追加・削除部164は、依頼に従ってキューQを作成する。
07に処理が進んだ場合には、コントローラ11が制御するスイッチ2に対応するキューQに関して、subscribe設定が済んでいるか否かを判定する。subscribe設定が済んでいない場合には(07,NO)、コントローラ11は、subscribeコマンドをMQサーバ1
6に送り、所定のキュー中のメッセージが自身に送信されるようにする(08)。subscribe設定が終了すると、起動時における処理が終了する。なお、コントローラ11の増加
時におけるコントローラ11の動作は、コントローラ起動時の動作に準じる。
<<コントローラ終了時>>
次に、コントローラ11の終了時におけるコントローラ11の動作例を説明する。図23は、コントローラの終了時における動作例を示すフローチャートである。
11において、コントローラ11のレジストリ接続部321は、レジストリ14との接続を行い、コントローラ情報取得・更新部322は、レジストリ14のコントローラ情報格納部141からコントローラ11自身のコントローラ情報を削除する。
次の12において、コントローラ11は、配下のスイッチ2の全てとの接続を切断する。次の13において、コントローラ11は、スイッチ情報取得・更新部323によって、レジストリ14のスイッチ情報142を更新する(スイッチ2との切断を反映した内容に書き換える)。次の14において、コントローラ11は、全てのMQサーバ16との接続(セッション)を切断する。そして、終了時の処理が終了する。
<<スイッチとの接続時>>
次に、スイッチ2との接続時におけるコントローラ11の動作例について説明する。図24は、スイッチとの接続時におけるコントローラの動作例を示すフローチャートである。
最初の21において、コントローラ11のレジストリ接続部321は、レジストリ14に接続し、スイッチ情報取得・更新部323は、レジストリ14のスイッチ情報格納部142から該当するスイッチ情報(図18参照)を取得する。
次の22において、コントローラ11のスイッチ情報取得・更新部323は、スイッチ情報を参照し、接続されたスイッチ2がまだどのコントローラ11にも接続されていないか否かを判定する。スイッチ2が未接続の場合(22,YES)には、自身と当該スイッチ2との接続を示すスイッチ情報を、レジストリ14のスイッチ情報格納部142に格納する(23)。そうでない場合には(22,NO)、スイッチ情報取得・更新部323は、スイッチ情報格納部142に格納されている既存のスイッチ情報を更新する(24)。すなわち、コントローラ11は、当該スイッチ2との接続が他のコントローラ11から自身に変更されたことを示す情報を書き込む)。
次の25において、コントローラ11のキュー名算出部332は、既に説明した手法を用いて、接続されたスイッチ2のスイッチIDからキュー名を生成する。次の26において、コントローラ11は、25で作成したキュー名を有するキューがMQサーバ16に存在するかを確認する。
このとき、キュー名に該当するキューがMQサーバ16に存在しない場合には(26,NO)、コントローラ11のキュー作成部333は、生成したキュー名でのキュー作成を動作中の全てのMQサーバ16に依頼する(27)。MQサーバ16のキュー追加・削除部164は、依頼に従ってキューQを作成する。
次の28で、コントローラ11は、作成されたキューQに対するsubscribe設定を行う
。自身が制御するスイッチ2に対応する1以上のキューQに関して、MQサーバ16がコントローラ11からsubscribeコマンド(subscribe宣言)を受け取ると、MQサーバ16は、当該キューQに格納されるメッセージに関して、宣言を行ったコントローラ11に当該キューQから読み出されるメッセージを送信する設定が行われる。なお、28の処理(subscribe設定)は、コントローラ11が接続されたスイッチ2のマスタコントローラと
なる場合に行われ、スレーブとしての接続では行われない。
<<スイッチとの切断時>>
次に、スイッチ2との切断時におけるコントローラの動作例について説明する。図25は、スイッチ2との切断時におけるコントローラの動作例を示すフローチャートである。
最初の31において、コントローラ11のレジストリ接続部321は、レジストリ14との接続を行い、スイッチ情報取得・更新部323は、レジストリ14のスイッチ情報格納部142から切断に係るスイッチ2のスイッチ情報を取得する。
次の32において、コントローラ11のスイッチ情報取得・更新部323は、スイッチ情報を参照し、スイッチ2が他のコントローラ11と接続しているか否かを判定する。他のコントローラ11と接続されている場合(32,YES)には、33において、既存のスイッチ情報を更新する(自身とスイッチ2との接続に係る情報のみを削除する)。
スイッチ2が他のコントローラ11と接続されていない場合(他に接続されたコントローラ11が存在しない場合)には(32,NO)、スイッチ情報取得・更新部323は、当該スイッチ2のスイッチ情報を削除する(34)。さらに、コントローラ11は、スイッチ2に対応するキューQの削除を各MQサーバ16に依頼する(35)。各MQサーバ16は、該当するキューQを削除する。
<<アプリケーション起動時>>
次に、アプリケーション12の起動時におけるアプリケーション12の動作例について説明する。図26は、アプリケーションの起動時におけるアプリケーションの動作例を示すフローチャートである。
最初の41において、アプリケーション12のレジストリ接続部411がレジストリ14との接続を行い、アプリケーション情報取得・更新部413がアプリケーション情報格納部143に対し、アプリケーション12自身のアプリケーション情報を格納する。
次の42において、アプリケーション12のMQサーバ情報取得部414は、レジストリ14のMQサーバ情報格納部144から、動作中のMQサーバ16のIPアドレス及びポート番号を取得する。
次の43において、アプリケーション12のMQサーバ情報取得部414は、レジストリ14のMQサーバ情報格納部144から、アプリケーション機能種別(機能グループID)とキューQAとの対応ルールを取得する。キュー名算出部422は、アプリケーション12自身が属するアプリケーション機能種別に対応するキュー名を生成する。
次の44において、アプリケーション12は、MQサーバ接続部421によって、42で得たIPアドレス及びポート番号を用いて、動作中の全てのMQサーバ16とのセッションを確立する。
このとき、MQサーバ16において、43で生成したキュー名を有するキューQが存在しない場合には(45,NO)、アプリケーション12のキュー作成部423は、生成したキュー名のキューの作成をMQサーバ16に依頼する。MQサーバ16のキュー追加・削除部164は、依頼に従ってキューQAを作成する。
47に処理が進んだ場合には、アプリケーション12は、対応するキューQAに関して、subscribe設定が済んでいるか否かを判定する。subscribe設定が済んでいない場合には(47,NO)、アプリケーション12は、subscribeコマンドをMQサーバ16に送り
、所定のキューQA中のメッセージが自身に送信されるようにする(48)。subscribe
設定が終了すると、起動時における処理が終了する。なお、アプリケーション12の増加時におけるアプリケーション12の動作は、上述したアプリケーション起動時の動作に準じる。
<<アプリケーション終了時>>
次に、アプリケーション12の終了時におけるアプリケーション12の動作例について説明する。図27は、アプリケーション12の終了時におけるアプリケーション12の動作例を示すフローチャートである。
最初の51において、アプリケーション12のレジストリ接続部411がレジストリ14との接続を行い、アプリケーション情報取得・更新部413が、レジストリ14のアプリケーション情報格納部143から自身のアプリケーション情報を削除する。
次の52において、アプリケーション12、全てのMQサーバ16との接続(セッション)を切断する。その後、図27の処理が終了する。
<<MQサーバ起動時>>
次に、MQサーバ16の起動時におけるMQサーバ16の動作例について説明する。図
28は、MQサーバ16の起動時におけるMQサーバ16の動作例を示すフローチャートである。51において、MQサーバ16は、レジストリ14との接続を行い、レジストリ14のMQサーバ情報格納部144に自身のMQサーバ情報を格納する。
<<MQサーバ終了時>>
次に、MQサーバ16の終了時におけるMQサーバ16の動作例について説明する。図29は、MQサーバ16の終了時におけるMQサーバ16の動作例を示すフローチャートである。56において、MQサーバ16は、レジストリ14との接続を行い、レジストリ14のMQサーバ情報格納部144から自身のMQサーバ情報を削除する。
<<スイッチの非同期イベントの発生時>>
或るスイッチ2において非同期イベントが発生した場合におけるコントローラ11(或るスイッチ2のマスタコントローラ)における動作例について説明する。図30は、非同期イベント発生時におけるコントローラの動作例を示すフローチャートである。
最初の61において、コントローラ11の制御プロトコル処理部31が、スイッチ2における非同期イベントの発生を検知する。例えば、制御プロトコル処理部31は、スイッチ2からのイベント発生を示す通知を受領することで、イベント発生を検知することができる。
次の62において、コントローラ11のレジストリ接続部321は、レジストリ14への接続を行う。MQサーバ情報取得部324は、MQサーバ情報格納部144からMQサーバ情報を取得し、MQサーバ16のIPアドレス及びポート番号の一覧を得る。
次の63において、MQサーバ情報取得部324は、レジストリ14のMQサーバ情報格納部144からアプリケーション機能種別(機能グループID)とキュー名の対応ルールを取得する。次の64において、コントローラ11のキュー名算出部322は、非同期イベントに対応するアプリケーション機能種別(機能グループID)に対応するキュー名をMQサーバ16から得られた対応ルールを用いて生成する。
次の65において、コントローラ11は、62で取得したMQサーバ16のIPアドレス及びポート番号の一覧から、1つのMQサーバ16を選択する。次の66において、コントローラ11は、非同期イベントの発生を対応するアプリケーション機能を提供するアプリケーション12に通知するためのメッセージを作成する。そして、67において、コントローラ11のメッセージ送信部425は、66で作成したメッセージを65で選択したMQサーバ16に送信する。メッセージは、当該メッセージに付与されたキュー名に基づいて、MQサーバ16に設けられたキューQA(非同期イベントに対応するアプリケーション機能と対応づけられたキューQA)に格納される。
<<MQサーバからのメッセージ受信時(コントローラ)>>
次に、MQサーバ16からメッセージを受信した際におけるコントローラ11の動作例について説明する。図31は、MQサーバ16からメッセージを受信したコントローラ11の動作例を示すフローチャートである。
71において、メッセージ受信部334がMQサーバ16から送信されたメッセージを受信する。すると、制御プロトコル処理部31が、受信したメッセージが格納されていたキューQに対応するスイッチ2に対して制御メッセージを発行する(72)。制御メッセージは、該当するスイッチ2に送られる。
<<MQサーバからのメッセージ受信時(アプリケーション)>>
次に、MQサーバ16からメッセージを受信した際におけるアプリケーション12の動作例について説明する。図32は、MQサーバからメッセージを受信したアプリケーションの動作例を示すフローチャートである。
74において、メッセージ受信部424は、MQサーバ16から送信されたメッセージを受信する。すると、75において、アプリケーション12は、受信されたメッセージの内容を解釈し、解釈の結果に従って、固有の制御ロジック43に応じた処理を実行する。
<<アプリケーションからスイッチへの制御をする場合の動作例>>
図33は、アプリケーション12が或るスイッチ2の制御を行う場合におけるアプリケーション12の動作例を示すフローチャートである。
最初の81において、アプリケーション12のレジストリ接続部411は、レジストリ14への接続処理を行い、スイッチ情報取得部412が、スイッチ情報格納部142からのスイッチ情報を用いて、制御を行うスイッチ2のスイッチIDを決定する。
次の82において、アプリケーション12のMQサーバ情報取得部414は、レジストリ14のMQサーバ情報格納部144からスイッチIDとキューとの対応ルールを得て、キュー名算出部422は、制御対象のスイッチ2のスイッチIDに対応するキュー名を求める。
次の83において、アプリケーション12のMQサーバ情報取得部414は、MQサーバ情報格納部144からMQサーバ情報を取得することで、MQサーバ16のIPアドレス及びポート番号の一覧を得る。
次の84において、アプリケーション12は、83で取得したMQサーバ16のIPアドレス及びポート番号の一覧から、1つのMQサーバ16を選択する。次の85において、アプリケーション12は、スイッチ2を制御するためのメッセージを作成する。
次の86において、アプリケーション12は、作成したメッセージを、選択したMQサーバ16に送信する。メッセージには、キュー名が含まれており、MQサーバ16は、キュー名を有するキューQに受信されたメッセージを格納する。
<コントローラの数の変化時における動作>
次に、コントローラ11の数が増加又は減少した場合における動作例について説明する。
<<コントローラ増加時>>
以下、新規のコントローラ11の追加によって、コントローラ11の数が増加した場合の動作例について説明する。追加時の動作は、コントローラ11の起動時における動作と重複する部分を有する。図34は、コントローラの数が増加した場合の動作例を示すフローチャートである。
最初の91では、 追加に係るコントローラ11のレジストリ接続部321は、レジストリ14への接続(アクセス)を行い、コントローラ11自身のコントローラ情報(コントローラIDなど)を、レジストリ14のコントローラ情報格納部141に格納(追加)する。
次の92では、追加に係るコントローラ11が既存のコントローラ11から或るスイッチ2についての制御を引き継ぐか否かを判定する。このとき、追加に係るコントローラ1
1が既存のコントローラ11から或るスイッチ2についての制御を引き継ぐ(或るスイッチ2のマスタコントローラとなる)場合には(92,YES)、処理が93に進み、そうでなければ(92,NO)、処理が94に進む。
93に処理が進んだ場合には、コントローラ11のスイッチ情報取得・更新部323は、レジストリ14のスイッチ情報格納部142にアクセスし、或るスイッチ2のマスタコントローラに係る情報を更新する。具体的には、或るスイッチ2のマスタコントローラが自身であり、既存のコントローラ11が或るスイッチのスレーブコントローラであることを示す情報を格納する。その後、処理が94に進む。
94に処理が進むと、追加に係るコントローラ11のMQサーバ情報取得部324は、レジストリ14のMQサーバ情報格納部144からMQサーバ情報を取得することで、接続先のMQサーバ16のIPアドレス及びポート番号の一覧を得る。
次の95において、追加に係るコントローラ11は、94で得たMQサーバのIPアドレス及びポート番号の一覧を用いて各MQサーバ16とのセッションを確立する。次の96において、コントローラ11のキュー名算出部332は、自身がマスタコントローラとして制御するスイッチ2のスイッチIDと、レジストリ14から得たスイッチIDとキュー名との対応ルールとを用いてキュー名を生成する。このとき、コントローラ11が複数のスイッチ2に対する制御を行う場合には、各スイッチ2に対するキュー名が生成される。
次の97では、MQサーバ16において、96で生成したキュー名を有するキューQが存在するか否かが判定される。このとき、MQサーバ16において、手順3で生成したキュー名を有するキューQが存在しない場合には(97,NO)、コントローラ11のキュー作成部333は、生成したキュー名のキューをMQサーバ16に依頼する(98)。MQサーバ16のキュー追加・削除部164は、依頼に従ってキューQを作成する。
次の99では、コントローラ11は、生成したキュー名を有するキューQに格納されるメッセージのSubscribe(購読)を行う。すなわち、コントローラ11は、購読情報(Subscribe情報)を含むSubscribeコマンドを生成し、MQサーバ16へ送る。購読情報は、
メッセージの購読を所望するキュー名と、メッセージの送信先の情報(例えば、コントローラ11とMQサーバ16とのセッション情報)とを含む。
MQサーバ16は、Subscribeコマンドを受け取ると、当該コマンド中の購読情報をキ
ューQに格納されるメッセージの送信先情報として、購読情報管理部166に格納する。MQサーバ16とコントローラ11とは、該当するキューQの先頭から読み出されるメッセージをコントローラ11へ送信するコネクションの設定を行う。コネクションの設定によって、当該キューQの先頭からメッセージが読み出されたとき、当該メッセージは、予め設定されたコネクションを用いて送信先のコントローラ11へ送られる。
このように、本実施形態では、コントローラ11がSubscribeコマンド(購読情報:送
信先情報の一例)をMQサーバ16に送り、購読情報に基づくコネクションが設定される。これによって、コネクション設定後は、キューQから読み出されるメッセージに関して個々の宛先判定が行われることなく、送信先の(Subscribe宣言を行った)コントローラ
11へメッセージが送信される。
次の100では、追加に係るコントローラ11のアプリケーション情報取得部325は、レジストリ14のアプリケーション情報格納部143に格納されているアプリケーションプロセス群(アプリケーション機能)の識別情報(機能グループID)を取得し、キュ
ー名算出部332がアプリケーション機能に対応するキュー名を作成する。当該キュー名は、MQサーバ16に設けられるアプリケーション12宛てのメッセージを格納するキューQAのキュー名であり、アプリケーション12向けのメッセージをMQサーバ16を介して対応するアプリケーション12へ送るときに使用される。
[レジストリの情報更新に係る処理]
上述のように、レジストリ14では、コントローラ情報格納部141,スイッチ情報格納部142,アプリケーション情報格納部143,MQサーバ情報格納部144に格納された情報が更新(変更)されると、当該変更が情報変更検出部145によって検出される。すると、情報が変更されたことが情報変更通知部146によって各コントローラ11に通知される。
典型的には、スイッチ2,コントローラ11,アプリケーション12,MQサーバ16の動作ないし処理が所定の監視機能によって監視されており、これらに障害(エラー)が発生した場合には、レジストリ14における対応箇所のエラーフラグがオンになる。エラーフラグがオンになったことは、情報の更新として情報変更検出部145により検出され、当該更新を示す(所定箇所のエラー発生)が所定の通知先(コントローラ11など)に通知される。このようにして、各コントローラ11は、レジストリ14に格納された情報の変更を検知することができ、変更(更新)の内容に応じて以下の動作を行う。
[[自身がマスタコントローラとして管理するスイッチの情報が更新された場合]]
(1)スイッチ数の減少時
スイッチ情報の更新が通知された場合には、コントローラ11は、レジストリのスイッチ情報格納部142に格納されたスイッチ情報を参照する。このとき、自身がマスタコントローラとなっているスイッチの情報が削除、或いはエラーフラグが設定されている(スイッチ2の数が減少している)場合には、コントローラ11は、以下の動作を行う。
すなわち、コントローラ11は、減少に係るスイッチ2に対応するキューQに対するSubscribe設定を解除するコマンドをMQサーバ16に送る。これにより、該当のキューQ
からのメッセージの送信が停止される。
(2)スイッチ数の増加時
スイッチ情報の更新によってスイッチ2の数が増加している場合であって、且つ自身が当該スイッチ2のマスタコントローラに設定されている場合には、コントローラ11は、増加に係るスイッチ2に対応するキューQに対するSubscribe設定を行う。これによって
、コントローラ11は、当該キューQから読み出されて送信されてくるメッセージを受信することができる。
[[動作しているMQサーバの数が減少した場合]]
動作中のMQサーバ16の数の減少(例えば、MQサーバ16の削除)によってレジストリ14のMQサーバ情報が更新されている場合には、コントローラ11は、減少に係るMQサーバとのセッションを切断する。
[[動作しているMQサーバの数が増加した場合]]
動作中のMQサーバ16の数の増加によってレジストリ14のMQサーバ情報が更新されている場合には、コントローラ11は、MQサーバ情報を用いて、増加に係る各MQサーバ16に対する接続処理を行い、各MQサーバ16とのセッションを確立する。これによって、複数のMQサーバ16から並列的にメッセージを受信可能となる。
[[アプリケーションの増加・減少時]]
アプリケーションプロセス群(アプリケーション機能)の増加又は減少によって、レジストリ14のアプリケーション情報が更新された場合には、コントローラ11は、当該アプリケーション情報を用いて、コントローラ11内部で保持しているアプリケーションプロセス群(機能グループID)に対応するキュー名を更新する。
すなわち、各コントローラ11は、コントローラ11からアプリケーション12向けにメッセージを送信する(キューQAにメッセージを格納させる)ために、メッセージの送信先の機能グループIDに対応するキュー名を保持している。アプリケーション機能増加の場合(キューQA増加)には、コントローラ11は、コントローラ11内で保持するキューQAのキュー名(メッセージの送信先情報)に、増加に係るキューQAのキュー名を求めて追加し、アプリケーション機能減少(キューQA削除)の場合には、該当するキュー名を削除する。
[[配下スイッチからのイベント通知受信時]]
また、コントローラ11自身がマスタコントローラとして管理するスイッチ2からイベントが通知された場合には、コントローラ11は、以下の通りに動作する。すなわち、コントローラ11は、確立済みの複数のMQサーバ16とのセッションのうちから1つを選択する。コントローラ11は、当該セッションを用いて、コントローラ11内でキュー名が保持されているキューQAに、スイッチ2からのイベントが発生したことを示すメッセージを書き込む。
また、コントローラ11自身がSubscribeしているキューQからメッセージが受信され
た場合には、コントローラ11は、以下の通りに動作する。すなわち、受信されたメッセージの内容に応じて、制御プロトコル処理部31が、受信されたメッセージの内容に応じた制御メッセージを発行し、該当するスイッチ2に送る。
<<コントローラ減少時>>
次に、コントローラ11が障害等によって減少した場合の動作例について説明する。図35は、コントローラ11が障害等によって減少した場合の動作例を示すフローチャートである。以下の動作例の説明において、図8に示すコントローラ#1〜#3,スイッチ#1〜#6,MQサーバ16の関係を想定する。
複数のコントローラ11のうちの1つ(コントローラ#3)に障害が発生した場合、所定の監視機能によって、当該コントローラ#3の障害を示す情報がレジストリ14に書き込まれる。具体的には、レジストリ14のコントローラ情報格納部141(図17に示す内容を有している)において、コントローラ#3に関してエラーフラグがセットされる。
このようなエラーフラグのセットは、情報変更検出部145にてコントローラ情報の変更として検知され、情報変更通知部146によって、コントローラ情報の変更通知が残りのコントローラ11(コントローラ#1及び#2)に通知される。
111において、各コントローラ#1,#2は、コントローラ情報の変更通知を受信すると、レジストリ14との接続を行い、コントローラ情報格納部141の内容(図17)を参照する。これにより、各コントローラ#1,#2は、コントローラ#3に対して設定されたエラーフラグの参照によって、コントローラ#3の障害を検知することができる(132)。
次に、各コントローラ#1,#2は、自身がコントローラ#3が行っていたスイッチ制御の引き継ぎを要するか否かを判定する(113)。引き継ぎを要する場合には(113,YES)、処理が114へ進み、引き継ぎを要しない場合には、図35の処理が終了す
る。
具体的には、コントローラ#1は、コントローラ情報格納部141(図17)の参照において、コントローラ#1(自身)は、コントローラ#3がマスタコントローラとして制御していたスイッチ#6とスレーブ接続されていないため、引き継ぎ不要と判定し、処理を終了する。
これに対し、コントローラ#2は、コントローラ情報格納部141(図17)の参照において、コントローラ#2(自身)は、コントローラ#3がマスタコントローラとして制御していたスイッチ#6とスレーブ接続されているため、引き継ぎ要と判定する。
なお、この例では、引き継ぎ対象のスイッチ2とスレーブ接続されたコントローラ11がコントローラ#2のみである例について説明している。もし、スレーブ接続された複数のコントローラ11がある場合には、所定の優先順位や、コントローラ11間のネゴシエーションによって、マスタ設定を引き継ぐコントローラ11が決定される。
コントローラ#2は、次の114において、レジストリ14のコントローラ情報格納部141の内容を更新する。例えば、コントローラ情報格納部141のコントローラ#2のレコードにおいて、「マスタ」にスイッチ#6を加え、「スレーブ」からスイッチ#6を削除する。
また、コントローラ#2は、コントローラ#3に係るレコードの「マスタ」から、スイッチ#6を削除する。さらに、コントローラ#2は、スイッチ情報格納部142(図18参照)を参照し、スイッチ#6のレコードに関して、「マスタ」を“CNT#2”に変更し、「スレーブ」から“CNT#2”を削除する更新を行う。
次の115では、コントローラ#2は、スイッチ#6に対応するキューQについてのsubscribe設定をMQサーバ16に対して行う。これによって、スイッチ#6向けのメッセ
ージがMQサーバ16からコントローラ#2へ送られるようになる。
次の116では、コントローラ#2は、アプリケーション機能に対応するキュー名を、これまでに説明した手法(図34の100)と同様の手法で作成する。これにより、コントローラ#2は、スイッチ#6からイベント発生通知を受け取ったときに、当該イベントに対応するアプリケーション機能と対応するキュー名を割り出すことができる。但し、当該処理は、スイッチ#6から実際にイベント発生通知を受信したときに行うようにしても良い。
以上のように、コントローラ11は、レジストリ14に記憶されたスイッチ情報に同期して、subscribe設定を行うキューを増やしたり、減らしたりすることで、コントローラ
11の増減に対応することができる。
なお、図34に示した94の処理と95の処理は順序が逆であっても良い。また、図22に示した03の処理と04の処理も順序が逆であっても良い。
<アプリケーションプロセス数の変化時の動作>
<<アプリケーション増加時>>
アプリケーションプロセス(アプリケーション12)が増加した場合アプリケーション12の動作フローは、アプリケーション12の起動時における動作(図26)とほぼ同様であるので説明を省略する。
アプリケーション12は、レジストリ14の情報変更通知を受け取ることで以下の動作を行うことができる。
[[スイッチ情報の情報変更通知の受信]]
アプリケーション12は、スイッチ情報の情報変更通知を受け取ると、レジストリ14からスイッチ情報を取得する。このとき、スイッチ2が増減している場合には、アプリケーション12は、MQサーバ16への送信用に自身が保持しているキュー名の更新処理を行う。すなわち、或るスイッチ2が削除されている場合には、アプリケーション12は、当該スイッチ2に対応するキュー名を削除する。これに対し、或るスイッチ2が追加されている場合には、これまでに説明した手法で、追加に係るスイッチIDからキュー名を作成して保持する。
[[MQサーバの増減]]
動作中のMQサーバ16の数が減少した(或るMQサーバ16が削除された)場合には、アプリケーション12は、当該MQサーバ16とのセッションを切断する。これに対し、MQサーバ16の数が増加した場合には、当該MQサーバ16に対する接続を行い、セッションを確立する。
[[キューからのメッセージ受信時、スイッチ制御時]]
アプリケーション12は、subscribeしているキューQAからのメッセージを受信した
場合には、図32に示した動作を行う。また、アプリケーション12は、或るスイッチ2に対する制御を所望する場合、図33に示す処理を行う。
<<アプリケーション減少時>>
次に、アプリケーション12の数が減少した場合の動作例について説明する。複数のアプリケーション12のうちの1つが終了や削除によって消滅した場合には、当該アプリケーション12とMQサーバ16とのセッションが切断される。これによって、MQサーバ16は、当該アプリケーションへメッセージの配信を行わなくなる。
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)複数のコントローラがアプリケーションからの情報に基づいて複数のスイッチを制御するネットワークシステムに設けられるサーバであって、
スイッチ単位で設けられ、それぞれが自身に対応するスイッチに向けられた前記アプリケーションからの情報を格納する複数のキューと、
キューの指定情報と当該指定情報によって指定されたキューから読み出される情報を当該情報の送信先に該当するコントローラへ送信するための情報とを含む送信先情報を前記各コントローラから受信する受信部と、
前記複数のキューのそれぞれから読み出される情報を、前記送信先情報に従って前記各キューに対応するスイッチを制御する前記複数のコントローラの1つへ送信する送信部とを含むサーバ。(1)
(付記2)前記受信部は、前記複数のコントローラの数の減少又は増加によって前記複数のスイッチの少なくとも1つを制御するコントローラが変更されたときに、当該変更によって前記複数のスイッチの少なくとも1つを制御する少なくとも1つのコントローラから前記送信先情報を受信し、
前記送信部は、前記少なくとも1つのコントローラから受信された前記送信先情報に従って、前記複数のスイッチの少なくとも1つに対応するキューから読み出される情報を前記少なくとも1つのコントローラへ送信する
付記1に記載のサーバ。(2)
(付記3)前記ネットワークシステムに複数個設けられ、それぞれが前記複数のキュー,前記受信部,及び前記送信部を含む
請求項1又は2に記載のサーバ。
(付記4)アプリケーションからの情報に基づいてスイッチを制御するとともに前記スイッチに関する情報であるスイッチ関連情報をアプリケーション向けに送信するコントローラを含むネットワークシステムに設けられるサーバであって、
アプリケーションによって提供される機能単位で設けられ、それぞれが自身に対応する機能と関連する前記スイッチ関連情報を格納する複数のキューと、
キューの指定情報と当該指定情報によって指定されたキューから読み出されるスイッチ関連情報を当該スイッチ関連情報の送信先に該当するアプリケーションへ送信するための情報とを含む送信先情報をアプリケーションから受信する受信部と、
前記複数のキューのそれぞれから読み出される前記スイッチ関連情報を、前記送信先情報に従って当該スイッチ関連情報に関連する機能を提供するアプリケーションへ送信する送信部と
を含むサーバ。(3)
(付記4) 前記コントローラは、キューの指定情報を含む前記スイッチ関連情報を前記サーバに送信し、前記スイッチ関連情報は前記キューの指定情報に従って、前記スイッチ関連情報と関連する前記機能に対応するキューに格納される
付記3に記載のサーバ。
(付記5) 前記ネットワークシステムに複数個設けられ、それぞれが前記複数のキュー,前記受信部,及び前記送信部を含む
付記4に記載のサーバ。
1・・・ネットワーク
2・・・スイッチ
3・・・サーバ
4・・・CPU
5・・・メモリ
6・・・通信インタフェース
11・・・コントローラ
12・・・アプリケーション
14・・・レジストリ
16・・・メッセージキューサーバ(MQサーバ)

Claims (3)

  1. 複数のコントローラがアプリケーションからの情報に基づいて複数のスイッチを制御するネットワークシステムに設けられるサーバであって、
    スイッチ単位で設けられ、それぞれが自身に対応するスイッチに向けられた前記アプリケーションからの情報を格納する複数のキューと、
    キューの指定情報と当該指定情報によって指定されたキューから読み出される情報を当該情報の送信先に該当するコントローラへ送信するための情報とを含む送信先情報を前記各コントローラから受信する受信部と、
    前記複数のキューのそれぞれから読み出される情報を、前記送信先情報に従って前記各キューに対応するスイッチを制御する前記複数のコントローラの1つへ送信する送信部とを含むサーバ。
  2. 前記受信部は、前記複数のコントローラの数の減少又は増加によって前記複数のスイッチの少なくとも1つを制御するコントローラが変更されたときに、当該変更された少なくとも1つのコントローラから前記送信先情報を受信し、
    前記送信部は、前記少なくとも1つのコントローラから受信された前記送信先情報に従って、前記複数のスイッチの少なくとも1つに対応するキューから読み出される情報を前記少なくとも1つのコントローラへ送信する
    請求項1に記載のサーバ。
  3. アプリケーションからの情報に基づいてスイッチを制御するとともに前記スイッチに関する情報であるスイッチ関連情報をアプリケーション向けに送信するコントローラを含むネットワークシステムに設けられるサーバであって、
    アプリケーションによって提供される機能単位で設けられ、それぞれが自身に対応する機能と関連する前記スイッチ関連情報を格納する複数のキューと、
    キューの指定情報と当該指定情報によって指定されたキューから読み出されるスイッチ関連情報を当該スイッチ関連情報の送信先に該当するアプリケーションへ送信するための情報とを含む送信先情報をアプリケーションから受信する受信部と、
    前記複数のキューのそれぞれから読み出される前記スイッチ関連情報を、前記送信先情報に従って当該スイッチ関連情報に関連する機能を提供するアプリケーションへ送信する送信部と
    を含むサーバ。
JP2014036075A 2014-02-26 2014-02-26 サーバ Active JP6197692B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014036075A JP6197692B2 (ja) 2014-02-26 2014-02-26 サーバ
US14/628,793 US10382349B2 (en) 2014-02-26 2015-02-23 Server for distributed controller system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014036075A JP6197692B2 (ja) 2014-02-26 2014-02-26 サーバ

Publications (2)

Publication Number Publication Date
JP2015162029A JP2015162029A (ja) 2015-09-07
JP6197692B2 true JP6197692B2 (ja) 2017-09-20

Family

ID=53883407

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014036075A Active JP6197692B2 (ja) 2014-02-26 2014-02-26 サーバ

Country Status (2)

Country Link
US (1) US10382349B2 (ja)
JP (1) JP6197692B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10361985B1 (en) * 2016-09-22 2019-07-23 Amazon Technologies, Inc. Message processing using messaging services
CN107872479B (zh) * 2016-09-26 2021-06-18 中国电信股份有限公司 云管理平台与控制器集成方法和系统以及相关模块
US10860614B2 (en) * 2018-03-19 2020-12-08 Landis+Gyr Innovations, Inc. Partitioning data in a clustered database environment
KR102090561B1 (ko) * 2018-05-24 2020-03-18 주식회사 티맥스소프트 클라우드 환경에서 웹 서버와 was를 오토 스케일하는 방법 및 이를 사용한 was 관리자 서버

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5179556A (en) * 1991-08-02 1993-01-12 Washington University Bandwidth management and congestion control scheme for multicast ATM networks
JPH07200494A (ja) 1993-12-28 1995-08-04 Mitsubishi Electric Corp 分散制御方式
CA2138301C (en) * 1994-01-21 1998-12-15 Hal Hjalmar Ottesen Apparatus and method for providing multimedia data
US6289021B1 (en) * 1997-01-24 2001-09-11 Interactic Holdings, Llc Scaleable low-latency switch for usage in an interconnect structure
US6484207B1 (en) * 1998-11-17 2002-11-19 Cisco Technology, Inc. Switching system having interconnects dedicated to store and retrieve data including management of dedicated memory segments allocated when a general memory is depleted
GB9828144D0 (en) * 1998-12-22 1999-02-17 Power X Limited Data switching apparatus
US6778536B1 (en) * 1999-11-09 2004-08-17 Synchrodyne Networks, Inc. Combined wavelength division multiplexing, time division multiplexing, and asynchronous packet switching with common time reference
EP1300792A3 (de) * 2001-07-20 2003-09-03 Siemens Aktiengesellschaft Computergestützten Verfahren und Anordnung zur Überwachung einer Nutzung von Lizenzen
US20040083326A1 (en) * 2002-10-29 2004-04-29 Yuanlong Wang Switch scheduling algorithm
US20040090964A1 (en) * 2002-11-07 2004-05-13 Coke Reed Means and apparatus for a scaleable congestion free switching system with intelligent control II
KR20080039021A (ko) * 2006-10-31 2008-05-07 삼성전자주식회사 집적 회로 시스템 및 그 제어 방법
US9178833B2 (en) * 2011-10-25 2015-11-03 Nicira, Inc. Chassis controller
US9548933B2 (en) * 2012-03-05 2017-01-17 Nec Corporation Network system, switch, and methods of network configuration
JPWO2014010723A1 (ja) * 2012-07-13 2016-06-23 日本電気株式会社 スイッチ、通信システム、スイッチ制御方法及びプログラム

Also Published As

Publication number Publication date
US10382349B2 (en) 2019-08-13
JP2015162029A (ja) 2015-09-07
US20150244782A1 (en) 2015-08-27

Similar Documents

Publication Publication Date Title
JP2018523932A (ja) 負荷バランシングコンピュータデバイス、システム、および方法
US10880248B2 (en) Orchestrator agnostic application container visibility
CN105095317B (zh) 分布式数据库服务管理系统
CN108023812B (zh) 云计算系统的内容分发方法及装置、计算节点及系统
JP5866083B1 (ja) ソフトウェア定義ネットワークにおける制御方法、制御装置およびプロセッサ
JP6197692B2 (ja) サーバ
US10862794B2 (en) Automated link aggregation group configuration system
JP5352367B2 (ja) 仮想マシン起動端末および仮想マシン起動プログラム
JP2012533129A (ja) 仮想ネットワークの高性能で自動化された管理方法及びシステム
US11736403B2 (en) Systems and methods for enhanced autonegotiation
WO2013146808A1 (ja) コンピュータシステム、及び通信経路変更方法
WO2021120633A1 (zh) 一种负载均衡方法及相关设备
JP2017529768A (ja) ネットワークサービス認識ルータ及びそれらの応用
CN112637265B (zh) 一种设备管理方法、装置及存储介质
JP4309321B2 (ja) ネットワークシステムの運用管理方法及びストレージ装置
JP5200424B2 (ja) 情報の管理方法及び情報処理装置
KR20150085464A (ko) 서버 연결 장치 및 방법
US20150200813A1 (en) Server connection apparatus and server connection method
JP2014187430A (ja) 通信システム、中継装置、通信方法、及びプログラム
US10764213B2 (en) Switching fabric loop prevention system
JP2020114024A (ja) ネットワークを制御する方法
WO2015106506A1 (zh) 设置控制信息、建立通信的方法及管理控制器及控制器
US11108641B2 (en) Automatic switching fabric role determination system
EP3843342A1 (en) Communication method and related device
CN107636629B (zh) 存储器系统、用于创建和更新存储器系统的逻辑树的方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160804

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170428

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170516

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170710

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170725

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170807

R150 Certificate of patent or registration of utility model

Ref document number: 6197692

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150