(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024173034
(43)【公開日】2024-12-12
(54)【発明の名称】情報処理方法、サーバシステム
(51)【国際特許分類】
G06F 9/54 20060101AFI20241205BHJP
【FI】
G06F9/54 D
【審査請求】未請求
【請求項の数】16
【出願形態】OL
(21)【出願番号】P 2023091149
(22)【出願日】2023-06-01
(71)【出願人】
【識別番号】500257300
【氏名又は名称】LINEヤフー株式会社
(74)【代理人】
【識別番号】110001759
【氏名又は名称】弁理士法人よつ葉国際特許事務所
(74)【代理人】
【識別番号】100093687
【弁理士】
【氏名又は名称】富崎 元成
(74)【代理人】
【識別番号】100168468
【弁理士】
【氏名又は名称】富崎 曜
(74)【代理人】
【識別番号】100166176
【弁理士】
【氏名又は名称】加美山 豊
(72)【発明者】
【氏名】室井 雅仁
(72)【発明者】
【氏名】谷野 光宏
(72)【発明者】
【氏名】古川 勇志郎
(72)【発明者】
【氏名】王 翔
(57)【要約】
【課題】プロセス間通信を行うサーバシステムの可用性向上を実現する。
【解決手段】第1サーバから少なくとも第2サーバへのプロセス間通信を行うサーバシステムの情報処理方法であって、サーバシステムは、プロセス間通信におけるプロセス間通信先を特定することに関する処理を実行する解決サーバを含み、第1サーバは、第2サーバを特定するための第1情報を解決サーバから受信し、第1情報に基づき、第2サーバにプロセス間通信の処理を要求するための第2情報を送信し、第2サーバは、第1サーバから第2情報を受信し、第2情報に基づく第1処理を実行する。
【選択図】
図1-1
【特許請求の範囲】
【請求項1】
第1サーバから少なくとも第2サーバへのプロセス間通信を行うサーバシステムの情報処理方法であって、
前記サーバシステムは、前記プロセス間通信におけるプロセス間通信先を特定することに関する処理を実行する解決サーバを含み、
前記第1サーバは、
前記第2サーバを特定するための第1情報を前記解決サーバから受信し、
前記第1情報に基づき、前記第2サーバに前記プロセス間通信の処理を要求するための第2情報を送信し、
前記第2サーバは、
前記第1サーバから前記第2情報を受信し、
前記第2情報に基づく第1処理を実行する。
【請求項2】
請求項1に記載の情報処理方法であって、
前記第2情報はハイパーテキスト・トランスファー・プロトコルに基づいて送受信される。
【請求項3】
請求項2に記載の情報処理方法であって、
前記第1サーバは、前記第2サーバが前記第2情報を受信したことを判定する。
【請求項4】
請求項2に記載の情報処理方法であって、
前記第1サーバは、
前記プロセス間通信を制御するミドルウェアに組み込まれたメッセージングドライバを介して前記第1情報を受信し、
前記メッセージングドライバを介して前記第2情報を送信し、
前記第2サーバは、
前記メッセージングドライバを介して前記第2情報を受信する。
【請求項5】
請求項1に記載の情報処理方法であって、
前記第2サーバは、前記第1サーバに前記第1処理に基づく第3情報を送信し、
前記第1サーバは、前記第2サーバから前記第3情報を受信する。
【請求項6】
請求項5に記載の情報処理方法であって、
前記第2情報と前記第3情報とはハイパーテキスト・トランスファー・プロトコルに基づいて送受信される。
【請求項7】
請求項6に記載の情報処理方法であって、
前記第2サーバは、前記第1サーバが前記第3情報を受信したことを判定する。
【請求項8】
請求項6に記載の情報処理方法であって、
前記第1サーバは、
前記プロセス間通信を制御するミドルウェアに組み込まれたメッセージングドライバを介して前記第1情報を受信し、
前記メッセージングドライバを介して前記第2情報を送信し、
前記メッセージングドライバを介して前記第3情報を受信し、
前記第2サーバは、
前記メッセージングドライバを介して前記第2情報を受信し、
前記メッセージングドライバを介して前記第3情報を送信する。
【請求項9】
請求項1に記載の情報処理方法であって、
前記サーバシステムは、前記第2サーバと少なくとも第3サーバとに前記プロセス間通信の処理を要求することに関する処理を実行する増幅サーバを含み、
前記第1サーバは、
前記増幅サーバを特定するための第4情報を前記解決サーバから受信し、
前記第4情報に基づき、前記増幅サーバに前記プロセス間通信の処理を要求するための第5情報を送信し、
前記増幅サーバは、
前記第1サーバから前記第5情報を受信し、
少なくとも前記第2サーバと前記第3サーバとに前記第5情報を送信し、
前記第2サーバは、
前記増幅サーバから前記第5情報を受信し、
前記第5情報に基づく処理を実行し、
前記第3サーバは、
前記増幅サーバから前記第5情報を受信し、
前記第5情報に基づく処理を実行する。
【請求項10】
請求項9に記載の情報処理方法であって、
前記第5情報はハイパーテキスト・トランスファー・プロトコルに基づいて送受信される。
【請求項11】
請求項10に記載の情報処理方法であって、
前記第1サーバは、
前記プロセス間通信を制御するミドルウェアに組み込まれたメッセージングドライバを介して前記第4情報を受信し、
前記メッセージングドライバを介して前記第5情報を送信し、
前記第2サーバと前記第3サーバとは、前記メッセージングドライバを介して前記第5情報を受信する。
【請求項12】
請求項1に記載の情報処理方法であって、
前記サーバシステムは、前記解決サーバとは異なるリージョンまたはゾーンに属する第1解決サーバをさらに含み、
前記第1サーバは、
前記第1情報に基づき前記第2サーバの識別情報を解決できない場合、前記第2サーバを特定するための第6情報を前記第1解決サーバから受信し、
前記第6情報に基づき、前記第2サーバに前記第2情報を送信する。
【請求項13】
請求項12に記載の情報処理方法であって、
前記第2情報はハイパーテキスト・トランスファー・プロトコルに基づいて送受信され、
前記第1サーバは、
前記プロセス間通信を制御するミドルウェアに組み込まれたメッセージングドライバを介して前記第1情報と前記第6情報とを受信し、
前記メッセージングドライバを介して前記第2情報を送信し、
前記第2サーバは、
前記メッセージングドライバを介して前記第2情報を受信する。
【請求項14】
請求項12に記載の情報処理方法であって、
前記第1サーバと前記解決サーバとは同じ前記リージョンまたは前記ゾーンに属し、
前記第1サーバは、前記第1サーバと最も近しい前記リージョンまたは前記ゾーンに属する前記第1解決サーバから前記第6情報を受信する。
【請求項15】
請求項1から請求項14のいずれか一項に記載の情報処理方法であって、
前記プロセス間通信はリモートプロシージャコール・プロトコルに基づく。
【請求項16】
第1サーバから少なくとも第2サーバへのプロセス間通信を行うサーバシステムであって、
前記サーバシステムは、前記プロセス間通信におけるプロセス間通信先を特定することに関する処理を実行する解決サーバを含み、
前記第1サーバは、前記第2サーバを特定するための第1情報を前記解決サーバから受信し、前記第1情報に基づき、前記第2サーバに前記プロセス間通信の処理を要求するための第2情報を送信する通信部を備え、
前記第2サーバは、
前記第1サーバから前記第2情報を受信する通信部と、
前記第2情報に基づく第1処理を実行する制御部とを備える。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、情報処理方法、サーバシステム等に関する。
【背景技術】
【0002】
クラウドコンピューティング等における分散アプリケーション処理を実現するために、複数のアプリケーション間において協調動作を行う仕組みとしてメッセージ通信が必要とされている。例えば、特許文献1には、メッセージキューを制御してメッセージ通信を実現するシステムが開示されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【0004】
本発明の第1の態様によると、第1サーバから少なくとも第2サーバへのプロセス間通信を行うサーバシステムの情報処理方法であって、サーバシステムは、プロセス間通信におけるプロセス間通信先を特定することに関する処理を実行する解決サーバを含み、第1サーバは、第2サーバを特定するための第1情報を解決サーバから受信し、第1情報に基づき、第2サーバにプロセス間通信の処理を要求するための第2情報を送信し、第2サーバは、第1サーバから第2情報を受信し、第2情報に基づく第1処理を実行する。
本発明の第2の態様によると、第1サーバから少なくとも第2サーバへのプロセス間通信を行うサーバシステムであって、サーバシステムは、プロセス間通信におけるプロセス間通信先を特定することに関する処理を実行する解決サーバを含み、第1サーバは、第2サーバを特定するための第1情報を解決サーバから受信し、第1情報に基づき、第2サーバにプロセス間通信の処理を要求するための第2情報を送信する通信部を備え、第2サーバは、第1サーバから第2情報を受信する通信部と、第2情報に基づく第1処理を実行する制御部とを備える。
【図面の簡単な説明】
【0005】
【
図1-1】第1実施例に係る通信システムのシステム構成の一例を示す図。
【
図1-2】第1実施例に係るコンポーネントサーバの制御部によって実現される機能の一例を示す図。
【
図1-3】第1実施例に係るコンポーネントサーバの記憶部に記憶される情報の一例を示す図。
【
図1-4】第1実施例に係る呼び出し先解決サーバの制御部によって実現される機能の一例を示す図。
【
図1-5】第1実施例に係る呼び出し先解決サーバの記憶部に記憶される情報の一例を示す図。
【
図1-6】第1実施例に係る呼び出し先管理データの一例を示す図。
【
図1-7】第1実施例に係る一斉呼び出しサーバの制御部によって実現される機能の一例を示す図。
【
図1-8】第1実施例に係る一斉呼び出しサーバの記憶部に記憶される情報の一例を示す図。
【
図1-9】第1実施例に係る各装置が実行する処理の流れの一例を示すフローチャート。
【
図1-10】第1実施例に係る各ソフトウェアモジュールの処理の流れの一例を示すブロック図。
【
図1-11】第1実施例に係る各装置が実行する処理の流れの一例を示すフローチャート。
【
図2-1】第2実施例に係る各装置が実行する処理の流れの一例を示すブロック図。
【
図2-2】第2変形例に係る各装置が実行する処理の流れの一例を示すブロック図。
【発明を実施するための形態】
【0006】
<法的事項の遵守>
本明細書に記載の開示は、通信の秘密など、本開示の実施に必要な実施国の法的事項遵守を前提とすることに留意されたい。
【0007】
<実施形態>
本明細書では、分かり易いように「限定ではなく例として」と記載する箇所があるが、該当箇所ばかりでなく、以下説明する実施形態の全体について、その記載内容に限定されるものではないことに留意されたい。
【0008】
本開示に係るプログラム等を実施するための実施形態について、図面を参照して説明する。
【0009】
本願請求項に係る発明の端末(本願発明の端末)の生産は、限定ではなく例として、ユーザが所有(所持)している端末で、本明細書に記載したプログラム(限定ではなく例として、アプリケーションプログラム)等が受信されることによって(または受信されて端末に記憶されることによって)、本端末において、本願請求項に係る発明の機能が実現可能となる状態が作り出される(本願請求項に係る発明が実行可能になる状態が作り出される)という概念を含んでもよい。
【0010】
また、本願請求項に係る発明のシステム(本願発明のシステム)の生産は、限定ではなく例として、本願システムに含まれるサーバから送信された本明細書に記載されたプログラム(限定ではなく例として、アプリケーションプログラム)等を、本願システムに含まれる端末で受信することによって(または受信されたプログラムが端末に記憶されることによって)、本願請求項に係るシステムの発明の機能が実現可能となる状態が作り出される(本願請求項に係る発明が実行可能になる状態が作り出される)という概念を含んでもよい。
【0011】
また、本明細書において、システムとは、限定ではなく例として、複数の装置を有して構成されるものとすることができる。
複数の装置は、同じ種類の装置の組合せとしてもよいし、異なる種類の装置の組合せとしてもよいし、同じ種類の装置と異なる種類の装置との組合せとしてもよい。
なお、システムとは、限定ではなく例として、複数の装置が協働して何らかの処理を行うもの、と考えることもできる。
【0012】
また、クライアント(クライアント装置)とサーバとに関するシステムとは、限定ではなく例として、少なくとも以下のいずれかと考えることができる。
(1)端末&サーバ
(2)サーバ
(3)端末
【0013】
(1)は、限定ではなく例として、少なくとも1つの端末と、少なくとも1つのサーバとを含むシステムである。この一例は、クライアントサーバシステムである。
【0014】
サーバは、限定ではなく例として、以下の装置によって構成されており、単独の装置であってもよいし、複数の装置の組合せであってもよいものとする。
【0015】
具体的には、サーバは、限定ではなく例として、少なくとも1つのプロセッサー(限定ではなく例として、CPU:Central Processing Unit、GPU:Graphics Processing Unit、APU:Accelerated Processing Unit、DSP:Digital Signal Processor(限定ではなく例として、ASIC:Application Specific Integrated Circuit、FPGA:Field Programmable Gate Array)等)、コンピュータ装置(プロセッサー+メモリ)、制御装置、演算装置、処理装置等のいずれかを有して構成され、いずれか1つの装置の同種を複数備える構成(限定ではなく例として、CPU+CPU、ホモジニアスマルチコアプロセッサー等)や、いずれか1つの装置の異種を複数備える構成(限定ではなく例として、CPU+DSP、ヘテロジニアスマルチコアプロセッサー等)としてもよいし、複数の装置の組み合わせ(限定ではなく例として、プロセッサー+コンピュータ装置、プロセッサー+演算装置、複数の装置をヘテロジニアス化したもの等)であってもよい。
なお、プロセッサーは、仮想プロセッサーとしてもよい。
【0016】
また、サーバによって何らかの処理を実行する場合に、単一の装置で構成される場合は、単一の装置によって実施例に記載されている処理が実行される。また、複数の装置を有して構成されている場合には、一部の処理を一方の装置が実行し、その他の処理を他方の装置が実行するように構成されていてもよい。限定ではなく例として、プロセッサーと、演算装置とを有して構成される場合、第1処理をプロセッサーが実行し、第2処理を演算装置が実行するように構成されていてもよい。
また、複数の装置で構成する場合には、各々の装置が互いに物理的に離れた位置に配置されて構成されてもよい。
【0017】
また、サーバの機能は、限定ではなく例として、クラウドコンピューティングにおけるPaaSやIaaS、SaaSの形態で提供されるようにしてもよい。
【0018】
また、システムの制御部は、端末の制御部とサーバの制御部とのうちの少なくともいずれか一方とすることができる。つまり、限定ではなく例として、(1A)端末の制御部のみ、(1B)サーバの制御部のみ、(1C)端末の制御部とサーバの制御部との両方、のうちのいずれかを、システムの制御部とすることができる。
【0019】
また、システムの制御部が行う制御や処理(以下、包括的に「制御等」と称する。)は、(1A)端末の制御部のみによって行うようにしてもよいし、(1B)サーバの制御部のみによって行うようにしてもよいし、(1C)端末の制御部とサーバの制御部との両方によって行うようにしてもよい。
また、(1C)では、限定ではなく例として、システムが制御部によって行う制御等のうちの一部の制御等を端末の制御部によって行うようにし、残りの制御等をサーバの制御部によって行うようにしてもよい。この場合、制御等の割り当て(割り振り)は、等分であってもよいし、等分ではなく異なる割合で割り当ててもよい。
【0020】
また、サーバの通信部という場合、サーバが単一の装置によって構成されている場合には、単一の装置が備える通信部そのものであってもよい。また、サーバが複数の装置を有して構成されている場合には、サーバの通信部は、各々の装置が備える各々の通信部を含む構成であってもよい。
限定ではなく例として、サーバは、第1装置と第2装置とを備え、第1装置は第1通信部を有し、第2装置は第2通信部を有する場合、サーバの通信部は、第1通信部と第2通信部とを含む概念としてもよい。
【0021】
(2)は、限定ではなく例として、複数のサーバによって構成されるシステム(以下、「サーバシステム」と称する。)とすることができる。この場合、各々のサーバの構成としては、前述した構成を同様に適用することができる。
【0022】
サーバシステムが行う制御等は、複数のサーバのうち、(2A)一のサーバのみによって行うようにしてもよいし、(2B)他のサーバのみによって行うようにしてもよいし、(2C)一のサーバと他のサーバとが行うようにしてもよい。
また、(2C)では、限定ではなく例として、サーバシステムが行う制御等のうちの一部の制御等を一のサーバが行うようにし、残りの制御等を他のサーバが行うようにしてもよい。この場合、制御等の割り当て(割り振り)は、等分であってもよいし、等分ではなく異なる割合で割り当ててもよい。
【0023】
(3)は、限定ではなく例として、複数の端末によって構成されるシステムとすることができる。
このシステムは、限定ではなく例として、以下のようなシステムとすることができる。
・サーバの機能を端末に持たせるシステム(分散システム)。これは、限定ではなく例として、ブロックチェーンの技術を用いて実現することが可能である。
・端末同士が無線通信を行うシステム。これは、限定ではなく例として、ブルートゥース(登録商標)等の近距離無線通信技術を用いてP2P(ピアツーピア)方式等で通信を行うことで実現可能である。
【0024】
なお、上記は、制御部に限らず、システムの構成要素となり得る入出力部、通信部、記憶部、時計部等の各機能部についても同様である。
【0025】
以下の実施形態では、限定ではなく例として、端末とサーバとを含むシステム(限定ではなく例として、クライアントサーバシステム)を例示する。
なお、サーバとして、上記(2)のサーバシステムを適用することも可能である。
【0026】
また、端末とサーバとを含むシステムに代えて、サーバを含まないシステム、限定ではなく例として、上記(3)のシステムを適用することも可能である。
この場合の実施形態は、前述したブロックチェーンの技術等に基づいて構成することが可能である。具体的には、限定ではなく例として、以下の実施形態で説明するサーバに記憶されて管理されるデータを、ブロックチェーン上に保管(格納)する。そして、端末が、ブロックチェーンへのトランザクションを生成し、トランザクションがブロックチェーン上で承認されると、ブロックチェーン上に保管されたデータが更新されるようにすることができる。
【0027】
なお、端末と表現した場合でも、これは、クライアントサーバにおけるクライアントの装置としての端末の意味に限定されるものではない。
つまり、端末は、クライアントサーバにおけるものではない装置の概念を含むこともあり得る。
【0028】
また、本明細書では、適宜「通信I/Fによって」という表現を用いる。これは、限定ではなく例として、装置が、制御部(プロセッサー等)の制御に基づいて、通信I/Fを介して(通信部を介して)、各種の情報やデータを送受信することを示してもよいものとする。
【0029】
また、本明細書において「関する」、「関連する」と記載された用語について、「Aに関するB」や「Aに関連するB」という場合、限定ではなく例として、「A」と何らかの関係性を有する「B」を意味してよいものとする。この具体例については後述する。
【0030】
また、本明細書において、「AとBとを送信する」、「AとBとを受信する」といったように、装置が2以上のものを対象として処理を行うことには、「A」と「B」とをタイミングを合わせて行うもの(以下、「同時」という。)と、「A」と「B」とをタイミングをずらして行うもの(以下、「非同時」という。)とを含めてよいものとする。
限定ではなく例として、第1情報と第2情報とを送信するという場合、第1情報と第2情報とをタイミングを合わせて送信するものと、第1情報と第2情報とをタイミングをずらして送信するものとの両方の概念を含めてよいものとする。
なお、ラグ(タイムラグ)を考慮し、「同時」には「ほぼ同時」を含めてよいものとする。
【0031】
なお、「A」と「B」とをタイミングをずらして行うといっても、これはあくまでも「A」と「B」とを対象として処理を行うものであればよく、その目的は必ずしも同じでなくてもよいものとする。
限定ではなく例として、上記のように第1情報と第2情報とを送信するという場合、第1情報と第2情報とを送信しさえすればよく、同じ目的で第1情報と第2情報とを送信する場合の他、異なる目的で第1情報と第2情報とを送信する場合も含めてよいものとする。
【0032】
<実施例>
以下、本発明を適用した実施例の一例について説明する。
一例であるが、あるソフトウエアコンポーネントが複数のサーバによる分散処理によって動作する場合、ソフトウエアコンポーネントがプロセス間通信(限定ではなく例として、RPC(Remote Procedure Call))を行うために、メッセージキューによって情報(メッセージ)をやり取りする場合がある。この場合、メッセージキューを管理するMQシステム(限定ではなく例として、ActiveMQやRabbitMQ(登録商標)等)に障害が発生すると、発生中のプロセス間通信を巻き込んでプロセス間通信が断絶するため、ソフトウエアコンポーネントの動作に甚大な影響を与える場合が生じる。
【0033】
また、限定ではなく例として、クラウドコンピューティングを実現するためのソフトウエアコンポーネント群であるOpenStack(登録商標)等において、各ソフトウエアコンポーネント(限定ではなく例として、NOVAやNEUTRON等)を動作させるサーバ群(クラスタ)を構成するサーバ数は、クラウドコンピューティングにおいて提供されるサービスが複雑化するにつれて莫大な数となる。
限定ではなく例として、クラスタを構成するサーバ数(限定ではなく例として、物理サーバ群で制御される仮想サーバの総数)が40,000を超える場合、MQシステムの動作負荷が上がり、プロセス間通信に遅延等が発生するため、ソフトウエアコンポーネントの安定動作が困難となる場合が生じる。
【0034】
以下説明する実施例では、クラスタを構成するサーバ間においてプロセス間通信を行う場合、MQシステムを介さずに直接メッセージの送受信を可能とすることで、単一障害点(SPOF:Single Point of Failure)をなくし、高可用性を実現することを可能とする。また、クラスタを構成するサーバ数が莫大な数となる場合においても、プロセス間通信をサーバ間において直接行うことで、クラスタで動作するソフトウエアコンポーネントの動作の高速化と、クラスタ全体の負荷低減を実現する。
【0035】
以下では、限定ではなく例として、ソフトウエアコンポーネントを動作させるクラスタに属する(クラスタを構成する)サーバのうち、ソフトウエアコンポーネントの処理に直接的に関わるサーバを「コンポーネントサーバ」と称する。コンポーネントサーバは、仮想サーバ(仮想マシン)としてもよいし、物理サーバ(物理マシン)としてもよい。
【0036】
また、以下では、限定ではなく例として、プロセス間通信はRPCに従って実行されることとする。なお、プロセス間通信は、限定ではなく例として、RMI(Remote Method Invocation)に従って実行されるようにしてもよい。また、プロセス間通信は、同一プログラムを利用した複数のプロセス間の通信に限定されない。
【0037】
また、以下では、限定ではなく例として、ソフトウエアコンポーネントは、各種のソフトウェアモジュールを内包することとする。そして、限定ではなく例として、ソフトウエアコンポーネントにおけるプロセス間通信を実現するためのソフトウェアモジュールを「メッセージングモジュール」と称する。
【0038】
限定ではなく例として、ソフトウエアコンポーネントがOpenStackのコンポーネントである場合、メッセージングモジュールは、限定ではなく例として、OpenStackの共用ライブラリ「Oslo」の「oslo.messaging」モジュールによって実現(実装)されるようにしてもよい。
【0039】
また、以下では、限定ではなく例として、メッセージングモジュールは、ソフトウエアコンポーネントからのプロセス間通信を種々のメッセージ伝達方法で送受信するためのメッセージングドライバを内包することとする。限定ではなく例として、本発明において提供されるメッセージングドライバを「httpメッセージングドライバ」と称する。
ソフトウエアコンポーネントは、メッセージングモジュールがメッセージングドライバを介してプロセス間通信を実現することで、メッセージングドライバのメッセージ伝達方法(使用するトランスポート層と言ってもよい。)に依存せずにメッセージングモジュールへの呼び出しと応答とを実現することができる。
【0040】
限定ではなく例として、「oslo.messaging」モジュールにおいて、MQシステムを用いる「AMQP(Advanced Message Queuing Protocol)ドライバ」から「httpメッセージングドライバ」にメッセージングドライバを変更することで、ソフトウエアコンポーネントの修正を行わずにメッセージ伝達方法を変更することができる。
【0041】
なお、「httpメッセージングドライバ」は、本発明による情報処理手法を適用したプログラム(ソフトウェアドライバ)全般を指し、「oslo.messaging」モジュールにおけるメッセージングドライバに限定されない。
【0042】
メッセージングモジュールは、限定ではなく例として、プロセス間通信を行うためのトランスポート層(限定ではなく例として、メッセージキューイングサービスやhttp送受信サービス)と、ソフトウエアコンポーネントとの間に位置するミドルウェアと言ってもよい。
メッセージングドライバは、ミドルウェアとトランスポート層とを橋渡しするソフトウエアドライバプログラムと言ってもよい。
【0043】
また、以下では、限定ではなく例として、プロセス間通信の送信元となるコンポーネントサーバを「インヴォーカ(Invoker)」、プロセス間通信の送信先となるコンポーネントサーバを「ワーカ(Worker)」とそれぞれ称する。
インヴォーカは、関数の呼び出し元や呼び出し側と言ってもよい。また、ワーカは関数の呼び出し先や手続き側と言ってもよい。
【0044】
なお、限定ではなく例として、クライアントサーバモデルに当てはめて、インヴォーカを「クライアント」、ワーカを「サーバ」と言ってもよい。
【0045】
<第1実施例>
第1実施例は、限定ではなく例として、インヴォーカが、プロセス間通信の送信先を解決するための呼び出し先解決サーバを用いて適切なワーカを探索する。そして、インヴォーカとワーカとが、限定ではなく例として、http(Hypertext Transfer Protocol)によって通信することで、プロセス間通信を実現する実施例である。
【0046】
第1実施例に記載の内容は、他の各実施例や他の各変形例のいずれにも適用可能である。
また、既出の構成要素と同一の構成要素については同一の符号を付して、再度の説明を省略する。
【0047】
<システム構成>
図1-1は、本開示の実施形態における通信システム1のシステム構成の一例を示す図である。
通信システム1では、限定ではなく例として、ネットワーク30を介して、呼び出し先解決サーバ10と、一斉呼び出しサーバ40と、複数のコンポーネントサーバ20(コンポーネントサーバ20A,コンポーネントサーバ20B,コンポーネントサーバ20C,・・・)とが接続される。
【0048】
コンポーネントサーバ20は、ネットワーク30を介して、限定ではなく例として、ソフトウエアコンポーネントを利用するユーザが所有する不図示の端末および/または他のソフトウエアコンポーネントを実現する不図示のサーバに、所定のサービス(限定ではなく例として、ユーザ認証サービス、仮想ネットワークサービス等)を提供する機能を有する。
以下では、コンポーネントサーバ20を、単に「サーバ20(サーバ20A,サーバ20B,サーバ20C,・・・)」と呼ぶことがある。なお、各コンポーネントサーバ20A,コンポーネントサーバ20B,コンポーネントサーバ20C,・・・は、仮想サーバとしてもよいし、物理サーバとしてもよい。
【0049】
呼び出し先解決サーバ10は、ネットワーク30を介して、コンポーネントサーバ20に、所定のサービス(限定ではなく例として、プロセス間通信呼び出し先解決サービス等)を提供する機能を有する。呼び出し先解決サーバ10は、限定ではなく例として、クラスタ(コンポーネントサーバクラスタ)管理サーバ等のように表現することもできる。
以下では、呼び出し先解決サーバ10を、単に「サーバ10」と呼ぶことがある。
【0050】
なお、呼び出し先解決サーバ10は、限定ではなく例として、単一の物理サーバまたは仮想サーバとしてもよいし、複数の物理サーバおよび/または仮想サーバで構成されるクラスタ(サーバシステム)としてもよい。
【0051】
一斉呼び出しサーバ40は、ネットワーク30を介して、コンポーネントサーバ20に、所定のサービス(限定ではなく例として、プロセス間通信一斉呼び出しサービス等)を提供する機能を有する。一斉呼び出しサーバ40は、限定ではなく例として、ブロードキャストサーバやブロードキャスタ等のように表現することもできる。
以下では、一斉呼び出しサーバ40を、単に「サーバ40」と呼ぶことがある。
【0052】
なお、一斉呼び出しサーバ40は、限定ではなく例として、単一の物理サーバまたは仮想サーバとしてもよいし、複数の物理サーバおよび/または仮想サーバで構成されるクラスタ(サーバシステム)としてもよい。
【0053】
本実施形態では、限定ではなく例として、コンポーネントサーバ20と、呼び出し先解決サーバ10と、一斉呼び出しサーバ40とで構成されるサーバシステムの事業者(運営者)を、それぞれコンポーネントサーバ20のユーザ、呼び出し先解決サーバ10のユーザ、一斉呼び出しサーバ40のユーザと言ってもよい。また、限定ではなく例として、コンポーネントサーバ20と呼び出し先解決サーバ10と一斉呼び出しサーバ40とで構成されるサーバシステムの利用者を、不図示の端末のユーザ、または他のソフトウエアコンポーネントのユーザと言ってもよい。
【0054】
コンポーネントサーバ20(コンポーネントサーバ20A,コンポーネントサーバ20B,コンポーネントサーバ20C、・・・)(限定ではなく、サーバ、情報処理装置、情報管理装置、サーバシステム、クラスタの一例)は、各実施例において記載する機能を実現できる情報処理装置であればどのような端末であってもよい。
コンポーネントサーバ20は、限定ではなく例として、サーバ装置、コンピュータ(限定ではなく例として、デスクトップ、ラップトップ、タブレットなど)、メディアコンピュータプラットホーム(限定ではなく例として、ケーブル、衛星セットトップボックス、デジタルビデオレコーダ)、ハンドヘルドコンピュータデバイス(限定ではなく例として、PDA、電子メールクライアントなど)、あるいは他種のコンピュータ、ハイパーバイザ、またはコミュニケーションプラットホームを含む。
コンポーネントサーバ20および/または呼び出し先解決サーバ10および/または一斉呼び出しサーバ40を区別する必要がない場合は、コンポーネントサーバ20および/または呼び出し先解決サーバ10および/または一斉呼び出しサーバ40は、それぞれ情報処理装置と表現されてもよいし、されなくてもよい。
【0055】
コンポーネントサーバ20A、コンポーネントサーバ20Bおよびコンポーネントサーバ20Cの構成は、限定ではなく例として、同一とするようにしてもよい。
また、必要に応じて、コンポーネントサーバ20Xに対応づけられた、所定のサービス(プロセス)におけるサーバ情報をサーバ情報Xと表現してもよいし、しなくてもよい。
なお、サーバ情報とは、所定のサービス(プロセス)においてサーバに対応付けられたサーバの情報である。サーバ情報は、限定でなく例として、ユーザにより入力される、または、所定のサービスにより付与される、サーバの名前、サーバのIPアドレス、サーバのMACアドレス、サーバの処理能力(限定ではなく例として、MIPSやFLOPS)、サーバの構成情報(限定ではなく例として、プロセッサーコア数および/またはRAM容量等)、サーバの識別子などのサーバに対応づけられた情報を含み、これらのいずれか一つまたは、組み合わせであってもよいし、そうでなくてもよい。
【0056】
ネットワーク30は、1以上のコンポーネントサーバ20と、1以上の呼び出し先解決サーバ10と、1以上の一斉呼び出しサーバ40とを接続する役割を担う。すなわち、ネットワーク30は、上記の各種の装置が接続した後、データを送受信することができるように接続経路を提供する通信網を意味する。
【0057】
なお、ネットワーク30に接続される呼び出し先解決サーバ10の数や一斉呼び出しサーバ40の数、コンポーネントサーバ20の数は限定されない。
【0058】
ネットワーク30のうちの1つまたは複数の部分は、有線ネットワークや無線ネットワークであってもよいし、そうでなくてもよい。ネットワーク30は、限定ではなく例として、アドホック・ネットワーク(ad hoc network)、イントラネット、エクストラネット、仮想プライベート・ネットワーク(virtual private network:VPN)、ローカル・エリア・ネットワーク(local area network:LAN)、ワイヤレスLAN(wireless LAN:WLAN)、広域ネットワーク(wide area network:WAN)、ワイヤレスWAN(wireless WAN:WWAN)、大都市圏ネットワーク(metropolitan area network:MAN)、インターネットの一部、公衆交換電話網(Public Switched Telephone Network:PSTN)の一部、携帯電話網、ISDN(integrated service digital networks)、無線LAN、LTE(long term evolution)、CDMA(code division multiple access)、ブルートゥース(Bluetooth(登録商標))、衛星通信など、または、これらの2つ以上の組合せを含むことができる。ネットワーク30は、1つまたは複数のネットワーク30を含むことができる。
【0059】
呼び出し先解決サーバ10(限定ではなく、サーバ、情報処理装置、情報管理装置、サーバシステム、クラスタの一例)は、コンポーネントサーバ20に対して、所定のサービスを提供する機能を備える。呼び出し先解決サーバ10は、各実施形態において記載する機能を実現できる情報処理装置であればどのような装置であってもよい。呼び出し先解決サーバ10は、限定ではなく例として、サーバ装置、コンピュータ(限定ではなく例として、デスクトップ、ラップトップ、タブレットなど)、メディアコンピュータプラットホーム(限定ではなく例として、ケーブル、衛星セットトップボックス、デジタルビデオレコーダ)、ハンドヘルドコンピュータデバイス(限定ではなく例として、PDA、電子メールクライアントなど)、あるいは他種のコンピュータ、ハイパーバイザ、またはコミュニケーションプラットホームを含む。
【0060】
限定ではなく例として、呼び出し先解決サーバ10とコンポーネントサーバ20とを区別する必要がない場合は、呼び出し先解決サーバ10とコンポーネントサーバ20とは、それぞれ情報処理装置と表現されてもよいし、されなくてもよい。
【0061】
一斉呼び出しサーバ40(限定ではなく、サーバ、情報処理装置、情報管理装置、サーバシステム、クラスタの一例)は、コンポーネントサーバ20に対して、所定のサービスを提供する機能を備える。一斉呼び出しサーバ40は、各実施形態において記載する機能を実現できる情報処理装置であればどのような装置であってもよい。一斉呼び出しサーバ40は、限定ではなく例として、サーバ装置、コンピュータ(限定ではなく例として、デスクトップ、ラップトップ、タブレットなど)、メディアコンピュータプラットホーム(限定ではなく例として、ケーブル、衛星セットトップボックス、デジタルビデオレコーダ)、ハンドヘルドコンピュータデバイス(限定ではなく例として、PDA、電子メールクライアントなど)、あるいは他種のコンピュータ、ハイパーバイザ、またはコミュニケーションプラットホームを含む。
【0062】
限定ではなく例として、呼び出し先解決サーバ10と一斉呼び出しサーバ40とを区別する必要がない場合は、呼び出し先解決サーバ10と一斉呼び出しサーバ40とは、それぞれ情報処理装置と表現されてもよいし、されなくてもよい。
また、限定ではなく例として、一斉呼び出しサーバ40とコンポーネントサーバ20とを区別する必要がない場合は、一斉呼び出しサーバ40とコンポーネントサーバ20とは、それぞれ情報処理装置と表現されてもよいし、されなくてもよい。
【0063】
[各装置のハードウェア(HW)構成]
通信システム1に含まれる各装置のHW構成について説明する。
【0064】
(1)サーバのHW構成
図1-1には、呼び出し先解決サーバ10とコンポーネントサーバ20と一斉呼び出しサーバ40とのHW構成の一例を示している。
呼び出し先解決サーバ10は、制御部11(CPU)、記憶部15、通信I/F14(インタフェース)、入出力部12、時計部19を備える。呼び出し先解決サーバ10のHWの各構成要素は、限定ではなく例として、バスBを介して相互に接続される。なお、呼び出し先解決サーバ10のHWは、呼び出し先解決サーバ10のHWの構成として、全ての構成要素を含むことは必須ではない。限定ではなく例として、呼び出し先解決サーバ10のHWは、個々の構成要素、または複数の構成要素を取り外すような構成であってもよいし、そうでなくてもよい。
【0065】
制御部11は、プログラム内に含まれたコードまたは命令によって実現する機能を実行するために物理的に構造化された回路を有し、限定ではなく例として、ハードウェアに内蔵されたデータ処理装置により実現される。
【0066】
制御部11は、代表的には中央処理装置(CPU)、であり、その他にマイクロプロセッサー、プロセッサーコア、マルチプロセッサー、ASIC、FPGAであってもよいし、そうでなくてもよい。本開示において、制御部11は、これらに限定されない。
【0067】
記憶部15は、呼び出し先解決サーバ10が動作するうえで必要とする各種プログラムや各種データを記憶する機能を有する。記憶部15は、HDD、SSD、フラッシュメモリなど各種の記憶媒体により実現される。ただし、本開示において、記憶部15は、これらに限定されない。また、記憶部15は、メモリ(memory)と表現されてもよいし、されなくてもよい。
【0068】
通信I/F14は、ネットワーク30を介して各種データの送受信を行う。通信は、有線、無線のいずれで実行されてもよく、互いの通信が実行できるのであれば、どのような通信プロトコルを用いてもよい。通信I/F14は、ネットワーク30を介してコンポーネントサーバ20等の各種装置との通信を実行する機能を有する。通信I/F14は、各種データを制御部11からの指示に従って、コンポーネントサーバ20等の各種装置に送信する。また、通信I/F14は、コンポーネントサーバ20等の各種装置から送信された各種データを受信し、制御部11に伝達する。また、通信I/F14を単に通信部と表現する場合もある。また、通信I/F14が物理的に構造化された回路で構成される場合には、通信回路と表現する場合もある。
【0069】
入出力部12は、呼び出し先解決サーバ10に対する各種操作を入力する装置や、呼び出し先解決サーバ10で処理された処理結果を出力する装置等を含む。入出力部12は、入力部と出力部が一体化していてもよいし、入力部と出力部に分離していてもよいし、そうでなくてもよい。
【0070】
入力部は、ユーザからの入力を受け付けて、入力に係る情報を制御部11に伝達できる全ての種類の装置のいずれかまたはその組み合わせにより実現される。入力部は、代表的にはキーボード等に代表されるハードウェアキーや、マウス等のポインティングデバイスで実現される。なお、入力部は、限定ではなく例として、タッチパネルやカメラ(動画像を介した操作入力)、マイク(音声による操作入力)を含んでいてもよいし、そうでなくてもよい。
【0071】
出力部は、制御部11で処理された処理結果を出力することができる全ての種類の装置のいずれかまたはその組み合わせにより実現される。出力部は、限定ではなく例として、 タッチパネル、タッチディスプレイ、スピーカ(音出力)、レンズ(限定ではなく例として3D(three dimensions)出力や、ホログラム出力)、プリンターなどを含む。
【0072】
あくまでも一例であるが、入出力部12は、限定ではなく例として、表示部13を備える。
【0073】
表示部13は、ディスプレイ等で実現される。ディスプレイは、代表的にはモニタ(限定ではなく例として、液晶ディスプレイやOELD(organic electroluminescence display)で実現される。なお、ディスプレイは、ヘッドマウントディスプレイ(HDM)などであってもよいし、そうでなくてもよい。なお、これらのディスプレイは、3Dで表示データを表示可能であってもよいし、そうでなくてもよい。本開示において、ディスプレイは、これらに限定されない。
【0074】
時計部19は、呼び出し先解決サーバ10の内蔵時計であり、時刻情報(計時情報)を出力する。時計部19は、限定ではなく例として、ハードウェアクロックとしてのRTC(Real Time Clock)やシステムクロック等を有して構成される。時計部19は、限定ではなく例として、計時部や時刻情報検出部と表現することもできる。
【0075】
限定ではなく例として、コンポーネントサーバ20と、一斉呼び出しサーバ40とについても呼び出し先解決サーバ10と同様に構成することができる。
【0076】
(2)その他
呼び出し先解決サーバ10は、プログラムPを記憶部15に記憶し、このプログラムPを実行することで、制御部11が、制御部11に含まれる各部としての処理を実行する。つまり、記憶部15に記憶されるプログラムPは、呼び出し先解決サーバ10に、制御部11が実行する各機能を実現させる。このプログラムPは、プログラムモジュールと表現されてもよいし、されなくてもよい。
他の装置についても同様である。
【0077】
本開示の各実施形態においては、コンポーネントサーバ20および/または呼び出し先解決サーバ10および/または一斉呼び出しサーバ40のCPUがプログラムPを実行することにより、実現するものとして説明する。
【0078】
なお、コンポーネントサーバ20の制御部21、および/または、呼び出し先解決サーバ10の制御部11、および/または、一斉呼び出しサーバ40の制御部41は、制御回路を有するCPUだけでなく、集積回路(IC(Integrated Circuit)チップ、LSI(Large Scale Integration))等に形成された論理回路(ハードウェア)や専用回路によって各処理を実現してもよいし、そうでなくてもよい。また、これらの回路は、1または複数の集積回路により実現されてよく、各実施形態に示す複数の処理を1つの集積回路により実現されることとしてもよいし、そうでなくてもよい。また、LSIは、集積度の違いにより、VLSI、スーパーLSI、ウルトラLSIなどと呼称されることもある。そのため、限定ではなく例として、制御部21は、制御回路と表現されてもよいし、されなくてもよい。
他の装置についても同様である。
【0079】
また、本開示の各実施形態のプログラムP(限定ではなく例として、ソフトウェアプログラム、コンピュータプログラム、またはプログラムモジュール)は、コンピュータに読み取り可能な記憶媒体に記憶された状態で提供されてもよいし、されなくてもよい。記憶媒体は、「一時的でない有形の媒体」に、プログラムPを記憶可能である。また、プログラムPは、本開示の各実施形態の機能の一部を実現するためのものであってもよいし、そうでなくてもよい。さらに、本開示の各実施形態の機能を記憶媒体にすでに記録されているプログラムPとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよいし、そうでなくてもよい。
【0080】
また、システムのプログラム(システムによって実行されるプログラム)という場合、システムについては前述した通りである。そして、前述したシステムのプログラムとは、システム全体で実行可能なプログラムであって、このプログラムは、限定ではなく例として、システムを構成する装置個々のプログラムで構成されてもよく、システムを構成する個々の装置に保存されるプログラムは、各々異なっていてもよいものとする。つまり、システムを構成する個々の装置で共通のプログラムでなくてもよいものとする。
限定ではなく例として、システムが複数のサーバ(サーバシステムやクラスタ)で構成されている場合、システムのプログラムをP1とすると、システムのプログラムP1は、呼び出し先解決サーバ10に保存されたプログラムP2と、コンポーネントサーバ20に保存されたプログラムP3とで構成され、P2とP3とは、システムのプログラムを実行するためのものであり、それぞれ異なるプログラムとなっていてもよい。限定ではなく例として、呼び出し先解決サーバ10に保存されたプログラムP2は、第1の処理を実行し、第1の処理をした結果をサーバに送信するプログラムであり、コンポーネントサーバ20に保存されたプログラムP3は、受信した第1の処理をした結果に対して第2の処理を行い、第2の処理を行った結果を呼び出し先解決サーバ10に送信するプログラムであってもよい。
他の装置についても同様である。
【0081】
記憶媒体は、1つまたは複数の半導体ベースの、または他の集積回路(IC)(限定ではなく例として、フィールド・プログラマブル・ゲート・アレイ(FPGA)または特定用途向けIC(ASIC)など)、ハード・ディスク・ドライブ(HDD)、ハイブリッド・ハード・ドライブ(HHD)、光ディスク、光ディスクドライブ(ODD)、光磁気ディスク、光磁気ドライブ、フロッピィ・ディスケット、フロッピィ・ディスク・ドライブ(FDD)、磁気テープ、固体ドライブ(SSD)、RAMドライブ、セキュア・デジタル・カード、またはドライブ、任意の他の適切な記憶媒体、またはこれらの2つ以上の適切な組合せを含むことができる。記憶媒体は、適切な場合、揮発性、不揮発性、または揮発性と不揮発性の組合せでよい。なお、記憶媒体はこれらの例に限られず、プログラムPを記憶可能であれば、どのようなデバイスまたは媒体であってもよい。また、記憶媒体をメモリ(memory)と表現されてもよいし、されなくてもよい。
【0082】
呼び出し先解決サーバ10および/または一斉呼び出しサーバ40および/またはコンポーネントサーバ20は、限定ではなく例として、記憶媒体に記憶されたプログラムPを読み出し、読み出したプログラムPを実行することによって、各実施形態に示す複数の機能部の機能を実現することができる。
【0083】
また、本開示のプログラムPは、プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して、呼び出し先解決サーバ10および/または一斉呼び出しサーバ40および/またはコンポーネントサーバ20に提供されてもよいし、されなくてもよい。呼び出し先解決サーバ10および/または一斉呼び出しサーバ40および/またはコンポーネントサーバ20は、限定ではなく例として、インターネット等を介してダウンロードしたプログラムPを実行することにより、各実施形態に示す複数の機能部の機能を実現する。
【0084】
また、本開示の各実施形態は、プログラムPが電子的な伝送によって具現化されたデータ信号の形態でも実現され得る。
呼び出し先解決サーバ10および/または一斉呼び出しサーバ40および/またはコンポーネントサーバ20における処理の少なくとも一部は、1以上のコンピュータにより構成されるクラウドコンピューティングにより実現されていてもよいし、そうでなくてもよい。
コンポーネントサーバ20における処理の少なくとも一部、または全部を、呼び出し先解決サーバ10および/または一斉呼び出しサーバ40により行う構成としてもよいし、そうでなくてもよい。この場合、コンポーネントサーバ20の制御部21の各機能部の処理のうち少なくとも一部の処理、または全部の処理を、呼び出し先解決サーバ10および/または一斉呼び出しサーバ40で行う構成としてもよいし、そうでなくてもよい。
呼び出し先解決サーバ10および/または一斉呼び出しサーバ40における処理の少なくとも一部、または全部を、コンポーネントサーバ20により行う構成としてもよいし、そうでなくてもよい。この場合、呼び出し先解決サーバ10の制御部11および/または一斉呼び出しサーバ40の制御部41の各機能部の処理のうち少なくとも一部の処理、または全部の処理を、コンポーネントサーバ20で行う構成としてもよいし、そうでなくてもよい。
【0085】
呼び出し先解決サーバ10における処理の少なくとも一部、または全部を、一斉呼び出しサーバ40により行う構成としてもよいし、そうでなくてもよい。この場合、呼び出し先解決サーバ10の制御部11の各機能部の処理のうち少なくとも一部の処理、または全部の処理を、一斉呼び出しサーバ40で行う構成としてもよいし、そうでなくてもよい。
一斉呼び出しサーバ40における処理の少なくとも一部、または全部を、呼び出し先解決サーバ10により行う構成としてもよいし、そうでなくてもよい。この場合、一斉呼び出しサーバ40の制御部41の各機能部の処理のうち少なくとも一部の処理、または全部の処理を、呼び出し先解決サーバ10で行う構成としてもよいし、そうでなくてもよい。
【0086】
明示的な言及のない限り、本開示の実施形態における判定の構成は必須でなく、判定条件を満たした場合に所定の処理が動作されたり、判定条件を満たさない場合に所定の処理がされたりしてもよいし、そうでなくてもよい。
【0087】
なお、本開示のプログラムは、限定ではなく例として、ActionScript、JavaScript(登録商標)などのスクリプト言語、Go、Objective-C、Java(登録商標)などのコンパイラ言語、HTML Living Standardなどのマークアップ言語などを用いて実装される。
【0088】
<機能構成>
(1)コンポーネントサーバ20の機能構成
図1-2は、本実施例においてコンポーネントサーバ20の制御部21によって実現される機能の一例を示す図である。
制御部21は、限定ではなく例として、記憶部25に記憶されたコンポーネント処理プログラム251に従ってコンポーネントプログラム処理を実行するためのコンポーネントプログラム処理部211を機能部として含む。
また、制御部21は、限定ではなく例として、記憶部25に記憶されたhttpデーモンプログラム253に従ってhttpによる情報の送受信を行うためのhttpデーモン処理を実行するためのhttpデーモン処理部213を機能部として含む。
【0089】
図1-3は、本実施例においてコンポーネントサーバ20の記憶部25に記憶される情報の一例を示す図である。
記憶部25には、限定ではなく例として、制御部21によってコンポーネントプログラム処理として実行されるコンポーネント処理プログラム251と、制御部21によってhttpデーモン処理として実行されるhttpデーモンプログラム253と、サーバID255とが記憶される。
【0090】
限定ではなく例として、コンポーネント処理プログラム251は、ソフトウエアコンポーネントと言ってもよい。
【0091】
httpデーモンプログラム253は、限定ではなく例として、Apache(登録商標) HTTP Serverやnginx(登録商標)、WSGI(Web Server Gateway Interface) Server等で実現(実装)されるようにしてもよい。
【0092】
コンポーネント処理プログラム251は、限定ではなく例として、メッセージングモジュール2513を備える。また、メッセージングモジュール2513は、限定ではなく例として、httpメッセージングドライバ2515を備える。
【0093】
サーバID255は、限定ではなく例として、コンポーネント処理プログラムを実行するクラスタ(サーバシステム)のうち、特定のコンポーネントサーバ20を識別するための情報である。
限定ではなく例として、あるコンポーネントサーバ20がコンポーネントプログラム処理を開始する場合、コンポーネント処理プログラム251に従ってコンポーネントサーバ20ごとに割り振られる識別情報がサーバID255に記憶されるようにしてもよい。
【0094】
(2)呼び出し先解決サーバ10の機能構成
図1-4は、本実施例において呼び出し先解決サーバ10の制御部11によって実現される機能の一例を示す図である。
制御部11は、限定ではなく例として、記憶部15に記憶された呼び出し先解決処理プログラム151に従って、コンポーネントサーバ20間におけるプロセス間通信の呼び出し先解決処理を実行するための呼び出し先解決処理部111を機能部として含む。
なお、制御部11は、限定ではなく例として、記憶部15に記憶されたhttpデーモンプログラムに従ってhttpによる情報の送受信を行うためのhttpデーモン処理を実行するためのhttpデーモン処理部を機能部として含むようにしてもよい。
【0095】
図1-5は、本実施例において呼び出し先解決サーバ10の記憶部15に記憶される情報の一例を示す図である。
記憶部15には、限定ではなく例として、制御部11によって呼び出し先解決処理として実行される呼び出し先解決処理プログラム151と、呼び出し先管理データ153とが記憶される。
なお、記憶部15に、httpデーモンプログラムを記憶させるようにしてもよい。
【0096】
呼び出し先管理データ153は、コンポーネントプログラム(限定ではなく例として、OpenStackにおけるNOVAやNEUTRON等)を実行するクラスタ(サーバシステム)内の個々のコンポーネントサーバ20に関する登録データであり、そのデータ構成の一例を
図1-6に示す。
呼び出し先管理データ153には、限定ではなく例として、サーバIDと、バインドキー情報と、その他登録情報とが関連付けて記憶される。
【0097】
サーバIDは、コンポーネント処理プログラムを実行するクラスタを構成するコンポーネントサーバ20の識別情報であり、限定ではなく例として、コンポーネントサーバ20がコンポーネント処理プログラムを実行する際にコンポーネントサーバ20から送信されるサーバIDが記憶される。
【0098】
なお、サーバIDは、コンポーネントサーバ20が識別可能な情報(限定ではなく例として、IPアドレスやポート番号、MACアドレス、URI等)としてもよい。
また、サーバIDは、RPCエンドポイント情報と言ってもよい。
【0099】
また、サーバIDは、限定ではなく例として、コンポーネントサーバ20がコンポーネント処理プログラムを実行する際に呼び出し先解決サーバ10によってコンポーネントサーバ20ごとに一意な値(固有の値)が設定されて記憶されるようにしてもよい。
この場合、呼び出し先解決サーバ10は、設定したサーバIDをコンポーネントサーバ20に送信するようにしてもよい。そして、コンポーネントサーバ20は、受信したサーバIDを記憶部25に記憶させるようにしてもよい。
【0100】
バインドキー情報は、限定ではなく例として、RPCにおけるプロセス間通信の呼び出し先を定めるための情報である。このバインドキー情報は、限定ではなく例として、コンポーネントサーバ20がコンポーネント処理プログラムを実行する際にコンポーネントサーバ20から送信されるバインドキー情報が記憶される。
【0101】
なお、バインドキー情報は、限定ではなく例として、コンポーネントサーバ20がコンポーネント処理プログラムを実行する際に呼び出し先解決サーバ10によって設定され、記憶されるようにしてもよい。
【0102】
また、バインドキー情報は、限定ではなく例として、メッセージングモジュール2513がRPCに従ってプロセス間通信を受け付けるために必要となる情報であり、限定ではなく例として、RPCとの互換性を保つ必要がない場合、バインドキー情報は記憶させないようにしてもよい。
【0103】
また、バインドキー情報には、限定ではなく例として、文字列のパターンを示す表現(限定ではなく例として、1ワードマッチ(限定ではなく例として、「*」)や複数ワードマッチ(限定ではなく例として、「#」)等)を含めるようにしてもよい。バインドキー情報には、限定ではなく例として、複数のバインドキー文字列を含めるようにしてもよい。
【0104】
その他登録情報には、限定ではなく例として、コンポーネントサーバ20に関するサーバ情報やコンポーネントサーバ20の構成情報(限定ではなく例として、CPUコア数やメインメモリ容量等)、アップタイムやロードアベレージといった各種の情報を含めるようにすることができる。また、その他登録情報には、呼び出し先解決サーバ10による各コンポーネントサーバ20への死活監視に関する情報を含めるようにしてもよい。
【0105】
なお、その他登録情報に、サーバの役割を識別するための情報(以下、「サーバ役割情報」と称する。)として、限定ではなく例として、RPCを受付可能であることを示す「ワーカ」等を設定可能であるようにしてもよい。
【0106】
なお、呼び出し先管理データ153に、一斉呼び出しサーバ40の登録情報を記憶させるようにしてもよい。
この場合、限定ではなく例として、サーバ役割情報に、限定ではなく例として、「ブロードキャスタ」と設定可能であるようにしてもよい。関連付けられるバインドキー情報はあってもよいし、無くてもよい。
また、サーバIDは、一斉呼び出しサーバ40によって設定されることとしてもよいし、呼び出し先解決サーバ10によって設定されることとしてもよい。
【0107】
なお、限定ではなく例として、ある一斉呼び出しサーバ40が後述のRPCメッセージ情報増幅送信処理を実行中の間、その一斉呼び出しサーバ40に関するレコード(サーバID等)を呼び出し先管理データ153から一時的に削除するようにしてもよい。
【0108】
なお、呼び出し先解決処理プログラム151は、限定ではなく例として、サービス・ディスカバリシステムであるConsulや、DNS(Domain Name System)等に基づいて実装されるようにしてもよい。
【0109】
(3)一斉呼び出しサーバ40の機能構成
図1-7は、本実施例において一斉呼び出しサーバ40の制御部41によって実現される機能の一例を示す図である。
制御部41は、限定ではなく例として、記憶部45に記憶された一斉呼び出し処理プログラム451に従って、複数のコンポーネントサーバ20へのプロセス間通信を実行するための一斉呼び出しプログラム処理部411を機能部として含む。
また、制御部41は、限定ではなく例として、記憶部45に記憶されたhttpデーモンプログラム453に従ってhttpによる情報の送受信を行うためのhttpデーモン処理を実行するためのhttpデーモン処理部413を機能部として含む。
【0110】
図1-8は、本実施例において一斉呼び出しサーバ40の記憶部45に記憶される情報の一例を示す図である。
記憶部45には、限定ではなく例として、制御部41によって一斉呼び出し処理として実行される一斉呼び出し処理プログラム451と、制御部41によってhttpデーモン処理として実行されるhttpデーモンプログラム453と、コンポーネントサーバ一覧情報455とが記憶される。
【0111】
コンポーネントサーバ一覧情報455は、インヴォーカであるコンポーネントサーバ20がプロセス間通信において一斉呼び出し(限定ではなく例として、rpc.fanout)を実行する場合、一斉呼び出し先として指定されるワーカであるコンポーネントサーバ20の一覧情報であり、限定ではなく例として、各コンポーネントサーバ20のサーバID(サーバ識別情報)が記憶され保管されている。
【0112】
なお、一斉呼び出しサーバ40は、限定ではなく例として、http通信を仲介し増幅するためのAPIサーバと言ってもよい。
【0113】
<処理>
図1-9は、本実施例において各装置が実行する処理の流れの一例を示すフローチャートである。本フローチャートでは、限定ではなく例として、手続き側からの応答を期待するrpc.call通信について説明する。また、本フローチャートでは、限定ではなく例として、コンポーネントサーバ20Aをrpcの呼び出し側(インヴォーカ)、コンポーネントサーバ20Bをrpcの手続き側(ワーカ)とする。
この図では、左側から順にインヴォーカとなるコンポーネントサーバ20Aの制御部21が実行する処理、呼び出し先解決サーバ10の制御部11が実行する処理、ワーカとなるコンポーネントサーバ20Bの制御部21が実行する処理をそれぞれ示している。
【0114】
フローチャートに先立ち、各コンポーネントサーバ20の制御部21は、限定ではなく例として、コンポーネント処理プログラム251とhttpデーモンプログラム253とに従って、コンポーネントプログラム処理とhttpデーモン処理とを開始する。すると、各コンポーネントサーバ20の制御部21は、限定ではなく例として、httpメッセージングドライバ2515に従って、記憶部25に記憶されるサーバID255を含むコンポーネントプログラム起動情報を通信I/F22によって呼び出し先解決サーバ10に送信する。
【0115】
なお、コンポーネントプログラム起動情報に、限定ではなく例として、各コンポーネントサーバ20に関する構成情報等のサーバ情報を含めるようにしてもよい。また、コンポーネントプログラム起動情報に、限定ではなく例として、コンポーネントプログラム処理の起動時に設定されるバインドキー情報を含めるようにしてもよい。
【0116】
通信I/F14によってコンポーネントサーバ20からコンポーネントプログラム起動情報を受信すると、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、ワーカ更新処理を実行する(S110)。
ワーカ更新処理において、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、受信したコンポーネントプログラム起動情報に基づいて、各コンポーネントサーバ20を「ワーカ」とするように呼び出し先管理データ153を更新し登録する。
【0117】
なお、各コンポーネントサーバ20の制御部21は、限定ではなく例として、コンポーネントプログラム処理を開始すると、限定ではなく例として、コンポーネントプログラム起動情報を所定時刻(限定ではなく例として、「毎時00分」)または所定期間(限定ではなく例として、「7200秒」)ごとに呼び出し先解決サーバ10に送信するようにしてもよい。
そして、呼び出し先解決サーバ10の制御部11は、コンポーネントサーバ20からコンポーネントプログラム起動情報を受信すると、受信したコンポーネントプログラム起動情報に基づいて、呼び出し先管理データ153を更新するようにしてもよい。
【0118】
また、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、各々のコンポーネントサーバ20がワーカとして稼働していることを確認するためのコンポーネントプログラム稼働確認情報を所定時刻(限定ではなく例として、「毎分00秒」)または所定期間(限定ではなく例として、「60秒」)ごとに各コンポーネントサーバ20に送信するようにしてもよい。
通信I/F24によって呼び出し先解決サーバ10からコンポーネントプログラム稼働確認情報を受信すると、コンポーネントサーバ20の制御部21は、限定ではなく例として、コンポーネントプログラム起動情報を呼び出し先解決サーバ10に送信するようにしてもよい。
そして、呼び出し先解決サーバ10の制御部11は、コンポーネントサーバ20からコンポーネントプログラム起動情報を受信すると、受信したコンポーネントプログラム起動情報に基づいて、呼び出し先管理データ153を更新するようにしてもよい。
【0119】
なお、呼び出し先解決サーバ10の制御部11は、あるコンポーネントサーバ20からコンポーネントプログラム起動情報を受信不能と判定する場合、そのコンポーネントサーバ20を呼び出し先管理データ153から削除するようにしてもよい。
【0120】
これにより、呼び出し先解決サーバ10において、各コンポーネントサーバ20の稼働状態に応じた死活監視を実現することができる。
【0121】
その後、インヴォーカであるコンポーネントサーバ20Aの制御部21は、限定ではなく例として、コンポーネントプログラムにおけるrpc.call手続きに基づいて、rpc.call処理を実行開始する(A110)。
rpc.call処理において、コンポーネントサーバ20Aのコンポーネントプログラム処理部211は、限定ではなく例として、httpメッセージングドライバ2515が組み込まれているメッセージングモジュール2513のRPCクライアント(狭義のインヴォーカ)を呼び出す。
【0122】
以下では、コンポーネント処理プログラム251からメッセージングモジュール2513の呼び出し引数において指定されるrpc処理の内容を、限定ではなく例として、「rpc処理要求情報」と称する。
【0123】
rpc処理要求情報は、限定ではなく例として、以下の要素で構成されることとしてもよい。
・rpcメッセージ情報:手続き側で行う具体例処理内容(関数と言ってもよい)。
・ターゲット:手続き側のコンポーネントサーバ20を探索する方法を識別するための情報。
・ルーティングキー:コンポーネントサーバ20を探索する際に用いる、バインドキー情報と照合するための情報。
【0124】
なお、rpc処理要求情報は、限定ではなく例として、より簡潔に、ルーティングキーと、rpcメッセージ情報とで構成されることとしてもよい。
【0125】
また、以下では、rpcメッセージ情報に基づく手続き側でのrpc処理の結果(関数の返り値と言ってもよい)に関する情報を「rpc処理結果情報」と称する。
【0126】
すると、コンポーネントサーバ20Aの制御部21は、限定ではなく例として、httpメッセージングドライバ2515に従って、RPCの手続き先を特定するために必要な情報であるワーカ一覧要求情報を通信I/F24によって呼び出し先解決サーバ10に送信する(A120)。
なお、呼び出し先解決サーバ10を識別するための情報(限定ではなく例として、IPアドレスやAPIサーバのURI等)は、限定ではなく例として、httpメッセージングドライバ2515が記憶することとしてもよい。また、呼び出し先解決サーバ10を識別するための情報は、随時呼び出し先解決サーバ10がコンポーネントサーバ20に送信するようにしてもよい。
【0127】
通信I/F14によってコンポーネントサーバ20Aからワーカ一覧要求情報を受信すると、呼び出し先解決サーバ10の制御部11は、呼び出し先管理データ153を参照し、限定ではなく例として、サーバ役割情報が「ワーカ」であるサーバIDと、バインドキー情報とを含むワーカ一覧情報を通信I/F14によってコンポーネントサーバ20Aに送信する(S130)。
なお、ワーカ一覧情報に、各コンポーネントサーバ20の構成情報やロードアベレージといった各種のサーバ情報を含めるようにしてもよい。
【0128】
なお、ワーカ一覧要求情報とワーカ一覧情報との送受信は、限定ではなく例として、httpプロトコルに従って行われるようにしてもよいし、DNSに従って行われるようにしてもよい。
【0129】
また、コンポーネントサーバ20Aの制御部21は、限定ではなく例として、呼び出し先解決サーバ10を示すURIに、限定ではなく例として、REST API(RESTful API)を介してワーカ一覧情報を取得するようにしてもよい。
【0130】
通信I/F24によって呼び出し先解決サーバ10からワーカ一覧情報を受信すると、コンポーネントサーバ20Aの制御部21は、ワーカ探索処理を実行する(A130)。
ワーカ探索処理において、コンポーネントサーバ20Aの制御部21は、限定ではなく例として、受信したワーカ一覧情報とrpc処理要求情報とに基づいて、rpcメッセージ情報を送信するワーカ(この例では、コンポーネントサーバ20B)を決定する。
【0131】
より具体例には、コンポーネントサーバ20Aの制御部21は、限定ではなく例として、rpc処理要求情報におけるターゲットおよびルーティングキーの条件を満たすバインドキー情報を持つコンポーネントサーバ20のサーバIDを探索するようにしてもよい。
【0132】
限定ではなく例として、ターゲットが「ダイレクト」である場合、コンポーネントサーバ20Aの制御部21は、バインドキー情報がルーティングキーとマッチするサーバIDのコンポーネントサーバ20をワーカとするようにしてもよい。
また、限定ではなく例として、ターゲットが「トピック」である場合、コンポーネントサーバ20Aの制御部21は、バインドキー情報における文字列のパターンを示す表現を利用し、ルーティングキーと条件マッチするサーバIDのコンポーネントサーバ20をワーカとするようにしてもよい。
また、限定ではなく例として、ターゲットが「null(無指定)」である場合、コンポーネントサーバ20Aの制御部21は、バインドキー情報がルーティングキーと完全一致するサーバIDのコンポーネントサーバ20をワーカとするようにしてもよい。
【0133】
なお、ワーカ探索処理において、コンポーネントサーバ20Aの制御部21は、複数のサーバIDを探索結果として出力するようにしてもよい。
【0134】
ワーカとなるサーバIDが探索されると、コンポーネントサーバ20Aの制御部21は、探索されたサーバIDに基づいて、rpcメッセージ情報を通信I/F24によってコンポーネントサーバ20Bに送信する(A150)。
また、コンポーネントサーバ20Bの制御部21は、通信I/F24によってコンポーネントサーバ20Aからrpcメッセージ情報を受信する(B110)。
【0135】
rpcメッセージ情報の送受信において、限定ではなく例として、コンポーネントサーバ20のhttpデーモン処理部213は、httpに従って情報の送受信を行うようにしてもよい。この場合、コンポーネントサーバ20Aの制御部21は、POSTメソッドによってコンポーネントサーバ20Bにrpcメッセージ情報を送信するようにしてもよい。また、コンポーネントサーバ20Bの制御部21は、GETメソッドによってコンポーネントサーバ20Aからrpcメッセージ情報を受信するようにしてもよい。
【0136】
なお、用いるプロトコルはhttp/1.0としてもよいし、http/1.1としてもよいし、http/2としてもよいし、その他のバージョンとしてもよい。
【0137】
限定ではなく例として、rpcメッセージ情報の送受信にhttpを用いることで、呼び出し側のコンポーネントサーバ20A(インヴォーカ)は、手続き側のコンポーネントサーバ20(ワーカ)にrpcメッセージ情報が届いたか否かを判定することができる。
【0138】
また、rpcメッセージ情報の送受信において、http以外のプロトコル(限定ではなく例として、SSH(Secure Shell)等)を用いて通信するようにしてもよい。
【0139】
なお、コンポーネントサーバ20Bの制御部21は、通信I/F24によってコンポーネントサーバ20Aからrpcメッセージ情報を受信すると、RPC処理中情報を通信I/F22によって呼び出し先解決サーバ10に送信するようにしてもよい。
通信I/F14によってコンポーネントサーバ20BからRPC処理中情報を受信すると、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、受信したRPC処理中情報に基づいて、呼び出し先管理データ153を更新する(限定ではなく例として、サーバ役割情報を「ビジー」とする)ようにしてもよい。
そして、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、サーバ役割情報が「ビジー」となっているコンポーネントサーバ20をワーカ一覧情報に含めないようにしてもよい。
これにより、rpcによる手続き中のコンポーネントサーバ20Bをワーカ一覧から一時的に外し、他のコンポーネントサーバ20から重複して手続き側として選択されることを防ぐことができる。
【0140】
通信I/F24によってコンポーネントサーバ20Aからrpcメッセージ情報を受信すると、コンポーネントサーバ20Bの制御部21は、コンポーネントプログラム処理を実行する(B130)。
コンポーネントプログラム処理において、コンポーネントサーバ20Bの制御部21は、受信したrpcメッセージ情報に基づいて、httpメッセージングドライバ2515が組み込まれているメッセージングモジュール2513のRPCサーバ(狭義のワーカ)を呼び出す。
すると、コンポーネントサーバ20Bのコンポーネントプログラム処理部211は、メッセージングモジュール2513を介して受信したrpcメッセージ情報で指定される手続き(処理)を実行する。
【0141】
限定ではなく例として、コンポーネントプログラム処理が終了すると、コンポーネントサーバ20Bの制御部21は、コンポーネントプログラム処理の処理結果を含むrpc処理結果情報を通信I/F24によってコンポーネントサーバ20Aに送信する(B150)。
また、コンポーネントサーバ20Aの制御部21は、通信I/F24によってコンポーネントサーバ20Bからrpc処理結果情報を受信する(A170)。
【0142】
rpc処理結果情報の送受信において、限定ではなく例として、コンポーネントサーバ20の制御部21は、rpcメッセージ情報の送受信と同様に、httpに従って情報の送受信を行うようにしてもよい。
rpc処理結果情報の送受信にhttpを用いることで、手続き側のコンポーネントサーバ20(ワーカ)は、呼び出し側のコンポーネントサーバ20A(インヴォーカ)にrpc処理結果情報が届いたか否かを判定することができる。
【0143】
なお、rpcメッセージ情報とrpc処理結果情報との送受信において、それぞれhttpリクエストが発生するようにしてもよいし、rpcメッセージ情報の送受信によるhttpリクエストのレスポンスとしてrpc処理結果情報の送受信が行われるようにしてもよい。
【0144】
また、rpc処理結果情報の送受信において、http以外のプロトコル(限定ではなく例として、SSH(Secure Shell)等)を用いて通信するようにしてもよい。
【0145】
なお、コンポーネントサーバ20Bの制御部21は、通信I/F24によってコンポーネントサーバ20Aにrpc処理結果情報を送信すると、RPC処理終了情報を通信I/F22によって呼び出し先解決サーバ10に送信するようにしてもよい。
通信I/F14によってコンポーネントサーバ20BからRPC処理終了情報を受信すると、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、受信したコンポーネントプログラム処理終了情報に基づいて、呼び出し先管理データ153を更新する(限定ではなく例として、サーバ役割情報を「ワーカ」とする)ようにしてもよい。
【0146】
また、コンポーネントサーバ20Aの制御部21は、通信I/F24によってコンポーネントサーバ20Bからrpc処理結果情報を受信すると、RPC処理終了情報を通信I/F22によって呼び出し先解決サーバ10に送信するようにしてもよい。
通信I/F14によってコンポーネントサーバ20AからRPC処理終了情報を受信すると、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、受信したコンポーネントプログラム処理終了情報に基づいて、呼び出し先管理データ153を更新する(限定ではなく例として、サーバ役割情報を「ワーカ」とする)ようにしてもよい。
【0147】
これらの処理により、RPCからタスク解放されたコンポーネントサーバ20を再びワーカ一覧に復帰させ、他のコンポーネントサーバ20から手続き側として選択させることができる。
【0148】
なお、手続き側からの応答を期待しないrpc.cast通信については、限定ではなく例として、B150とA170とのステップを省略することで実現するようにしてもよい。
rpc.cast通信についても、インヴォーカからワーカにrpcメッセージ情報が届いたか否かを判定することができる。
【0149】
また、本例ではワーカ探索処理においてコンポーネントサーバ20BのサーバIDが探索された場合について例示したが、ワーカ探索処理において複数のサーバIDが探索された場合についても同様に複数のワーカに対するrpcメッセージ情報および/またはrpc処理結果情報の送受信を行うようにしてもよい。
【0150】
図1-10は、本発明における提案手法と、従来手法であるAMQP利用時とにおけるソフトウェアモジュール間の協調動作の対比を示すブロック図である。
図1-10の上側には、提案手法であるhttpメッセージングドライバを用いる場合の動作を、下側にはAMQPライバを用いる場合の動作をそれぞれ示す。
ブロック図中において、丸印に数字で書かれる内容を、文中では便宜上「((数字))」と表記することとする。
【0151】
提案手法における動作は、限定ではなく例として、以下の通りである。なお、提案手法における動作は、以下の動作に限定されない。
((1)).インヴォーカ側のアプリケーションプロセス(限定ではなく例として、コンポーネントプログラム処理の一例)がRPC通信を行うためにRPCメッセージングクライアントモジュール(限定ではなく例として、メッセージングモジュールの一例)のRPCクライアントと通信。また、RPCクライアントからhttpメッセージングドライバへrpc処理要求情報を送信。
((2)).httpメッセージングドライバが呼び出し先解決サーバ10で提供される呼び出し先解決サービスに通信。
((3)).呼び出し先解決サービスからhttpメッセージングドライバへRPCの手続き先を特定するために必要な情報を送信。限定ではなく例として、httpメッセージングドライバが手続き先となるサーバ20Bを特定(Exchange and Bind)。
((4)).インヴォーカ側のhttpメッセージングドライバがワーカであるサーバ20Bにrpcメッセージ情報を送信。また、rpcメッセージ情報が送信されると、送信が完了したことを示す情報を、限定ではなく例として、RPCクライアントを介してアプリケーションプロセスに伝達可能。
((5)).ワーカ側のRPCメッセージングサーバモジュール(限定ではなく例として、メッセージングモジュールの一例)において、httpメッセージングドライバが受信したrpcメッセージ情報をRPCサーバに送信。RPCサーバはワーカ側のアプリケーションプロセス(限定ではなく例として、コンポーネントプログラム処理の一例)にrpcメッセージ情報に基づく処理を要求。
((6)).ワーカ側のアプリケーションプロセスがrpc処理結果情報をRPCメッセージングサーバモジュールに送信。RPCサーバを介してhttpメッセージングドライバに伝達。
((7)).ワーカ側のhttpメッセージングドライバがインヴォーカであるサーバ20Aにrpc処理結果情報を送信。また、rpc処理結果情報が送信されると、送信が完了したことを示す情報を、限定ではなく例として、RPCサーバを介してアプリケーションプロセスに伝達可能。
((8)).インヴォーカ側のRPCメッセージングクライアントモジュールにおいて、httpメッセージングドライバが受信したrpc処理結果情報をRPCクライアントに送信。RPCクライアントはインヴォーカ側のアプリケーションプロセスにrpc処理結果情報を戻り値として渡す。
【0152】
また、従来手法における動作は、限定ではなく例として、以下の通りである。
((1)).インヴォーカ側のアプリケーションプロセスがRPC通信を行うためにRPCメッセージングクライアントモジュールのRPCクライアントと通信。また、RPCクライアントからAMQPドライバへrpc処理要求情報を送信。
((2)).AMQPドライバがメッセージキューイングサービス(限定ではなく例として、RabbitMQ等)にrpc処理要求情報に基づくrpc処理要求を発行。メッセージキューイングサービスにおいて、手続き先となるサーバ20Bに紐づけられるキューを特定し、キューにrpcメッセージ情報を保管(Exchange, Bind and Queue)。
((3)).ワーカ側のRPCメッセージングサーバモジュールにおいて、AMQPドライバがメッセージキューイングサービスのキューを定期的にフェッチ。
((4)).キューにサーバ20B宛のrpcメッセージ情報が存在する場合、AMQPドライバがキューからrpcメッセージ情報を読み出し。
((5)).AMQPドライバが受信したrpcメッセージ情報をRPCサーバに送信。RPCサーバはワーカ側のアプリケーションプロセスにrpcメッセージ情報に基づく処理を要求。
((6)).ワーカ側のアプリケーションプロセスがrpc処理結果情報をRPCメッセージングサーバモジュールに送信。RPCサーバを介してAMQPドライバに伝達。
((7)).ワーカ側のAMQPドライバがメッセージキューイングサービスにrpc処理結果情報を送信(キューイング)。
((8)).メッセージキューイングサービスがインヴォーカ側のAMQPドライバにrpc処理結果情報を送信。
((9)).インヴォーカ側のRPCメッセージングクライアントモジュールにおいて、AMQPドライバが受信したrpc処理結果情報をRPCクライアントに送信。RPCクライアントはインヴォーカ側のアプリケーションプロセスにrpc処理結果情報を戻り値として渡す。
【0153】
これらの動作から、提案手法では、インヴォーカ側のhttpメッセージングドライバとワーカ側のhttpメッセージングドライバとにおいて直接rpcメッセージ情報できることがわかる。rpc処理結果情報についても同様である。
このため、インヴォーカ側のhttpメッセージングドライバにおいて送信先となるワーカの解決が終了していれば、それ以降のプロセス間通信に支障が生じない。また、呼び出し先解決サービスが停止した場合においても、インヴォーカ側でrpcメッセージ情報の送信前にトラブルを検知することができる。このため、アプリケーションプロセスに例外処理等を実行させることが容易となる。
【0154】
対して、従来手法では、全てのrpcメッセージ情報およびrpc処理結果情報は、メッセージキューイングサービスを経由する必要が生じる(メッセージキューイングサービスがSPOFとなる)。
このため、メッセージキューイングサービスが停止すると、送受信中のrpcメッセージ情報およびrpc処理結果情報を含めて、プロセス間通信全般に支障が生じる。また、メッセージキューイングサービスのキューに何らかの改変が発生した場合等において、プロセス間通信に混乱が生じ、原因の特定が困難なアプリケーションプロセスのエラーが生じる可能性がある。
【0155】
また、従来手法において、ワーカ側のAMQPドライバはインヴォーカから送信されたrpcメッセージ情報を受信するために、メッセージキューイングサービスのキューへのフェッチが随時必要とされる。
対して、提案手法では、インヴォーカ側のアプリケーションプロセスからワーカ側のアプリケーションプロセスまでrpcメッセージ情報がソフトウェアモジュール間を一路に伝達されていることがわかる。rpc処理結果情報についても同様である。
このため、提案手法では、処理にフェッチを行うためのオーバーヘッドが生じず、アプリケーションプロセスを実行するクラスタ全体の負荷を低減させることができる。
【0156】
また、提案手法では、インヴォーカ側のアプリケーションプロセスはワーカにrpcメッセージ情報が到達したことを、ワーカ側のアプリケーションプロセスはインヴォーカにrpc処理結果情報が到達したことを、それぞれ検知可能である。
対して、従来手法では、メッセージキューイングサービスにrpcメッセージ情報および/またはrpc処理結果情報がキューイングされたか否かのみを検知することができる。
このため、提案手法では、プロセス間通信の進行度合を的確に把握することができ、限定ではなく例として、アプリケーションプロセスにおける投機的実行等を効率的に進めることができる。また、アプリケーションプロセスのデバッグ操作がより容易となる。
【0157】
また、従来手法におけるメッセージキューイングサービスは、呼び出し先解決サービスと比べて複雑な処理を必要とする。このため、提案手法では、プロセス間通信を実現するためのサービスを含めたアプリケーションプロセスを実行するクラスタ全体のリソースを低減することができる。また、メッセージキューイングサービスに比べて簡潔な呼び出し先解決サービスは、平均故障間隔(MTBF:Mean Time Between Failures)が長く、また、平均復旧時間(MTTR:Mean Time To Recovery)が短くなることが期待できる。結果として、アプリケーションプロセスを実行するクラスタ全体の信頼性をより向上させることができる。
【0158】
なお、本発明におけるプロセス間通信は、rpc.call通信やrpc.cast通信に限定されない。
【0159】
図1-11は、本実施例において各装置が実行する処理の流れの別例を示すフローチャートである。本フローチャートでは、限定ではなく例として、手続き側からの応答を期待しないrpc.fanout通信について説明する。また、本フローチャートでは、限定ではなく例として、コンポーネントサーバ20Aをrpcの呼び出し側(インヴォーカ)、コンポーネントサーバ20B、コンポーネントサーバ20C、コンポーネントサーバ20D、・・・をrpcの手続き側(ワーカ)とする。
この図では、左側から順にインヴォーカとなるコンポーネントサーバ20Aの制御部21が実行する処理、呼び出し先解決サーバ10の制御部11が実行する処理、一斉呼び出しサーバ40の制御部41が実行する処理、ワーカとなるコンポーネントサーバ20Bの制御部21が実行する処理をそれぞれ示している。なお、他のワーカについては、限定ではなく例として、コンポーネントサーバ20Bの制御部21が実行する処理と同様に実行することができる。
【0160】
なお、説明を簡略化するため、限定ではなく例として、本フローチャートでは一斉呼び出しサーバ40が一つ(ブロードキャスタが一つ)の場合について例示する。限定ではなく例として、一斉呼び出しサーバ40は複数(限定ではなく例として、一斉呼び出しサーバ40A,一斉呼び出しサーバ40B,一斉呼び出しサーバ40C,・・・等)あってもよい。この場合、各一斉呼び出しサーバ40には、異なるバインドキー情報が割り振られるようにしてもよい。
【0161】
フローチャートに先立ち、前述のように、各コンポーネントサーバ20の制御部21は、呼び出し先解決サーバ10にコンポーネントプログラム起動情報を送信する。
また、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、受信したコンポーネントプログラム起動情報に基づいて、各コンポーネントサーバ20を「ワーカ」とするように呼び出し先管理データ153を更新する。
【0162】
一斉呼び出しサーバ40の制御部41は、限定ではなく例として、ワーカ一覧要求情報を通信I/F44によって呼び出し先解決サーバ10に送信する。そして、通信I/F14によって一斉呼び出しサーバ40からワーカ一覧要求情報を受信すると、呼び出し先解決サーバ10の制御部11は、通信I/F14によって一斉呼び出しサーバ40にワーカ一覧情報を送信する。なお、一斉呼び出しサーバ40に送信するワーカ一覧情報には、サーバ役割情報が「ビジー」となっているコンポーネントサーバ20を含めるようにしてもよい。
また、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、呼び出し先管理データ153を参照し、ワーカ一覧要求情報を送信した一斉呼び出しサーバ40のサーバ役割情報を「ブロードキャスタ」に更新する。
通信I/F44によって呼び出し先解決サーバ10からワーカ一覧情報を受信すると、一斉呼び出しサーバ40の制御部41は、受信したワーカ一覧情報に基づいて、コンポーネントサーバ一覧情報455を更新する。
【0163】
なお、一斉呼び出しサーバ40にバインドキー情報が割り当てられる場合、一斉呼び出しサーバ40の制御部41は、受信したワーカ一覧情報のうち、一斉呼び出しサーバ40のバインドキー情報とマッチするコンポーネントサーバ20のサーバID一覧をコンポーネントサーバ一覧情報455に記憶させるようにしてもよい。
限定ではなく例として、
図1-6において、一斉呼び出しサーバ40のバインドキー情報が「apple」である場合、コンポーネントサーバ一覧情報455には、「apple」を含むサーバID「SID20A」~「SID20D」までの各コンポーネントサーバ20に関する識別情報が格納されるようにしてもよい。
【0164】
また、一斉呼び出しサーバ40の制御部41は、限定ではなく例として、ワーカ一覧要求情報を所定時刻(限定ではなく例として、「毎時00分」)または所定期間(限定ではなく例として、「7200秒」)ごとに呼び出し先解決サーバ10に送信することで、コンポーネントサーバ一覧情報455を更新するようにしてもよい。
【0165】
なお、各コンポーネントサーバ20の制御部21は、一斉呼び出しサーバ40にコンポーネントプログラム起動情報を送信するようにしてもよい。そして、一斉呼び出しサーバ40の制御部41は、受信したコンポーネントプログラム起動情報に基づいて、コンポーネントサーバ一覧情報455を更新するようにしてもよい。
【0166】
まず、インヴォーカであるコンポーネントサーバ20Aの制御部21は、限定ではなく例として、コンポーネントプログラムにおけるrpc.fanout手続きに基づいて、rpc.fanout処理を実行開始する(A210)。
rpc.fanout処理において、コンポーネントサーバ20Aのコンポーネントプログラム処理部211は、限定ではなく例として、httpメッセージングドライバ2515が組み込まれているメッセージングモジュール2513のRPCクライアントを呼び出す。
【0167】
すると、コンポーネントサーバ20Aの制御部21は、限定ではなく例として、httpメッセージングドライバ2515に従って、RPCの手続き先を特定するために必要な情報を要求するブロードキャスタ要求情報を通信I/F24によって呼び出し先解決サーバ10に送信する(A230)。
【0168】
すると、呼び出し先解決サーバ10の制御部11は、呼び出し先管理データ153を参照し、限定ではなく例として、サーバ役割情報が「ブロードキャスタ」であるサーバIDと、バインドキー情報とを含むブロードキャスタ情報を通信I/F14によってコンポーネントサーバ20Aに送信する(S210)。なお、ブロードキャスタ情報に、各一斉呼び出しサーバ40のロードアベレージといった各種の情報を含めるようにしてもよい。
【0169】
なお、呼び出し先解決サーバ10の制御部11は、通信I/F14によってコンポーネントサーバ20Aからブロードキャスタ要求情報を受信すると、呼び出し先解決サーバ10の制御部11は、ワーカ更新処理を実行するようにしてもよい。
【0170】
また、コンポーネントサーバ20Aの制御部21は、限定ではなく例として、呼び出し先解決サーバ10を示すURIに、限定ではなく例として、REST APIを介してブロードキャスタ情報を取得するようにしてもよい。
【0171】
通信I/F24によって呼び出し先解決サーバ10からブロードキャスタ情報を受信すると、コンポーネントサーバ20Aの制御部21は、ブロードキャスタ探索処理を実行する(A250)。
ブロードキャスタ探索処理において、コンポーネントサーバ20Aの制御部21は、限定ではなく例として、受信したブロードキャスタ情報とrpc処理要求情報とに基づいて、rpcメッセージ情報を送信するブロードキャスタ(この例では、一斉呼び出しサーバ40)を決定する。
【0172】
より具体例には、コンポーネントサーバ20Aの制御部21は、限定ではなく例として、rpc処理要求情報におけるターゲットおよびルーティングキーの条件を満たすバインドキー情報を持つ一斉呼び出しサーバ40のサーバIDを探索するようにしてもよい。
限定ではなく例として、ターゲットが「ファンアウト」である場合、コンポーネントサーバ20Aの制御部21は、バインドキー情報がルーティングキーとマッチするサーバIDの一斉呼び出しサーバ40をブロードキャスタとするようにしてもよい。
また、限定ではなく例として、ターゲットが「ファンアウト」であり、ルーティングキーが「null(無指定)」である場合、コンポーネントサーバ20Aの制御部21は、任意のサーバIDの一斉呼び出しサーバ40をブロードキャスタとするようにしてもよいし、ロードアベレージが最も低いサーバIDの一斉呼び出しサーバ40をブロードキャスタとするようにしてもよい。
【0173】
なお、ブロードキャスタの識別情報(限定ではなく例として、IPアドレスやAPIサーバのURI等)は、限定ではなく例として、httpメッセージングドライバ2515が記憶することとしてもよい。探索されたサーバIDは、ブロードキャスタの識別情報と言ってもよい。ブロードキャスタの識別情報は、限定ではなく例として、一斉呼び出しサーバ40が随時各コンポーネントサーバ20に送信するようにしてもよい。
【0174】
ブロードキャスタとなるサーバIDが探索されると、コンポーネントサーバ20Aの制御部21は、探索されたサーバIDに基づいて、rpcメッセージ情報を通信I/F24によって一斉呼び出しサーバ40に送信する(A270)。
また、一斉呼び出しサーバ40の制御部41は、通信I/F44によってコンポーネントサーバ20Aからrpcメッセージ情報を受信する(L210)。
【0175】
rpcメッセージ情報の送受信において、限定ではなく例として、コンポーネントサーバ20Aのhttpデーモン処理部213と、一斉呼び出しサーバ40のhttpデーモン処理部413とは、httpに従って、情報の送受信を行うようにしてもよい。この場合、コンポーネントサーバ20Aの制御部21は、POSTメソッドによって一斉呼び出しサーバ40にrpcメッセージ情報を送信するようにしてもよい。また、一斉呼び出しサーバ40の制御部21は、GETメソッドによってコンポーネントサーバ20Aからrpcメッセージ情報を受信するようにしてもよい。
【0176】
なお、rpcメッセージ情報の送受信において、限定ではなく例として、コンポーネントサーバ20Aの制御部21は、一斉呼び出しサーバ40を示すURIに、限定ではなく例として、REST APIを介してrpcメッセージ情報を送信するようにしてもよい。
【0177】
また、rpcメッセージ情報の送受信において、http以外のプロトコル(限定ではなく例として、SSH(Secure Shell)等)を用いて通信するようにしてもよい。
【0178】
限定ではなく例として、rpcメッセージ情報の送受信にhttpを用いることで、呼び出し側のコンポーネントサーバ20A(インヴォーカ)は、一斉呼び出しサーバ40(ブロードキャスタ)にrpcメッセージ情報が届いたか否かを判定することができる。
【0179】
通信I/F44によってコンポーネントサーバ20Aからrpcメッセージ情報を受信すると、一斉呼び出しサーバ40の制御部41は、rpcメッセージ情報増幅送信処理を実行する(L230)。
rpcメッセージ情報増幅送信処理において、一斉呼び出しサーバ40の制御部41は、限定ではなく例として、コンポーネントサーバ一覧情報455を参照し、rpcメッセージ情報を通信I/F44によってブロードキャスタが送信するコンポーネントサーバ(ワーカ)一覧として登録された各コンポーネントサーバ20(限定ではなく例として、コンポーネントサーバ20A,コンポーネントサーバ20B,コンポーネントサーバ20C、・・・)に送信する。
また、コンポーネントサーバ20Bの制御部21は、通信I/F44によって一斉呼び出しサーバ40からrpcメッセージ情報を受信する(B110)。そして、一斉呼び出しサーバ40からrpcメッセージ情報を受信すると、コンポーネントサーバ20Bの制御部21は、コンポーネントプログラム処理を実行する(B130)。
【0180】
rpcメッセージ情報の送受信において、限定ではなく例として、一斉呼び出しサーバ40のhttpデーモン処理部413と、コンポーネントサーバ20Bのhttpデーモン処理部213とは、httpに従って、情報の送受信を行うようにしてもよい。この場合、一斉呼び出しサーバ40の制御部41は、POSTメソッドによってコンポーネントサーバ20Bにrpcメッセージ情報を送信するようにしてもよい。また、コンポーネントサーバ20Bの制御部21は、GETメソッドによって一斉呼び出しサーバ40からrpcメッセージ情報を受信するようにしてもよい。
【0181】
なお、rpcメッセージ情報増幅送信処理において、一斉呼び出しサーバ40の制御部41は、rpcメッセージ情報の送信先がインヴォーカ(この場合、コンポーネントサーバ20A)である場合、rpcメッセージ情報を送信しないようにしてもよい。
【0182】
また、rpcメッセージ情報の送受信において、http以外のプロトコル(限定ではなく例として、SSH(Secure Shell)等)を用いて通信するようにしてもよい。
【0183】
限定ではなく例として、rpcメッセージ情報の送受信にhttpを用いることで、一斉呼び出しサーバ40(ブロードキャスタ)は、手続き側の各コンポーネントサーバ20(ワーカ)にrpcメッセージ情報が届いたか否かを判定することができる。
【0184】
なお、一斉呼び出しサーバ40の制御部41は、限定ではなく例として、手続き側の各コンポーネントサーバ20にrpcメッセージ情報が届いたと判定する場合、呼び出し側のコンポーネントサーバ20A(インヴォーカ)にrpcメッセージ情報が届いたことを示すrpcメッセージ到達情報を送信するようにしてもよい。
rpcメッセージ到達情報は、各ワーカにrpcメッセージ情報が届いたと判定するごとに送信するようにしてもよいし、すべてのワーカにrpcメッセージ情報が届いたと判定する場合、送信するようにしてもよい。
これにより、rpc.fanout通信においても、呼び出し側のコンポーネントサーバ20A(インヴォーカ)は、手続き側の各コンポーネントサーバ20(ワーカ)にrpcメッセージ情報が届いたか否かを判定することができる。
【0185】
また、一斉呼び出しサーバ40の制御部41は、限定ではなく例として、通信I/F44によってコンポーネントサーバ20Aからrpcメッセージ情報を受信すると、ワーカ一覧要求情報を呼び出し先解決サーバ10に送信することで、コンポーネントサーバ一覧情報455を更新するようにしてもよい。
【0186】
限定ではなく例として、rpc.fanout通信において、多数のワーカと通信する必要が生じる場合、インヴォーカは、ブロードキャスタを介して各ワーカにrpcメッセージ情報を送信することができる。このため、インヴォーカが直接各ワーカにrpcメッセージ情報を送信する(もしくはメッセージングキューを発行する)場合に比べて、インヴォーカの負荷を下げることができる。インヴォーカの通信負荷をコンポーネントプログラム処理に直接関わらないブロードキャスタに肩代わりさせることで、結果として、ソフトウエアコンポーネントを動作させるクラスタの負荷が下がり、ソフトウエアコンポーネントの動作安定性向上と処理の高速化を実現することができる。
【0187】
<第1実施例の効果>
本実施例は、インヴォーカであるコンポーネントサーバ20A(限定ではなく、第1サーバの一例)からワーカである少なくともコンポーネントサーバ20B(限定ではなく、第2サーバの一例)へのRPC(限定ではなく、プロセス間通信の一例)を行うサーバシステムにおいて、サーバシステムは、ワーカ一覧情報送信処理(限定ではなく、プロセス間通信先を特定することに関する処理の一例)を実行する呼び出し先解決サーバ10(限定ではなく、解決サーバの一例)を含む。そして、コンポーネントサーバ20Aの制御部21は、コンポーネントサーバ20Bを特定するためのワーカ一覧情報(限定ではなく、第1情報の一例)を呼び出し先解決サーバ10から受信すると、ワーカ一覧情報に基づいて、コンポーネントサーバ20Bにrpcメッセージ情報(限定ではなく、第2情報の一例)を送信する。また、コンポーネントサーバ20Bの制御部21は、コンポーネントサーバ20Aからrpcメッセージ情報を受信すると、rpcメッセージ情報に基づくコンポーネントプログラム処理(限定ではなく、第1処理の一例)を行う構成を示している。
このような構成により得られる実施例の効果の一例として、第1サーバは、解決サーバから受信する第1情報からプロセス間通信を行う相手の第2サーバを特定することができる。そして、第1サーバは、第2サーバにプロセス間通信の処理を要求するための第2情報を直接送信することができる。そして、第2サーバは、第1サーバから第2情報を直接受信し、第2情報に基づく第1処理を実行することができる。
結果として、サーバシステムの可用性を向上させることができる。
【0188】
また、本実施例は、rpcメッセージ情報がhttpに基づいて送受信される構成を示している。
このような構成により得られる実施例の効果の一例として、第2情報を、ステートレス性を持つプロトコルであるhttpに基づいて送受信することで、第1サーバと第2サーバとの制御部における通信負荷を下げることができる。そのため、ステートフル性を持つTCP(Transmission Control Protocol)やSSHに基づいて通信を行う場合に比べて、送受信処理に係る負荷を軽減することができる。
なお、AMQPでは、限定ではなく例として、TCPに基づいて通信を実行する。
【0189】
また、本実施例は、インヴォーカであるコンポーネントサーバ20Aの制御部21は、ワーカであるコンポーネントサーバ20Bがrpcメッセージ情報を受信したことを判定する構成を示している。
このような構成により得られる実施例の効果の一例として、第1サーバにおいて、第2サーバが第2情報を受信したか否かに基づく例外処理等を実行することが実現可能となる。結果として、サーバシステムの可用性を向上させることができる。
【0190】
また、本実施例は、コンポーネントサーバ20Aの制御部21は、RPC通信を制御するメッセージングモジュール2513(限定ではなく、ミドルウェアの一例)に組み込まれたhttpメッセージングドライバ2515(限定ではなく、メッセージングドライバの一例)を介して(httpメッセージングドライバに従って)ワーカ一覧情報を受信し、rpcメッセージ情報を送信する制御を行う。そして、コンポーネントサーバ20Bの制御部21は、httpメッセージングドライバ2515を介して(httpメッセージングドライバに従って)rpcメッセージ情報を受信する制御を行う構成を示している。
このような構成により得られる実施例の効果の一例として、第1サーバと第2サーバとで、ミドルウェアのメッセージングドライバを変更することで、容易にプロセス間通信の実現方法を変更することができる。そのため、サーバシステムのユーザは、メッセージングドライバを選択することで、プロセス間通信の実現方法を迅速かつ柔軟に調整することができる。
【0191】
また、本実施例は、ワーカであるコンポーネントサーバ20Bの制御部21は、rpcメッセージ情報に基づくコンポーネントプログラム処理に基づいて、rpc処理結果情報(限定ではなく、第3情報の一例)を送信する。そして、コンポーネントサーバ20Aの制御部21は、コンポーネントサーバ20Bからrpc処理結果情報を受信する構成を示している。
このような構成により得られる実施例の効果の一例として、第2サーバは、第1サーバにプロセス間通信の処理結果である第3情報を直接送信することができる。そして、第1サーバは、第2サーバから第3情報を直接受信し、プロセス間通信の処理を完了することができる。
結果として、サーバシステムの可用性を向上させることができる。
【0192】
また、本実施例は、rpcメッセージ情報とrpc処理結果情報とがhttpに基づいて送受信される構成を示している。
このような構成により得られる実施例の効果の一例として、第2情報と第3情報とを、ステートレス性を持つプロトコルであるhttpに基づいて送受信することで、第1サーバと第2サーバとの制御部における通信負荷を下げることができる。そのため、ステートフル性を持つSMTP(Simple Mail Transfer Protocol)やFTP(File Transfer Protocol)に基づいて通信を行う場合に比べて、迅速に送受信の処理を実行することができる。
【0193】
また、本実施例は、ワーカであるコンポーネントサーバ20Bの制御部21は、インヴォーカであるコンポーネントサーバ20Aがrpc処理結果情報を受信したことを判定する構成を示している。
このような構成により得られる実施例の効果の一例として、第2サーバにおいて、第1サーバが第3情報を受信したか否かに基づく例外処理等を実行することが実現可能となる。結果として、サーバシステムのユーザがシステムデバッグ等を実行することをより容易とし、ユーザの利便性を向上させることができる。
【0194】
また、本実施例は、コンポーネントサーバ20Aの制御部21は、RPC通信を制御するメッセージングモジュール2513(限定ではなく、ミドルウェアの一例)に組み込まれたhttpメッセージングドライバ2515(限定ではなく、メッセージングドライバの一例)を介して(httpメッセージングドライバに従って)ワーカ一覧情報を受信し、rpcメッセージ情報を送信し、rpc処理結果情報を受信する制御を行う。そして、コンポーネントサーバ20Bの制御部21は、httpメッセージングドライバ2515を介して(httpメッセージングドライバに従って)rpcメッセージ情報を送信し、rpc処理結果情報を受信する制御を行う構成を示している。
このような構成により得られる実施例の効果の一例として、第1サーバと第2サーバとで、ミドルウェアのメッセージングドライバを変更することで、容易にプロセス間通信の実現方法を変更することができる。そのため、サーバシステムのユーザは、メッセージングドライバを選択することで、プロセス間通信の実現方法を迅速かつ柔軟に調整することができる。
【0195】
また、本実施例は、サーバシステムは、ワーカである少なくともコンポーネントサーバ20Bとコンポーネントサーバ20C(限定ではなく、第3サーバの一例)とにrpcメッセージ情報増幅送信処理(限定ではなく、プロセス間通信の処理を要求することに関する処理の一例)を実行する一斉呼び出しサーバ40(限定ではなく、増幅サーバの一例)を含む。そして、インヴォーカであるコンポーネントサーバ20Aの制御部21は、一斉呼び出しサーバ40を特定するためのブロードキャスタ情報(限定ではなく、第4情報の一例)を呼び出し先解決サーバ10から受信し、ブロードキャスタ情報に基づいて、一斉呼び出しサーバ40にrpcメッセージ情報(限定ではなく、第5情報の一例)を送信する。また、一斉呼び出しサーバ40の制御部41は、コンポーネントサーバ20Aからrpcメッセージ情報を受信すると、少なくともコンポーネントサーバ20Bとコンポーネントサーバ20Cとにrpcメッセージ情報を送信する。コンポーネントサーバ20Bとコンポーネントサーバ20Cとの制御部21は、rpcメッセージ情報を受信すると、rpcメッセージ情報に基づくコンポーネントプログラム処理(限定ではなく、第5情報に基づく処理の一例)を実行する構成を示している。
このような構成により得られる実施例の効果の一例として、第1サーバは、解決サーバから受信する第4情報から増幅サーバを特定することができる。そして、第1サーバは、プロセス間通信の処理を要求するための第5情報を1度だけ増幅サーバに送信することで、増幅サーバを中継して第2サーバと第3サーバとに第5情報を送信することができる。
また、第1サーバは、増幅サーバに第5情報を直接送信することができる。そして、増幅サーバは、少なくとも第2サーバと第3サーバとに、第5情報を直接送信することができる。
結果として、複数のサーバに対してプロセス間通信の処理を要求する場合、第1サーバが直接複数のサーバに対して第5情報を送信する場合に比べて、第1サーバの負荷を下げることができる。そして、サーバシステムの可用性を向上させることができる。
【0196】
また、本実施例は、rpcメッセージ情報がhttpに基づいて送受信される構成を示している。
このような構成により得られる実施例の効果の一例として、第5情報を、ステートレス性を持つプロトコルであるhttpに基づいて送受信することで、第1サーバと第2サーバとの制御部における通信負荷を下げることができる。そのため、ステートフル性を持つプロトコルに基づいて通信を行う場合に比べて、迅速に送受信の処理を実行することができる。
【0197】
また、本実施例は、コンポーネントサーバ20Aの制御部21は、RPC通信を制御するメッセージングモジュール2513(限定ではなく、ミドルウェアの一例)に組み込まれたhttpメッセージングドライバ2515(限定ではなく、メッセージングドライバの一例)を介して(httpメッセージングドライバに従って)ブロードキャスタ情報を受信し、rpcメッセージ情報を送信する制御を行う。そして、コンポーネントサーバ20Bとコンポーネントサーバ20Cとの制御部21は、httpメッセージングドライバ2515を介して(httpメッセージングドライバに従って)rpcメッセージ情報を受信する制御を行う構成を示している。
このような構成により得られる実施例の効果の一例として、第1サーバと第2サーバとで、ミドルウェアのメッセージングドライバを変更することで、容易にプロセス間通信の実現方法を変更することができる。そのため、サーバシステムのユーザは、メッセージングドライバを選択することで、プロセス間通信の実現方法を迅速かつ柔軟に調整することができる。
【0198】
また、本実施例は、プロセス間通信がRPCに基づく構成を示している。
このような構成により得られる実施例の効果の一例として、RFC(Request For Comments)で規定され、標準化された技術として種々のシステムにおいて広く用いられているRPCに基づいて、プロセス間通信を実現することができる。そのため、ユーザの利便性を向上させることができる。
【0199】
<第1変形例(1)>
上記の実施例では、ワーカ探索処理はインヴォーカとなったコンポーネントサーバ20Aにおいて実行することとしたが、これに限定されない。限定ではなく例として、ワーカ探索処理を呼び出し先解決サーバ10で実行するようにしてもよい。
【0200】
この場合、限定ではなく例として、
図1-9において、コンポーネントサーバ20Aの制御部21は、限定ではなく例として、rpc.call処理を実行開始すると(A110)、限定ではなく例として、rpc処理要求情報におけるターゲットとルーティングキーとを含むワーカ探索要求情報を通信I/F24によって呼び出し先解決サーバ10に送信するようにしてもよい。
【0201】
通信I/F14によってコンポーネントサーバ20Aからワーカ探索要求情報を受信すると、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、呼び出し先管理データ153を参照し、限定ではなく例として、サーバ役割情報が「ワーカ」であるサーバIDの各レコードと、ワーカ探索要求情報とに基づいて、ワーカ探索処理を実行する。
ワーカ探索処理については、限定ではなく例として、コンポーネントサーバ20Aの制御部21におけるワーカ探索処理と同様に実行するようにしてもよい。
【0202】
ワーカ探索処理を実行すると、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、探索されたサーバIDを含むワーカ解決情報を通信I/F14によってコンポーネントサーバ20Aに送信するようにしてもよい。
そして、コンポーネントサーバ20Aの制御部21は、受信したワーカ解決情報に基づいて、rpcメッセージ情報を通信I/F24によってコンポーネントサーバ20Bに送信するようにしてもよい。
【0203】
ワーカ探索処理を呼び出し先解決サーバ10において実行することにより、各コンポーネントサーバ20の処理負荷を呼び出し先解決サーバ10に負荷分散させ、ソフトウエアコンポーネントの処理速度を向上させることができるとともに、より柔軟なスケーリングに対応可能とすることが期待できる。
【0204】
<第1変形例(2)>
上記の実施例では、ワーカとなったコンポーネントサーバ20Bがrpcメッセージ情報を受信すると、rpcメッセージ情報に基づくコンポーネントプログラム処理を実行することとしたが、これに限定されない。
限定ではなく例として、インヴォーカとなったコンポーネントサーバ20Aの制御部21は、コンポーネントサーバ20Bがrpcメッセージ情報を受信したと判定し、その後所定時間(限定ではなく例として、「60秒」)が経過した後もrpc処理結果情報を受信しない場合、ワーカに何らかのトラブルが発生したと判定するようにしてもよい。
【0205】
この場合、コンポーネントサーバ20Aの制御部21は、限定ではなく例として、ワーカに送信したrpcメッセージ情報に基づく処理を中止させるためのRPC中止要求情報を、限定ではなく例として、httpメッセージングドライバを介して通信I/F24によってコンポーネントサーバ20Bに送信するようにしてもよい。
【0206】
また、コンポーネントサーバ20Aの制御部21は、限定ではなく例として、メッセージングモジュールにおいて、要求されたrpc.call処理に基づくrpc処理要求情報を再生成し、限定ではなく例として、ワーカ探索処理とrpcメッセージ情報送信処理とをやり直すようにしてもよい。
【0207】
なお、やり直しのワーカ探索処理において、コンポーネントサーバ20Aの制御部21は、前回探索されたワーカ(例えば、コンポーネントサーバ20B)とは異なるワーカを送信先として決定するようにしてもよい。
【0208】
これにより、プロセス間通信におけるデッドロックを防ぐとともに、プロセス間通信のリトライをメッセージングモジュールのレベル(レイヤー)で実行させることができる。
【0209】
<第1変形例(3)>
上記の実施例では、rpc.fanout処理において、インヴォーカとなったコンポーネントサーバ20Aの制御部21は、一の一斉呼び出しサーバ40にrpcメッセージ情報を送信することとしたが、これに限定されない。
限定ではなく例として、ブロードキャスタ探索処理において、コンポーネントサーバ20Aの制御部21は、複数のサーバIDを探索結果として出力するようにしてもよい。
そして、コンポーネントサーバ20Aの制御部21は、探索結果となった複数のサーバIDに対応する一斉呼び出しサーバ40(限定ではなく例として、一斉呼び出しサーバ40A,一斉呼び出しサーバ40B,・・・等)にrpcメッセージ情報を送信するようにしてもよい。
【0210】
これにより、fanout先のワーカが膨大な数となる場合においても、ブロードキャスタの負荷を分散させることで迅速にプロセス間通信の仲介を行うことができる。
【0211】
また、限定ではなく例として、異なる一斉呼び出しサーバ40ごとに異なるバインドキー情報を与えるようにしてもよい。そして、ブロードキャスタ探索処理において、コンポーネントサーバ20Aの制御部21は、ワーカ探索処理と同様にルーティングキーとマッチする複数の一斉呼び出しサーバ40を探索結果として出力できるようにしてもよい。
【0212】
これにより、インヴォーカは多くの異なるワーカに対して柔軟にかつ簡潔にプロセス間通信を実現することができる。
【0213】
<第1変形例(4)>
上記の実施例では、一斉呼び出しサーバ40の制御部41は、予めコンポーネントサーバ一覧情報455を更新することとしたが、これに限定されない。
【0214】
限定ではなく例として、一斉呼び出しサーバ40の制御部41は、インヴォーカであるコンポーネントサーバ20Aからrpcメッセージ情報を受信すると、ワーカ一覧要求情報を通信I/F44によって呼び出し先解決サーバ10に送信するようにしてもよい。そして、一斉呼び出しサーバ40からワーカ一覧要求情報を受信すると、呼び出し先解決サーバ10の制御部11は、通信I/F14によって一斉呼び出しサーバ40にワーカ一覧情報を送信するようにしてもよい。
通信I/F44によって呼び出し先解決サーバ10からワーカ一覧情報を受信すると、一斉呼び出しサーバ40の制御部41は、受信したワーカ一覧情報に基づいて、コンポーネントサーバ一覧情報455を更新するようにしてもよい。
【0215】
一斉呼び出しサーバ40の制御部41は、限定ではなく例として、コンポーネントサーバ一覧情報455を更新すると、rpcメッセージ情報増幅送信処理を実行するようにしてもよい。
【0216】
これにより、一斉呼び出しサーバ40の制御部41は、逐次最新のワーカ一覧情報に基づいて、rpcメッセージ情報増幅送信処理を実行することができ、rpcメッセージ情報の送信漏れやワーカとしての機能を停止しているコンポーネントサーバ20へのrpcメッセージ情報の誤送信を防ぐことができる。
【0217】
<第1変形例(5)>
上記の実施例では、手続き側からの応答を期待しないrpc.fanout通信について例示したが、これに限定されない。限定ではなく例として、rpc.fanout通信において、手続き側からの応答を受け取るようにしてもよい。
【0218】
この場合、限定ではなく例として、
図1-11において、コンポーネントサーバ20Bの制御部21は、コンポーネントプログラム処理を実行すると(B130)、コンポーネントプログラム処理の処理結果を含むrpc処理結果情報を通信I/F24によってコンポーネントサーバ20Aに送信するようにしてもよい。他のワーカとなるコンポーネントサーバについても同様である。
【0219】
なお、コンポーネントサーバ20Bの制御部21は、コンポーネントプログラム処理を実行すると、限定ではなく例として、rpc処理結果情報を通信I/F24によってrpcメッセージ情報を受信した一斉呼び出しサーバ40に送信するようにしてもよい。そして、一斉呼び出しサーバ40の制御部41は、コンポーネントサーバ20Bからrpc処理結果情報を受信すると、rpcメッセージ情報を受信したコンポーネントサーバ20Aにrpc処理結果情報を送信するようにしてもよい。他のワーカとなるコンポーネントサーバについても同様である。
【0220】
また、一斉呼び出しサーバ40の制御部41は、rpcメッセージ情報増幅送信処理におけるrpcメッセージ情報の送受信が完了すると(L230)、インヴォーカであるコンポーネントサーバ20Aに、rpcメッセージ情報の送受信(A270:L210)に伴うhttpリクエストのレスポンスを送受信するようにしてもよい。
【0221】
すなわち、手続き側からの応答を期待するrpc.fanout通信として、限定ではなく例として、以下の2パターンの実装が可能である。
(1).rpc.callのfanout。
(2).rpc.castのfanoutにおける実行完了確認。
【0222】
<第2実施例>
クラウドコンピューティングでは、システムの可用性を向上させるためや、災害対策として、物理サーバが設置されている場所(限定ではなく例として、データセンタ等)ごとに分離したシステムを冗長して分散運用することがある(いわゆるマルチリージョンやマルチゾーン)。
第2実施例は、限定ではなく例として、インヴォーカが、リージョンやゾーン(可用性ゾーン)をまたいでワーカを呼び出し可能な実施例である。
【0223】
第2実施例に記載の内容は、他の各実施例や他の各変形例のいずれにも適用可能である。
また、既出の構成要素と同一の構成要素については同一の符号を付して、再度の説明を省略する。
【0224】
第2実施例では、限定ではなく例として、データセンタ間をまたいだマルチリージョン構成について例示する。
以下では、データセンタAに属する呼び出し先解決サーバ10を「呼び出し先解決サーバ10´」、データセンタBに属する呼び出し先解決サーバ10を「呼び出し先解決サーバ10´´」、データセンタCに属する呼び出し先解決サーバ10を「呼び出し先解決サーバ10´´´」、・・・と「´」の数で区別することとする。他のコンポーネントサーバ20や一斉呼び出しサーバ40についても同様である。
【0225】
図2-1は、本実施例におけるマルチリージョン通信システム構成と処理の流れの概念を示すブロック図である。
なお、図の簡略化のため、各サーバ間を結ぶネットワーク30については図示を省略する。また、ブロック図中において、丸印に数字で書かれる内容を、文中では便宜上「((数字))」と表記することとする。
また、本ブロック図では、限定ではなく例として、データセンタAのコンポーネントサーバ20A´をrpcの呼び出し側(インヴォーカ)、データセンタBのコンポーネントサーバ20B´´をrpcの手続き側(ワーカ)とする。
【0226】
また、以下では、限定ではなく例として、各データセンタ内における接続をネットワーク30X(ネットワーク30A、ネットワーク30B、ネットワーク30C、・・・)、各データセンタ間を接続するためのネットワーク30を「グローバルネットワーク30」とそれぞれ称する。
【0227】
一般に、各データセンタ内におけるネットワーク30Xに比べて、グローバルネットワーク30の接続性能は低くなる(限定ではなく例として、レイテンシが大きい、および/または、スループットが小さい)。
【0228】
マルチリージョン通信システムでは、限定ではなく例として、データセンタAにおいて、ネットワーク30Aを介して、呼び出し先解決サーバ10´と、一斉呼び出しサーバ40´と、複数のコンポーネントサーバ20´(コンポーネントサーバ20A´,コンポーネントサーバ20B´,コンポーネントサーバ20C´,・・・)とが接続される。
また、限定ではなく例として、データセンタBにおいて、ネットワーク30Bを介して、呼び出し先解決サーバ10´´と、一斉呼び出しサーバ40´´と、複数のコンポーネントサーバ20´´(コンポーネントサーバ20A´´,コンポーネントサーバ20B´´,コンポーネントサーバ20C´´,・・・)とが接続される。
また、限定ではなく例として、データセンタCにおいて、ネットワーク30Cを介して、呼び出し先解決サーバ10´´´と、一斉呼び出しサーバ40´´´と、複数のコンポーネントサーバ20´´´(コンポーネントサーバ20A´´´,コンポーネントサーバ20B´´,コンポーネントサーバ20C´´´,・・・)とが接続される。
【0229】
他のデータセンタについても同様である。
【0230】
以下に、本実施例において各装置が実行する処理の流れの一例を示す。
なお、処理に先立ち、前述したように、各データセンタにおいて、各コンポーネントサーバ20の制御部21は、コンポーネントプログラム処理とhttpデーモン処理とを開始する。そして、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、データセンタ内の各サーバ20について、呼び出し先管理データ153を更新する。また、一斉呼び出しサーバ40の制御部41は、限定ではなく例として、データセンタをまたいだ各サーバ20について、コンポーネントサーバ一覧情報455を更新する。
【0231】
((1)).各データセンタの呼び出し先解決サーバ10(呼び出し先解決サーバ10´,呼び出し先解決サーバ10´´,呼び出し先解決サーバ10´´´,・・・)の制御部11は、限定ではなく例として、グローバルネットワーク30を介して、各々の呼び出し先管理データ153を同期させる。
なお、呼び出し先解決サーバ10の制御部11は、限定ではなく例として、呼び出し先管理データ153を所定時刻(限定ではなく例として、「毎分00秒」)または所定期間(限定ではなく例として、「60秒」)ごと同期するようにしてもよい。
【0232】
((2)).データセンタAのサーバ20A´の制御部21は、限定ではなく例として、コンポーネントプログラムにおけるrpc.call手続きに基づいて、rpc.call処理を実行開始する。サーバ20A´の制御部21は、限定ではなく例として、httpメッセージングドライバ2515に従って、rpc処理要求情報に基づいて、ワーカ一覧要求情報を同じデータセンタ内の呼び出し先解決サーバ10´に送信する。
なお、呼び出し先解決サーバ10´が停止している場合、サーバ20A´の制御部21は、限定ではなく例として、ワーカ一覧要求情報を最も近しい(限定ではなく例として、サーバ10とのレイテンシが低い、および/または、物理サーバが設置されている距離が近い)データセンタの呼び出し先解決サーバ10に送信するようにしてもよい。
【0233】
((3)).呼び出し先解決サーバ10´の制御部11は、限定ではなく例として、ワーカ更新処理を実行する。そして、呼び出し先解決サーバ10´の制御部11は、限定ではなく例として、ワーカ一覧情報をサーバ20A´に送信する。
呼び出し先管理データ153の同期のタイミング等の問題により、呼び出し先解決サーバ10´の呼び出し先管理データ153には、別データセンタのサーバ20B´´が登録されていない可能性が生じる。
呼び出し先解決サーバ10´からワーカ一覧情報を受信すると、コンポーネントサーバ20A´の制御部21は、ワーカ探索処理を実行する。ワーカ探索処理において、限定ではなく例として、別データセンタのサーバ20B´´が探索結果として探索できず、ワーカ探索処理が失敗するとする。
【0234】
なお、ワーカ探索処理が成功した場合、コンポーネントサーバ20A´の制御部21は、rpcメッセージ情報送信処理を実行する。
【0235】
((4)).ワーカ探索処理が失敗した場合、コンポーネントサーバ20A´の制御部21は、ワーカ一覧要求情報を最も近いデータセンタ内の呼び出し先解決サーバ10´´に送信する。
【0236】
((5)).呼び出し先解決サーバ10´´の制御部11は、限定ではなく例として、ワーカ更新処理を実行する。そして、呼び出し先解決サーバ10´´の制御部11は、限定ではなく例として、呼び出し先解決サーバ10´´の呼び出し先管理データ153に基づいて、ワーカ一覧要求情報をサーバ20A´に送信する。
【0237】
((6)).呼び出し先解決サーバ10´´からワーカ一覧情報を受信すると、コンポーネントサーバ20A´の制御部21は、ワーカ探索処理を実行する。ワーカ探索処理が成功すると、コンポーネントサーバ20A´の制御部21は、rpcメッセージ情報をワーカであるコンポーネントサーバ20B´´に送信する。
【0238】
なお、ワーカ探索処理が失敗した場合、コンポーネントサーバ20A´の制御部21は、再度ワーカ一覧要求情報を次に近いデータセンタ内の呼び出し先解決サーバ10´´´に送信する。
【0239】
これにより、ワーカであるサーバ20A´の制御部21は、接続性能が低いグローバルネットワーク30の使用を最小限に抑えることができる。また、各データセンタにおいて、呼び出し先解決サーバ10は自立して動作を行うため、冗長性を保つことができる。
【0240】
従来手法であるメッセージキューイングサービスを用いる場合と比較を行う。
限定ではなく例として、データセンタごとにコンポーネントサーバ20のクラスタを構成し、冗長化を行う場合、データセンタ間をまたいで一のメッセージキューイングサービスを構成する単一クラスタ方式では、メッセージキューイングサービスがデータセンタをまたいで通信を行うトラヒックが増大し、グローバルネットワーク30がボトルネックとなりクラスタ全体のパフォーマンスが頭打ちになるという問題が発生する。
【0241】
また、単一クラスタ方式では、メッセージキューイングサービスに複数データセンタに配置されるすべてのコンポーネントサーバ20が接続されるため、データセンタ数を増やすほどメッセージキューイングサービスに接続されるサーバ数が比例して増加し、メッセージキューイングサービスの負荷が増大するという問題が発生する。
【0242】
データセンタごとにメッセージキューイングサービスを構成する複数クラスタ方式では、上記の問題を解決することが可能であるが、限定ではなく例として、メッセージングモジュール2513において複数のメッセージキューイングサービスをサポートしていることが望ましい。メッセージングモジュール2513において複数のメッセージキューイングサービスをサポートするためには、限定ではなく例として、データセンタごとのメッセージキューイングサービスのアクセス先とMQクラスタとのマッピングや、データセンタごとのメッセージキューイングサービスの動作状態等を管理する必要が生じる。このため、メッセージングモジュール2513の構成が複雑になり、プログラムコンポーネントクラスタ全体の負荷が上がるという問題が発生する。
【0243】
また、限定ではなく例として、メッセージングモジュール2513において複数のメッセージキューイングサービスをサポートしていない場合(限定ではなく例として、「oslo.messaging」モジュール)、ソフトウエアコンポーネント側で複数のメッセージキューイングサービスをサポートする必要が生じ、メッセージングモジュール2513を介してプロセス間通信を実現する際の利便性が低下するという問題が発生する。
【0244】
これに対して、提案手法では、各データセンタ間が自立的に動作可能な複数クラスタ方式を取りながら、インヴォーカが属するデータセンタの呼び出し先解決サーバ10を優先して呼び出すことで、データセンタ間をまたいだトラヒックの増加を最小限に抑えることができる。
【0245】
また、httpメッセージングドライバ2515がデータセンタをまたいだ場合においてもプロセス間通信のエンドポイント(インヴォーカとワーカ)の識別情報を管理できるため、メッセージングモジュール2513やコンポーネント処理プログラム251を変更する必要が発生せず、メッセージングモジュール2513を介してプロセス間通信を実現する際の利便性を向上させることができる。
【0246】
<第2実施例の効果>
本実施例は、サーバシステムに、データセンタAに属する呼び出し先解決サーバ10´(限定ではなく、解決サーバ)とは異なるデータセンタB(限定ではなく、リージョンまたはゾーンの一例)に属する呼び出し先解決サーバ10´´(限定ではなく、第1解決サーバの一例)を含む。そして、インヴォーカであるコンポーネントサーバ20A´の制御部21は、呼び出し先解決サーバ10´から受信するワーカ一覧情報(限定ではなく、第1情報の一例)に基づいて、ワーカであるコンポーネントサーバ20B´´のサーバID(限定ではなく、識別情報の一例)が探索出来ない場合(限定ではなく、解決できない場合の一例)、コンポーネントサーバ20B´´を特定するためのワーカ一覧情報(限定ではなく例として、第6情報の一例)を呼び出し先解決サーバ10´´から受信する。すると、コンポーネントサーバ20Aの制御部21は、呼び出し先解決サーバ10´´から受信したワーカ一覧情報(限定ではなく、第6情報の一例)に基づいて、コンポーネントサーバ20B´´にrpcメッセージ情報を送信する構成。を示している。
このような構成により得られる実施例の効果の一例として、第1サーバは、解決サーバから受信した第1情報では第2サーバを識別できない場合、第1解決サーバから受信した第6情報を用いて第2サーバを識別することができる。そのため、第1サーバは、解決サーバと第1解決サーバとで異なるリージョンまたはゾーンをまたいで冗長構成される解決サーバシステムを利用してプロセス間通信の相手である第2サーバを特定することができる。
結果として、サーバシステムの可用性を向上させることができる。
【0247】
また、本実施例では、rpcメッセージ情報がhttpに基づいて送受信される。そして、インヴォーカであるコンポーネントサーバ20A´の制御部21はRPC通信を制御するメッセージングモジュール2513(限定ではなく、ミドルウェアの一例)に組み込まれたhttpメッセージングドライバ2515(限定ではなく、メッセージングドライバの一例)を介して(httpメッセージングドライバに従って)ワーカ一覧情報(限定ではなく、第1情報と第6情報との一例)を受信し、rpcメッセージ情報を送信する制御を行う。そして、コンポーネントサーバ20B´´の制御部21は、httpメッセージングドライバ2515を介して(httpメッセージングドライバに従って)rpcメッセージ情報を受信する制御を行う構成を示している。
このような構成により得られる実施例の効果の一例として、第1サーバと第2サーバとで、ミドルウェアのメッセージングドライバを変更することで、容易にプロセス間通信の実現方法を変更することができる。そのため、サーバシステムのユーザは、メッセージングドライバを選択することで、プロセス間通信の実現方法を容易に変更することができる。
【0248】
また、本実施例は、コンポーネントサーバ20A´と呼び出し先解決サーバ10´とは同じデータセンタA(限定ではなく、同じリージョンまたはゾーンの一例)に属し、コンポーネントサーバ20A´の制御部21は、コンポーネントサーバ20A´との通信レイテンシが最も低い(限定ではなく、最も近しいリージョンまたはゾーンに属する一例)呼び出し先解決サーバ10´´からワーカ一覧情報を受信する構成を示している。
このような構成により得られる実施例の効果の一例として、リージョンまたはゾーンをまたぐ通信による処理の遅延を最小化することができる。また、リージョンまたはゾーンをまたぐ通信の発生を最小化することができる。結果として、リージョンまたはゾーンによる冗長化構成を保ちつつ、サーバシステム全体で発生する通信負荷を下げることができる。
【0249】
<第2変形例(1)>
上記の実施例では、データセンタ間をまたいだマルチリージョン構成について例示したが、これに限定されない。限定ではなく例として、各データセンタを可用性ゾーンとみなすことで、マルチゾーンについても同様に実現することができる。
また、マルチリージョンとマルチゾーンとを併用するマルチサイトについても同様に実現可能である。
【0250】
<第2変形例(2)>
上記の実施例では、ワーカ探索処理はインヴォーカとなったコンポーネントサーバ20A´において実行することとしたが、これに限定されない。限定ではなく例として、ワーカ探索処理を各データセンタの呼び出し先解決サーバ10で実行するようにしてもよい。
【0251】
図2-2は、本変形例におけるマルチリージョン通信システム構成と処理の流れの概念を示すブロック図である。
【0252】
以下に、本変形例において各装置が実行する処理の流れの一例を示す。
なお、処理に先立ち、前述のように、限定ではなく例として、データセンタ内の各サーバ20について、呼び出し先管理データ153とコンポーネントサーバ一覧情報455とが更新されることとしてもよい。
【0253】
((1)).各データセンタの呼び出し先解決サーバ10(呼び出し先解決サーバ10´,呼び出し先解決サーバ10´´,呼び出し先解決サーバ10´´´,・・・)の制御部11は、限定ではなく例として、グローバルネットワーク30を介して、各々の呼び出し先管理データ153を同期させる。
【0254】
((2)).データセンタAのサーバ20A´の制御部21は、限定ではなく例として、コンポーネントプログラムにおけるrpc.call手続きに基づいて、rpc.call処理を実行開始する。サーバ20A´の制御部21は、限定ではなく例として、httpメッセージングドライバ2515に従って、rpc処理要求情報に基づいて、ワーカ探索要求情報を同じデータセンタ内の呼び出し先解決サーバ10´に送信する。
なお、呼び出し先解決サーバ10´が停止している場合、サーバ20A´の制御部21は、限定ではなく例として、ワーカ探索要求情報を最も近い(限定ではなく例として、サーバ10とのレイテンシが低い)データセンタの呼び出し先解決サーバ10に送信するようにしてもよい。
【0255】
((3)).呼び出し先解決サーバ10´の制御部11は、限定ではなく例として、ワーカ更新処理を実行する。そして、呼び出し先解決サーバ10´の制御部11は、限定ではなく例として、呼び出し先解決サーバ10´の呼び出し先管理データ153を参照し、ワーカ探索処理を実行する。
ワーカ探索処理において、呼び出し先管理データ153の同期のタイミング等の問題により、呼び出し先解決サーバ10´の呼び出し先管理データ153から手続き側のサーバ(この例では、サーバ10B´´)が探索出来ない場合、呼び出し先解決サーバ10´の制御部11は、限定ではなく例として、ワーカ探索要求情報を最も近いデータセンタの呼び出し先解決サーバ10´´に送信する。
【0256】
なお、ワーカ探索処理において、呼び出し先解決サーバ10´の呼び出し先管理データ153から手続き側のサーバが探索出来る場合、呼び出し先解決サーバ10´の制御部11は、ワーカ解決情報をサーバ20A´に送信する。
【0257】
((4)).通信I/F14によって呼び出し先解決サーバ10´からワーカ探索要求情報を受信すると、呼び出し先解決サーバ10´´の制御部11は、限定ではなく例として、呼び出し先解決サーバ10´´の呼び出し先管理データ153を参照し、ワーカ探索処理を実行する。
ワーカ探索処理において、呼び出し先解決サーバ10´´の制御部11は、呼び出し先解決サーバ10´´の呼び出し先管理データ153から手続き側のサーバ(この例では、サーバ10B´´)が探索されると、ワーカ解決情報をサーバ20A´に送信する。
【0258】
なお、呼び出し先解決サーバ10´´の制御部11は、ワーカ解決情報を呼び出し先解決サーバ10´を介してサーバ20A´に送信するようにしてもよい。
【0259】
呼び出し先解決サーバ10´´からワーカ解決情報を受信すると、コンポーネントサーバ20A´の制御部21は、rpcメッセージ情報をワーカであるコンポーネントサーバ20B´´に送信する。
【0260】
ワーカ探索処理を各データセンタの呼び出し先解決サーバ10において実行することにより、各コンポーネントサーバ20の処理負荷を呼び出し先解決サーバ10に負荷分散させることができる。
【0261】
<第2変形例(3)>
上記の実施例では、呼び出し先解決サーバ10を用いる処理(限定ではなく例として、rpc.call通信やrpc.cast通信)について例示したが、これに限定されない。限定ではなく例として、一斉呼び出しサーバ40を用いるrpc.fanout通信についてもデータセンタ間で発生するトラヒックを最小限に抑えるように構成してもよい。
【0262】
この場合、限定ではなく例として、一斉呼び出しサーバ40´におけるコンポーネントサーバ一覧情報455は、限定ではなく例として、以下の要素(A)+(B)のようにrpcメッセージ情報を記述してもよい。
(A):一斉呼び出しサーバ40と同じデータセンタに存在する各コンポーネントサーバ20の識別情報。
(B):一斉呼び出しサーバ40と異なるデータセンタに存在する各一斉呼び出しサーバ40の識別情報。
【0263】
インヴォーカ(限定ではなく例として、コンポーネントサーバ20A´)と同じデータセンタに存在する一斉呼び出しサーバ40´の制御部41は、は、インヴォーカからrpcメッセージ情報を受信すると、rpcメッセージ情報増幅送信処理において、限定ではなく例として、(A)と(B)とを対象としてrpcメッセージ情報を送信する。
【0264】
インヴォーカと異なるデータセンタに存在する一斉呼び出しサーバ40の制御部41は、一斉呼び出しサーバ40´からrpcメッセージ情報を受信すると、rpcメッセージ情報増幅送信処理において、限定ではなく例として、(A)を対象としてrpcメッセージ情報を送信する。
【0265】
このようにインヴォーカが存在するデータセンタの一斉呼び出しサーバ40を親とし、他のデータセンタの一斉呼び出しサーバ40を子として再帰的にrpcメッセージ情報を送信することで、データセンタ間で発生するトラヒックを最小化することができる。
【0266】
<他の実施例>
(1)情報処理装置
上記の実施例では、本開示における情報処理装置を呼び出し先解決サーバ10および/または一斉呼び出しサーバ40として説明したが、これに限定されない。
【0267】
呼び出し先解決サーバ10および/または一斉呼び出しサーバ40を1つとするのではなく、呼び出し先解決サーバ10および/または一斉呼び出しサーバ40を複数のサーバに分け、これら各々のサーバを本開示における情報処理装置としてもよい。
【0268】
また、サーバではなく、ソフトウエアコンポーネントを利用する端末と通信する管理用のコンピュータ等の端末や管理用のスマートフォン等の端末を、本開示における情報処理装置としてもよい。
【0269】
また、複数の情報処理装置を含むシステムを構成し、このシステムが、上記の実施例で説明した呼び出し先解決サーバ10および/または一斉呼び出しサーバ40の各種の処理を行うようにしてもよい。
【0270】
(2)その他
前述したように、上記の各々の実施例、各々の変形例、その他の実施例等で説明した内容は、それぞれ組み合わせて適用することが可能である。
【0271】
<他の実施形態>
本発明の他の態様として、第1サーバから少なくとも第2サーバへのプロセス間通信を制御するミドルウェアに組み込まれるドライバプログラムであって、ドライバプログラムは、プロセス間通信におけるプロセス間通信先を特定することに関する処理を実行する解決サーバと通信させる処理を含み、ドライバプログラムは、第1サーバにおいて、第2サーバを特定するための第1情報を解決サーバから受信させ、第1情報に基づき、第2サーバにプロセス間通信の処理を要求するための第2情報を送信させ、第2サーバにおいて、第1サーバから第2情報を受信させるようにしてもよい。
【0272】
また、ドライバプログラムは、第2情報をハイパーテキスト・トランスファー・プロトコルに基づいて送受信させるようにしてもよい。
【0273】
また、ドライバプログラムは、第2サーバにおいて、第1サーバに第2情報に基づく第1処理に関する第3情報を送信させ、第1サーバにおいて、第2サーバから第3情報を受信させるようにしてもよい。
【0274】
また、ドライバプログラムは、第2情報と第3情報とをハイパーテキスト・トランスファー・プロトコルに基づいて送受信させるようにしてもよい。
【0275】
また、ドライバプログラムは、第2サーバと少なくとも第3サーバとにプロセス間通信の処理を要求することに関する処理を実行する増幅サーバと通信させる処理を含み、ドライバプログラムは、第1サーバにおいて、増幅サーバを特定するための第4情報を解決サーバから受信させ、第4情報に基づき、増幅サーバにプロセス間通信の処理を要求するための第5情報を送信させ、第2サーバと第3サーバとにおいて、増幅サーバから第5情報を受信させるようにしてもよい。
【0276】
また、ドライバプログラムは、第5情報をハイパーテキスト・トランスファー・プロトコルに基づいて送受信させるようにしてもよい。
【符号の説明】
【0277】
1 通信システム
10 呼び出し先解決サーバ
20 コンポーネントサーバ
30 ネットワーク
40 一斉呼び出しサーバ