(57)【要約】【課題】コンテナのバージョンに応じた処理を対応するコンテナで実行できる配送システムを提供する。【解決手段】配送システム１０は、サーバのオペレーティングシステム内のユーザ空間が仮想的に分割された空間をそれぞれ有しオペレーティングシステム内のカーネル空間を共用する複数のインスタンスのうちのいずれかのインスタンスに向けて送信されたメッセージの宛先をメッセージの送信元の属性に基づいて決定する決定手段１１を含む。【選択図】図１
2017182283.tif 000002
【特許請求の範囲】
【請求項１】
サーバのオペレーティングシステム内のユーザ空間が仮想的に分割された空間をそれぞれ有し前記オペレーティングシステム内のカーネル空間を共用する複数のインスタンスのうちのいずれかのインスタンスに向けて送信されたメッセージの宛先を前記メッセージの送信元の属性に基づいて決定する決定手段を含む
ことを特徴とする配送システム。
【請求項２】
決定手段により決定された宛先であるインスタンスにメッセージを配送する配送手段を含む
請求項１記載の配送システム。
【請求項３】
送信元の属性と宛先であるインスタンスとの対応関係を示す対応情報を記憶する記憶手段を含み、
決定手段は、前記記憶手段に記憶されている前記対応情報を用いてメッセージの宛先を決定する
請求項１または請求項２記載の配送システム。
【請求項４】
対応情報には、宛先であるインスタンスの属性を示す情報が含まれている
請求項３記載の配送システム。
【請求項５】
メッセージの送信元は、サーバと通信可能に接続されている端末である
請求項１から請求項４のうちのいずれか１項に記載の配送システム。
【請求項６】
メッセージの送信元は、サーバで実行されているインスタンスである
請求項１から請求項４のうちのいずれか１項に記載の配送システム。
【請求項７】
サーバのオペレーティングシステム内のユーザ空間が仮想的に分割された空間をそれぞれ有し前記オペレーティングシステム内のカーネル空間を共用する複数のインスタンスのうちのいずれかのインスタンスに向けて送信されたメッセージの宛先を前記メッセージの送信元の属性に基づいて決定する
ことを特徴とする配送方法。
【請求項８】
決定された宛先であるインスタンスにメッセージを配送する
請求項７記載の配送方法。
【請求項９】
コンピュータに、
サーバのオペレーティングシステム内のユーザ空間が仮想的に分割された空間をそれぞれ有し前記オペレーティングシステム内のカーネル空間を共用する複数のインスタンスのうちのいずれかのインスタンスに向けて送信されたメッセージの宛先を前記メッセージの送信元の属性に基づいて決定する決定処理
を実行させるための配送プログラム。
【請求項１０】
コンピュータに、
決定された宛先であるインスタンスにメッセージを配送する配送処理を実行させる
請求項９記載の配送プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、配送システム、配送方法および配送プログラムに関し、特にコンテナのバージョンが容易に管理される配送システム、配送方法および配送プログラムに関する。
【背景技術】
【０００２】
仮想ソフトウェア単位の１つにコンテナがある。コンテナ型仮想化では、サーバのOS(Operating System)内のユーザ空間が仮想的に分割された空間をそれぞれ有し、OS内のカーネル空間を共用する複数のインスタンスがサーバで実行される。なお、起動したコンテナを特にインスタンスと呼ぶこともある。
【０００３】
各インスタンスは、それぞれが他の環境と完全に独立した環境で実行される。よって、インスタンスが自身のコンテナ以外のコンテナのファイルにアクセスする可能性がないため、コンテナ型仮想化が導入されたサーバの機密性は、通常のサーバに比べて高い。また、コンテナ型仮想化では全てのインスタンスが同じカーネル空間を共用するため、他の仮想化に比べてリソースの利用効率が高い。
【０００４】
コンテナは、例えばLinux（登録商標）コンテナ技術とaufs(AnotherUnionFS)のような特殊なファイルシステムが利用されたコンテナ型仮想化で実現される。コンテナ型仮想化には、ハードウェアまで含めた完全な仮想化であるハイパーバイザー型仮想化に比べて、ディスク使用量が少ない、インスタンスの作成やインスタンスの起動に係る時間が短い、性能劣化が少ないという利点がある。
【０００５】
コンテナは、データを永続的に保持しない一時的なオブジェクトである。すなわちコンテナ型仮想化では、コンテナが起動すると実行中に限りインスタンス内に情報が保持される。また、コンテナの停止と共にインスタンス内に保持されていた情報は破棄される。
【０００６】
コンテナを配備してサービスを提供する主体であるサービスプロバイダは、１個以上のコンテナを組み合わせることによって１つのサービスを構成する。図１１は、データセンタに配備されるコンテナの例を示す説明図である。図１１に示すデータセンタ１００には、コンテナ２０、コンテナ３０、およびコンテナ４０が含まれている。
【０００７】
図１１に示すデータセンタ１００は、コンテナを起動させるためのプラットフォームである。データセンタ１００は、PaaS(Platform as a Service)とも呼ばれる。データセンタ１００は、例えばPaaSを構築するための基盤ソフトウェアの１つであるCloud Foundryに基づいて構築されていてもよい。
【０００８】
また、データセンタ１００は、Cloud Foundry等がIaaS(Infrastructure as a Service)において実行されることによって構築されていてもよい。コンテナには、プライベートなIP(Internet Protocol)アドレス、またはパブリックなIPアドレスが割り当てられる。
【０００９】
データセンタ１００は、外部と通信ネットワークを介して通信可能に接続されたコンテナ実行サーバを１つ以上有する。データセンタ１００は、コンテナ実行サーバにおいてコンテナを起動させる。コンテナの配備および実行には利用可能なコンテナ実行環境を要するため、コンテナ実行サーバには、OSの他にコンテナ実行環境が導入されている。
【００１０】
コンテナを配備する際、データセンタ１００は、コンテナが配備された領域を他のコンテナが配備された領域等と物理的に、または仮想的に分離してもよい。以下の説明において、データセンタ１００における領域の区画の存在を明記しないが、データセンタ１００に領域の区画が存在すると解釈してもよい。
【００１１】
サービスプロバイダは、例えばサービスプロバイダに与えられたデータセンタ１００の区画に１つ以上のコンテナを配備できる。サービスプロバイダは、データセンタ１００に配備対象のコンテナのコンテナイメージを与える。なお、コンテナイメージは、実行されているコンテナから生成されたイメージファイルである。
【００１２】
データセンタ１００は、与えられたコンテナイメージを用いて、コンテナを起動できる。データセンタ１００は、コンテナ実行サーバでコンテナを起動させる。コンテナが起動することによって、コンテナが有するコードに基づいた様々なアプリケーション機能が提供される。
【００１３】
図１１に示すコンテナ２０は、ウェブサーバの機能を提供する。また、コンテナ３０は、アプリケーションサーバの機能を提供する。また、コンテナ４０は、ストレージに接続されたデータベースの機能を提供する。例えば、コンテナ２０とコンテナ３０とコンテナ４０とを組み合わせることによって、サービスプロバイダは、ウェブサービスを構成できる。
【００１４】
ウェブサーバの機能を提供するコンテナ２０は、通信ネットワーク等を介してクライアント端末と通信可能に接続されている。また、コンテナ同士も、通信ネットワーク等を介して通信可能に接続されている。図１１に示す例において、クライアント端末からのリクエストは、例えばゲートウェイを介してコンテナ２０に受信される。
【００１５】
ウェブサーバの機能を提供するコンテナ２０は、コンテンツをクライアント端末に提供する機能を有する。提供されるコンテンツの少なくとも一部は、クライアント端末からのリクエストに応じたアプリケーションロジックの実行結果である。アプリケーションロジックは、例えば、HTML(HyperText Markup Language)内の記載や、サーバサイドスクリプトを含むプログラムの記載に基づいて定義されている。
【００１６】
アプリケーションロジックは、アプリケーションサーバの機能を提供するコンテナ３０で実行される。図１１に示す例において、アプリケーションロジックの少なくとも一部は、データベースを利用するロジックである。データベースを利用するアプリケーションロジックを実行する場合、コンテナ３０は、データベースの機能を提供するコンテナ４０に通信ネットワーク等を介して問い合わせる。
【００１７】
上記のように、コンテナ同士が通信を行うことによって、クライアント端末への応答内容が作成される。なお、本明細書において起動したコンテナであるインスタンス間で行われる通信を、便宜的にコンテナ間で行われる通信という。
【００１８】
図１１に示すデータセンタ１００の構成は、（ウェブサーバの機能を提供するコンテナ：アプリケーションサーバの機能を提供するコンテナ：データベースの機能を提供するコンテナ）＝（１：１：１）の構成である。しかし、データセンタ１００には、データベースの機能を提供するコンテナが複数含まれてもよい。
【００１９】
また、データセンタ１００の構成は、（ウェブサーバの機能を提供するコンテナ：アプリケーションサーバの機能を提供するコンテナ：データベースの機能を提供するコンテナ）＝（ｎ：ｍ：ｋ）の構成でもよい。なお、ｎ、ｍ、ｋは、それぞれ１以上の整数である。
【００２０】
図１２は、データセンタに配備されるコンテナの他の例を示す説明図である。図１２に示すように、データセンタ１００には、コンテナ２０１〜コンテナ２０ｎ、コンテナ３０１〜コンテナ３０ｍ、コンテナ４０１〜コンテナ４０ｋが含まれている。
【００２１】
コンテナ２０１〜コンテナ２０ｎは、全て同じ機能を提供する。コンテナ３０１〜コンテナ３０ｍ、コンテナ４０１〜コンテナ４０ｋもそれぞれ同様である。ただし、コンテナ２０１〜コンテナ２０ｎが提供する機能、コンテナ３０１〜コンテナ３０ｍが提供する機能、コンテナ４０１〜コンテナ４０ｋが提供する機能は異なる。
【００２２】
図１２に示すコンテナ間で行われる通信は、負荷分散の対象である。例えば、コンテナ３０１〜コンテナ３０ｍが提供する機能を機能Ａとする。また、コンテナ間で行われる通信が、ラウンドロビンで分散されるとする。図１２に示す例において、コンテナ２０１がコンテナ３０１と通信を行った後、機能Ａを提供するコンテナと通信を再度行う場合、コンテナ２０１は、コンテナ３０２と通信を行う。
【００２３】
また、コンテナ実行サーバは、コンテナをスケールアウトすることによって、コンテナが処理可能な処理量を増やすことができる。また、コンテナ実行サーバは、コンテナをスケールインすることによって、コンテナが処理可能な処理量を減らすことができる。すなわち、スケールアウトおよびスケールインは、コンテナの並列度の制御処理である。
【００２４】
スケールアウトは、コンテナで実行可能な処理を実行できるインスタンス（すなわち、典型的には実行中のインスタンスのコピー）を、同一または異なるコンピューティングリソースに配備し、処理要求を配備されたインスタンスに分散させる制御処理である。スケールアウトが実行された場合、コンテナが処理可能な処理量が増大する。
【００２５】
スケールインは、スケールアウトで配備されたインスタンスの配備を解除する処理である。スケールインが実行された場合、例えばコンピューティングリソースの消費量が処理量に対して適正な量に調整される。すなわち、リソースの消費量が抑えられる。
【００２６】
後述されるメッセージングサービスは、スケールインおよびスケールアウトによるインスタンスの増減に合わせてインスタンス間で負荷分散を行う。インスタンス間で負荷分散が行われる場合、高負荷に耐久可能なサービスが提供される。
【００２７】
例えば、実行時にリソースを多く消費するアプリケーションロジックを含むウェブサービスを構成するアプリケーションサーバの機能を提供するコンテナを考える。コンテナに対応するインスタンスの数が単位時間当たりのリクエスト数に応じて１から複数に増やされることによって、クライアント端末からの全てのリクエストに即座に応答可能な高負荷対応型サービスが提供される。
【００２８】
１つの組織には、１つ以上のコンテナグループが含まれる。また、コンテナグループには、１つ以上のインスタンスが含まれる。同じグループに属する各コンテナに対応するインスタンスは、通常同じコンテナイメージから生成されたインスタンスであるコピーインスタンスである。さらに、コンテナまたはコンテナグループを束ねる上位の単位として、サービスが定義される。
【先行技術文献】
【特許文献】
【００２９】
【特許文献１】特開２００６−１３９４７２号公報
【特許文献２】特開２００２−２１５４００号公報
【発明の概要】
【発明が解決しようとする課題】
【００３０】
ランディングページ最適化(LPO:Landing Page Optimization)の工程の一部にＡ／Ｂテストがある。Ａ／Ｂテストの目的は、２つの選択肢のうちどちらがより良い結果につながるかを判断することである。なお、ランディングページは、インターネット広告や検索エンジンの検索結果のリンク先のウェブページである。すなわち、インターネット広告を見たいユーザが広告や検索結果をクリックした時に最初に表示されるページである。
【００３１】
ウェブサイトを訪問するユーザの動機や目的が異なれば、表示されるウェブページや検索キーワードも異なる。ランディングページ最適化は、各ユーザの動機や目的に対応したランディングページを用意することによって、各ユーザを動機や目的に合致したウェブサイトへ誘導させることを目的とする。Ａ／Ｂテストは、ウェブページ、メールマガジン、またはバナー広告等の作成時に実行されることが多い。
【００３２】
Ａ／Ｂテストの一例として、コンテナで構成され、広告のリンク先であるランディングページを表示するウェブサイトがテスト対象である場合を想定する。本例において、ウェブサイトは、ランディングページＡとランディングページＢの２種類のランディングページを表示する。
【００３３】
本例のＡ／Ｂテストでは、テスト実施者がJavascript（登録商標）をクライアント端末に送り込みJavascriptを実行させた結果に基づいて、クライアントに対するウェブサイトへの入口（例えば、インターネット広告）を制御する。クライアントは、送り込まれたJavascriptの実行結果に基づいて、訪問先のウェブサイトへの入口を選ぶ。
【００３４】
クライアントが選んだウェブサイトへの入口に応じて、ランディングページＡまたはランディングページＢが表示される。ランディングページが表示される際、ウェブサイトを構成するコンテナ間でランディングページ表示のためのインタラクションが行われる。
【００３５】
ランディングページが選択された入口に応じて表示されるために、テスト実施者には、選択された入口に応じたインタラクションが実行されるようにウェブサイトを制御することが求められる。ウェブサイトの制御方法として、例えば、ウェブサイトを構成するコンテナに対して制御用のハードコーディングを行うことが考えられる。しかし、ハードコーディングが行われると、コンテナの抽象性は失われる。
【００３６】
また、複数のクライアントにサービスを提供するシステムに対するテストの１つにカナリアテストがある。システムがリリースされる段階で、システムに対する機能テストは基本的に完了している。しかし、例えばサイト改修後のサイトのユーザビリティ、サイトへのユーザ滞在時間、サイトを介した販売の成功率等のサイト改修前からの変化は予測されにくく、リリースされて明らかになることも多い。
【００３７】
カナリアテストは、機能性に関する課題ではなく、リリースされた後に分かる課題、例えば収益性等の指標に関する課題を洗い出すことを目的とする。例えば、システムのバージョンが更新された際、全てのユーザに新しいバージョンのシステムによるサービスを提供することも考えられる。
【００３８】
しかし、カナリアテストでは、一部のトライアルユーザが選定され、トライアルユーザのみに新しいバージョンのシステムによるサービスが提供される。新しいバージョンのシステムによるサービスが提供されるユーザが選定されることによって、新しいバージョンのシステムに存在する不具合が及ぼす影響の範囲が小さくなる。
【００３９】
新しいバージョンのシステムによるサービスが提供されるユーザが選定されるため、カナリアテストでは、選定されたユーザ用のウェブサイトへの入口と、選定されなかったユーザ用のウェブサイトへの入口が区別されて用意される。
【００４０】
すなわち、Ａ／Ｂテストと同様に、サービスが入口に応じて提供されるために、テスト実施者には、ウェブサイトへの入口に応じたインタラクションが実行されるようにウェブサイトを制御することが求められる。よって、カナリアテストにおいても、コンテナの抽象性が失われないようなウェブサイトの制御方法が求められている。
【００４１】
特許文献１には、モデルの一部のモデル要素のみ、または一部の変換ルール要素が更新された場合、プログラム要素の選択とバージョン比較の結果、変更に対応するプログラム要素のみが自動生成され、効率的に再生成を行うことが可能なモデル駆動開発装置が記載されている。
【００４２】
また、特許文献２には、情報サービスに影響を与えず、複数のクライアント端末に対しても効率よく確実に新プログラムのダウンロードを行い、システムの信頼性を向上させるプログラム配信方法が記載されている。
【００４３】
特許文献２に記載されているプログラム配信方法では、クライアント端末が稼働中のプログラムのバージョンの情報をサーバに送信し、サーバが最新のプログラムのバージョンとクライアント端末における稼働中のプログラムのバージョンとを管理する。次いで、サーバは、任意のクライアント端末における稼働中のプログラムのバージョンが最新のプログラムのバージョンより古い場合、運用時間外に最新のバージョンのプログラムをクライアント端末にダウンロードする。
【００４４】
特許文献１および特許文献２に記載されているように、プログラムのバージョン情報を管理し、バージョンの変更に伴い変更後のプログラムを提供する手法は既に提供されている。しかし、コンテナのバージョンを管理し、各バージョンに応じた処理を対応するコンテナに実行させる手法は提供されていない。
【００４５】
そこで、本発明は、コンテナのバージョンに応じた処理を対応するコンテナで実行できる配送システム、配送方法および配送プログラムを提供することを目的とする。
【課題を解決するための手段】
【００４６】
本発明による配送システムは、サーバのオペレーティングシステム内のユーザ空間が仮想的に分割された空間をそれぞれ有しオペレーティングシステム内のカーネル空間を共用する複数のインスタンスのうちのいずれかのインスタンスに向けて送信されたメッセージの宛先をメッセージの送信元の属性に基づいて決定する決定手段を含むことを特徴とする。
【００４７】
本発明による配送方法は、サーバのオペレーティングシステム内のユーザ空間が仮想的に分割された空間をそれぞれ有しオペレーティングシステム内のカーネル空間を共用する複数のインスタンスのうちのいずれかのインスタンスに向けて送信されたメッセージの宛先をメッセージの送信元の属性に基づいて決定することを特徴とする。
【００４８】
本発明による配送プログラムは、コンピュータに、サーバのオペレーティングシステム内のユーザ空間が仮想的に分割された空間をそれぞれ有しオペレーティングシステム内のカーネル空間を共用する複数のインスタンスのうちのいずれかのインスタンスに向けて送信されたメッセージの宛先をメッセージの送信元の属性に基づいて決定する決定処理を実行させることを特徴とする。
【発明の効果】
【００４９】
本発明によれば、コンテナのバージョンに応じた処理を対応するコンテナで実行できる。
【図面の簡単な説明】
【００５０】
【図１】本発明による配送システムの第１の実施形態の構成例を示すブロック図である。
【図２】第１の実施形態の配送システム１０による配送処理の動作を示すフローチャートである。
【図３】本発明による配送システムの第２の実施形態の構成例を示すブロック図である。
【図４】メッセージングサービス１４０が保持するコンテナのバージョン情報の例を示す説明図である。
【図５】メッセージングサービス１４０が保持するクライアント端末のバージョン情報の例を示す説明図である。
【図６】データセンタ１００の構成例を示すブロック図である。
【図７】第２の実施形態のメッセージングサービス１４０による配送処理の動作を示すフローチャートである。
【図８】第２の実施形態のメッセージングサービス１４０による他の配送処理の動作を示すフローチャートである。
【図９】第２の実施形態のデータセンタ１００による配送処理の全体動作を示すシーケンス図である。
【図１０】第２の実施形態のデータセンタ１００による他の配送処理の全体動作を示すシーケンス図である。
【図１１】データセンタに配備されるコンテナの例を示す説明図である。
【図１２】データセンタに配備されるコンテナの他の例を示す説明図である。
【発明を実施するための形態】
【００５１】
実施形態１．
以下、本発明の実施形態を、図面を参照して説明する。図１は、本発明による配送システムの第１の実施形態の構成例を示すブロック図である。本発明による配送システム１０は、サーバのオペレーティングシステム内のユーザ空間が仮想的に分割された空間をそれぞれ有しオペレーティングシステム内のカーネル空間を共用する複数のインスタンス（例えば、起動したコンテナ）のうちのいずれかのインスタンスに向けて送信されたメッセージの宛先をメッセージの送信元の属性に基づいて決定する決定手段１１（例えば、メッセージングサービス１４０）を含む。
【００５２】
メッセージの送信元の属性は、例えばメッセージの送信元であるコンテナのバージョンや、メッセージの送信元であるクライアント端末のバージョンである。なお、メッセージの送信元の属性は、バージョンに限られない。
【００５３】
以下、配送システム１０による決定処理を説明する。図２は、第１の実施形態の配送システム１０による決定処理の動作を示すフローチャートである。
【００５４】
決定手段１１は、複数のインスタンスのうちのいずれかのインスタンスに向けて送信されたメッセージを受信する（ステップS11）。
【００５５】
次いで、決定手段１１は、メッセージの送信元の属性に基づいて、受信されたメッセージの宛先を決定する（ステップS12）。決定した後、配送システム１０は、決定処理を終了する。
【００５６】
そのような構成により、配送システムは、コンテナのバージョンに応じた処理を対応するコンテナで実行できる。
【００５７】
また、配送システム１０は、決定手段１１により決定された宛先であるインスタンスにメッセージを配送する配送手段（例えば、メッセージングサービス１４０）を含んでもよい。
【００５８】
そのような構成により、配送システムは、メッセージの送信元のバージョンに基づいてメッセージをコンテナに配送できる。
【００５９】
また、配送システム１０は、送信元の属性と宛先であるインスタンスとの対応関係を示す対応情報を記憶する記憶手段（例えば、データベース）を含み、決定手段１１は、記憶手段に記憶されている対応情報を用いてメッセージの宛先を決定してもよい。
【００６０】
そのような構成により、配送システムは、記憶手段に記憶されている対応情報を調整することによって、メッセージの宛先を制御できる。
【００６１】
また、対応情報には、宛先であるインスタンスの属性を示す情報が含まれていてもよい。
【００６２】
そのような構成により、配送システムは、クライアント端末のバージョンと同一のバージョンのコンテナにメッセージを配送できる。
【００６３】
また、メッセージの送信元は、サーバと通信可能に接続されている端末（例えば、クライアント端末２０１〜クライアント端末２０Ｋ）でもよい。
【００６４】
そのような構成により、配送システムは、クライアント端末から送信されたメッセージの宛先を制御できる。
【００６５】
また、メッセージの送信元は、サーバで実行されているインスタンスでもよい。
【００６６】
そのような構成により、配送システムは、コンテナから送信されたメッセージの宛先を制御できる。
【００６７】
実施形態２．
［構成の説明］
次に、本発明の第２の実施形態を、図面を参照して説明する。図３は、本発明による配送システムの第２の実施形態の構成例を示すブロック図である。図３に示すように、本実施形態の配送システム１０は、データセンタ１００と、クライアント端末２０１〜クライアント端末２０Ｋと、通信ネットワーク３００とを含む。なお、Ｋは１以上の整数である。
【００６８】
また、図３に示すように、データセンタ１００は、ゲートウェイ１１０と、コンテナ実行サーバ１２１〜コンテナ実行サーバ１２Ｍと、コンテナ１３１〜コンテナ１３Ｎと、メッセージングサービス１４０と、構成管理手段１５０と、通信解析サービス１６０とを含む。なお、Ｍ、Ｎは、それぞれ１以上の整数である。
【００６９】
ゲートウェイ１１０は、クライアント端末からの接続を受け付ける機能を有する。ゲートウェイ１１０は、例えばTLS(Transport Layer Security)を用いてクライアント端末からの接続を受け付けることによって、クライアント端末が通信ネットワーク３００を介して送受信するデータを暗号化してもよい。
【００７０】
また、ゲートウェイ１１０は、物理的な装置でもよいし、VM(Virtual Machine:仮想マシン)でもよい。また、ゲートウェイ１１０は、冗長に構成されていてもよく、さらにクライアント端末からの接続が負荷分散されるように構成されていてもよい。さらに、ゲートウェイ１１０は、他のデータセンタと接続可能なインタフェースでもよい。
【００７１】
コンテナ実行サーバ１２１〜コンテナ実行サーバ１２Ｍには、コンテナを配備し、コンテナを実行するためのプラットフォームソフトウェアが含まれる。プラットフォームソフトウェアは、例えばDockerである。
【００７２】
コンテナ実行サーバは、例えばクラスタサーバである。また、コンテナ実行サーバは、物理サーバでもよいし、仮想サーバでもよい。また、コンテナ実行サーバ１２１〜コンテナ実行サーバ１２Ｍは、通信ネットワーク等を介して通信可能に接続されている。
【００７３】
コンテナ実行サーバは、CPU(Central Processing Unit)、メモリ、ディスク、ネットワーク等のリソースを物理的、または仮想的に有する。コンテナ実行サーバで実行されるOSに、コンテナ実行サーバが有するリソースが提供される。
【００７４】
OSは、プラットフォームソフトウェアにリソースを提供する。OSからリソースを提供されると、プラットフォームソフトウェアは、コンテナ実行環境にコンテナを配備し、配備されたコンテナを実行する。
【００７５】
メッセージングサービス１４０は、コンテナ１３１〜コンテナ１３Ｎ間で行われる通信を媒介する機能を有する。すなわち、メッセージングサービス１４０は、コンテナ１３１〜コンテナ１３Ｎに対してメッセージバスとして振る舞う。また、メッセージングサービス１４０は、受け付けられたクライアント端末からのリクエストをコンテナへ伝送してもよい。
【００７６】
本実施形態においてコンテナ間で行われる通信は、メッセージングサービス１４０を介したメッセージ交換形式で行われる。なお、コンテナ間で行われる通信は、他の形式で行われてもよい。
【００７７】
また、信頼性の向上等を目的として、メッセージの伝送には、Publish/Subscribe型のメッセージキューが用いられてもよい。Publish/Subscribe型のメッセージキューが用いられる場合、メッセージを送信するコンテナは、メッセージバスにPublishの処理を行った後にメッセージバスにメッセージを送る。メッセージを受信するコンテナは、メッセージバスにSubscribeの処理を予め行い、所定の条件を満たすメッセージの受信を予約する。
【００７８】
メッセージングサービス１４０は、メッセージが宛先のコンテナに届けられるために使用されるコンテナの配備先に関する情報を保持している。なお、メッセージングサービス１４０は、コンテナがメッセージバスにSubscribeの処理を行った際にコンテナの配備先に関する情報を取得してもよい。
【００７９】
メッセージングサービス１４０は、例えばデータベースにコンテナ１３１〜コンテナ１３Ｎの配備先に関する情報を保持する。データベースは、例えばオンメモリデータベースである。
【００８０】
コンテナに対してスケールアウトの処理が実行され、複数のインスタンスが実行されている場合、コンテナグループが形成される。データベースには、コンテナグループに含まれるコンテナに対応するインスタンスそれぞれの配備先に関する情報が保持される。
【００８１】
クライアント端末からのアクセス要求に含まれるURL(Uniform Resource Locator)がスケールアウトの処理が実行されたコンテナに対応するインスタンスを示す場合、メッセージングサービス１４０は、例えばコンテナグループに含まれるいずれかのインスタンスを所定の規則に従って選択する。次いで、メッセージングサービス１４０は、選択されたインスタンスにアクセス要求を振り分ける。所定の規則は、例えばラウンドロビンである。
【００８２】
また、メッセージングサービス１４０は、データベースにコンテナ１３１〜コンテナ１３Ｎのバージョンを示すバージョン情報を保持する。図４は、メッセージングサービス１４０が保持するコンテナのバージョン情報の例を示す説明図である。
【００８３】
図４に示すように、コンテナのバージョン情報は、宛先コンテナと、コンテナ識別子と、バージョンとで構成されている。宛先コンテナは、コンテナの名称である。宛先コンテナは、メッセージの宛先に対応する。
【００８４】
コンテナ識別子は、宛先コンテナが示す名称のコンテナの種類を識別する識別情報である。例えば、宛先コンテナが「C1」のコンテナのコンテナ識別子と「C2」のコンテナのコンテナ識別子は、どちらも「C」である。すなわち、「C1」のコンテナと「C2」のコンテナは、同じ種類のコンテナである。
【００８５】
バージョンは、宛先コンテナが示す名称のコンテナのバージョンである。なお、バージョンが「＊」のコンテナは、バージョンが規定されていない、どのバージョンのコンテナからのメッセージも処理可能なコンテナである。
【００８６】
また、メッセージングサービス１４０は、データベースにクライアント端末２０１〜クライアント端末２０Ｋのバージョンを示すバージョン情報を保持する。図５は、メッセージングサービス１４０が保持するクライアント端末のバージョン情報の例を示す説明図である。
【００８７】
図５に示すように、クライアント端末のバージョン情報は、クライアントと、バージョンとで構成されている。クライアントは、クライアント端末を識別する識別情報である。また、バージョンは、クライアントが示すクライアント端末に割り当てられたバージョンである。
【００８８】
本実施形態のメッセージングサービス１４０は、コンテナ間でやり取りされるメッセージを媒介する機能の他に、メッセージを送信したクライアント端末のバージョンに応じてメッセージの宛先を切り替える機能も有する。
【００８９】
構成管理手段１５０は、コンテナイメージを保存および管理する機能を有する。構成管理手段１５０は、サービスの状況、コンテナグループの状況、およびコンテナの状況をそれぞれ把握した上でコンテナイメージを管理する。
【００９０】
なお、構成管理手段１５０は、コンテナに対応するインスタンスの配備先に関する情報を保持してもよい。インスタンスの配備先に関する情報を保持する場合、構成管理手段１５０は、保持されている情報をメッセージングサービス１４０に提供してもよい。また、構成管理手段１５０は、図４に示すコンテナのバージョン情報、および図５に示すクライアント端末のバージョン情報を保持してもよい。
【００９１】
通信解析サービス１６０は、メッセージングサービス１４０から受信したメッセージに関する情報等を解析する機能を有する。なお、データセンタ１００は、通信解析サービス１６０を含んでいなくてもよい。
【００９２】
クライアント端末２０１〜クライアント端末２０Ｋは、通信ネットワーク３００を介して、例えばブラウザを用いてウェブページにアクセスする。また、クライアント端末２０１〜クライアント端末２０Ｋは、例えばREST(Representational State Transfer)やSOAP(Simple Object Access Protocol)等のリモートAPI(Application Programming Interface)をコンテナに実装されているアプリケーションから呼び出す。
【００９３】
［動作の説明］
以下、本実施形態の配送システム１０の動作を図６〜図１０を参照して説明する。
【００９４】
図６は、データセンタ１００の構成例を示すブロック図である。図６に示すように、コンテナ実行サーバ１２１は、コンテナ１３１〜コンテナ１３５を実行している。なお、コンテナ１３１、コンテナ１３２、コンテナ１３３、コンテナ１３４、およびコンテナ１３５の各名称は、それぞれC1、C2、D1、D2、E1である。また、コンテナ１３１とコンテナ１３２は同一グループに属し、コンテナ１３３とコンテナ１３４は同一グループに属する。
【００９５】
また、図６に示すように、データセンタ１００にはデータベースが含まれる。データベースには、図４に示すコンテナのバージョン情報、および図５に示すクライアント端末のバージョン情報が記憶されている。
【００９６】
また、図６に示すように、メッセージングサービス１４０は、通信ネットワーク３００を介してクライアント端末２０１〜クライアント端末２０３と通信可能に接続されている。なお、クライアント端末２０１、クライアント端末２０２、およびクライアント端末２０３の各名称は、それぞれU1、U2、U3である。以下の説明では、コンテナおよびクライアント端末を名称で呼ぶ。
【００９７】
本例におけるデータセンタ１００の構成が図６に示すような構成であることを前提に、配送システム１０の動作を説明する。最初に、クライアント端末U1がメッセージを送信した時にメッセージングサービス１４０がコンテナにメッセージを配送する処理を説明する。図７は、第２の実施形態のメッセージングサービス１４０による配送処理の動作を示すフローチャートである。
【００９８】
クライアント端末U1が、コンテナ識別子が「C」であるコンテナが宛先であるメッセージをデータセンタ１００に送信する（ステップS101）。メッセージングサービス１４０は、送信されたメッセージを受信する。
【００９９】
次いで、メッセージングサービス１４０は、メッセージを送信したクライアント端末U1のバージョンを確認する（ステップS102）。図５を参照すると、クライアント端末U1のバージョンは「1」である。
【０１００】
次いで、メッセージングサービス１４０は、バージョンがクライアント端末U1のバージョンと同一であるコンテナをメッセージの宛先に決定する（ステップS103）。図４を参照すると、コンテナ識別子が「C」であり、バージョンが「1」である宛先コンテナは「C1」である。
【０１０１】
宛先コンテナを決定した後、メッセージングサービス１４０は、決定された宛先コンテナにメッセージを配送する（ステップS104）。すなわち、メッセージングサービス１４０は、コンテナC1にメッセージを配送する。メッセージを配送した後、メッセージングサービス１４０は、配送処理を終了する。
【０１０２】
なお、メッセージングサービス１４０は、図５に示す情報を参照せずに、クライアント端末から送信されたメッセージ内の情報を用いてメッセージに対する宛先コンテナを決定してもよい。
【０１０３】
また、メッセージングサービス１４０は、図５に示す情報を参照せずに、メッセージを送信したクライアント端末に関する情報を用いてメッセージに対する宛先コンテナを決定してもよい。クライアント端末に関する情報は、例えば端末のID、端末のIPアドレス、またはログインユーザである。
【０１０４】
次に、コンテナC1がメッセージを送信した時にメッセージングサービス１４０がコンテナにメッセージを配送する処理を説明する。図８は、第２の実施形態のメッセージングサービス１４０による他の配送処理の動作を示すフローチャートである。
【０１０５】
コンテナC1が、コンテナ識別子が「D」であるコンテナが宛先であるメッセージをメッセージングサービス１４０に送信する（ステップS201）。メッセージングサービス１４０は、送信されたメッセージを受信する。
【０１０６】
次いで、メッセージングサービス１４０は、メッセージを送信したコンテナC1のバージョンを確認する（ステップS202）。図４を参照すると、コンテナC1のバージョンは「1」である。
【０１０７】
次いで、メッセージングサービス１４０は、バージョンがコンテナC1のバージョンと同一であるコンテナをメッセージの宛先に決定する（ステップS203）。図４を参照すると、コンテナ識別子が「D」であり、バージョンが「1」である宛先コンテナは「D1」である。
【０１０８】
宛先コンテナを決定した後、メッセージングサービス１４０は、決定された宛先コンテナにメッセージを配送する（ステップS204）。すなわち、メッセージングサービス１４０は、コンテナD1にメッセージを配送する。メッセージを配送した後、メッセージングサービス１４０は、配送処理を終了する。
【０１０９】
コンテナD1が、コンテナ識別子が「E」であるコンテナが宛先であるメッセージをメッセージングサービス１４０に送信する際も、図８に示す配送処理が実行される。なお、図８に示す配送処理は、クライアント端末がデータセンタ１００にメッセージを送信した場合だけでなく、各コンテナが自発的に他のコンテナへ向けてメッセージを送信した場合にも実行されてよい。
【０１１０】
なお、図７に示す配送処理、および図８に示す配送処理において、メッセージングサービス１４０は、送信元のバージョンと同一のバージョンのコンテナではなく、所定の対応関係を満たすコンテナをメッセージの宛先に決定してもよい。
【０１１１】
以下、所定の対応関係を満たすコンテナがポリシに規定されており、メッセージングサービス１４０がコンテナの選択にポリシを使用する場合を想定する。コンテナの選択に使用されるポリシは、送信元のバージョンと同一のバージョンのコンテナが規定されているポリシに限られない。例えば、クライアント端末のバージョンに対応するバージョンのコンテナが規定されているポリシが使用されてもよい。
【０１１２】
また、例えば、クライアント端末のバージョンより新しいバージョンのコンテナの中で最も古いバージョンのコンテナが規定されているポリシが使用されてもよい。また、例えば、クライアント端末のバージョンより古いバージョンのコンテナの中で最も新しいバージョンのコンテナが規定されているポリシが使用されてもよい。
【０１１３】
さらに、メッセージングサービス１４０は、適宜組み合わせられた複数のポリシを用いてコンテナを選択してもよい。また、数値や文字列等のバージョン以外の属性が使用される場合、メッセージングサービス１４０は、ポリシを用いる際にポリシに規定されているバージョンの箇所を使用される属性に読み替えて、コンテナを選択してもよい。
【０１１４】
また、クライアント端末のバージョンとコンテナのバージョンの対応関係が予め定義されている場合、メッセージングサービス１４０は、予め定義された対応関係に基づいてコンテナを選択してもよい。
【０１１５】
上記の例におけるメッセージ配送処理の全体動作を図９に示す。図９は、第２の実施形態のデータセンタ１００による配送処理の全体動作を示すシーケンス図である。
【０１１６】
図９は、クライアント端末U1がコンテナ識別子が「C」であるコンテナが宛先であるメッセージをデータセンタ１００に送信した時の配送処理を示す。上述したように、クライアント端末U1からメッセージを受信したメッセージングサービス１４０は、コンテナC1にメッセージを配送する。
【０１１７】
また、上述したように、コンテナC1からメッセージを受信したメッセージングサービス１４０は、コンテナD1にメッセージを配送する。同様に、コンテナD1からメッセージを受信したメッセージングサービス１４０は、コンテナE1にメッセージを配送する。
【０１１８】
メッセージを受信したコンテナE1は、メッセージ内容に応じた回答を作成しメッセージを返信する。すなわち、メッセージングサービス１４０は、コンテナD1にメッセージを配送する。
【０１１９】
同様に、メッセージを受信したコンテナD1は、コンテナC1が宛先であるメッセージを送信する。また、メッセージを受信したコンテナC1は、クライアント端末U1が宛先であるメッセージを送信する。
【０１２０】
なお、コンテナD1がコンテナC1にメッセージを送信する際、およびコンテナC1がクライアント端末U1にメッセージを送信する際、各コンテナは、図８に示す配送処理に従ってメッセージを送信してもよいし、他の処理に従ってメッセージを送信してもよい。
【０１２１】
例えば、一連の配送処理で転送されたメッセージ内に各配送処理での送信元および宛先の情報が記録されている場合、各コンテナは、記録されている情報に基づいてメッセージの宛先を決定できる。
【０１２２】
また、各コンテナが直前に受信されたメッセージに対してメッセージを送信した時に受信されたメッセージの送信元を記録している場合、各コンテナは、記録されている送信元にメッセージを送信すればよい。
【０１２３】
図１０は、第２の実施形態のデータセンタ１００による他の配送処理の全体動作を示すシーケンス図である。図１０は、クライアント端末U2がコンテナ識別子が「C」であるコンテナが宛先であるメッセージをデータセンタ１００に送信した時の配送処理を示す。
【０１２４】
バージョンが「2」であるクライアント端末U2からメッセージを受信したメッセージングサービス１４０は、バージョンが「2」であり、かつコンテナ識別子が「C」であるコンテナC2にメッセージを配送する。
【０１２５】
次いで、コンテナC2からメッセージを受信したメッセージングサービス１４０は、バージョンが「2」であり、かつコンテナ識別子が「D」であるコンテナD2にメッセージを配送する。同様に、コンテナD2からメッセージを受信したメッセージングサービス１４０は、コンテナE1にメッセージを配送する。
【０１２６】
メッセージを受信したコンテナE1は、メッセージ内容に応じた回答を作成しコンテナD2に返信する。同様に、メッセージを受信したコンテナD2は、コンテナC2が宛先であるメッセージを送信する。また、メッセージを受信したコンテナC2は、クライアント端末U2が宛先であるメッセージを送信する。
【０１２７】
以下、図６に示すデータセンタ１００を用いてカナリアテストを実行する場合を考える。本例において、図６に示すコンテナC1、およびコンテナC2は、HTMLで作成されたウェブページを表示するプレゼンテーション層である。
【０１２８】
クライアント端末U1、およびクライアント端末U2には、それぞれ新型のコンテナと旧型のコンテナにアクセスするためのバージョンが配送システム１０から付与される。付与されたバージョンに基づいて、メッセージングサービス１４０は、アクセス先のコンテナを決定する。
【０１２９】
本例において、コンテナC1がデザインが改修された新しいウェブページを表示し、コンテナC2が古いウェブページを表示する。上記の構成により、クライアント端末U1が広告等をクリックした場合には新しいウェブページが表示され、クライアント端末U2が広告等をクリックした場合には古いウェブページが表示される。
【０１３０】
また、バックエンドを担うコンテナD1、またはコンテナD2のいずれかだけが改修された場合、配送システム１０は、コンテナC1がメッセージを送信する際にコンテナD1とコンテナD2のいずれかにメッセージが送信されるようにバージョンを付与できる。
【０１３１】
例えば、クライアント端末U1、およびクライアント端末U2がいずれもコンテナC1にメッセージを送信する場合を想定する。コンテナ識別子が「D」のコンテナにコンテナC1がメッセージを送信する際、配送システム１０は、送信されたメッセージが送信元に応じてコンテナD1とコンテナD2のいずれかに振り分けられるように制御できる。
【０１３２】
コンテナC1から送信されたメッセージは、送信元に応じてコンテナD1とコンテナD2のいずれかに振り分けられる。上記の場合、バックエンドで異なる２つの処理が実行され、クライアント端末U1とクライアント端末U2にそれぞれ異なるメッセージが返される。
【０１３３】
また、例えば図６に示すデータセンタ１００を用いて、検索速度が異なる２つのウェブシステムに対してカナリアテストが実行される。検索速度が異なる２つのウェブシステムは、例えばレスポンスが１０ｍｓである旧型のコンテナで構成されるウェブシステムと、レスポンスが５ｍｓである処理が改善された新型のコンテナで構成されるウェブシステムである。
【０１３４】
また、例えば図６に示すデータセンタ１００を用いて、同じ時間帯における旧型のコンテナで構成されるウェブシステムでのユーザ滞在時間と、新型のコンテナで構成されるウェブシステムでのユーザ滞在時間が対比される。
【０１３５】
なお、図４に示すコンテナのバージョン情報、および図５に示すクライアント端末のバージョン情報には、バージョンを示す情報以外の他の情報が含まれてもよい。例えば、Visual Studio（登録商標）におけるビルド番号を示すような情報が含まれてもよい。ビルド番号は、デプロイが行われる度にインクリメントされてもよい。
【０１３６】
ビルド番号を示すような情報が含まれる場合、データセンタ１００には、上書きデプロイと追加デプロイを実行可能であり、複数のバージョンのアプリケーション等の存在を前提にするデプロイ支援ツールが採用されてもよい。また、デプロイが行われた時刻や日付を示す情報が含まれてもよい。また、デプロイが行われた回数を示す情報が含まれてもよい。
【０１３７】
また、図４に示すコンテナのバージョン情報、および図５に示すクライアント端末のバージョン情報には、バージョンを示す情報以外の配送システム１０が付与した属性情報が含まれてもよい。配送システム１０が付与する属性情報は、例えば旧システムと新システムのいずれであるかを示すフラグである。また、クライアント端末やコンテナで利用されるアプリケーションの属性情報が含まれてもよい。
【０１３８】
［効果の説明］
本実施形態の配送システム１０は、コンテナ識別子とバージョン識別子を用いてコンテナを管理する。コンテナ間で行われる通信において、メッセージングサービス１４０は、メッセージの宛先に含まれるコンテナ識別子と、送信元と同じバージョン識別子とが付与されたコンテナにメッセージを配送する。
【０１３９】
よって、本実施形態の配送システム１０は、所定のメッセージが所定のコンテナへ配送される仮想ネットワークのような１または複数の構成を１つの通信ネットワーク内に有する。すなわち、コンテナのバージョンに応じた処理が、対応するコンテナで実行される。本実施形態の配送システム１０では、旧システムを構成するコンテナと新システムを構成するコンテナとの間で混信が生じない。
【０１４０】
なお、本実施形態のデータセンタ１００は、例えば、記憶媒体に格納されているプログラムに従って処理を実行するCPUによって実現される。すなわちゲートウェイ１１０、メッセージングサービス１４０、および通信解析サービス１６０は、例えば、プログラム制御に従って処理を実行するCPUによって実現される。
【０１４１】
また、構成管理手段１５０、およびデータベースは、例えばRAM(Random Access Memory)で実現される。
【０１４２】
また、本実施形態のデータセンタ１００における各部は、ハードウェア回路によって実現されてもよい。
【符号の説明】
【０１４３】
１０  配送システム
１１  決定手段
２０、２０１〜２０ｎ、３０、３０１〜３０ｍ、４０、４０１〜４０ｋ、１３１〜１３Ｎ  コンテナ
１００  データセンタ
１１０  ゲートウェイ
１２１〜１２Ｍ  コンテナ実行サーバ
１４０  メッセージングサービス
１５０  構成管理手段
１６０  通信解析サービス
２０１〜２０Ｋ  クライアント端末
３００  通信ネットワーク
【図１】
2017182283.tif 000003
【図２】
2017182283.tif 000004
【図３】
2017182283.tif 000005
【図４】
2017182283.tif 000006
【図５】
2017182283.tif 000007
【図６】
2017182283.tif 000008
【図７】
2017182283.tif 000009
【図８】
2017182283.tif 000010
【図９】
2017182283.tif 000011
【図１０】
2017182283.tif 000012
【図１１】
2017182283.tif 000013
【図１２】
2017182283.tif 000014