(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-23
(45)【発行日】2024-05-31
(54)【発明の名称】コンテナのグループの動的マイグレーション
(51)【国際特許分類】
G06F 9/50 20060101AFI20240524BHJP
G06F 9/455 20180101ALI20240524BHJP
【FI】
G06F9/50 120A
G06F9/455 150
(21)【出願番号】P 2020518513
(86)(22)【出願日】2018-09-28
(86)【国際出願番号】 US2018053620
(87)【国際公開番号】W WO2019068031
(87)【国際公開日】2019-04-04
【審査請求日】2021-09-02
【審判番号】
【審判請求日】2023-07-13
(32)【優先日】2017-09-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】カルダト,クラウディオ
(72)【発明者】
【氏名】ショール,ボリス
【合議体】
【審判長】須田 勝巳
【審判官】打出 義尚
【審判官】脇岡 剛
(56)【参考文献】
【文献】特開2015-225524(JP,A)
【文献】特表2006-508445(JP,A)
【文献】特開2017-041185(JP,A)
【文献】特開2014-197340(JP,A)
【文献】特開2012-037935(JP,A)
【文献】クラウド開発徹底攻略,初版,日本,株式会社技術評論社,2016年06月25日,pp.37,52-57,61-63,ISBN978-4-7741-8095-3
【文献】鈴木雄介,クラウド時代のアーキテクチャー設計 第13回 リポジトリーやゲートウエイでサービスやAPIを効率よく管理,日経コンピュータ,日本,日経BP社,2016年07月07日,第916号,pp.112-115,ISSN 0285-4619
(58)【調査した分野】(Int.Cl.,DB名)
G06F9/50
G06F9/455
(57)【特許請求の範囲】
【請求項1】
コンテナ環境におけるコンテナポッド使用量を再バランシングする方法であって、前記方法は、
複数のコンテナポッドをコンテナ環境における複数のコンテナノードにデプロイするステップを含み、
前記複数のコンテナポッドは各々1つ以上のサービスを含み、
前記複数のコンテナノードは各々1つ以上のコンテナポッドを含み、
前記複数のコンテナポッドは、前記複数のコンテナポッド各々の使用量ファクタの最初の特徴付けに基づいて、前記複数のコンテナノードにデプロイされ、前記方法はさらに、
前記複数のコンテナノードへのデプロイメント後に前記複数のコンテナポッド各々の実際の使用量ファクタをモニタリングするステップと、
前記複数のコンテナポッドのうち、その使用量ファクタの最初の特徴付けからずれている1つ以上のコンテナポッドを特定するステップと、
前記1つ以上のコンテナポッドを前記実際の使用量ファクタに基づいて前記複数のコンテナノードに再分配するステップと、
第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが第1のしきい値を超過する状態が予め定められた期間維持されると判断するステップと、
第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが前記第1のしきい値を超過する状態が予め定められた期間維持されるという判断に応じて、前記第1のコンテナポッドのクローンを異なるコンテナノードにおいてインスタンス化するステップと、
前記第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが第2のしきい値を超過すると判断するステップと、
前記第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが前記第2のしきい値を超過すると判断したことに応じて、要求トラフィックを、前記第1のコンテナポッドから、前記異なるコンテナノードにおける前記第1のコンテナポッドのクローンにルーティングし、前記第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが減少することを検出したことに応じて、前記要求トラフィックを、前記異なるコンテナノードにおける前記第1のコンテナポッドのクローンから前記第1のコンテナポッドに戻すようにシフトするステップを含む、方法。
【請求項2】
前記使用量ファクタはCPU使用量ファクタを含む、または、
前記使用量ファクタは帯域幅使用量ファクタを含む、または、
前記使用量ファクタはメモリ使用量ファクタを含む、請求項1に記載の方法。
【請求項3】
前記使用量ファクタは前記使用量ファクタのうちの少なくとも1つの最大値を含む、請求項1に記載の方法。
【請求項4】
前記使用量ファクタは前記使用量ファクタのうちの少なくとも1つの平均値を含む、請求項1に記載の方法。
【請求項5】
前記使用量ファクタは前記使用量ファクタのうちの少なくとも1つの率を含む、請求項1に記載の方法。
【請求項6】
1つ以上のプロセッサによって実行されると前記1つ以上のプロセッサに動作を実行させる命令を含むプログラムであって、前記動作は、
複数のコンテナポッドをコンテナ環境における複数のコンテナノードにデプロイすることを含み、
前記複数のコンテナポッドは各々1つ以上のサービスを含み、
前記複数のコンテナノードは各々1つ以上のコンテナポッドを含み、
前記複数のコンテナポッドは、前記複数のコンテナポッド各々の使用量ファクタの最初の特徴付けに基づいて、前記複数のコンテナノードにデプロイされ、前記動作はさらに、
前記複数のコンテナノードへのデプロイメント後に前記複数のコンテナポッド各々の実際の使用量ファクタをモニタリングすることと、
前記複数のコンテナポッドのうち、その使用量ファクタの最初の特徴付けからずれている1つ以上のコンテナポッドを特定することと、
前記1つ以上のコンテナポッドを前記実際の使用量ファクタに基づいて前記複数のコンテナノードに再分配することと、
第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが第1のしきい値を超過する状態が予め定められた期間維持されると判断することと、
第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが前記第1のしきい値を超過する状態が予め定められた期間維持されるという判断に応じて、前記第1のコンテナポッドのクローンを異なるコンテナノードにおいてインスタンス化することと、
前記第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが第2のしきい値を超過すると判断することと、
前記第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが前記第2のしきい値を超過すると判断したことに応じて、要求トラフィックを、前記第1のコンテナポッドから、前記異なるコンテナノードにおける前記第1のコンテナポッドのクローンにルーティングし、前記第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが減少することを検出したことに応じて、前記要求トラフィックを、前記異なるコンテナノードにおける前記第1のコンテナポッドのクローンから前記第1のコンテナポッドに戻すようにシフトすることとを含む、プログラム。
【請求項7】
前記1つ以上のコンテナポッドを前記実際の使用量ファクタに基づいて前記複数のコンテナノードに再分配することは、前記1つ以上のコンテナポッドを複数の前記使用量ファクタの重み付けされた組み合わせを用いて分配することを含む、請求項6に記載のプログラム。
【請求項8】
前記第1のコンテナポッドのクローンはウォームアップされるが、要求トラフィックは前記第1のコンテナポッドのクローンにルーティングされない、請求項6に記載のプログラム。
【請求項9】
前記第1のしきい値を超過することは、前記第1のコンテナポッドの前記実際の使用量ファクタが、前記第1のコンテナポッドの前記使用量ファクタの最初の特徴付けを超過する軌跡を有することを示す、請求項6に記載のプログラム。
【請求項10】
前記第2のしきい値を超過することは、前記第1のコンテナポッドの前記実際の使用量ファクタが、前記第1のコンテナポッドを含むコンテナノードの実際の使用量ファクタが前記第1のコンテナポッドに対する使用量ファクタ制限を超過することを生じさせる軌跡を有することを示す、請求項6または9に記載のプログラム。
【請求項11】
1つ以上のプロセッサと、
1つ以上のメモリデバイスとを備えるシステムであって、前記1つ以上のメモリデバイスは、前記1つ以上のプロセッサによって実行されると前記1つ以上のプロセッサに動作を実行させる命令を含み、前記動作は、
複数のコンテナポッドをコンテナ環境における複数のコンテナノードにデプロイすることを含み、
前記複数のコンテナポッドは各々1つ以上のサービスを含み、
前記複数のコンテナノードは各々1つ以上のコンテナポッドを含み、
前記複数のコンテナポッドは、前記複数のコンテナポッド各々の使用量ファクタの最初の特徴付けに基づいて、前記複数のコンテナノードにデプロイされ、前記動作はさらに、
前記複数のコンテナノードへのデプロイメント後に前記複数のコンテナポッド各々の実際の使用量ファクタをモニタリングすることと、
前記複数のコンテナポッドのうち、その使用量ファクタの最初の特徴付けからずれている1つ以上のコンテナポッドを特定することと、
前記1つ以上のコンテナポッドを前記実際の使用量ファクタに基づいて前記複数のコンテナノードに再分配することと、
第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが第1のしきい値を超過する状態が予め定められた期間維持されると判断することと、
第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが前記第1のしきい値を超過する状態が予め定められた期間維持されるという判断に応じて、前記第1のコンテナポッドのクローンを異なるコンテナノードにおいてインスタンス化することと、
前記第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが第2のしきい値を超過すると判断することと、
前記第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが前記第2のしきい値を超過すると判断したことに応じて、要求トラフィックを、前記第1のコンテナポッドから、前記異なるコンテナノードにおける前記第1のコンテナポッドのクローンにルーティングし、前記第1のコンテナポッドの前記実際の使用量ファクタのうちの少なくとも1つが減少することを検出したことに応じて、前記要求トラフィックを、前記異なるコンテナノードにおける前記第1のコンテナポッドのクローンから前記第1のコンテナポッドに戻すようにシフトすることとを含む、システム。
【請求項12】
前記1つ以上のコンテナポッドは、コンテナプラットフォームスケジューラによって前記複数のコンテナノードに再分配される、請求項11に記載のシステム。
【請求項13】
前記1つ以上のコンテナポッドは、APIレジストリによって前記複数のコンテナノードに再分配される、請求項11に記載のシステム。
【請求項14】
前記APIレジストリは、前記コンテナ環境におけるコンテナにカプセル化されたサービスとしてデプロイされる、請求項13に記載のシステム。
【請求項15】
前記APIレジストリは、
統合開発環境(IDE)において開発中のサービスと、
前記コンテナ環境において既にデプロイされているサービスとが、利用できる、請求項13または14に記載のシステム。
【請求項16】
前記APIレジストリは、前記複数のコンテナポッドのサービスエンドポイントを1つ以上のAPI関数にマッピングする、請求項13から15のいずれか1項に記載のシステム。
【請求項17】
請求項1から5のいずれか1項に記載の方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本願は、本明細書に引用により援用する2017年9月30日出願の米国仮出願第62/566,351号に基づく利益を主張する。本願はまた、本願と同日に出願され本願と共通の譲受人に譲渡された以下の出願に関連し、これらの出願各々も本明細書に引用により援用する。
・2018年9月28日に出願されAPI REGISTRY IN A CONTAINER PLATFORM PROVIDING PROPERTY-BASED API FUNCTIONALITYと題された米国特許出願第16/147,305号(代理人整理番号088325-1090746)
・2018年9月28日に出願されDYNAMIC NODE REBALANCING BETWEEN CONTAINER PLATFORMSと題された米国特許出願16/147,343号(代理人整理番号088325-1090747)
・2018年9月28日に出願されOPTIMIZING REDEPLOYMENT OF FUNCTIONS AND SERVICES ACROSS MULTIPLE CONTAINER PLATFORMS AND INSTALLATIONSと題された米国特許出願第16/147,332号(代理人整理番号088325-1090748)
・2018年9月28日に出願されREAL-TIME DEBUGGING INSTANCES IN A DEPLOYED CONTAINER PLATFORMと題された米国特許出願16/147,351号(代理人整理番号088325-1090753)
【背景技術】
【0002】
背景
理論上、任意の形態のコンテナは、情報のパッケージングおよび情報との対話のための標準化された方法を表している。コンテナは、互いに分離することが可能であり、相互汚染(コンタミネーション)のいかなるリスクも伴うことなく並列に使用することが可能である。現代のソフトウェアの世界において、「コンテナ」という用語は固有の意味を獲得している。Docker(登録商標)コンテナのようなソフトウェアコンテナは、1つのソフトウェアを論理的にカプセル化し定義するソフトウェア構造である。コンテナにカプセル化される最も一般的なタイプのソフトウェアは、アプリケーション、サービス、またはマイクロサービスである。現代のコンテナはまた、オペレーティングシステム、ライブラリ、ストレージボリューム、構成ファイル、アプリケーションバイナリ、および、典型的なコンピューティング環境において見出されるであろうテクノロジースタックのその他の部分のような、アプリケーション/サービスが動作するのに必要なソフトウェアサポートすべてを含む。そのため、このコンテナ環境を使用することにより、各々が自身のサービスを任意の環境で実行する複数のコンテナを作成することができる。コンテナは、プロダクションデータセンター、オンプレミスデータセンター、クラウドコンピューティングプラットフォームなどにおいて、いかなる変更も伴うことなくデプロイすることができる。クラウド上にコンテナを立ち上げることは、ローカルワークステーション上にコンテナを立ち上げることと同一である。
【0003】
現代のサービス指向アーキテクチャおよびクラウドコンピューティングプラットフォームは、大きなタスクを多数の小さな特定のタスクに分割する。コンテナをインスタンス化することによって個々の特定のタスクに集中することができ、さらに、複数のコンテナが協働することによって高度なアプリケーションを実現することができる。これはマイクロサービスアーキテクチャと呼ばれることがあり、各コンテナは、独立してアップグレードすることが可能なさまざまなバージョンのプログラミング言語およびライブラリを使用することができる。コンテナ内の処理には分離されているという性質があるので、コンテナは、より大きくよりモノリシックなアーキテクチャに対して行われる変更と比較すると、手間またはリスクがほとんどない状態でアップグレードおよびリプレイスが可能である。コンテナプラットフォームを実行するために仮想マシンを使用できるが、このマイクロサービスアーキテクチャの実行において、コンテナプラットフォームは従来の仮想マシンよりも遥かに効率的である。
【発明の概要】
【課題を解決するための手段】
【0004】
簡単な概要
いくつかの実施形態において、コンテナ環境におけるコンテナポッド使用量を再バランシングする方法は、複数のコンテナポッドをコンテナ環境における複数のコンテナノードにデプロイするステップを含み得る。複数のコンテナポッドは各々1つ以上のサービスを含み得る。複数のコンテナノードは各々1つ以上のコンテナポッドを含み得る。複数のコンテナポッドは、複数のコンテナポッド各々の使用量ファクタの最初の特徴付けに基づいて、複数のコンテナノードにデプロイされてもよい。この方法はまた、複数のコンテナノードへのデプロイメント後に複数のコンテナポッド各々の実際の使用量ファクタをモニタリングするステップと、複数のコンテナポッドのうち、その使用量ファクタの最初の特徴付けからずれている1つ以上のコンテナポッドを特定するステップと、1つ以上のコンテナポッドを実際の使用量ファクタに基づいて複数のコンテナノードに再分配するステップとを含み得る。
【0005】
いくつかの実施形態において、1つ以上のプロセッサによって実行されると1つ以上のプロセッサに動作を実行させる命令を含む非一時的なコンピュータ読取可能媒体において、当該動作は、複数のコンテナポッドをコンテナ環境における複数のコンテナノードにデプロイすることを含み得る。複数のコンテナポッドは各々1つ以上のサービスを含み得る。複数のコンテナノードは各々1つ以上のコンテナポッドを含み得る。複数のコンテナポッドは、複数のコンテナポッド各々の使用量ファクタの最初の特徴付けに基づいて、複数のコンテナノードにデプロイされてもよい。この動作はまた、複数のコンテナノードへのデプロイメント後に複数のコンテナポッド各々の実際の使用量ファクタをモニタリングすることと、複数のコンテナポッドのうち、その使用量ファクタの最初の特徴付けからずれている1つ以上のコンテナポッドを特定することと、1つ以上のコンテナポッドを実際の使用量ファクタに基づいて複数のコンテナノードに再分配することとを含み得る。
【0006】
いくつかの実施形態において、システムは、1つ以上のプロセッサと、1つ以上のメモリデバイスとを含み得る。1つ以上のメモリデバイスは、1つ以上のプロセッサによって実行されると当該1つ以上のプロセッサに動作を実行させる命令を含み、当該動作は、複数のコンテナポッドをコンテナ環境における複数のコンテナノードにデプロイすることを含み得る。複数のコンテナポッドは各々1つ以上のサービスを含み得る。複数のコンテナノードは各々1つ以上のコンテナポッドを含み得る。複数のコンテナポッドは、複数のコンテナポッド各々の使用量ファクタの最初の特徴付けに基づいて、複数のコンテナノードにデプロイされてもよい。この動作はまた、複数のコンテナノードへのデプロイメント後に複数のコンテナポッド各々の実際の使用量ファクタをモニタリングすることと、複数のコンテナポッドのうち、その使用量ファクタの最初の特徴付けからずれている1つ以上のコンテナポッドを特定することと、1つ以上のコンテナポッドを実際の使用量ファクタに基づいて複数のコンテナノードに再分配することとを含み得る。
【0007】
いずれの実施形態にも、以下の特徴のうちのいずれかまたはすべてが、限定されることなく任意の組み合わせで含まれ得る。使用量ファクタはCPU使用量ファクタを含み得る。使用量ファクタは帯域幅使用量ファクタを含み得る。使用量ファクタはメモリ使用量ファクタを含み得る。使用量ファクタは使用量ファクタのうちの少なくとも1つの最大値を含み得る。使用量ファクタは使用量ファクタのうちの少なくとも1つの平均値を含み得る。使用量ファクタは使用量ファクタのうちの少なくとも1つの率を含み得る。1つ以上のコンテナポッドを実際の使用量ファクタに基づいて複数のコンテナノードに再分配することは、1つ以上のコンテナポッドを複数の使用量ファクタの重み付けされた組み合わせを用いて分配することを含み得る。上記方法/動作はまた、第1のコンテナポッドの実際の使用量ファクタのうちの少なくとも1つが第1のしきい値を超過すると判断することと、第1のコンテナポッドの実際の使用量ファクタのうちの少なくとも1つが第1のしきい値を超過すると判断したことに応じて、第1のコンテナポッドのクローンを異なるコンテナノードにおいてインスタンス化することとを含み得る。第1のコンテナポッドのクローンはウォームアップされてもよいが、要求トラフィックは第1のコンテナポッドのクローンにルーティングする必要はない。上記方法/動作はまた、第1のコンテナポッドの実際の使用量ファクタのうちの少なくとも1つが第2のしきい値を超過すると判断することと、第1のコンテナポッドの実際の使用量ファクタのうちの少なくとも1つが第2のしきい値を超過すると判断したことに応じて、要求トラフィックを、第1のコンテナポッドから、異なるコンテナノードにおける第1のコンテナポッドのクローンにルーティングすることとを含み得る。第1のしきい値を超過することは、第1のコンテナポッドの実際の使用量ファクタが、第1のコンテナポッドの使用量ファクタの最初の特徴付けを超過する軌跡を有することを示し得る。第2のしきい値を超過することは、第1のコンテナポッドの実際の使用量ファクタが、第1のコンテナポッドを含むコンテナノードの実際の使用量ファクタが第1のコンテナノードに対する使用量ファクタ制限を超過することを生じさせ得る軌跡を有することを示し得る。1つ以上のコンテナポッドは、コンテナプラットフォームスケジューラによって複数のコンテナノードに再分配されてもよい。1つ以上のコンテナポッドは、APIレジストリによって複数のコンテナノードに再分配されてもよい。APIレジストリは、コンテナ環境におけるコンテナにカプセル化されたサービスとしてデプロイされてもよい。APIレジストリは、統合開発環境(IDE)において開発中のサービスと、コンテナ環境において既にデプロイされているサービスとが、利用できるものであってもよい。APIレジストリは、複数のコンテナポッドのサービスエンドポイントを1つ以上のAPI関数にマッピングしてもよい。
【0008】
本発明の性質および利点の一層の理解は、本明細書の残りの部分および図面を参照することによって実現するであろう。いくつかの図面で使用されている同様の参照番号は、同様の構成要素を示す。いくつかの例では、参照番号に添字を対応付けることにより、同様の複数の構成要素のうちの1つを示している。既存の添字を示すことなく参照番号に言及している場合は、そのような同様の複数の構成要素すべてに言及することを意図している。
【図面の簡単な説明】
【0009】
【
図1】いくつかの実施形態に係る、コンテナプラットフォームにおけるサービスのための開発およびランタイム環境のソフトウェア構造および論理構成を示す図である。
【
図2】本明細書に記載の実施形態を実行するために特別に設計された専用コンピュータハードウェアシステムを示す図である。
【
図3】本明細書に記載の実施形態のうちのいくつかで使用されるコンテナプラットフォームに固有であってもよいデータ組織を示す図である。
【
図4】いくつかの実施形態に係る、IDEおよびプロダクション/ランタイム環境にデプロイすることができるAPIレジストリを示す図である。
【
図5】いくつかの実施形態に係る、実行時にコンテナプラットフォームとともに使用されるAPIレジストリのデプロイを示す図である。
【
図6A】いくつかの実施形態に係る、APIレジストリをデプロイする方法のフローチャートを示す図である。
【
図6B】いくつかの実施形態に係る、APIレジストリが
図6Aのフローチャートを用いてデプロイされるときのコンテナプラットフォームのソフトウェア構造を示す図である。
【
図7A】いくつかの実施形態に係る、APIレジストリにサービスを登録する方法のフローチャートを示す図である。
【
図7B】いくつかの実施形態に係る、APIレジストリにAPIを登録するためのステップのハードウェア/ソフトウェア図を示す。
【
図8】いくつかの実施形態に係る、APIレジストリに登録されたAPIをブラウズおよび選択するためのグラフィカルインターフェイスおよびコマンドラインインターフェイスの例を示す図である。
【
図9】いくつかの実施形態に係る、APIレジストリに登録されたサービスおよびその対応する関数を使用する方法のフローチャートを示す図である。
【
図10】APIレジストリが如何にしてCreateUser( )関数の選択をグラフィカルインターフェイスを介して受けることができるかを示す図である。
【
図11】いくつかの実施形態に係る、APIレジストリがあるサービスのために自動的に生成したクライアントライブラリの一例を示す図である。
【
図12】いくつかの実施形態に係る、サービスエンドポイントとAPI関数との間の動的バインディングを含むクライアントライブラリの実施形態を示す図である。
【
図13】いくつかの実施形態に係る、サービスコールのための入力データセットを完成させるために追加データを配置できるクライアントライブラリの実施形態を示す図である。
【
図14】いくつかの実施形態に係る、サービスをコールするときにリトライを処理することができるクライアントライブラリを示す図である。
【
図15A】いくつかの実施形態に係る、APIプロパティをAPIレジストリに与える方法を示す図である。
【
図15B】いくつかの実施形態に係る、如何にしてサービスがAPIプロパティをAPIレジストリに与えることができるかについてのハードウェア/ソフトウェア図を示す。
【
図16】いくつかの実施形態に係る、APIレジストリがプロパティを用いて高可用性のサービスをデプロイする場合のハードウェア/ソフトウェア図を示す。
【
図17】いくつかの実施形態に係る、APIレジストリを通じてエンドツーエンド暗号化を実施するプロパティのハードウェア/ソフトウェア図を示す。
【
図18】いくつかの実施形態に係る、APIレジストリがサービス1808の使用ロギングを実現するためのプロパティを示す図である。
【
図19】いくつかの実施形態に係る、サービスの認証プロトコルを実施することが可能なプロパティのハードウェア/ソフトウェア図を示す。
【
図20】いくつかの実施形態に係る、サービスのランタイムインスタンス化を可能にするプロパティのハードウェア/ソフトウェア図を示す。
【
図21】いくつかの実施形態に係る、サービスのレート制限関数を実現するプロパティのハードウェア/ソフトウェア図を示す。
【
図22】いくつかの実施形態に係る、複数のコンテナノードへの複数のポッドの最初のデプロイメントの機能図を示す。
【
図23】時間の経過に対するCPU使用量のグラフを示す図である。
【
図24】実際の使用量に基づくポッドの再デプロイメント描いた図を示す。
【
図25】コンテナノード内で複数の使用量特徴を如何にして同時にバランシングできるかを示す図である。
【
図26】いくつかの実施形態に係る、最初のデプロイメント後のポッドのデプロイメントを示す図である。
【
図27】いくつかの実施形態に係る、時間の経過に対するCPU使用量のグラフを示す図である。
【
図28】いくつかの実施形態に係る、
図27に記載されているポッドインスタンス化プロセスの図を示す。
【
図29】いくつかの実施形態に係る、ポッドのインスタンス化および使用量の図を示す。
【
図30】いくつかの実施形態に係る、コンテナプラットフォームにおけるサービスを動的に再バランシングする方法のフローチャートを示す図である。
【
図31】実施形態のうちのいくつかを実現するための分散型システムの簡略化されたブロック図を示す。
【
図32】実施形態のシステムの構成要素が提供するサービスをクラウドサービスとして提供し得るシステム環境の構成要素の簡略化されたブロック図を示す。
【
図33】各種実施形態を実現し得る具体例としてのコンピュータシステムを示す図である。
【発明を実施するための形態】
【0010】
詳細な説明
開発者が開発中にサービスを登録することを可能にするとともにデプロイ中およびデプロイ後双方においてこれらのサービスを他のサービスが利用できるようにする、統合開発環境(IDE)の一部であるアプリケーションプログラミングインターフェイス(API)レジストリの実施形態について説明する。APIレジストリは、コンテナプラットフォーム上のコンテナ化されたアプリケーションとして動作するオーケストレーションされたコンテナプラットフォームの一部としてデプロイすることが可能である。サービスまたはマイクロサービスが開発されコンテナプラットフォーム上のコンテナにデプロイされると、APIレジストリは、ディスカバリプロセスを実行することにより、利用できるサービスに対応するコンテナプラットフォーム内の利用できるエンドポイント(たとえばIPアドレスおよびポート番号)の場所を特定することができる。APIレジストリはまた、API定義ファイルのアップロードを受け入れることができ、API定義ファイルは、生のサービスエンドポイントを、APIレジストリを介して利用できるようにされるAPI関数にするために使用することができる。APIレジストリは、発見されたエンドポイントを、最新状態に保たれコンテナプラットフォーム内の他のサービスが利用できるようにされたAPI関数に動的にバインドすることができる。これは、API関数とサービスエンドポイントとの間のバインディングに対する任意の変更をAPIレジストリが管理している間、他のサービスが静的にコールできる安定したエンドポイントを提供する。これはまた、コンテナプラットフォーム内のサービスを使用するプロセスを簡略化する。HTTPコールに対するコードを記述する代わりに、新たなサービスは、APIインターフェイスを使用するだけで、登録されたサービスにアクセスすることができる。
【0011】
いくつかの実施形態において、IDEは、コンテナプラットフォーム内で利用することが可能でありAPIレジストリに登録されているサービスの場所を開発者が特定するための、ナビゲーション/ブラウズインターフェイスを提供することができる。開発中の新たなサービスのために、APIレジストリが既存のサービスにコールするとき、APIレジストリは、登録されているサービスとのやり取りのために必要なすべての機能を含む一組のクライアントライブラリを自動的に生成することができる。たとえば、いくつかの実施形態は、APIコールに対応するメンバ関数を含むオブジェクトクラスを生成することができる。開発中、新たなサービスは、これらのオブジェクトをインスタンス化するおよび/またはそれらのメンバ関数を使用するだけで、対応するAPIにコールすることができる。クライアントライブラリにおけるコードは、呼び出し側サービスと登録されたサービスのエンドポイントとの間の直接接続を支配し、このやり取りに必要なすべての機能を扱うコードを含み得る。たとえば、自動的に生成されたクライアントライブラリは、APIコールからのパラメータをサービスエンドポイントへのHTTPコールにパッケージングしフォーマットするためのコード、コールのためのパラメータセットを完成させるためにデータを配置するためのコード、情報を互換パケット(JSON、XMLなど)にパッケージングするためのコード、結果パケットを受けてパースするためのコード、リトライおよびエラー条件を扱うためのコードなどを含み得る。呼び出し側サービスの観点からすると、この機能すべてを扱うためのコードは、APIレジストリによって自動的に生成され、したがって、サービスコールの詳細を要約しカプセル化してクライアントライブラリオブジェクトにする。呼び出し側サービスに要求されるのは、APIレジストリが作成したクライアントライブラリオブジェクトのメンバ関数を実行することだけである。
【0012】
いくつかの実施形態において、APIレジストリは、登録されたサービスのランタイム実行を定義し得る一組のプロパティのアップロードを受け入れることもできる。この一組のプロパティは、開発中に、API定義ファイルとともにアップロードすることができる。これらのプロパティは、エンドツーエンド暗号化、使用/ロギング要件、ユーザ認証、オンデマンドサービスインスタンス化、高可用性のための複数のサービスデプロイメントインスタンス、レート/使用制限、およびその他のランタイム特徴等の、ランタイム特徴を定義することができる。APIレジストリは、開発中、デプロイ中、およびランタイム中に、コンテナ環境とやり取りすることによってこれらのプロパティが満たされることを保証できる。開発中、呼び出し側サービスのために自動的に生成されたクライアントライブラリは、暗号化コード、使用ロギングコード、および/またはユーザ認証サービスとのやり取り等の、これらのプロパティの実行に必要となり得るコードを含むことができる。登録されたサービスがデプロイされているとき、APIレジストリは、コンテナプラットフォームに対し、サービスおよび/または追加のロードバランシングモジュールの複数のインスタンスをインスタンス化することによってランタイム中のサービスの高い信頼性を保証するよう指示することができる。ランタイム中にサービスがコールされると、APIレジストリは、オンデマンドインスタンス化のためにサービスをインスタンス化させ、使用を抑えるために行うことができるAPIコールの数を制限し、その他のランタイム関数を実行することができる。
【0013】
図1は、いくつかの実施形態に係る、コンテナプラットフォームにおけるサービスのための開発およびランタイム環境のソフトウェア構造および論理構成を示す。この環境は、コンテナプラットフォーム上にデプロイされるサービスおよびマイクロサービスを開発するために使用し得るIDE102を含み得る。IDEは、新たなサービスの記述およびテストのためにサービス開発者が使用できる基本ツールすべてを統合し提供するソフトウェアスイートである。IDE102は、開発者がソースコード記述プロセスの記述、ナビゲート、統合、および視覚化を行うことを可能にする、グラフィカルユーザインターフェイス(GUI)、コード補完機能、およびナビゲート/ブラウズインターフェイスとともに、ソースコードエディタ106を含み得る。IDE102はまた、可変インターフェイス、即時可変インターフェイス、表現評価インターフェイス、メモリコンテンツインターフェイス、ブレークポイント可視化および機能、ならびにその他のデバッグ関数を含む、デバッガ110を含み得る。IDE102はまた、マシンコードをコンパイルしコンパイルしたマシンコードまたは解釈されたバイトコードを実行するためのコンパイラおよび/またはインタプリタ108を含み得る。コンパイラ/インタプリタ108は、開発者が別のビルド自動化構成のためのメイクファイル(makefiles)を使用/生成することを可能にするビルドツールを含み得る。IDE102のいくつかの実施形態は、コードライブラリ112を含み得る。コードライブラリは、一般的なコード関数、オブジェクト、インターフェイス、および/または、開発中のサービスにリンクさせることができ複数の開発で再使用できるその他の構造を含む。
【0014】
サービスは、IDE102内で、開発することができ、デプロイの準備が整うまで徹底的にテストすることができる。サービスはその後、プロダクション/デプロイメント環境104にデプロイすることができる。プロダクション/デプロイメント環境104は、専用ハードウェア、仮想マシン、およびコンテナ化されたプラットフォームを含む、多数の異なるハードウェアおよび/またはソフトウェア構造を含み得る。本開示よりも前において、サービス114がプロダクション/デプロイメント環境104にデプロイされたとき、サービス114は、IDE102で使用されるツールの多くに対するランタイムアクセスを行うことができない。サービス114がプロダクション/デプロイメント環境104で実行するのに必要ないずれの機能も、コードライブラリ112からパッケージングしサービス114とともにプロダクション/デプロイメント環境104にデプロイする必要があった。加えて、一般的にサービス114は、デバッガ110の機能またはソースコードエディタ106からのソースコードのコピーのうちのいずれも伴うことなくデプロイされる。実際、サービス114は、ランタイム動作に必要な機能すべてとともにプロダクション/デプロイメント環境104にデプロイされるが、開発中にだけ使用された情報は取り除かれる。
【0015】
図2は、本明細書に記載の実施形態を実行するために特別に設計された専用コンピュータハードウェアシステムを示す。一例として、サービス114は、サービスとしてのインフラストラクチャ(Infrastructure as a Service)(IaaS)クラウドコンピューティング環境202にデプロイすることができる。これは、ネットワーク上に仮想化または共有コンピューティングリソースを提供するクラウドコンピューティングの一形態である。IaaSクラウドコンピューティング環境202はまた、サービスとしてのソフトウェア(Software as a Service)(SaaS)および/またはサービスとしてのプラットフォーム(Platform as a Service)(PaaS)アーキテクチャとして構成されたその他のクラウドコンピューティング環境を含み得る、または当該環境に結合し得る。この環境において、クラウドプロバイダは、従来オンプレミスデータセンターに存在していたハードウェアおよび/またはソフトウェアコンポーネントのインフラストラクチャをホストすることができる。このハードウェアは、サーバ、ストレージ、ネットワーキングハードウェア、ディスクアレイ、ソフトウェアライブラリ、および、ハイパーバイザレイヤのような仮想化ユーティリティを含み得る。IaaS環境202は、Oracle(登録商標)またはその他一般に利用できるクラウドプラットフォームのような商用ソースによって提供されることができる。IaaS環境202はまた、ハードウェアおよびソフトウェアのプライベートインフラストラクチャを用いてプライベートクラウドとしてデプロイすることもできる。
【0016】
クラウド環境のタイプとは関係なく、サービス114は、複数種類のハードウェア/ソフトウェアシステムにデプロイすることができる。たとえば、サービス114は、専用ハードウェア206にデプロイすることができる。専用ハードウェア206は、サービス114に特別に割り当てられたサーバ、ディスク、オペレーティングシステム、ソフトウェアパッケージなどのようなハードウェアリソースを含み得る。たとえば、特定のサーバが、サーバ114との間で流れるトラフィックを処理するように割り当てられていてもよい。
【0017】
別の例において、サービス114は、1つ以上の仮想マシン208として動作させるハードウェア/ソフトウェアにデプロイすることができる。仮想マシンは、専用コンピュータハードウェア206の機能を提供するコンピュータシステムをエミュレートしたものである。しかしながら、特定の関数専用にする代わりに、物理ハードウェアを複数の異なる仮想マシンが共有してもよい。各仮想マシンは、完全なオペレーティングシステムを含む、実行する必要があるすべての機能を提供することができる。これにより、異なるオペレーティングシステムを有する複数の仮想マシンが、同一の物理ハードウェア上で実行することができ、複数のサービスが1つのハードウェアを共有することができる。
【0018】
別の例において、サービス114はコンテナプラットフォーム210にデプロイすることができる。コンテナプラットフォームは、仮想マシン208と、複数の重要な点において異なっている。第1に、以下
図3で詳述するように、コンテナプラットフォーム210は、個々のサービスをコンテナにパッケージングする。各コンテナは、ホストオペレーティングシステムカーネルを共有するとともに、バイナリ、ライブラリ、およびその他の読取専用コンポーネントを共有する。これにより、コンテナを極めて軽くすることができ、わずか数メガバイトのサイズであることも多い。加えて、軽量コンテナは、仮想マシンのブートアップに数分を要するのに対して起動にわずか数秒しかかからず、非常に効率的である。また、コンテナは、オペレーティングシステム、および、コンテナプラットフォーム210内の一組のコンテナセットに対してともに管理できるその他のライブラリを共有することにより、管理オーバーヘッドを減じる。コンテナは同じオペレーティングシステムを共有するものの、オペレーティングシステムは分離のために仮想メモリサポートを提供するので、分離されたプラットフォームを提供する。コンテナ技術は、Docker(登録商標)コンテナ、Linux(登録商標) Libcontainer(登録商標)、オープンコンテナイニシアティブ(Open Container Initiative)(OCI)、Kubernetes(登録商標)、CoeOS、Apache(登録商標) Mesosを、それ以外のものともに含み得る。これらのコンテナは、本明細書では簡単に「コンテナプラットフォーム210」と呼ぶ場合があるコンテナオーケストレーションプラットフォームにデプロイすることができる。コンテナプラットフォームは、デプロイされたソフトウェアコンテナの自動化された構成、調整、および管理を維持する。コンテナプラットフォーム210は、サービスディスカバリ、ロードバランシング、ヘルスチェック、マルチデプロイメントなどを提供することができる。コンテナプラットフォーム210は、ノードおよびポッドで構成されたコンテナを実行する、Kubernetesのような一般に利用できるコンテナプラットフォームによって実現し得る。
【0019】
サービス114をデプロイするプラットフォーム206、208、210とは関係なく、プラットフォーム206、208、210は各々、サービス114をコールするためのパブリックアクセスを提供するサービスエンドポイント212、214、216を提供できる。一般的に、これらのエンドポイントには、HTTPコールを通してアクセスでき、これらのエンドポイントは、IPアドレスおよびポート番号に対応付けられる。正しいIPアドレスおよびポート番号に接続することにより、その他のサービスは、公的に利用できるようにされたときにプラットフォーム206、208、210のうちのいずれかにデプロイされるサービスをコールすることができる。サービス114等の各サービスは、サービスをコールするための自身のプロプライエタリフォーマットとデータ要件とを含み得る。同様に、各サービスは、フォーマットおよびデータタイプがそのサービス114に固有である結果を返すことができる。サービス固有の要件に加えて、特定のデプロイメントプラットフォーム206、208、210はまた、サービスと適切にやり取りするために準拠する必要がある、プログラミング言語、パッケージフォーマット(JSON、XMLなど)その他のような、サービス114とやり取りするための追加要件を含み得る。
【0020】
上述の例は、サービス114を上記プラットフォーム206、208、210のうちのいずれかにデプロイすることを可能にするが、本明細書に記載の実施形態は、上記コンテナプラットフォーム210のために特別に設計される。よって、「コンテナプラットフォーム」にデプロイされると具体的に記載された実施形態は、仮想マシンプラットフォームに、サーバもしくは専用ハードウェアプラットフォーム上に、または一般的にIaaS環境にデプロイされると具体的に記載された実施形態と区別することができる。
【0021】
図3は、本明細書に記載の実施形態のうちのいくつかが使用するコンテナプラットフォーム210に固有であってもよいデータ組織を示す。一般的に、コンテナプラットフォームへのサービスのいかなるデプロイメントもポッド304、306にデプロイされる。ポッドは、1つ以上のアプリケーションコンテナ(たとえばDockerまたはrkt)からなるグループを表す抽象概念である。ポッドはまた、当該ポッド内のすべてのコンテナが共通して利用できるいくつかの共有リソースを含み得る。たとえば、ポッド304はコンテナ310とコンテナ312とを含む。ポッド304はまた、共有リソース308を含む。このリソースは、ストレージボリューム、またはコンテナが如何にしてポッド304内で実行されるかまたは接続されるかに関するその他の情報を含み得る。ポッド304は、比較的密接に結合された異なるサービスコンテナ310、312を含むアプリケーション専用論理ホストをモデル化することができる。たとえば、コンテナ310内のサービス326は、リソース308を利用することができ、コンテナ312内のサービス320をコールすることができる。サービス320もサービス322をコールすることができ、サービス322もサービス324をコールすることができ、これらのサービスは各々コンテナ312にデプロイされている。サービス324の出力はネットワークIPアドレスおよびポート318に与えることができ、これはポッド304が共有する別の共通リソースである。このように、サービス320、322、324、326すべてが共有リソース308と協働することにより、他のコンテナで実行されるサービスがIPアドレスおよびポート番号318によってアクセスすることができる、1つのサービスを提供する。このサービスは、コンテナプラットフォームまたはIaaS環境の一部ではない、ワークステーション、ラップトップコンピュータ、スマートフォンまたはその他のコンピューティングデバイスのような、コンテナプラットフォームの外部のコンピュータシステムが、IPアドレスポート318を介してアクセスすることもできる。
【0022】
最も単純なデプロイメントの場合、各コンテナは1つのサービスを含むことができ、各ポッドはサービスをカプセル化する1つのコンテナを含むことができる。たとえば、ポッド306は1つのサービス328のみを有する1つのコンテナ314のみを含む。この1つのサービスは、ポッド306のIPアドレスおよびポート番号316を通してアクセスできる。典型的に、サービスがコンテナプラットフォームにデプロイされるとき、コンテナおよびポッドがインスタンス化されてこのサービスを保持する。複数の異なるポッドをコンテナノード302にデプロイすることができる。一般的に、ポッドはノード内で実行される。ノードはコンテナプラットフォーム内のワーカーマシン(仮想または物理いずれか)を表す。各ノードは、各ノード内のスケジューリングポッドを自動的に扱う「マスタ」によって管理される。各ノードは、マスタとノードとの間の通信を担い、かつ当該ノードによって表されるマシン上のコンテナ内でポッドを管理するためのプロセスを実行することができる。各ノードはまた、レジストリからコンテナ画像を引き出すこと、コンテナを解凍すること、およびサービスを実行することを担うコンテナランタイムを含み得る。
【0023】
図4は、いくつかの実施形態に係る、IDE102およびプロダクション/デプロイメント環境104にデプロイすることができるAPIレジストリ404を示す。上述のように、サービス114がIDE102からプロダクション/デプロイメント環境104にデプロイされるとき、IDE102内で独占的に利用できる情報へのランタイムアクセスをサービス114が失うという、技術的課題がある。APIレジストリ404に対し、サービス114は、プロダクション/デプロイメント環境104にデプロイされこの環境でランタイム中に動作している間、アクセスすることができる。開発関数がランタイム関数から分離されるという過去の技術的課題は、開発中にサービスをAPIレジストリ404に登録しAPI定義および/またはAPIプロパティをAPIレジストリ404に与えることにより、APIレジストリ404によって克服される。APIを定義する情報は、IDE102内の開発中の新たなサービス、および、プロダクション/デプロイメント環境104に既にデプロイされているサービスが、使用できる。この登録プロセスの完了後、サービス114はクライアントライブラリを用いて動作することができ、クライアントライブラリは、ランタイム中にAPIレジストリ404にアクセスすることにより、API関数が、対応するサービスの現在のIPアドレスおよびポート番号に正しくバインドされていることを保証する。APIレジストリ404は、これらの技術的課題を解決するために特別に設計された新たなデータ構造および処理ユニットを表す。
【0024】
当該技術に存在していたもう1つの技術的課題は、サービスプロパティがプロダクション/デプロイメント環境104にデプロイされるときの、サービスプロパティの実現であった。たとえば、サービスを高可用性を伴ってデプロイしようとする場合、開発者は、コンテナプラットフォーム内でサービスの複数のインスタンスを特別にインスタンス化したコンテナデプロイメントファイルと、バランスが取れたトラフィックとを、サービスが常に利用できるように構築する必要がある。サービス開発者は必ずしもこの専門知識を有していた訳ではなく、それらのサービスのデプロイメントを大抵は管理できた訳でもない。上述のように、APIレジストリ404により、サービスは、APIレジストリ404が自動的に実現できる高可用性のようなプロパティを単純に選択することができる。この技術的解決策が可能な理由は、APIレジストリ404がIDE102とプロダクション/デプロイメント環境104との間の隙間の架け橋となるからである。
【0025】
図5は、いくつかの実施形態に係る、実行時にコンテナプラットフォーム210とともに使用されるAPIレジストリ404のデプロイメントを示す。APIレジストリ404が提供する、既存の技術に対する技術的解決策および改善のうちの1つは、サービスコールのための安定したエンドポイントの維持、ならびにサービスコールへのアクセスの簡略化およびサービスコールへのアクセスのための自動コード生成である。本開示よりも前において、サービス間のコールは、たとえばIPアドレスおよびポート番号に対するHTTPコールを用いるポイントツーポイント接続であった。サービスがアップデート、リプレイス、リロケート、およびコンテナプラットフォーム210に再デプロイされるときに、IPアドレスおよびポート番号が頻繁に変わる可能性がある。この場合、アップデートされたサービスをコールしたすべてのサービスが、そのサービスをコールした実際のコードのIPアドレスおよびポート番号をアップデートする必要があった。APIレジストリ404は、この技術的課題を、サービスのIPアドレスおよびポート番号と、APIレジストリを介して利用できるようにされるAPI関数との間の動的バインディングを提供することによって解決する。APIレジストリ404が自動的に生成するクライアントライブラリは、APIレジストリ404にアクセスすることにより特定のサービスの現在のIPアドレスおよびポート番号を取り出すおよび/または検証する関数を含み得る。したがって、第2のサービスに接続する第1のサービスは、クライアントライブラリを一度生成するだけで、第2のサービスへの、存続期間にわたって安定した接続を提供する。
【0026】
APIレジストリ404が解決する別の技術的課題は、クライアントライブラリの自動生成である。本開示よりも前において、第2のサービスにアクセスする第1のサービスは、第2のサービスにアクセスするためのカスタムコードを開発者が記述することを必要としていた。このコードは時間の経過に伴って変化する可能性があるので、どちらもアップデートを必要とする第1のサービスと第2のサービスとの間に非互換性が生じることになる。APIレジストリ404は、この技術的課題を、サービスをコールするためにクライアントライブラリを自動的に生成するのに使用されるAPI定義ファイルをアップロードすることによって解決する。したがって、サービスは、その他いずれかのサービスにおけるコーリングコードが如何にして動作すべきかを具体的に指定することができ、これが互換性を保証する。これらのクライアントライブラリはまた、サービスをコールするためのコードを大幅に簡略化しカプセル化する。以下で述べるように、IPアドレスおよびポート番号を使用する複雑なHTTPコールは、呼び出し側サービスに固有の言語(たとえばJava(登録商標)、C#など)の単純なメンバ関数に置き換えることができる。これにより、呼び出し側サービスは、APIレジストリ404からAPI関数を選択することができ、関数で実現するコードは、クライアントライブラリとして呼び出し側サービスダウンロードすることができる。
【0027】
図6Aは、いくつかの実施形態に係る、APIレジストリ404をデプロイする方法のフローチャートを示す。この方法は、APIレジストリサービスをコンテナ環境にデプロイすることを含み得る(601)。APIレジストリは、コンテナ環境においてコンテナ内で動作するサービスとして実現することができる。よって、APIレジストリは、実行時にアクセスされることができるよう、コンテナ環境内にサービスがデプロイされた後で能動的に実行することができる。APIレジストリは、上記既存のIDEにリンクさせることもできる。この方法はさらに、コンテナプラットフォーム内の利用できるサービスのためのポートを発見することを含み得る(603)。サービスがコンテナプラットフォームにデプロイされると、APIレジストリは、コンテナプラットフォームにデプロイされたサービス各々を逐次的にトラバースするディスカバリプロセスを開始することができる。サービスごとに、APIレジストリはIPアドレスおよびポート番号を検出して記録することができる。このプロセスによって発見されたIPアドレスおよびポート番号の一覧表は、APIレジストリに対応付けられたテーブル等のデータ構造に格納することができる。また、各IPアドレスおよびポート番号は、そのサービスの名称とともに、または、コンテナプラットフォーム上のサービスを一意に識別するその他の識別子とともに、格納することができる。
図6Aのフローチャートに示されるこれらの初期ステップは、APIレジストリがコンテナプラットフォームのランタイム環境内で動作を開始するため、かつ、IDE内で開発中のサービスがAPIレジストリを利用できるようにするための、出発点を提供する。
【0028】
図6Bは、いくつかの実施形態に係る、
図6Aのフローチャートを用いてAPIレジストリをデプロイするときのコンテナプラットフォーム210のソフトウェア構造を示す。先に述べたように、APIレジストリ404はコンテナプラットフォーム210内のコンテナ620にデプロイすることができる。先に
図3で説明したように、コンテナ620は、あるノードにおいて1つ以上のポッド内で動作することができる。APIレジストリ404を、コンテナプラットフォーム210内の他のコンテナのうちのいずれかが非公式に利用できるようにすることができる。いくつかの実施形態において、APIレジストリ404を、コンテナプラットフォーム210の一部ではない他のデバイスが公的に利用できるようにすることもできる。コンテナ化されたサービスとして、APIレジストリ404は他のサービスが利用できるIPアドレスおよびポート番号を有することができる。しかしながら、APIレジストリ404のIPアドレスおよびポート番号は、クライアントライブラリで自動的に生成されたコードのみによって使用されるので、いくつかの実施形態はAPIレジストリ404のIPアドレスおよびポート番号を公開する必要はない。その代わりに、IDE自身のクライアントライブラリが、他のサービスの開発、デプロイ、および実行中にコンタクトできるよう、APIレジストリ404のIPアドレスおよびポート番号の最新一覧表を管理することができる。
【0029】
APIレジストリ404は、コンテナ620にデプロイされた後に、ディスカバリプロセスを実行することができる。ディスカバリプロセスは、コンテナプラットフォームにおけるノードのディレクトリ一覧表を用いることにより、IPアドレスおよびポート番号で、サービスを実現するポッドを特定することができる。そうすると、APIレジストリ404は、利用できる各サービスの番号または名称等の固有識別子にアクセスし、識別子を各IPアドレスおよびポート番号とともにコンテナプラットフォーム210に格納することができる。このディスカバリプロセスを周期的に実行することにより、コンテナプラットフォーム210に追加された新たなサービスを検出することができるとともに、コンテナプラットフォーム210から削除された既存のサービスを特定することができる。以下で述べるように、このディスカバリプロセスを用いることにより、既存のサービスについてIPアドレスおよびポート番号がいつ変化したかを検出することもできる。たとえば、APIレジストリ404は、エンドポイント602、604、606、608を有するサービスを発見することができる。下記プロセスにおいて、APIレジストリ404は、これらのエンドポイント602、604、606、608各々を、APIレジストリ404に登録されたAPI関数にバインドすることができる。この最初の発見後のある時点で、エンドポイント602のIPアドレスおよび/またはポート番号が、エンドポイント602に対応付けられたサービスがリプレイス、アップデート、またはリバイズされたときに、変更される場合がある。APIレジストリ404は、このエンドポイント602に対する変更を検出し、APIレジストリ404が提供する既存のAPI関数へのバインディングをアップデートすることができる。
【0030】
同様に、APIレジストリ404は、ディスカバリプロセスを用いることにより、いつエンドポイントが利用できなくなったかを検出し、その後、サービスに対応付けられたAPI関数を削除することができる。いくつかの実施形態において、サービスはAPIレジストリ404に登録されているものの、対応するAPI関数が現在有効なエンドポイントにバインドされていないとき、APIレジストリ404は、対応するAPI関数をコールしているいずれかのサービスにモックレスポンス(mock response)を与えることができる。たとえば、エンドポイント604に対応するサービスについてAPIが登録されているものの、エンドポイント604は現在利用できない場合、APIレジストリ404は、エンドポイント604に対するコールをインターセプトしそれに応じてデフォルトまたはダミーデータを与えることができる。これにより、エンドポイント604に対応付けられているサービスをコールするサービスは、機能を維持する、および/またはこの特定のサービスに対する接続を「切断する」ことなく設計プロセスを続けることができる。モック/テストデータシナリオについては以下でより詳細に説明する。
【0031】
図7Aは、いくつかの実施形態に係る、APIレジストリ404にサービスを登録する方法のフローチャートを示す。この方法は、API定義のアップロードを受けることを含み得る(701)。API定義は、データパケット、ファイル、または情報リポジトリに対するリンクの形態で提供し得る。API定義は、サービスに対応付けられたエンドポイントにバインドすべきAPI関数を特定し定義するために使用できる任意の情報を含み得る。たとえば、API定義のいくつかの実施形態は、以下のデータを、すなわち、サービス名またはその他の固有識別子、サービスエンドポイントおよびコールに対応する関数名、対応する記述およびデータタイプでサービスにコールするのに必要なデータ入力、結果データフォーマットおよびデータタイプ、現在のIPアドレスおよび/またはポート番号、エンドポイントに対応付けられることになるAPI関数の機能を記述する文書、モック/テストシナリオ中に返すべきデフォルトまたはダミーデータ値、ならびに、APIレジストリ404が、エンドポイントが受けたHTTP要求を、クラスデータオブジェクトのAPI関数コールを使用するクライアントライブラリに変換するために使用し得るその他任意の情報を、含み得る。
【0032】
この方法はまた、アップロードされたAPI定義に基づいて対応するAPI関数を作成することを含み得る(703)。これらのAPI関数はAPI定義に基づいて自動的に生成することができる。サービスの各エンドポイントは複数の異なるAPI関数に対応付けることができる。たとえば、RESTfulインターフェイスを実現するエンドポイントは、同一のIPアドレスおよびポート番号のPOST、GET、PUT、およびDELETE関数に対するHTTPコールを受けることができる。これは結果としてたとえば異なるAPI関数に対するものになり得る。たとえば、このインターフェイスがユーザのリストを表す場合、これは、GetUser( )、AddUser( )、RemoveUser( )、およびUpdateUser( )のような、少なくとも4つの異なるAPI関数に対応し得る。加えて、各API関数は、UpdateUser(id)、UpdateUser(name)、UpdateUser(firstname, lastname)などのような、複数の異なるパラメータリストを含み得る。これらのAPI関数を生成し、生成されたAPI関数をAPIレジストリを介して他のサービスが利用できるようにすることができる。以下でより詳細に説明するように、これらの関数をAPIレジストリを介してコールするためにサービスは必要ではないことに注意する必要がある。代わりに、これらの関数は、APIレジストリにおいてブラウズするのに利用できるようにされ、選択されると、APIレジストリは、呼び出し側サービスにおいてこれらの関数を実現するクライアントライブラリを生成することができる。
【0033】
この方法はさらに、APIレジストリにおいて、API関数と、対応するサービスのエンドポイントとの間のバインディングを作成することを含み得る(705)。上記ディスカバリプロセスおよびステップ701の登録プロセスに基づいて、APIレジストリは、コンテナプラットフォームにおけるサービスのエンドポイントと、APIレジストリが作成したAPI関数との間の動的バインディングを作成することができる。利用できるエンドポイントおよびサービスを発見したときに形成される上記データ構造に、APIレジストリは、各エンドポイントの対応する関数または一組の関数を格納することができる。上述のように、このバインディングは、サービスがいつアップデート、移動、リプレイス、またはコンテナプラットフォームに追加されるかがディスカバリプロセスによって判断されたときに、常にアップデートすることができる。これにより、呼び出し側サービスにおいて作成されたクライアントライブラリは、先ずAPIレジストリを調べることにより、サービスの現在のIPアドレスおよびポート番号を検証するまたは受けることができる。
【0034】
図7Bは、いくつかの実施形態に係る、APIレジストリ404にAPIを登録するためのステップのハードウェア/ソフトウェア図を示す。上述のように、APIレジストリ404をインスタンス化しコンテナプラットフォーム210におけるコンテナ620内で実行することができる。コンテナプラットフォーム210はプロダクション/デプロイメント環境を表しているが、APIレジストリ404はそれでもなお、サービスを開発するために使用されるIDE102からアクセスすることができる。よって、IDE102は、API定義ファイル702をAPIレジストリ404にアップロードするメカニズムを提供することができる。具体的には、IDE102のユーザインターフェイスは、開発者がAPI定義ファイル702のフィールドを定義するおよび/またはフィールドにポピュレートすることを可能にするウィンドウまたはインターフェイスを含み得る。上述のこの情報は、関数名、パラメータリスト、データタイプ、フィールド長、オブジェクトクラス定義、IPアドレスおよびポート番号、サービス名またはその他の固有識別子などを、含み得る。この情報は、APIレジストリ404にアップロードすることができ、動的バインディングによって、エンドポイント602の特定のIPアドレスおよびポート番号にリンクさせることができる。最後に、APIレジストリ404は、APIレジストリ404を介して利用できるようにすることができる1つ以上のAPI関数704を生成することができる。
【0035】
サービスがAPIレジストリ404に登録され1つ以上のAPI関数が生成された後に、APIレジストリは、開発者がサービスを設計する際にこれらの関数を利用できるようにすることができる。
図8は、いくつかの実施形態に係る、APIレジストリ404に登録されたAPIをブラウズし選択するためのグラフィカルインターフェイス802およびコマンドラインインターフェイス804の例を示す。コンテナプラットフォームに対して新たなサービスをプログラミングおよび開発するときに、開発者は、グラフィカルインターフェイス802にアクセスすることにより、それらのサービスで使用できるAPI関数をブラウズし選択することができる。このグラフィカルインターフェイス802は、一例にすぎず、API関数をブラウズし選択するために使用できるグラフィカルインターフェイスのタイプを限定することを意図している訳ではない。
【0036】
この実施形態において、IDE102は、APIレジストリに登録されているAPIのリストを提供するようグラフィカルインターフェイス802に命じることができる。この実施形態において、APIはエンドポイントに基づいてカテゴライズされる。たとえば、あるサービスに対応する1つのエンドポイントは、ユーザ記録を格納するためのRESTfulインターフェイスを提供し得る(たとえば「UserStorage」)。グラフィカルインターフェイス802は、選択されたエンドポイントを介して利用できるすべてのAPI関数(たとえば「CreateUser」、「DeleteUser」、「UpdateUser」など)を表示することができる。その他の実施形態は、サービスが複数のエンドポイントを提供する場合、サービス全体に基づいて関数をグループ分けすることができる。グラフィカルインターフェイス802は、呼び出し側サービスで使用される1つ以上のAPI関数の選択を受けることができる。APIレジストリは次に、必要なパラメータおよびリターン値を含む、API関数の使用方法を示す文書を提供することができる。当業者は、コマンドラインインターフェイス804がグラフィカルインターフェイス802と同様の情報を提供することができかつ同様の入力を受けることができることを、理解するであろう。
【0037】
図8に示されるインターフェイス802、804は複数の技術的利点を提供する。第1に、これらのインターフェイス802、804は、APIレジストリに登録されているすべてのAPIの最新一覧表を提供する。これは、コンテナプラットフォームで現在利用できるすべてのサービスのリストに相当する。文書を調べること、サービス開発者にコンタクトすること、および/または利用できるサービスのリストの場所を特定するためのその他の非効率的なタスクを実行することが要求されるのではなく、サービス開発者はこの情報をリアルタイムで取り出して表示することができる。加えて、サービスがアップデートされると、API定義ファイルを対応するやり方でアップデートすることができる。これにより、次に
図8に示されるディスプレイがアップデートされて各API関数の最新の可用性情報を提供する。
【0038】
図9は、いくつかの実施形態に係る、APIレジストリに登録されたサービスおよびその対応する関数を使用する方法のフローチャートを示す。この方法は、登録されたAPIの一覧表を提供することを含み得る(901)。所望のサービスが既にわかっている場合はこのステップを省略してもよい。しかしながら、一般的に、サービスは、上述の
図8のインターフェイスを用いたブラウズおよびナビゲーションのために表示することができる。この方法はまた、API関数の選択を受けることを含み得る(903)。この選択は、APIレジストリがサービスの開発者から受けることができるものである。たとえば、開発者は、上記CreateUser( )関数を用いてユーザ記録のデータベースをアップデートすると決定する場合がある。
図10は、APIレジストリが如何にしてCreateUser( )関数の選択1002をグラフィカルインターフェイス802を介して受けることができるかを示す。他の実施形態は、この選択を、コマンドラインインターフェイスを介してまたはIDEが提供するその他の入力方法を介して受けることができる。
【0039】
再び
図9を参照して、APIレジストリは、API関数の選択を受けると、呼び出し側サービスのための1つ以上のクライアントライブラリを生成することができる(905)。クライアントライブラリを生成することにより、呼び出し側サービスに、API関数に動的にバインドされたサービスエンドポイントを提供することができる。具体的には、IDEは、コンテナプラットフォームにおけるサービスエンドポイントと直接インターフェイスするのに必要な機能をカプセル化する一組のクラスオブジェクトをIDEに生成することができる。いくつかの実施形態において、クライアントライブラリは、サービスとの通信に必要なコードを実施するメンバ関数をコールするためにインスタンス化または使用することができるオブジェクトクラスを含み得る。これらのクライアントライブラリの例については以下でより詳細に説明する。
【0040】
この方法はさらに、テストデータを提供することを含み得る(907)。サービスは、APIレジストリに登録されるとき、完全である必要はない。代わりに、サービスは、呼び出し側サービスに対する機能的レスポンスを提供する準備がまだ整っていないことをAPIレジストリに対して示すことができる。いくつかの実施形態において、APIレジストリにアップロードされたAPI定義ファイルは、サービスが機能的になる前に返す必要がある情報のタイプの明細を含み得る。呼び出し側サービスがAPI関数をコールすると、APIレジストリが生成したクライアントライブラリは、サービスエンドポイントではなくAPIレジストリに要求をルーティングすることができる。そうすると、APIレジストリは、ダミー、ヌル、またはデフォルト値を用いてレスポンスを提供することができる。これに代えて、クライアントライブラリ自身の中にあるコードが、呼び出し側サービスに返されるデフォルトデータを生成してもよい。
【0041】
図9に示される具体的なステップが本発明の各種実施形態に係るAPIレジストリの特定の使用方法を提供することが理解されるはずである。代替実施形態に従いステップの他のシーケンスを実行することもできる。たとえば、本発明の代替実施形態は、概要を述べた上記ステップを異なる順序で実行し得る。加えて、
図9に示される個々のステップは、個々のステップに適したさまざまなシーケンスで実行し得る複数のサブステップを含み得る。さらに、特定のアプリケーションに応じてその他のステップを追加または削除する場合もある。当業者は、多数の変形、修正、および代替形を認識するであろう。
【0042】
図11は、いくつかの実施形態に係る、APIレジストリがあるサービスのために自動的に生成したクライアントライブラリの一例を示す。このクライアントライブラリ1102は、ユーザ記録を格納するサービスに対応し得る。このクライアントライブラリ1102ならびに対応するクラスおよびサービスは、例示のために提供されているにすぎず、限定を意図している訳ではない。先に述べたように、各API関数およびサービスは、APIレジストリにアップロードされたAPI定義ファイルによって如何にしてクライアントライブラリが生成されるべきかを指定することができる。したがって、「User(ユーザ)」サービスに関して以下で述べる原理は、その他のサービスにも適用し得る。
【0043】
Userサービスを表すために、APIレジストリはUserのクラスを生成することができる。呼び出し側サービスは、APIレジストリによるクライアントライブラリの生成を要求するとき、呼び出し側サービスが使用しているプログラミング言語を指定することができる。たとえば、呼び出し側サービスがJavaでIDEに記述されている場合、APIレジストリはJavaプログラミング言語でクラスライブラリを生成することができる。これに代えて、呼び出し側サービスがC#で記述されている場合、APIレジストリはC#プログラミング言語でクラスライブラリを生成することができる。Userクラスは、サービスエンドポイントを介して実行することができる異なる動作に対応するメンバ関数を有するように生成することができる。これらのメンバ関数は、スタティックメンバ関数にすることにより、Userクラスのインスタンス化されたインスタンスを必要としないようにすることができる、または、インスタンス化されたUserオブジェクトとともに使用されてもよい。
【0044】
この例において、Userサービスは、RESTfulインターフェイスを使用することにより、サービスによって格納された個々のユーザ記録を編集することができる。たとえば、APIレジストリは、CreateUser( )関数を生成することにより、Userサービスに対するPOSTコールを実現することができる。クラスライブラリが実行できる機能のうちの1つは、サービスに対してデータパケットとして直接送られるAPI関数に対してパラメータとして提供されるデータを、パースし、フィルタリングし、フォーマットすることである。この例において、CreateUser( )関数は、呼び出し側サービスの便宜のためにフォーマットされたパラメータを受け入れることができる。たとえば、呼び出し側サービスは、ユーザの名(first name)およびユーザの姓(last name)のストリングを別々に格納することができる。しかしながら、POSTコマンドは、名と姓との連結ストリングを必要とする場合がある。ユーザーフレンドリーなパラメータセットを受け入れるために、クライアントライブラリ1102は、関数に対するパラメータとして受けたデータを、サービスエンドポイントと互換性のあるフォーマットにフォーマットする一組の動作を実行することができる。これは、ヘッダ情報の生成、特定のデータフィールドのフォーマットの変更、データフィールドの連結、その他のソースからの追加データを要求すること、計算またはデータ変換の実行などを含み得る。これはまた、再フォーマットされたパラメータを、JSON、XMLなどのようなフォーマットにパッケージングすることを含み得る。
【0045】
パラメータがサービスエンドポイントのためのパッケージに正しくフォーマットされると、クライアントライブラリ1102は、サービスに対するPOSTコールを扱うこともできる。クライアントライブラリが生成されるときに、サービスのIPアドレスおよびポート番号を、サービスに対するHTTP要求で使用されるCreateUser( )関数に挿入することができる。なお、HTTP要求の詳細は、CreateUser( )関数にカプセル化される。呼び出し側サービスのための開発者が、サービスによって利用できるようにされたPOST関数の使用を所望する場合、コードをライブラリ1102自身に書き込む代わりに、APIレジストリからUserサービスを選択することができる。そうすると、APIレジストリは、Userクラスを含むクライアントライブラリ1102を自動的に生成する。次に、POST関数を使用するために、サービス開発者は、User.CreateUser(“John”, “Smith”, 2112)関数を使用するだけで、ユーザであるJohn Smithをサービスに追加することができる。
【0046】
図12は、いくつかの実施形態に係る、サービスエンドポイントとAPI関数との間の動的バインディングを含むクライアントライブラリ1202の実施形態を示す。この例において、APIレジストリがクライアントライブラリ1202を生成するとき、CreateUser( )関数は、サービスのIPアドレスおよびポート番号を動的に取り出すコード1204を含み得る。呼び出し側サービス114は、呼び出し側サービス114がコンテナプラットフォームのようなプロダクション/デプロイメント環境104で動作しているときに、GetIPPort( )関数を用いることにより実行時に要求をAPIレジストリ404に送ることができる。APIレジストリ404は、API関数とサービスエンドポイントとの間の最新バインディングを維持するために常にアップデートされるその内部テーブルにアクセスすることができる。次に、APIレジストリ404は、現在のIPアドレスおよびポート番号を呼び出し側サービス114に返すことができる。次に、クライアントライブラリ1202は、IPアドレスおよびポート番号を、サービスに接続するHTTP POSTコードに挿入することができる。APIレジストリ404に対しては、コンテナプラットフォームにおける任意の呼び出し側サービスが実行時にアクセスできるので、コールされているサービスのポート番号についてのIPアドレスが変化したとき、これらのサービスのうちのいずれのサービスも、アップデートまたはパッチは不要である。代わりに、APIレジストリ404は、サービスがコールされるたびに最新情報を提供することができる。いくつかの実施形態において、GetIPPort( )関数は、1時間に1度、1日に1度、1週間に1度など、APIレジストリ404をコールするだけで、サービスエンドポイントはプロダクション環境において頻繁に変わるものではないという仮定のもとでサービス114についてコンテナの外部で行われる関数コールの数を最小にすることができる。
【0047】
図13は、いくつかの実施形態に係る、サービスコールのための入力データセットを完成させる追加データを配置できるクライアントライブラリ1302の実施形態を示す。クライアントライブラリ1302を用いた簡略化のために、クライアントライブラリ1302はサービス開発者に要求されるパラメータの数を最小にすることができる。サービスコールを行うために必要であろう追加データは、他のソースから取り出すことができ、したがって、パラメータリストから省略してもよい。代わりに、これらの追加パラメータは、クライアントライブラリ1302がこれらの他のソースから直接取り出してもよい。たとえば、新たなユーザの作成は、このユーザのユーザロールを指定することを含み得る。パラメータのうちの1つとしてユーザロールを提供することをサービス開発者に要求する代わりに、クライアントライブラリ1302は、他のいずれかのソースからユーザのロールを自動的に取り出すコード1304を含み得る。この例において、ユーザロールは、データベースから、コンテナプラットフォーム内の別のサービスから、または呼び出し側サービス内のユーザロールを格納する別のクラスから、取り出すことができる。これらの場合のうちのいずれの場合でも、コード1304は、自動的にユーザロールを取り出し、これを、サービスに送られるHTTP POSTコマンドのための入力データの一部としてパッケージングすることができる。
【0048】
サービスに対する入力のためにデータを配置しフォーマットすることに加えて、クライアントライブラリ1302は、サービスから受けたデータをパースして返し、エラー条件を処理することができる。この例において、POSTコマンドはデータパケットをResult(結果)変数に返すことができる。しばしば、サービスは、呼び出し側サービスが必要とする情報よりも多くの情報を含むデータパケットを返すことができる。したがって、クライアントライブラリ1302は、Result変数におけるデータフィールドをパースし、データをResult変数から抽出し、ユーザクラスによって予想されるより使い易いフォーマットにフォーマットしパッケージングすることができる。この例において、コード1306は、Result変数からフィールドを抽出して使用することにより、API関数から返される新たなUserオブジェクトを作成することができる。GETコマンドを使用する別の例において、個々のAPI関数は、GETコマンドからのResult変数から異なるフィールドを抽出するUserクラスで生成することができる。たとえば、Userクラスは、GetFirstName(id)関数、GetLastName(id)関数、GetRole(id)関数などを提供することができる。これらの関数は各々、Result変数から異なるフィールドを返す間、非常によく似たコードを含み得る。
【0049】
結果をパースすることに加えて、クライアントライブラリ1302はまた、サービスの使用に対応付けられたエラー条件を処理するコード1308を生成することができる。この例において、コード1308は、Result変数におけるステータス(status)フィールドをテストすることにより、POSTコマンドが成功したか否かを判断することができる。コマンドが成功していた場合、CreateUser( )関数は新たなUserオブジェクトを返すことができる。Postコマンドが失敗した場合、関数は、代わりにヌルオブジェクトを返すことおよび/またはサービス対するコールをリトライすることが可能である。
【0050】
図14は、いくつかの実施形態に係る、サービスをコールするときにリトライを処理することができるクライアントライブラリ1402を示す。
図13の例と同様に、クライアントライブラリ1402は、POST HTTPコールによってポピュレートされたResut変数におけるステータスを使用することにより、このコールが成功したか否かを判断する。その結果が不成功である間、クライアントライブラリ1402は、コールが成功するまでリトライを続けることができる。いくつかの実施形態は、カウンターまたはその他のメカニズムを使用することにより、リトライの数を制限するまたはリトライとリトライとの間に待ち時間を追加することができる。
【0051】
上述のように、いくつかの実施形態はまた、API定義とともに一組のAPIプロパティをAPIレジストリに与えてもよい。
図15Aは、いくつかの実施形態に係る、APIプロパティをAPIレジストリに与える方法を示す。この方法はまた、API定義のアップロードを受けることを含み得る(1501)。この方法はまた、APIプロパティのアップロードを受けることを含み得る(1503)。プロパティのアップロードはAPI定義のアップロードと同じ送信の一部であってもよい。いくつかの実施形態において、APIプロパティはAPI定義の一部であってもよい。いくつかの実施形態において、APIプロパティは、プロパティがAPIレジストリによって設定されねばならないことを示すためにチェックされる1つ以上のフラグまたは予め定められたデータフィールドであってもよい。いくつかの実施形態において、APIプロパティは、何らかの予め構築されたフォーマットに従う必要はないが、代わりに、認証、暗号化などのような以下で説明する特徴をAPIレジストリに実現させる命令コードで表すことができる。APIプロパティは、各サービスごとにAPI定義とともに格納することができる。
【0052】
この方法はさらに、サービスとAPIとの間のAPIバインディングを作成することを含み得る(1505)。この動作は先に詳述したように実行されてもよい。加えて、この方法は、APIプロパティを用いて、サービスに対応付けられた1つ以上の動作を実行することを含み得る(1507)。APIプロパティは、サービスのライフサイクル中のさまざまなフェーズで使用されてもよい。一般的に、これは、サービスのデプロイメント中、サービスのクライアントライブラリを生成するとき、および/またはサービスをコールするときに、プロパティに対応付けられた関数をAPIプロパティを用いて実現することであると、説明することができる。これらの関数各々の例を以下でより詳細に説明する。
【0053】
図15Aに示される具体的なステップが本発明の各種実施形態に係るAPIプロパティをAPIレジストリに与える特定の方法を提供することが理解されるはずである。代替実施形態に従いステップの他のシーケンスを実行することもできる。たとえば、本発明の代替実施形態は、概要を述べた上記ステップを異なる順序で実行し得る。加えて、
図15Aに示される個々のステップは、個々のステップに適したさまざまなシーケンスで実行し得る複数のサブステップを含み得る。さらに、特定のアプリケーションに応じてその他のステップを追加または削除する場合もある。当業者は、多数の変形、修正、および代替形を認識するであろう。
【0054】
図15Bは、いくつかの実施形態に係る、如何にしてサービスがAPIプロパティをAPIレジストリに与えることができるかについてのハードウェア/ソフトウェア図を示す。IDE102においてサービスを開発しているとき、サービス開発者は、API定義ファイル1502と1つ以上のプロパティ1504とをAPIレジストリ404に与えることができる。APIレジストリ404は、IDE102でもコンテナプラットフォームでも実行時にアクセスできるので、APIレジストリ404は、プロパティ1504を格納しこれらのプロパティを使用することにより、開発シナリオ中およびランタイムシナリオ中いずれにおいても、如何にしてサービスがデプロイされ、コールされ、および/またはクライアントライブラリを生成するために使用されるかに、影響を与えることができる。
【0055】
図16は、いくつかの実施形態に係る、APIレジストリがプロパティを用いて高可用性のサービスをデプロイする場合のハードウェア/ソフトウェア図を示す。APIレジストリ404は、特定のサービスのAPI定義ファイル1505に加えて、サービスが高いレジリエンスまたは高可用性を有するようにデプロイされねばならないことを示すプロパティ1602を受けてもよい。このプロパティ1602を、サービスを高可用性を有するようにデプロイするためにAPIレジストリ404が実行する一組の命令として受けてもよい。この選択肢により、開発者は、このサービスについて「高可用性」を有するということが何を意味するかを定義することができる。たとえば、プロパティ1602は、APIレジストリ404に、サービスの複数のインスタンス602、604をコンテナプラットフォーム210にデプロイさせる命令を含み得る。APIレジストリ404は、これらの命令を実行することにより、自身で決定または判断を行う必要はなくなるが、代わりに、プロパティ1602の一部として与えられたデプロイメントコードを実行するだけでよい。
【0056】
プロパティ1602を、高可用性のサービスをデプロイするためにAPIレジストリ404において既存の命令を実行するという選択肢をAPIレジストリ404に対して示す、フラグまたは設定として受けることもできる。この選択肢の場合、APIレジストリ404は、プロパティ1602として、実行すべき任意のコードを受ける必要はない。むしろ、APIレジストリ404は、高可用性プロパティ1602を認識し、APIレジストリ404で保持されているコードを実行することにより、サービスの複数のインスタンス602、604をデプロイすることができる。これにより、APIレジストリ404は、APIレジストリ404に登録された任意のサービスのデプロイメントについて、「高可用性」であるということは何を意味するのかを定義することができる。
【0057】
APIレジストリ404はコンテナプラットフォーム210のランタイム環境に接続されているので、APIレジストリ404は、コンテナプラットフォーム210とやり取りすることにより、サービスのランタイム可用性を決定するインスタンス602、604をデプロイすることができる。なお、
図16に示されるサービスの2つのインスタンス602、604は一例として与えられているにすぎず、限定を意図している訳ではない。高可用性サービスは、コンテナプラットフォームにデプロイされているサービスの3つ以上の冗長インスタンスを含み得る。
【0058】
いくつかの実施形態は、デフォルトとして実行することが可能なコードをAPIレジストリ404において含み得る。高可用性が望ましいという簡単な表示のみをプロパティ1602が含んでいる場合、APIレジストリ404は自身のコードを実行することができる。サービスをデプロイするためのデプロイメントコードをプロパティ1602が含んでいる場合、APIレジストリ404は代わりにプロパティ1602のコードを実行することができる。いくつかの場合において、プロパティ1602は、高可用性のサービスをデプロイするのに必要なコードの一部のみを含み得る。APIレジストリ404は、プロパティ1602から与えられたコードの一部を実行し、次に、プロパティ1602から与えられない任意のコードをAPIレジストリ404におけるコードを用いてを実行することができる。これにより、開発者らは、APIレジストリ404において高可用性等のプロパティを如何にして実行するかについての既存の定義を上書きしつつも、登録されたサービスによって使用されることができるプロパティを実行するための統一された定義をAPIレジストリ404が提供できるようにすることができる。
【0059】
いくつかの実施形態において、高可用性プロパティはまた、サービスの複数のインスタンス602、604に要求を分散させるロードバランシングサービス606を、コンテナプラットフォーム210にデプロイさせてもよい。ロードバランシングサービス606のエンドポイントを、APIレジストリ404に登録し、他のサービスが利用できるようにすることができる。これに代えてまたはこれに加えて、サービス602、604の複数のインスタンス各々をサービスエンドポイントとしてAPIレジストリ404に登録してもよい。
【0060】
以下で説明する各々の例において、
図16に関して説明したものと同じ原理を適用することができる。たとえば、下記のいずれかのプロパティにコードが伴っていてもよく、このコードをAPIレジストリ404が受け、そうでなければAPIレジストリ404が実行するであろうコードを無効にするために使用することができる。本開示よりも前においては、プロパティを実行する一方で同時にサービス開発者が必要に応じてこれらのプロパティを無効にできるようにするための統一されたデフォルトを作成する方法は存在していなかった。よって、APIレジストリ404は、デフォルトとしてAPIレジストリ404でコードを実行できるようにしつつ、開発者から受けたプロパティ1602によってこのコードを無効にすることもできるようにすることで、技術的課題を克服する。
【0061】
図17は、いくつかの実施形態に係る、APIレジストリを通じてエンドツーエンド暗号化を実施するプロパティのハードウェア/ソフトウェア図を示す。APIレジストリ404は、API定義ファイル1505とともに、サービス1708をコールするためにエンドツーエンド暗号化を生じさせるコードを示すまたは含むプロパティ1704を受けてもよい。開発中、サービス1708は、サービス1708が受けたパケットを復号しサービス1708が返すパケットを暗号化する、自身の復号/暗号化コード1710を含むことができる。本開示よりも前においては、サービス1708のユーザがサービス1708と互換性のある暗号化を提供する必要があることを示す仕様書を、開発者が提供しなければならなかった。本実施形態は、呼び出し側サービス1706においてクライアントライブラリが如何にして生成されるかをサービス1708が規定できるようにしてサービス1708の暗号化との互換性を保証することにより、技術的課題を解決する。
【0062】
いくつかの実施形態において、サービス1708の開発者は、暗号化/復号コード1710をサービス1708に含める必要はない。代わりに、サービス1708のエンドツーエンド暗号化を実施するよう、プロパティ1704がAPIレジストリ404に命令するだけでよい。サービス1708がコンテナプラットフォーム210にデプロイされるとき、APIレジストリ404は、デプロイ時にサービス1708に暗号化/復号コード1710が挿入されるようにすることができる。これにより、開発者が、プロパティ1704に基づいて異なる暗号化制度からの選択を行うことができる、および/または、APIレジストリ404が、デフォルトとして好ましい暗号化制度を選択することができる。
【0063】
エンドツーエンド暗号化には、サービス1708がデプロイされるときまたはその開発中に暗号化/復号コード1710をサービス1708に挿入することが必要なだけでなく、互換性のある暗号化/復号コードを呼び出し側サービス1706が含むことも必要である。先に述べたように、呼び出し側サービス1706がサービス1708を使用する必要があるとき、APIレジストリ404は、簡単で効率的なやり方でサービス1708とやり取りするのに必要なコードを完全に実現する1つ以上のクライアントライブラリ1702を生成することができる。このクライアントライブラリ1702が生成されるとき、APIレジストリ404は、プロパティ1704を分析することにより、サービス1708が使用する暗号化制度を判断することができる。次に、このプロパティ1704に基づいて、APIレジストリ404は、呼び出し側サービス1706のために互換性のある暗号化/復号コードをクライアントライブラリ1702に追加することができる。よって、呼び出し側サービス1706が要求をサービス1708に送るとき、情報は呼び出し側サービス1706で暗号化されサービス1708がこの情報を受けたときに復号されてもよい。同様に、サービス1708は、呼び出し側サービス1706に送られる前のレスポンスを暗号化することができ、そうすると、呼び出し側サービス1706は、このレスポンスを、クライアントライブラリ1702の外部に送る前に復号することができる。これにより、この暗号化プロセス全体を呼び出し側サービス1706の開発者にとって完全にトランスペアレントなものにすることができる。サービス1706をコールするときに互換性のある暗号化/復号制度を実現することが要求されるのではなく、プロパティ1704は、APIレジストリ404が互換性のある暗号化/復号コードをクライアントライブラリ1702に既に生成していることを保証し、エンドツーエンド暗号化プロパティを実現することができる。
【0064】
図18は、いくつかの実施形態に係る、APIレジストリがサービス1808の使用ロギングを実現するためのプロパティ1804を示す。本開示よりも前においては、サービスに対する要求の頻度、ソース、成功率などをモニタリングしロギングするためには、サービス自身がこの情報をロギングする必要があった。これに代わるものとしては、コンテナ環境がサービスをモニタリングしその使用情報をロギングする必要があった。サービス1808自体において情報をロギングすることは、極めて非効率であり、このサービスが扱うすべての要求についてのスループットを減速させる。同様に、特定のサービスに対して行われるコールすべてをモニタリングしロギングすることをコンテナプラットフォームに求めるときのオーバーヘッドも、コンテナサービスのスケジューリングおよびオーケストレーションに対する極めて大きなオーバーヘッドを表している。本実施形態は、この技術的課題を、サービス1808をコールするサービスのためのクライアントライブラリにコードを直接挿入することによって解決する。これにより、メモリの使用またはCPUの使用という点でサービス1808のパフォーマンスに全く影響を与えることなく、サービス1808の使用をロギングしモニタリングすることができる。
【0065】
APIレジストリ404は、API定義ファイル1505に加えて、使用ロギング1804を実現するコードを示すまたは含むプロパティ1804を受けることができる。呼び出し側サービス1806の開発者が要求をサービス1808に出すことを所望するとき、APIレジストリ404は、サービス1808に関するアクティビティをロギングするためのコードを含むクライアントライブラリ1802を自動的に生成することができる。先に述べたように、このコードは、APIレジストリ404が管理し実行するデフォルトコードに基づいて生成することができる、または、プロパティ1804とともに受けてAPIレジストリ404が実行するコードによって生成することができる。
【0066】
クライアントライブラリ1802における、アクティビティをロギングするためのコードは、サービス1808がコールされるたびにインクリメントされるカウンターと、サービス1808がコールされたときにアクティビティをログファイルにロギングさせる関数と、サービス1808に送られた要求およびサービス1808から受けたレスポンスの特徴をモニタリングし記録するその他の関数とを、含み得る。特定の実施形態に応じて、このコードは、サービス1808に対して行われる要求に対応付けられた多数の異なる種類の特徴をモニタリングしてもよい。たとえば、いくつかの実施形態は、サービス1808に対して行われたコールの総数をロギングしてもよい。いくつかの実施形態は、サービス1808から受けたレスポンスの成功率をロギングしてもよい。いくつかの実施形態は、サービス1808に対する要求において送られたデータのタイプをロギングしてもよい。いくつかの実施形態は、サービス1808がコールされた時刻またはサービス1808がコールされたときについてのその他の外部情報をロギングしてもよい。いくつかの実施形態は、サービス1808をデバッグするために使用することが可能なサービス1808への/からの入力および出力をロギングしてもよい。いくつかの実施形態は、限定されることなく、これらの特徴のうちのいずれかまたはすべてを、任意の組み合わせでロギングしてもよい。
【0067】
図19は、いくつかの実施形態に係る、サービス1908の認証プロトコルを実施することが可能なプロパティ1904のハードウェア/ソフトウェア図を示す。いくつかのサービスは、要求に応答する前に、ユーザアイデンティティが認証されることおよびユーザがサービスの使用を認可されることを必要とする場合がある。本開示よりも前においては、認証および認可の手続がサービス1908自体で行われるという技術的課題があった。これは、サービス1908が受けるすべてのコールについてメモリの使用およびCPUの使用という点でオーバーヘッドを増加させ、レスポンスにおけるサービスのレイテンシを大きくした。その結果、スループットが減少し、所定の期間中にサービス1908が処理できる要求の数が制限された。これらの実施形態は、この技術的課題を、認証/認可コードを、APIレジストリ1404が自動的に生成するクライアントライブラリ1902に移動させることによって解決する。
【0068】
呼び出し側サービス1906がサービス1908の使用を所望するとき、APIレジストリ404は、認可および/認証を実行するためのコードを含むクライアントライブラリ1902を生成することができる。いくつかの実施形態において、これは、ユーザアイデンティティを特別に検証するおよび/またはユーザがサービス1908の使用を認可されるか否かを判断する外部認証/認可サービス1920にコンタクトすることを含み得る。外部認証/認可サービス1920は、アクセスマネージャ、ライトウェイトディレクトリアクセスプロトコル(Lightweight Directory Access Protocol)(LDAP)マネージャ、アクセスコントロールリスト(Access Control List)(ACL)、ネットワーク認証プロトコルマネージャなどを、含み得る。そうすると、クライアントライブラリ1902内のコードは、認証/認可手続が成功したときにコールをサービス1908に送ることができる。
【0069】
認証/認可の実施をAPIレジストリ404およびクライアントライブラリ1902にオフロードすることにより、このコードをサービス1908から完全に除去することができる。外部認証/認可サービス1920とのやり取りには多大な遅延が伴うことが頻繁に生じ得るので、この遅延をサービス1908から取り除くことによってスループットを高めることができる。加えて、認証/認可の実施をサービス1908にハードコーディングするのではなく、サービス1908の開発者が、その代わりにAPIレジストリ404に送られたプロパティ1904を用いて予め定められた認証/認可制度を選択するだけでよい。APIレジストリ404は、認可/認証の予め定められたリストを、クライアントライブラリ1902の添付のインプリメンテーションコードとともに管理することができる。これはまた、認可および/または認証されることができないサービス1908に対して呼び出し側サービス1906が要求を送ることを防止する。代わりに、認証および/または認可ルーチンが失敗した場合はクライアントライブラリ1902でコールを中止してもよい。これにより、認証および/または認可された要求のみをサービス1908が受けることを保証する。
【0070】
APIレジストリ404が提供するもう1つの技術的改善は、登録されたいずれかのサービスのコードのうちのいずれかを変更することを要求されることなく、プロパティ1904が提供する機能のいずれかをアップグレードする機能である。たとえば、認証/認可コードは、APIレジストリ1404が生成したクライアントライブラリ1902にオフロードされているので、クライアントライブラリ1902をアップデートすることにより、認証/認可制度を変更することが可能である。呼び出し側サービス1906またはサービス1908におけるコードのうちのいずれもモニタリングする必要はない。コードは1つの場所でしか変更されないので、これは、そうでなければすべての個別サービスに送られる分散型パッチを伴うコード統合エラーの確率を大幅に減じる。
【0071】
図20は、いくつかの実施形態に係る、サービスのランタイムインスタンス化を可能にするプロパティ2004のハードウェア/ソフトウェア図を示す。いくつかのサービスは、滅多に使用されない、または所定の期間中にしか使用されない場合がある。したがって、サービスをコンテナプラットフォームにデプロイすることが、常に、即時利用可能なサービスのインスタンスを実際にコンテナにインスタンス化することにつながる必要はない。仮想マシンとは異なり、コンテナは非常に素早くインスタンス化し作動させることが可能である。そのため、サービス開発者は、コールされたときにのみサービスをインスタンス化させることを所望する場合がある。サービス開発者はまた、所定の期間内においてのみサービスをインスタンス化させることを所望する場合がある。同じく、サービス開発者は、サービスインスタンスは所定の休止期間が過ぎると削除されねばならないと明示する場合がある。
【0072】
APIレジストリ404は、API定義ファイル1505を受けることに加えて、ランタイムインスタンス化またはその他のインスタンス化パラメータを指定するプロパティ2004を受けることができる。たとえば、このプロパティは、サービス2008をデプロイ後にインスタンス化すべき1つ以上の期間の指定を含み得る。別の例において、このプロパティは、サービス2008はオンデマンドでのみインスタンス化されねばならないという表示を含み得る。別の例において、このプロパティは、タイムアウト期間を指定してもよく、インスタンス化されたサービス2008はこのタイムアウト期間後にコンテナプラットフォームから削除されねばならない。
【0073】
呼び出し側サービス2006がサービス2008の使用を所望するとき、APIレジストリ404は、サービス2008のランタイムインスタンス化を処理するコードをクライアントライブラリ2002に生成することができる。たとえば、クライアントライブラリ2002のCreateInstance( )関数コールは、APIレジストリ404に対するコールを作成することができる。そうすると、APIレジストリはコンテナプラットフォーム210とやり取りすることにより、サービス2008のオペレーティングインスタンスを利用できるか否かを判断することができる。利用できない場合、APIレジストリ404は、コンテナプラットフォーム2010のコンテナにサービス2008のインスタンスをインスタンス化するようコンテナプラットフォーム210に命令することができる。そうすると、コンテナプラットフォーム210は、エンドポイント(たとえばIPアドレスおよびポート番号)をAPIレジストリ404に返すことができる。次に、APIレジストリ404は、エンドポイントと、クライアントライブラリ2002に作成されたAPI関数コールとの間のバインディングを作成することができる。次に、APIレジストリ404は、このエンドポイントをクライアントライブラリ2002に返すことができ、これを用いることにより、呼び出し側サービス2006と新たにインスタンス化されたサービス2008との間の直接接続を作成することができる。
【0074】
所定の期間中のみインスタンス化されるべきサービスの場合、APIレジストリ404は、特定のサービスのインスタンス化および削除時間のテーブルを構築してもよい。格納されたこれらのインスタンス化/削除時間に基づいて、APIレジストリ404は、サービス2008のインスタンスをインスタンス化または削除するようコンテナプラットフォーム210に命令することができる。APIレジストリ404は、これらの所定期間中にインスタンス化すべきインスタンスの数を指定することもできる。たとえば、プロパティ2004は、午後5時から午後10時まで、サービス2008の少なくとも10のインスタンスがコンテナプラットフォーム210上でアクティブであることを明示してもよい。この期間になると、APIレジストリ404は、追加のインスタンスを作成するようコンテナプラットフォーム210に命令することができる。
【0075】
図21は、いくつかの実施形態に係る、サービス2108のレート制限関数を実現するプロパティ2104のハードウェア/ソフトウェア図を示す。いくつかのサービスは、要求を受けるレートを制限する必要がある場合がある。その他のサービスは、特定の送信者または特定のタイプのサービスからの要求を制限する必要がない場合がある。本開示よりも前においては、この関数は、サービス自体が、各要求のソースを判断し、このソースをホワイトリスト/ブラックリストと比較し、これらの要求をサービスするレートを絞ることにより、実行しなければならなかった。上記例のうちのほとんどと同様、このオーバーヘッドをサービス自体に課すと、サービスが使用するメモリおよびCPUパワーの量が増し、サービスのスループットが制限される。これらの実施形態は、この技術的課題を、APIレジストリが生成したクライアントライブラリにレート制限コードを自動的に生成することによって解決する。これにより、サービス2108がその関係するオーバーヘッドすべてを伴ってこの機能を実現しなくても、サービスはプロパティ2104によってレート制限を指定することができる。
【0076】
呼び出し側サービス2106が要求をサービス2108に送ることを所望するとき、APIレジストリ404は、レート制限コードを含むクライアントライブラリ2102を自動的に生成することができる。クライアントライブラリ2102が生成されると、APIレジストリ404は、特定のサービス2106のレート制限が必要か否かを判断することができる。必要でなければ、クライアントライブラリ2102を通常通り生成することができる。APIレジストリ404が、呼び出し側サービス2106をレート制限すべきであると判断した場合(たとえばホワイトリスト/ブラックリストとの比較によって)、APIレジストリ404は、遅延を追加する、カウンターを追加する、および/またはそうでなければレート制限関数を実現するコードをクライアントライブラリ2102に挿入することにより、所定のレートに従って任意の所定期間において呼び出し側サービス2106が所定の最大数の要求を行うことを保証することができる。このコードは、その間はレート制限関数がアクティブである時間ウィンドウを実現してもよい。これにより、サービス2108は、高トラフィック期間中レート制限を自動的に実施することができる。
【0077】
図22は、いくつかの実施形態に係る、複数のコンテナノードへの複数のポッドの最初のデプロイメントの機能図を示す。コンテナプラットフォーム210のいくつかの実施形態は、コンテナプラットフォームスケジューラ2202を利用することにより、多数のコンテナをコンテナプラットフォーム210全体にスケーリングしデプロイしてもよい。サービスがコンテナプラットフォーム内の複数のホストシステムにスケールアウトされる場合、各ホストシステムを管理し基礎となるコンテナプラットフォームの複雑さを取り除く機能が有利になるであろう。「オーケストレーション」は、コンテナスケジューリング、ノードのクラスタリングの管理、およびコンテナ環境における追加ホストの可能なプロビジョニングを意味する、広い用語である。コンテナプラットフォームにおける「スケジューリング」は、アドミニストレータがサービスをホストシステムにロードしこの特定のコンテナを如何にして運用するかを定める機能を意味する場合がある。スケジューリングは特にサービス定義をロードするプロセスを意味するが、これは、ノードクラスタの動作のその他の面の管理を担うこともできる。ノードのクラスタを管理することは、コンピューティングホストのグループを制御するプロセスを含む。これはスケジューリングと密接に結びついている。なぜなら、スケジューラ2202は、先に定義したようにサービスをスケジューリングするためにはクラスタ内の各ノードにアクセスする必要がある場合があるからである。しかしながら、下記実施形態にとって最も重要なスケジューラ2202のプロセスは、ホストの選択を含む。この意味において、スケジューラ2202は、サービスをカプセル化する特定のポッドをデプロイし運用するコンテナノード2204、2206、2208を自動的に選択するタスクが課されていてもよい。
【0078】
ノードにデプロイされるポッドをスケジューリングするとき、ノードごとの一組の動作制約をスケジューラに与えることができる。たとえば、どれだけのCPU使用量、メモリ使用量、帯域幅使用量、およびその他のコンピューティング特徴使用量をコンテナノード2204に割り当てることができるかを定めた制約2210に、ノード2204を対応付けてもよい。これらの割当は、仮想マシンが運営する仮想リソースに割り当てられてもよく、または、少なくとも一部がノード2204専用である物理リソースに割り当てられてもよい。CPU使用量は、使用されるCPUコアの数、または、ノード2204専用の1秒当たりの動作の数を伴う場合がある。メモリ使用量は、ディスクアレイおよびその他の記憶媒体上における動的メモリ使用量および静的メモリストレージ双方を意味する場合がある。帯域幅使用量は、ノード2204が必要とするネットワークリソースの量、または、ノード2204に/から送信されるデータの1秒当たりの量を意味する場合がある。
【0079】
制約2210は、スケジューラ2202が、サービスポッドをノード2204にデプロイし割り当てるときに使用することにより、これらのコンピューティング特徴各々の使用量を制約2210内で最適化することができる。制約2210は、ノード2204によるこれらのコンピューティング特徴の実際の使用量に対するソフト制限またはハード制限いずれかとして機能することができる。ノード2204内のポッドが、制約2210が認めるものよりも多いコンピューティング特徴の使用を開始した場合、コンテナプラットフォームスケジューラ2202は、ノード2204の使用量を抑制することにより、確実に制約に従うようにすることができる。いくつかの場合において、制約2210は、使用される基礎となるコンピュータハードウェアの物理的制限を表す場合があり、抑制は、このコンピューティングハードウェアの物理的能力に基づいて行われる場合がある。本明細書に記載の制約の例2210、2212、2214は、例として最大使用量を意味しているが、これは限定を意図したものではない。実際、制約2210、2212、2214は、上限、下限、値の範囲、時間間隔、しきい値数動作、目標値、最適値、および、コンピューティング使用量を特徴付けるのに使用し得るその他任意の種類の分類を含み得る。
【0080】
スケジューラ2202は、ポッドをノードに割り当てるときに、各ノード内における各コンピューティング特徴の使用量を最大にしようと試みつつ、コンピューティング特徴の実際の使用量が制約2210、2212、2214内に確実に収まるようにすることができる。しかしながら、スケジューラ2202は、最初にポッドをコンテナにデプロイするときにはポッドの実際の使用量の推定値に頼らなければならない。この推定値は、ポッド内のサービスの開発者から与えられることが多い。たとえば、開発者は、サービスを開発するときに、このポッドは2単位のCPU、3単位のメモリ、および10単位の帯域幅を使用すると規定する場合がある。開発者によるこれらの推定値は、絶対最大値、平均値、目標値、または、開発者が制約として指定するのに無理がないと感じるその他任意の値であるとみなすことができる。このタイプの推定値に固有の技術的課題は、多くの開発者が、彼らのポッドが実際に本当に必要とするコンピューティング使用量を多く見積もり過ぎることにある。開発者は、彼らのサービスが最適レベルでの実行に必要なコンピューティングリソースすべてを有することを確実にするために、意図的に多く見積もり過ぎることが多い。そうすると、障害の発生は確実に抑えられるものの、利用できるリソースをスケジューラ2202が十分に利用しないことにもなる。実際、推定コンピューティング使用量を用いる最初のデプロイメントに基づくと、コンピューティングリソースの平均20%がノード内で未使用になる可能性がある。また、開発者は、彼らのサービスについて使用量を推定するときに絶対最大値を使用することが多い。しかしながら、これらの最大値が発生することは極めて稀なので、ノード内のポッドすべての定常使用量は制約よりもかなり下回る。ノードに対するポッドのこの非効率的な割当により、不必要な障害、またはコンピューティングリソースの使用不足が生じる。
【0081】
本明細書に記載の実施形態は、これらおよびその他の技術的課題を、スケジューラ2202を使用しいくつかの実施形態ではAPIレジストリ404を使用してコンテナプラットフォームのパフォーマンスを改善することにより、解決する。コンピューティングリソース使用量の推定に基づくポッドの最初のデプロイメント後に、スケジューラ2202は、デプロイメント後のポッド動作の実際の使用量をモニタリングすることができる。スケジューラ2202は、ポッドの実際の使用量に基づいて、コンテナプラットフォームの異なるノード間でポッドを再分配および/または再デプロイすることにより、ハードウェア使用量およびポッドのパフォーマンスを最適化することができる。加えて、使用量はリアルタイムで追跡できるので、スケジューラ2202および/またはAPIレジストリ404は、いつ使用率(usage rate)が増大しておりこれが制約2210、2212、2214のうちの1つ以上を超えるように突出する可能性があるかを、検出することができる。これに応じて、スケジューラ2202は、利用できるコンピューティングリソースを用いて別のコンテナノード内のポッドの追加インスタンスをウォームアップすることができる。実際の使用量が、制約2210、2212、2214を超過し得ることを示す率で引続き増加している場合、システムは、トラフィックを新たなインスタンスに迂回させることを開始することができる。
【0082】
これらの実施形態を説明するにあたり、各種コンピューティング特徴の使用量を測定し特徴付けるために使用する単位を、説明の便宜のために簡略化する。マイクロプロセッササイクル、メモリのギガバイト、ビット毎秒帯域幅などを記載する代わりに、これらの測定値各々を、比較のために簡単に「単位(unit)」と呼ぶ。たとえば、制約2210は、CPU使用量が最大「20単位」であると記載することができる。これは、3.46GHzで実行する2つのプロセッサコアに相当し得る。制約2210に対応付けられたノード2204内のポッド2220の使用量を比較するとき、ポッド2220の使用量を5単位のCPU使用量の使用であると説明することができ、これは、制約2210のもとで利用できる合計量のおよそ25%に相当するであろう。同様に、メモリ使用量の「単位」は、メガバイト、ギガバイト、テラバイト、またはメモリ使用量のその他任意の標準測定値に相当し得る。
【0083】
図22の例は、
図22に示されるポッド各々の推定CPU使用量を用いてノード2204、2206、2208内にポッドを最初にデプロイすることに相当する。これらの推定値は、サービスの開発者から提供されてもよく、または、自動ツールもしくはその他の方法を用いて推定してもよい。加えて、
図22は、メモリ使用量、帯域幅使用量、およびその他のコンピューティング特徴を示さずに、専らCPU使用量だけを示してもよい。これは明確にすることを目的としているのであって限定を意図している訳ではない。スケジューラ2202はまた、CPU使用量のバランシングに加えて、同時に、制約2210、2212、2214におけるメモリ使用量、帯域幅使用量、およびその他の使用量の特徴に従ってスケジューリングすることを、当業者は理解するであろう。複数の使用量ファクタのバランシングの一例を以下でさらに説明する。
【0084】
簡略化のために、それぞれの制約2210、2212、2214において指定されたノード2204、2206、2208各々のCPU使用量が、ノード2204、2206、2208各々について最大CPU使用量20単位と記載されていると、想定することができる。スケジューラ2202が
図22に示される7つのポッドを受けたとき、スケジューラ2202は、これらのポッドを、各ノード内のリソース使用量を最大にするが各ノードに対応付けられた制約に違反しないやり方で、デプロイすることができる。これは、複数の異なる方法で行うことができ、いくつかの実施形態において、スケジューラ2202はラウンドロビン方法を用いることができる。いくつかの実施形態において、スケジューラ2202は最大使用量のポッドを最初に配置する貪欲法(greedy algorithm)を使用することができる。たとえば、スケジューラ2202は、最初に、最大CPU使用量18単位を有するポッド2232をノード2208にデプロイすることができる。スケジューラ2202は次に、2番目に多いCPU使用量10単位を有するポッド2222をノード2204にデプロイしてもよい。スケジューラ2202は次に、3番目に多いCPU使用量9単位を有するポッド2224をノード2206にデプロイしてもよく、以降同様である。スケジューラ2202は、このまたは他のアルゴリズムを使用することにより、各ノードの利用可能使用量スペースに記入することができる。また、いくつかのスケジューラは、特に基礎となる物理的ハードウェアの制限が制約に記載されているときは、ポッドの総使用量とノードの制約使用量との間にガードバンド(guard band)を残すことにより、使用量と制約との間に緩衝域(buffer)を残してもよい。
【0085】
しかしながら、先に簡単に述べたように、ノード内のポッドのうちの1つ以上の実際のCPU使用量は、実際の動作中、推定値のように一定ではない場合がある。
図23は、時間の経過に対するCPU使用量のグラフを示す。ライン2312は、ポッド2228の推定使用量が6CPU単位であることを表している。ライン2322は、時間の経過に対する、ポッド2228の実際に測定したCPU使用量を表している。実際の使用量2322は、10単位と12単位との間であり、これは最初にポッド2228をデプロイするときに使用されたCPUの推定使用量である6単位を遥かに超えていることに注目されたい。サービスが最初の推定時よりも人気がある場合にこの推定使用量よりも多い状態が発生する可能性がある。これはまた、サービスが意図した通りの効率で実行されていないときにも生じ得る。理由は関係なく、実際の使用量が最初に推定した6単位よりも5~6単位多くなることは、ノード2206の総使用量が20CPU単位という最大の制約2212を超えるのに十分である。
【0086】
同様に、ライン2310は、最初に推定したポッド2222の使用量が10CPU単位であることを表している。しかしながら、ライン2328は、時間の経過に対するポッド2222の実際のCPU使用量を表している。なお、実際の使用量2328は4~5単位の間であり、これは推定された使用量2310である10単位を5~6単位下回っている。その結果、ノード2204の総使用量が制約2210の20CPU単位を大幅に下回る場合がある。これは障害にはならないが、ノード2204のホストが十分に利用されない可能性がある。複数のノードでこれが発生すると、コンテナプラットフォーム全体の効率が大幅に低下するであろう。
【0087】
本明細書に記載の実施形態は、これらおよびその他の課題を、各ノードのサービスのデプロイメント後の使用量をモニタリングすることによって解決する。これらの使用量が、最初のデプロイメントで使用された推定使用量から、しきい値量を超えてずれると、スケジューラ2202および/またはAPIレジストリ404は、ポッドのデプロイメントをコンテナプラットフォーム内の異なるノードに再割り当てすることにより、制約2210、2212、2214の遵守を保証し、同時に、利用できるホストを効率良く利用することができる。APIレジストリ404なしでスケジューラ2202を用いることで実現できる実施形態がいくつかある。また、スケジューラ2202なしでAPIレジストリ404を用いることで実現できる実施形態もいくつかある。APIレジストリおよびスケジューラ2202双方の組み合わせを用いる他の実施形態もある。
【0088】
他の実施形態が、実行時に他のコンピューティング特徴の使用量をモニタリングしポッドのデプロイメントを追跡する他の方法を使用してもよい。いくつかの実施形態において、スケジューラ2202は、ポッド間およびノード間のトランザクションをモニタリングすることができる。これらの実装例では、ロギング機能をスケジューラに追加することにより、各ポッドがサービス要求として受ける送信をロギングしている。データ構造が、新たな送信ごとにインクリメントされるこれらの送信のカウントを格納することができる。各送信のログは、コンテナプラットフォーム内のノードの制約に記載される特定のコンピューティングリソース使用量に関する情報を含む。たとえば、ログは、送信時間、送信周波数、送信されているデータパケットのサイズなどをモニタリングすることができる。加えて、ログは、ポッドからコンテナプラットフォームへの処理およびメモリ使用量要求を格納することができ、これは、新たな記憶場所の割当または古い記憶場所の削除の要求、関数の処理の要求などを含む。スケジューラ2202は、このロギング機能をリアルタイム分析アルゴリズムと組み合わせ、ログに格納された入力各々のタイミングおよび大きさを用いて、絶対使用量、ピーク使用量、最低使用量、平均使用量、瞬間使用量などを求める。この分析アルゴリズムをリアルタイムで連続的に実行することにより、スケジューラ2202は、制約と比較される要求されたすべての使用量特徴についての最新使用量情報の記録を維持することができる。
【0089】
APIレジストリ404を使用する実施形態において、APIレジストリ404は、上記各呼び出し側サービスのクライアントライブラリに、使用量コードを埋込むことができる。具体的には、使用量ロギングを示すプロパティを使用することにより、サービスとサービスとの間のやり取りのロギングを可能にしてもよい。これにより、APIレジストリ404に、呼び出し側サービスのクライアントライブラリに使用量ロギングコードを生成させることができる。加えて、サービスがデプロイされるとき、APIレジストリ404は、デプロイされているサービスに使用量ロギングコードを埋込むことができる。これにより、メモリ使用量情報、CPU使用量情報、帯域幅使用量情報などを、サービスに、APIレジストリ404に対して自己報告させることができる。なお、このコードはAPIレジストリによって自動的に生成されるので、サービス開発者は自身でこのコードを埋込む必要はない。代わりに、このコードは、APIレジストリが、自動的に生成、ロギング、計算、および分析してもよい。スケジューラ2202が実行する分析アルゴリズムと同様、APIレジストリ404および/またはクライアントライブラリのコードは、使用量情報をリアルタイムで分析することにより、ピーク使用量、平均使用量、瞬間使用量、最低使用量などの使用量特徴を求めることができる。
【0090】
使用量情報のモニタリング後に、スケジューラ202および/またはAPIレジストリ404は、コンテナプラットフォーム内のいずれかのポッドの実際の使用量特徴がいつそれぞれの最初の推定使用量からしきい値量を超えてずれるかを特定することができる。このようにずれると、スケジューラ2202および/またはAPIレジストリ404は、最初の推定値からしきい値量を超えてずれたいずれかのポッドはそれぞれの実際の推定値に基づいて再デプロイしなければならないと判断することができる。
図24は、実際の使用量に基づくポッドの再デプロイメントを描いた図を示す。ポッド2222はCPU使用量が10単位であると最初に推定されたことを想起されたい。しかしながら、その実際の使用量は4~5CPU単位に近いものであった。制約2210、2212は最大CPU使用量に関連すると想定すると、ポッド2222の推定使用量は、実際に記録された使用量に基づいて、CPU使用量6単位に規定し直すことができる。同様に、ポッド2228はCPU使用量が6単位であると最初に推定されたことを想起されたい。しかしながら、時間の経過に対するポッド2228の実際の使用量は最大12単位に近いものであった。したがって、ポッド2228の推定使用量は、CPU使用量12単位に割り当て直すことができる。
【0091】
実際の使用量が現在の推定値から十分にずれていることが検出されると、スケジューラ2202および/またはAPIレジストリ404は、ポッドを複数のノードに再割り当てすることができる。いくつかの実施形態において、それぞれの使用量推定値からずれていないポッドを再割り当てすることは非効率的である場合がある。この例では、ポッド2222および2228のみが再割当を必要とし、ポッド2220、2224、2226、2230、および2232は、現在デプロイされている場所に留まることができる。あるアルゴリズムにおいて、ずれているポッドをそれぞれの制約から外し、上記アルゴリズム(ラウンドロビン、貪欲など)を用いて再デプロイすることができる。ずれているすべてのポッドをこの方法を用いて再デプロイすることが可能であれば、これは、利用できる最も効率的な再割当方法を表すであろう。ずれているポッドが自身では再デプロイされることができない場合に、スケジューラ202および/またはAPIレジストリ404は、実際の使用量からずれていなくても、最小推定使用量のノードの再割当を開始することができる。このアルゴリズムは、制約2210、2212、2214の中ですべてのポッドが再デプロイされるまで、繰り返し実行することができる。これは、各ホストのリソースがポッドデプロイメントにより最も効率的に使用されることも保証する。
【0092】
APIレジストリ404を用いる実施形態において、再デプロイメントにより、APIレジストリ404が、ノードのエンドポイントとAPIレジストリに登録された関数との間の新たなバインディングを生成する場合がある。先に述べたように、新たなIPアドレスおよびポート番号が再デプロイされたポッドに割り当てられたときに、APIレジストリはそのバインディングをアップデートすることができる。そうすると、再デプロイされたサービスのいずれかと呼び出し側サービスとの間のやり取りを処理するために生成されたいずれかのクライアントライブラリもアップデートすることができる。これはまた、コンテナプラットフォーム内のサービスについてエンドポイントが変更されたときに通常発生し得る波及効果を減じる。
【0093】
図25は、コンテナノード内で複数の使用量特徴を如何にして同時にバランシングできるかを示す。この実施形態において、ポッド2220の推定使用量2502は、3つの異なる使用ファクタ、すなわち、CPU使用量、メモリ使用量、および帯域幅使用量を含む。これら3つの使用量特徴は、3つの異なる値、すなわちCPU使用量8単位、メモリ使用量3単位、および帯域幅使用量5単位に対応付けることができる。同様に、ポッド2222の推定使用量2504は、3つの使用量ファクタ、すなわち、CPU使用量10単位、メモリ使用量13単位、および帯域幅使用量1単位を含む。上記方法に従ってポッド2220およびポッド2222をデプロイまたは再デプロイするとき、これらのファクタ各々を一緒にバランシングすることにより、これらのポッドを割り当てる適切なノードを判断することができる。いくつかの実施形態において、ポッドは最初にその最大推定使用量に従って配置することができる。これは、ポッド2222を最初にメモリに従って配置し、ポッド2220を最初にCPU使用量に従って配置することに相当する。他の実施形態は、最も可用性が低いまたは最も可用性が高い制約および/または使用量特徴に基づいて、ポッドをデプロイすることができる。
【0094】
図26は、いくつかの実施形態に係る、最初のデプロイメント後のポッドのデプロイメントを示す。この実施形態において、制約2212はCPU最大使用量20単位を含むと想定してもよい。ノード2206内のポッド2224、2228、および2230の合計使用量は約17CPU単位である。いくつかの場合において、ポッド2224のようなポッドは、通常の平均予測使用率よりも一時的に高い使用率が発生する場合がある。この場合、もしこのような発生が一時的でまばらに起きる場合はポッドを再デプロイしその使用率を調整することが効率的でないかもしれない。しかしながら、同じノード2206のその他いずれかのポッドの累積パフォーマンスとともに、ポッド2224のパフォーマンスに悪影響が生じるのを防止するために、APIレジストリ404および/またはスケジューラ2202は、追加のステップを採用することにより、ポッド2224の追加インスタンスを一時的にデプロイすることで、使用率の一時的な上昇を処理することができる。
【0095】
一例において、ポッド2224のCPU使用量は、9CPU単位から15CPU単位に増加する可能性がある。なお、その結果、ノード2206の総CPU使用量は、制約2212が規定する20CPU単位という最大使用量を超過することになる。そうすると、特にノード2206が要求するCPUリソースを、基礎となるハードウェアホストが持っていない場合は、ノード2206のすべてのポッドに障害が生じる可能性がある。
【0096】
図27は、いくつかの実施形態に係る、時間の経過に対するCPU使用量のグラフを示す。ライン2710は、時間の経過に対するポッド2224の実際の使用率を示す。ライン2702は、ポッド2224の推定使用量として9CPU単位を表している。ライン2714は、ノード2206が制約2212としての20CPU使用量単位を超過することを生じさせるであろう、ポッド2224の推定使用量を表している。もし検査されないままであれば、ポッド2224の使用量は、最初にその推定最大使用量である9CPU単位を超過し、次に12CPU単位を超過することにより、結果としてノード2206はその制約である最大20CPU単位を超過することになる。
【0097】
スケジューラ2202および/またはAPIレジストリ404を用いて、コンテナプラットフォームは、ポッド2224の使用量を、これらのしきい値を超える前に有効に削減することができる。先に述べたように、ポッド2224のサービスが処理を要求するときに、CPU使用量は、スケジューラ2202および/またはAPIレジストリ404がリアルタイムで追跡できる。現在のCPU使用量ロギングはタイムスタンプを含むので、スケジューラ2202および/またはAPIレジストリ404はCPU使用量の増加率を求めることができる。CPU使用量の増加率が第1のしきい値2704を超えると、これらのシステムは、ノード2206の別の部分においてまたはノード2204等の異なるノードにおいてポッド2224のサービスの新たなインスタンスを「ウォームアップする」ことができる。サービスの新たなインスタンスのウォームアップは、新たなポッドのインスタンス化およびサービスのインスタンスを新たなポッドにロードすることを含み得る。これはまた、新たなポッドの初期化ルーチンの実行、およびテスト入力/ベクトルをサービスに送信して処理を開始することを含み得る。選択された使用量ファクタ、たとえばCPU使用量について合計使用率が最も低い新たなポッドについてノードを選択してもよい。ウォームアップ段階中、この新たなポッドにライブトラフィックをルーティングする必要はない。これは、CPU使用率の連続的な増加に備えるために使用できる期間である。この率が増加し続ける場合、システムは、要求トラフィックを新たなポッドに迂回させることにより、応答する準備を整えることができる。
【0098】
使用率が減少し始めた場合、または予め定められた増加率しきい値を維持しない場合、新たにインスタンス化されたポッドを削除することができる。しかしながら、増加率が予め定められたレベルを維持して第2のしきい値2706を越えた場合、システムは、新たにインスタンス化されたポッドを起動することによってこれに応じることができる。言い換えると、増加しているCPU使用量がノード全体の最大制約を超過する恐れがある場合は、サービス要求トラフィックを、異なるノードで動作している新たなポッドに再度ルーティングすることができる。これは、ノード2206内のポッド2224からコンテナ2204内の新たなポッドにトラフィックをルーティングすることを含み得る。新たなポッドが起動された後の曲線2712は、ポッド2224の新たなCPU使用量の軌跡を示す。この新たな軌跡は、ポッド2224の推定使用率を表すライン2702を大幅に超過する前に低減される。また、この新たな軌跡は、ノード2206の制約の制限を表すライン2714の超過に近づく前に大幅に低減される。
【0099】
図28は、いくつかの実施形態に係る、
図27に記載されているポッドインスタンス化プロセスの図を示す。すべての要求トラフィック2804が先ずポッド2224に送られる。CPU使用率が増加し始めると、スケジューラ2202および/またはAPIレジストリ404は、ノード2204内に新たなポッド2802をインスタンス化することができる。ノード2204を選択できる理由は、現在コンテナプラットフォーム上で最も小さいCPU使用量である8CPU単位を有しているからである。なお、新たなポッド2802がノード2204においてインスタンス化された後であっても、いずれの要求トラフィック2804も新たなポッド2802に迂回させることはない。代わりに、ポッド2224のCPU使用率が変わらず増加し続ける場合は、要求トラフィック2804の一部を受ける準備として、ポッド2802をインスタンス化、初期化、およびそうでなければ「ウォームアップする」ことができる。
【0100】
図29は、いくつかの実施形態に係る、ポッドのインスタンス化および使用量の図を示す。引続き
図28の例を用いて、ポッド2224のCPU使用率はノード2204内に新たなポッド2802がインスタンス化された後も引続き上昇したと想定することができる。CPU使用量増加の容量しきい値レベルの増加後に、APIレジストリ404および/またはスケジューラ2202は、新たなポッド2802に対してトラフィックをルーティングさせ始めることができる。
【0101】
いくつかの実施形態において、これは、APIレジストリ404によって導かれる入来要求を受けるロードバランサーを実現するポッドをインスタンス化することを含み得る。そうすると、ロードバランサーは、要求の数をポッド2224とポッド2802との間で等しくすることができる。いくつかの実施形態において、ロードバランサーは、最初に要求トラフィックをポッド2224とポッド2802との間で等しく分割することから始めることができる。次に、ロードバランサーは、ノード2204およびノード2206のうちのいずれが、それぞれのCPU使用量制約2210および2012により近いかを、判断することができる。次に、ロードバランサーは、2つのポッド2224、2802の間で要求トラフィックの流れを調整することにより、ノード2204、2206の使用量とそれぞれの制約2210、2212との間の等しいガードバンドを維持することができる。たとえば、2つのポッドが要求トラフィックを等しく分割した場合、これは、第1のポッドを含む第1のノードの合計CPU使用量を、第2のポッドを含む第2のノードの合計CPU使用量よりも、その制約最大値に近くする可能性がある。この場合、ロードバランサーは、トラフィックを第1のポッドから第2のポッドにシフトすることで、等しく分配されないようにすることができるが、制約が定める最大使用量と実際の使用量との間の緩衝域はほぼ等しい。
【0102】
新たなポッド2802のインスタンス化および起動を生じさせるCPU使用量の増加が時間の経過に伴って減少し始めた場合、スケジューラ2202および/またはAPIレジストリ404は、この減少を検出し、続いて要求トラフィック2902をポッド2224に戻すようにシフトさせることができる。これにより、追加の要求トラフィックを処理するための一時的なインスタンス化のプロセスが、コンピューティングリソース使用量の増加に対する中間反応として作用する。この増加が一時的であり持続時間がある時間しきい値量よりも短い場合、単純に新たなポッド2802を削除し動作を通常通り続けることができる。しかしながら、コンピューティングリソース使用量の増加がより持続的であり持続時間がある時間しきい値量よりも長い場合、APIレジストリ404および/またはスケジューラ2202は、代わりにポッド2224の推定リソース使用量を増加させ、1つのサービスインスタンスにとって十分なリソースを有するコンテナノード内にポッドを再デプロイすることができる。この再デプロイメントプロセスは、
図22~
図24において先に述べたように実行することができる。いくつかの実施形態において、一時的なインスタンス化のプロセスは常に
図22~
図24の再バランシングおよび再デプロイメントに先行することができるが、これは必須ではない。
【0103】
図30は、いくつかの実施形態に係る、コンテナプラットフォームにおいてサービスを動的に再バランシングする方法のフローチャートを示す。この方法は、複数のポッドをコンテナプラットフォームの複数のノードにデプロイすることを含み得る(3001)。本明細書で使用する「ポッド」という用語は、サービスまたはコンテナを意味する場合もあるが、その理由は、いくつかの実施形態におけるサービスは、1つ以上のコンテナからなるポッドに1つのサービスをデプロイする場合があるからである。これらのポッドは、先に
図22に関連して説明したようにコンテナプラットフォーム内の複数のノードに分散させてデプロイしてもよい。ノードの各々は、各ノード内のコンピューティングリソース使用量に対する制約を記載した使用量制約に対応付けられていてもよい。先に述べたように、これらの制約は、CPU使用量、メモリ使用量、帯域幅使用量、電力使用量、時間使用量、ソフトウェアモジュール使用量などのようないずれかのコンピューティングリソースに対応付けられていてもよい。上述の例は一例として特にCPU使用量に言及しているが、限定することなく、これらの他のコンピューティングリソースのうちのいずれかをCPU使用量の代わりに任意に組み合わせてもよい。
【0104】
この方法はまた、デプロイメント後に、複数のポッドに対応付けられた使用量ファクタをモニタリングすることを含み得る(3003)。これらの使用量ファクタのモニタリングは、スケジューラにより、上記APIレジストリの実装により、または、コンテナプラットフォーム内で動作するその他のソフトウェアプロセスにより、実行することができる。使用量ファクタのモニタリングは、サービス/ポッド動作を記述するタイムスタンプ付き情報とともにログを維持することを含み得る。これらの動作は、メモリリソースの要求、CPU使用量の要求、ネットワークを介したデータ送信、コンテナプラットフォーム内のサービス間で送信される要求、電力測定値および/またはCPUクロックサイクルもしくは動作を含むハードウェア測定値、および/またはポッド/サービスの動作のその他の特徴付けを含み得る。いくつかの実施形態において、システムはまた、ノードに対する制約と比較して、ノード全体の総計における使用量ファクタをモニタリングしてもよい。これらの動作は、瞬間率、平均率、最大率、最小率、目標率などを含む使用率をシステムが計算できるようにするタイミングファクタを含み得る。これらの率は、これらのファクタ自体のロギングされた平均測定値、最小測定値、最大測定値、瞬間測定値などに加えて計算されてもよい。その他の数学的計算を、一次導関数、二次導関数、統計的な特徴付け、比較、相違などのような、測定された使用量ファクタに適用してもよい。
【0105】
この方法はまた、ポッドの実際の使用量が、その使用量ファクタの最初の特徴付けからいつずれたかを特定することを含み得る(3005)。このずれは、デプロイメント後に測定されたあるタイプの使用量情報を、デプロイメント前に推定されたあるタイプの使用量情報と比較したものであってもよい。たとえば、絶対メモリ使用量の使用が制約によって10GBに制限されている場合、デプロイメント前の推定使用量は、ノード内の特定のポッドについて5GBといった測定値であってもよい。この実際のずれは、デプロイメント後の測定使用量と、デプロイメント中に使用される推定使用量との間の比較を含み得る。たとえば、デプロイメント前の5GBという推定値は、デプロイメント後の7GBという測定値と比較することができる。ずれが予め定められたしきい値、たとえば1GBを超過すると、このポッドはずれとして特定することができる。別の例において、制約が、10MB/sのようなメモリ割当率を指定している場合、システムは、記録されたメモリ割当要求を用いることにより、デプロイメント前の推定使用量と比較するメモリ割当率を計算することができる。いくつかの実施形態は、このずれが、ずれとして報告される前に少なくとも予め定められた期間だけ維持されることを要求することにより、過渡的なまたは一時的なずれによってシステムがデプロイメントを変更するまたは新たなポッドのインスタンス化を開始することを防止することができる。
【0106】
この方法はさらに、複数のポッドの少なくとも一部を、その使用量ファクタのずれに基づいて再分配することを含み得る(3007)。この再分配は、ポッドをあるノードから第2のノードに移動させることを含み得る。この再分配はまた、推定使用量ファクタを調整することを含み得る。そうすると、結果として、ずれは、デプロイメント後にシステムが測定した実際の使用量と一致する。いくつかの実施形態において、この再分配は、先ず、第1の使用量しきい値の超過後に、第2のノードにおいて、複製またはクローニングされたポッドをインスタンス化およびウォームアップし、第1のポッドから複製またはクローニングされたポッドにトラフィックを迂回させることにより、使用量の一時的な変化を処理し、使用量が、元の第1のポッドをカプセル化するノードに対する制約を超過することを防止することを、含み得る。
【0107】
図30に示される具体的なステップが本発明の各種実施形態に係るコンテナプラットフォームにおいてサービスを動的に再バランシングする特定の方法を提供することが理解されるはずである。代替実施形態に従いステップの他のシーケンスを実行することもできる。たとえば、本発明の代替実施形態は、概要を述べた上記ステップを異なる順序で実行し得る。加えて、
図30に示される個々のステップは、個々のステップに適したさまざまなシーケンスで実行し得る複数のサブステップを含み得る。さらに、特定のアプリケーションに応じてその他のステップを追加または削除する場合もある。当業者は、多数の変形、修正、および代替形を認識するであろう。
【0108】
本明細書に記載の各方法は、専用コンピュータシステムによって実現することができる。これらの方法の各ステップは、当該コンピュータシステムが自動的に実行してもよく、および/またはユーザを必要とする入力/出力が与えられてもよい。たとえば、ユーザが方法の各ステップに対して入力を与えてもよく、これらの入力は各々、このような入力を要求する、コンピュータシステムが生成した特定の出力に応じて与えられてもよい。各入力は、対応する要求出力に応じて受けられてもよい。さらに、入力は、ユーザから受けられてもよく、別のデータシステムからデータストリームとして受けられてもよく、メモリロケーションから取り出されてもよく、ネットワークを介して取り出されてもよく、ウェブサービスから要求されてもよく、および/またはその他であってもよい。同様に、出力は、ユーザに与えられてもよく、データストリームとして別のコンピュータシステムに与えられてもよく、メモリロケーションに保存されてもよく、ネットワークを介して送られてもよく、ウェブサービスに与えられてもよく、および/またはその他であってもよい。すなわち、本明細書に記載の方法の各ステップは、コンピュータシステムが実行し得るものであり、かつ、ユーザを必要とするもしくは必要としないかもしれないコンピュータシステムに対する、任意の数の入力、当該コンピュータシステムからの出力、および/または当該コンピュータシステムへの/からの要求を必要とし得るものである。ユーザを必要としないステップは、人の介入なしでコンピュータシステムが自動的に実行し得ると言える。したがって、本開示に照らして、本明細書に記載の各方法の各ステップは、ユーザへのおよびユーザからの入力および出力を含むように変更されてもよく、または、プロセッサが何らかの判断を行う場合は人の介入なしでコンピュータシステムが自動的に行ってもよい。さらに、本明細書に記載の各方法のいくつかの実施形態は、有形の非一時的な記憶媒体に格納されて有形のソフトウェアプロダクトを形成する一組の命令として実現されてもよい。
【0109】
図31は、上記実施形態のうちのいずれかとのやり取りが可能な分散型システム3100の簡略図を示す。示されている実施形態において、分散型システム3100は1つ以上のクライアントコンピューティングデバイス3102、3104、3106、および3108を含み、これらのクライアントコンピューティングデバイスは、1つ以上のネットワーク3110を介してウェブブラウザ、専用クライアント(たとえばOracle Forms)などのようなクライアントアプリケーションを実行し操作するように構成されている。サーバ3112が、ネットワーク3110を介してリモートクライアントコンピューティングデバイス3102、3104、3106、および3108に対して通信可能に結合されていてもよい。
【0110】
各種実施形態において、サーバ3112は、このシステムのコンポーネントのうちの1つ以上が提供する1つ以上のサービスまたはソフトウェアアプリケーションを実行するようにされてもよい。いくつかの実施形態において、これらのサービスは、クライアントコンピューティングデバイス3102、3104、3106、および/または3108のユーザに対し、ウェブベースのもしくはクラウドサービスとして、またはサービスとしてのソフトウェア(SaaS)モデルのもとで、提供されてもよい。そうすると、クライアントコンピューティングデバイス3102、3104、3106、および/または3108を操作しているユーザは、1つ以上のクライアントアプリケーションを利用してサーバ3112とやり取りすることにより、これらのコンポーネントが提供するサービスを利用することができる。
【0111】
図面に示される構成において、システム3100のソフトウェアコンポーネント3118、3120および3122は、サーバ3112上に実装されたものとして示されている。他の実施形態において、システム3100のコンポーネントおよび/またはこれらのコンポーネントが提供するサービスのうちの1つ以上が、クライアントコンピューティングデバイス3102、3104、3106、および/または3108のうちの1つ以上によって実装されてもよい。そうすると、クライアントコンピューティングデバイスを操作しているユーザは、1つ以上のクライアントアプリケーションを利用することにより、これらのコンポーネントが提供するサービスを使用することができる。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはその組み合わせで実装されてもよい。分散型システム3100とは異なり得るさまざまな異なるシステム構成が可能であることが理解されるはずである。図面に示される実施形態はしたがって、実施形態のシステムを実装するための分散型システムの一例であって、限定を意図したものではない。
【0112】
クライアントコンピューティングデバイス3102、3104、3106、および/または3108は、Microsoft Windows Mobile(登録商標)等のソフトウェア、および/またはiOS、Windows Phone、Android、BlackBerry 10、Palm OSその他等のさまざまなモバイルオペレーティングシステムを実行し、インターネット、電子メール、ショートメッセージサービス(SMS)、Blackberry(登録商標)、またはその他の通信プロトコルに接続可能な、ポータブルハンドヘルドデバイス(たとえばiPhone(登録商標)、携帯電話、iPad(登録商標)、コンピューティングタブレット、携帯情報端末(PDA))またはウェアラブルデバイス(たとえばGoogle Glass(登録商標)ヘッドマウントディスプレイ)であってもよい。クライアントコンピューティングデバイスは、例として、さまざまなバージョンのMicrosoft Windows(登録商標)、Apple Macintosh(登録商標)、および/またはLinux(登録商標)オペレーティングシステムを実行するパーソナルコンピュータおよび/またはラップトップコンピュータを含む汎用パーソナルコンピュータであってもよい。クライアントコンピューティングデバイスは、限定されないがたとえばGoogle Chrome OS等のさまざまなGNU/Linux(登録商標)オペレーティングシステムを含む市場で入手可能な多様なUNIX(登録商標)またはUNIX(登録商標)系オペレーティングシステムのうちのいずれかを実行するワークステーションコンピュータであってもよい。これに代えてまたはこれに加えて、クライアントコンピューティングデバイス3102、3104、3106、および3108は、ネットワーク3110を介して通信可能な、シンクライアントコンピュータ、インターネット接続可能なゲームシステム(たとえばKinect(登録商標)ジェスチャー入力デバイスを有するまたは有しないMicrosoft Xboxゲームコンソール)、および/またはパーソナルメッセージングデバイス等の、電子デバイスであってもよい。
【0113】
具体例としての分散型システム3100が4つのクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスをサポートすることができる。センサなどを有するデバイスのようなその他のデバイスがサーバ3112とやり取りしてもよい。
【0114】
分散型システム3100のネットワーク3110は、限定されないがTCP/IP(transmission control protocol/Internet protocol)、SNA(systems network architecture)、IPX(Internet packet exchange)、AppleTalk(登録商標)などを含む、市場で入手可能なさまざまなプロトコルのうちのいずれかを用いてデータ通信をサポートできる、当業者によく知られた任意のタイプのネットワークであってもよい。一例にすぎないが、ネットワーク3110は、たとえばイーサネット(登録商標)、トークンリングおよび/または同様のものに基づく、ローカルエリアネットワーク(LAN)であってもよい。ネットワーク3110は、広域ネットワークおよびインターネットであってもよい。これは、限定されないが仮想プライベートネットワーク(VPN)、イントラネット、エクストラネット、公衆交換電話網(PSTN)、赤外線ネットワーク、無線ネットワーク(たとえばInstitute of Electrical and Electronics(IEEE)802.11プロトコルスイート、Bluetooth(登録商標)、および/または任意の他の無線プロトコルのうちのいずれかの下で動作するネットワーク)、および/または上記および/またはその他のネットワークの任意の組み合わせを含む、仮想ネットワークを含み得る。
【0115】
サーバ3112は、1つ以上の汎用コンピュータ、専用サーバコンピュータ(一例としてPC(パーソナルコンピュータ)サーバ、UNIX(登録商標)サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウントサーバなどを含む)、サーバファーム、サーバクラスタ、または、その他任意の適切な構成および/または組み合わせからなるものであってもよい。各種実施形態において、サーバ3112は、上の開示で説明した1つ以上のサービスまたはソフトウェアアプリケーションを実行するようにされていてもよい。たとえば、サーバ3112は、本開示の実施形態に係る上記処理を実行するためのサーバに対応していてもよい。
【0116】
サーバ3112は、上記オペレーティングシステムのうちのいずれかおよび市場で入手可能なサーバオペレーティングシステムを含むオペレーティングシステムを実行し得る。また、サーバ3112は、HTTP(hypertext transport protocol)サーバ、FTP(file transfer protocol)サーバ、CGI(common gateway interface)サーバ、JAVA(登録商標)サーバ、データベースサーバなどを含む、さまざまな付加的なサーバアプリケーションおよび/またはミッドティアアプリケーションのうちのいずれかを実行し得る。具体例としてのデータベースサーバは、Oracle、Microsoft、Sybase、IBM(International Business Machines)などから市販されているものを含むが、これらに限定されない。
【0117】
いくつかの実装例において、サーバ3112は、クライアントコンピューティングデバイス3102、3104、3106、および3108のユーザから受信したデータフィードおよび/またはイベントアップデートを分析し統合するための1つ以上のアプリケーションを含み得る。一例として、データフィードおよび/またはイベントアップデートは、限定されないが、1つ以上の第三者情報源および連続データストリームから受信したTwitter(登録商標)フィード、Facebook(登録商標)アップデートまたはリアルタイムアップデートを含み得る。これらはセンサデータアプリケーション、金融ティッカー、ネットワーク性能測定ツール(たとえばネットワークモニタリングおよびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車交通監視などに関連するリアルタイムイベントを含み得る。また、サーバ3112は、クライアントコンピューティングデバイス3102、3104、3106、および3108の1つ以上のディスプレイデバイスを介してデータフィードおよび/またはリアルタイムイベントを表示するための1つ以上のアプリケーションを含み得る。
【0118】
分散型システム3100は、1つ以上のデータベース3114および3116も含み得る。データベース3114および3116はさまざまな場所に存在し得る。一例として、データベース3114および3116のうちの1つ以上は、サーバ3112に対してローカルな場所にある(および/またはサーバ内にある)非一時的な記憶媒体上にあってもよい。これに代えて、データベース3114および3116は、サーバ3112から遠隔の場所に位置してネットワークベースのまたは専用接続を介してサーバ3112と通信してもよい。一組の実施形態において、データベース3114および3116は、ストレージエリアネットワーク(SAN)内にあってもよい。同様に、サーバ3112に帰する機能を実行するために必要な任意のファイルを、適宜、サーバ3112にローカルにおよび/またはサーバ3112から遠隔の場所に格納してもよい。一組の実施形態において、データベース3114および3116は、SQLフォーマットのコマンドに応答してデータを格納し、アップデートし、取り出すようにされた、Oracleが提供するデータベース等のリレーショナルデータベースを含み得る。
【0119】
図32は、本開示の実施形態に係る、実施形態のシステムの1つ以上のコンポーネントがサービスをクラウドサービスとして提供し得るシステム環境3200の1つ以上のコンポーネントの簡略化されたブロック図である。示されている実施形態において、システム環境3200は、クラウドサービスを提供するクラウドインフラストラクチャシステム3202とやり取りするためにユーザが使用し得る1つ以上のクライアントコンピューティングデバイス3204、3206、および3208を含む。クライアントコンピューティングデバイスは、クライアントコンピューティングデバイスのユーザがクラウドインフラストラクチャシステム3202とやり取りすることによってクラウドインフラストラクチャシステム3202が提供するサービスを使用するために用いることができる、ウェブブラウザ、専用クライアントアプリケーション(たとえばOracle Forms)、またはその他何らかのアプリケーション等のクライアントアプリケーションを操作するように構成されてもよい。
【0120】
図面に示されているクラウドインフラストラクチャシステム3202は示されているもの以外のコンポーネントを有し得ることが理解されるはずである。さらに、図面に示されている実施形態は、本発明の実施形態を組み込むことができるクラウドインフラストラクチャシステムの一例にすぎない。他のいくつかの実施形態において、クラウドインフラストラクチャシステム3202は、図示されているものよりも多いまたは少ないコンポーネントを有していてもよく、2つ以上のコンポーネントを組み合わせてもよく、またはコンポーネントの異なる構成または配置を有していてもよい。
【0121】
クライアントコンピューティングデバイス3204、3206、および3208は、3102、3104、3106、および3108について先に述べたものと同様のデバイスであってもよい。
【0122】
具体例としてのシステム環境3200は3つのクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスをサポートすることができる。センサなどを有するデバイスのようなその他のデバイスがクラウドインフラストラクチャシステム3202とやり取りしてもよい。
【0123】
ネットワーク3210は、クライアント3204、3206、および3208とクラウドインフラストラクチャシステム3202との間におけるデータの通信および交換を容易にすることができる。各ネットワークは、ネットワーク3110について先に述べたものを含む市場で入手可能なさまざまなプロトコルのうちのいずれかを用いてデータ通信をサポートできる、当業者によく知られた任意のタイプのネットワークであってもよい。
【0124】
クラウドインフラストラクチャシステム3202は、1つ以上のコンピュータ、および/またはサーバ3112について先に述べたものを含み得るサーバを含み得る。
【0125】
特定の実施形態において、クラウドインフラストラクチャシステムが提供するサービスは、オンラインデータストレージおよびバックアップソリューション、ウェブベースの電子メールサービス、ホストされているオフィススイートおよびドキュメントコラボレーションサービス、データベース処理、管理された技術サポートサービスなどのような、クラウドインフラストラクチャシステムのユーザがオンデマンドで利用できるようにされる多数のサービスを含み得る。クラウドインフラストラクチャシステムが提供するサービスは、そのユーザのニーズに合わせて動的にスケーリングすることができる。クラウドインフラストラクチャシステムが提供するサービスを具体的にインスタンス化したものを本明細書では「サービスインスタンス」と呼ぶ。一般的に、クラウドサービスプロバイダのシステムからの、インターネットのような通信ネットワークを介してユーザが利用できるようにされる任意のサービスを、「クラウドサービス」と呼ぶ。典型的に、パブリッククラウド環境において、クラウドサービスプロバイダのシステムを構成するサーバおよびシステムは、顧客自身のオンプレミスサーバおよびシステムとは異なる。たとえば、クラウドサービスプロバイダのシステムはアプリケーションをホストすることができ、ユーザは、インターネットのような通信ネットワークを介して、オンデマンドでこのアプリケーションをオーダーし使用することができる。
【0126】
いくつかの例において、コンピュータネットワーククラウドインフラストラクチャにおけるサービスは、クラウドベンダーによってまたは当該技術において周知の他のやり方でユーザに提供される、ストレージ、ホストされているデータベース、ホストされているウェブサーバ、ソフトウェアアプリケーション、またはその他のサービスに対する保護されたコンピュータネットワークアクセスを含み得る。たとえば、サービスは、インターネットを介した、クラウド上の遠隔ストレージに対するパスワードで保護されたアクセスを含むことができる。別の例として、サービスは、ネットワーク化された開発者の私的使用のための、ウェブサービスベースのホストされているリレーショナルデータベースおよびスクリプト言語ミドルウェアエンジンを含むことができる。別の例として、サービスは、クラウドベンダーのウェブサイト上でホストされている電子メールソフトウェアアプリケーションに対するアクセスを含むことができる。
【0127】
特定の実施形態において、クラウドインフラストラクチャシステム3202は、セルフサービスで、サブスクリプションベースで、弾力的にスケーラブルで、信頼性が高く、可用性が高く、かつ安全なやり方で顧客に与えられる、アプリケーション、ミドルウェア、およびデータベースサービス提供物一式を含み得る。そのようなクラウドインフラストラクチャシステムの一例は、本願の譲受人が提供するOracle Public Cloudである。
【0128】
各種実施形態において、クラウドインフラストラクチャシステム3202は、クラウドインフラストラクチャシステム3202が提供するサービスに対する顧客のサブスクリプションを自動的にプロビジョニングし、管理し、追跡するようにされていてもよい。クラウドインフラストラクチャシステム3202は、異なるデプロイメントモデルを介してクラウドサービスを提供することができる。たとえば、(例としてOracle所有の)クラウドサービスを販売する組織がクラウドインフラストラクチャシステム3202を所有しており一般の人々または異なる産業企業がサービスを利用できるようにされるパブリッククラウドモデルの下で、サービスが提供されてもよい。別の例として、クラウドインフラストラクチャシステム3202が1つの組織のためにのみ運営されこの組織内の1つ以上のエンティティのためにサービスを提供し得るプライベートクラウドモデルの下で、サービスが提供されてもよい。また、クラウドインフラストラクチャシステム3202およびクラウドインフラストラクチャシステム3202が提供するサービスを関連するコミュニティー内のいくつかの組織が共有するコミュニティークラウドモデルの下で、クラウドサービスが提供されてもよい。また、2つ以上の異なるモデルの組み合わせであるハイブリッドクラウドモデルの下で、クラウドサービスが提供されてもよい。
【0129】
いくつかの実施形態において、クラウドインフラストラクチャシステム3202が提供するサービスは、サービスとしてのソフトウェア(SaaS)カテゴリ、サービスとしてのプラットフォーム(PaaS)カテゴリ、サービスとしてのインフラストラクチャ(IaaS)カテゴリ、またはハイブリッドサービスを含むサービスの他のカテゴリの下で提供される、1つ以上のサービスを含み得る。顧客は、クラウドインフラストラクチャシステム3202が提供する1つ以上のサービスを、サブスクリプションオーダーを通じてオーダーすることができる。そうすると、クラウドインフラストラクチャシステム3202は、この顧客のサブスクリプションオーダーのサービスを提供するために処理を実行する。
【0130】
いくつかの実施形態において、クラウドインフラストラクチャシステム3202が提供するサービスは、限定されないが、アプリケーションサービス、プラットフォームサービスおよびインフラストラクチャサービスを含み得る。いくつかの例において、アプリケーションサービスは、クラウドインフラストラクチャシステムがSaaSプラットフォームを介して提供することができる。SaaSプラットフォームは、SaaSカテゴリに含まれるクラウドサービスを提供するように構成されてもよい。たとえば、SaaSプラットフォームは、統合開発およびデプロイメントプラットフォーム上でオンデマンドアプリケーション一式を構築し配信する機能を提供することができる。SaaSプラットフォームは、SaaSサービスを提供するための基礎となるソフトウェアおよびインフラストラクチャを管理し制御することができる。SaaSプラットフォームが提供するサービスを利用することにより、顧客は、クラウドインフラストラクチャシステム上で実行されるアプリケーションを利用することが可能である。顧客は、顧客が別々のライセンスおよびサポートを購入しなくても、アプリケーションサービスを得ることが可能である。さまざまな異なるSaaSサービスを提供することができる。例は、限定されないが、大組織向けの販売実績管理、企業統合、およびビジネスフレキシビリティのためのソリューションを提供するサービスを含む。
【0131】
いくつかの実施形態において、プラットフォームサービスは、クラウドインフラストラクチャシステムがPaaSプラットフォームを介して提供することができる。PaaSプラットフォームは、PaaSカテゴリに含まれるクラウドサービスを提供するように構成し得る。プラットフォームサービスの例は、限定されないが、共有されている共通アーキテクチャ上の既存のアプリケーションを組織(Oracle等)が統合することを可能にするサービスと、当該プラットフォームが提供する共有サービスを推進する新たなアプリケーションを構築する機能とを含み得る。PaaSプラットフォームは、PaaSサービスを提供するための基礎となるソフトウェアおよびインフラストラクチャを管理し制御することができる。顧客は、顧客が別々のライセンスおよびサポートを購入しなくても、クラウドインフラストラクチャシステムが提供するPaaSサービスを得ることが可能である。プラットフォームサービスの例は、限定されないが、Oracle Java Cloud Service(JCS)、Oracle Database Cloud Service(DBCS)その他を含む。
【0132】
PaaSプラットフォームが提供するサービスを利用することにより、顧客は、クラウドインフラストラクチャシステムがサポートするプログラミング言語およびツールを採用することができ、デプロイされたサービスを制御することもできる。いくつかの実施形態において、クラウドインフラストラクチャシステムが提供するプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービス(たとえばOracle Fusion Middlewareサービス)、およびJavaクラウドサービスを含み得る。一実施形態において、データベースクラウドサービスは、組織がデータベースリソースをプールしデータベースクラウドの形態でサービスとしてのデータベース(Database as a Service)を顧客に提供することを可能にする共有サービスデプロイメントモデルをサポートすることができる。ミドルウェアクラウドサービスは、顧客がさまざまなビジネスアプリケーションを開発しデプロイするためのプラットフォームを提供してもよく、Javaクラウドサービスは、クラウドインフラストラクチャシステムにおいて顧客がJavaアプリケーションをデプロイするためのプラットフォームを提供してもよい。
【0133】
さまざまな異なるインフラストラクチャサービスは、クラウドインフラストラクチャシステムにおいてIaaSプラットフォームが提供してもよい。インフラストラクチャサービスは、SaaSプラットフォームおよびPaaSプラットフォームが提供するサービスを利用する顧客のためのストレージ、ネットワーク、および他の基本的なコンピューティングリソース等の、基礎となるコンピューティングリソースの管理および制御を容易にする。
【0134】
特定の実施形態において、クラウドインフラストラクチャシステム3202はまた、クラウドインフラストラクチャシステムの顧客にさまざまなサービスを提供するために用いられるリソースを提供するためのインフラストラクチャリソース3230を含み得る。一実施形態において、インフラストラクチャリソース3230は、PaaSプラットフォームおよびSaaSプラットフォームが提供するサービスを実行するためのサーバ、ストレージ、およびネットワーキングリソース等のハードウェアの、予め統合し最適化した組み合わせを含み得る。
【0135】
いくつかの実施形態において、クラウドインフラストラクチャシステム3202におけるリソースは、複数のユーザによって共有され要求ごとに動的に再割り当てされてもよい。加えて、リソースは、異なるタイムゾーンのユーザに割り当てられてもよい。たとえば、クラウドインフラストラクチャシステム3202は、第1のタイムゾーンの第1組のユーザが指定された時間数だけクラウドインフラストラクチャシステムのリソースを利用することを可能にし、それから、異なるタイムゾーンにいる別の1組のユーザに対して同じリソースを再割り当てすることにより、リソースの利用を最大化することができる。
【0136】
特定の実施形態において、クラウドインフラストラクチャシステム3202の異なるコンポーネントまたはモジュールによって共有され、クラウドインフラストラクチャシステム3202が提供するサービスによって共有される、複数の内部共有サービス3232を提供することができる。これらの内部共有サービスは、限定されないが、セキュリティおよびアイデンティティサービス、統合サービス、企業リポジトリサービス、企業マネージャーサービス、ウィルススキャンおよびホワイトリストサービス、高可用性、バックアップおよびリカバリサービス、クラウドサポートを可能にするためのサービス、電子メールサービス、通知サービス、ファイル転送サービスなどを含み得る。
【0137】
特定の実施形態において、クラウドインフラストラクチャシステム3202は、クラウドインフラストラクチャシステムにおけるクラウドサービス(たとえばSaaS、PaaS、およびIaaSサービス)の包括的管理を提供し得る。一実施形態において、クラウド管理機能は、クラウドインフラストラクチャシステム3202が受けた顧客のサブスクリプションをプロビジョニング、管理、および追跡する機能を含み得る。
【0138】
一実施形態において、図面に示されるように、クラウド管理機能は、オーダー管理モジュール3220、オーダーオーケストレーションモジュール3222、オーダープロビジョニングモジュール3224、オーダー管理およびモニタリングモジュール3226、ならびにアイデンティティ管理モジュール3228等の、1つ以上のモジュールによって提供されてもよい。これらのモジュールは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、またはその他任意の適切な構成および/または組み合わせであってもよい、1つ以上のコンピュータおよび/またはサーバを含み得る、または、これらを用いて提供し得る。
【0139】
具体例としての動作3234において、クライアントデバイス3204、3206または3208等のクライアントデバイスを用いる顧客は、クラウドインフラストラクチャシステム3202が提供する1つ以上のサービスを要求すること、および、クラウドインフラストラクチャシステム3202が提示する1つ以上のサービスのサブスクリプションをオーダーすることにより、クラウドインフラストラクチャシステム3202とやり取りしてもよい。特定の実施形態において、顧客は、クラウドユーザインターフェイス(UI)、クラウドUI 3212、クラウドUI 3214および/またはクラウドUI 3216にアクセスしこれらのUIを介してサブスクリプションオーダーを行ってもよい。顧客がオーダーを行ったことに応じてクラウドインフラストラクチャシステム3202が受けるオーダー情報は、顧客を特定する情報と、クラウドインフラストラクチャシステム3202が提供する、顧客がサブスクライブする予定の1つ以上のサービスとを含み得る。
【0140】
顧客がオーダーを行った後に、オーダー情報は、クラウドUI 3212、3214および/または3216を介して受信される。
【0141】
動作3236において、オーダーはオーダーデータベース3218に格納される。オーダーデータベース3218は、クラウドインフラストラクチャシステム3202によって運営され他のシステム要素とともに運営されるいくつかのデータベースのうちの1つであってもよい。
【0142】
動作3238において、オーダー情報はオーダー管理モジュール3220に転送されてもよい。いくつかの例において、オーダー管理モジュール3220は、オーダーを確認し確認後にオーダーを記入する等の、オーダーに関連する課金および会計機能を行うように構成されてもよい。
【0143】
動作3240において、オーダーに関する情報は、オーダーオーケストレーションモジュール3222に伝えられる。オーダーオーケストレーションモジュール3222は、オーダー情報を利用することにより、顧客によって行われたオーダーのためのサービスおよびリソースのプロビジョニングをオーケストレーションするように構成されてもよい。いくつかの例において、オーダーオーケストレーションモジュール3222は、リソースのプロビジョニングをオーケストレーションすることにより、オーダープロビジョニングモジュール3224のサービスを使用するサブスクライブされたサービスを、サポートしてもよい。
【0144】
特定の実施形態において、オーダーオーケストレーションモジュール3222は、各オーダーに関連付けられたビジネスプロセスの管理を可能にし、ビジネスロジックを適用することにより、オーダーがプロビジョニングに進むべきか否かを判断する。動作3242において、新規サブスクリプションのオーダーを受けると、オーダーオーケストレーションモジュール3222は、サブスクリプションオーダーを遂行するのに必要なリソースを割り当てて構成することを求める要求を、オーダープロビジョニングモジュール3224に送る。オーダープロビジョニングモジュール3224は、顧客がオーダーしたサービスのためのリソースの割当を可能にする。オーダープロビジョニングモジュール3224は、クラウドインフラストラクチャシステム3202が提供するクラウドサービスと、要求されたサービスを提供するためのリソースのプロビジョニングに使用される物理実装層との間の抽象化レベルを提供する。このようにして、オーダーオーケストレーションモジュール3222を、サービスおよびリソースが実際にオンザフライでプロビジョニングされるか否か、または、予めプロビジョニングされており要求後に割り当て/アサインされるか否か等の、実装の詳細から切り離すことができる。
【0145】
動作3244において、サービスおよびリソースがプロビジョニングされると、提供されるサービスの通知が、クラウドインフラストラクチャシステム3202のオーダープロビジョニングモジュール3224によってクライアントデバイス3204、3206および/または3208の顧客に送信されてもよい。
【0146】
動作3246において、顧客のサブスクリプションオーダーは、オーダー管理およびモニタリングモジュール3226によって管理および追跡されてもよい。いくつかの例において、オーダー管理およびモニタリングモジュール3226は、ストレージ使用量、転送データ量、ユーザ数、ならびにシステムアップタイムおよびシステムダウンタイムの量等の、サブスクリプションオーダーにおけるサービスの使用統計を収集するように構成されてもよい。
【0147】
特定の実施形態において、クラウドインフラストラクチャシステム3202はアイデンティティ管理モジュール3228を含み得る。アイデンティティ管理モジュール3228は、クラウドインフラストラクチャシステム3202におけるアクセス管理および認可サービス等のアイデンティティサービスを提供するように構成されてもよい。いくつかの実施形態において、アイデンティティ管理モジュール3228は、クラウドインフラストラクチャシステム3202が提供するサービスの利用を所望する顧客に関する情報を管理してもよい。そのような情報は、このような顧客のアイデンティティを認証する情報と、さまざまなシステムリソース(たとえばファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど)に関してこれらの顧客が実行を認可されるアクションを記述する情報とを含み得る。アイデンティティ管理モジュール3228は、各顧客に関し、かつ、誰が如何にしてこの記述情報にアクセスし修正することができるかに関する記述情報の管理も含み得る。
【0148】
図33は、本発明の各種実施形態を実現し得る具体例としてのコンピュータシステム3300を示す。システム3300を用いることにより、上記コンピュータシステムのうちのいずれかを実現することができる。図面に示されるように、コンピュータシステム3300は、バスサブシステム3302を介して複数の周辺サブシステムと通信する処理ユニット3304を含む。これらの周辺サブシステムは、処理加速ユニット3306と、入出力サブシステム3308と、記憶サブシステム3318と、通信サブシステム3324とを含み得る。記憶サブシステム3318は、有形のコンピュータ読取可能記憶媒体3322とシステムメモリ3310とを含み得る。
【0149】
バスサブシステム3302は、コンピュータシステム3300の各種コンポーネントおよびサブシステムを目的に合わせて互いに通信させるためのメカニズムを提供する。バスサブシステム3302は1つのバスとして概略的に示されているが、バスサブシステムの代替実施形態は複数のバスを利用し得る。バスサブシステム3302は、さまざまなバスアーキテクチャのうちのいずれかを用いる、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造のうちのいずれかであってもよい。たとえば、そのようなアーキテクチャは、Industry Standard Architecture(ISA)バス、Micro Channel Architecture(MCA)バス、Enhanced ISA(EISA)バス、Video Electronics Standards Association(VESA)ローカルバス、および、IEEE P1386.1規格に準拠して製造されたMezzanineバスとして実装することができるPeripheral Component Interconnect(PCI)バスを含み得る。
【0150】
1つ以上の集積回路(たとえば従来のマイクロプロセッサまたはマイクロコントローラ)として実現することができる処理ユニット3304は、コンピュータシステム3300の動作を制御する。1つ以上のプロセッサが処理ユニット3304に含まれていてもよい。これらのプロセッサはシングルコアまたはマルチコアプロセッサを含み得る。特定の実施形態において、処理ユニット3304は、1つ以上の独立した処理ユニット3332および/または3334として、各処理ユニットに含まれるシングルまたはマルチコアプロセッサとともに実現されてもよい。他の実施形態において、処理ユニット3304はまた、2つのデュアルコアプロセッサを1つのチップに統合することによって形成されるクアッドコア処理ユニットとして実現されてもよい。
【0151】
各種実施形態において、処理ユニット3304は、プログラムコードに応じてさまざまなプログラムを実行することができ、かつ、同時に実行している複数のプログラムまたはプロセスを管理することができる。ある所定の時点で、実行すべきプログラムコードのうちの一部またはすべてが、プロセッサ3304および/または記憶サブシステム3318にあってもよい。適切なプログラミングを通して、プロセッサ3304は上記各種機能を提供することができる。コンピュータシステム3300はさらに、デジタル信号プロセッサ(DSP)、専用プロセッサ、および/またはその他同様のものを含むことができる、処理加速ユニット3306を含み得る。
【0152】
入出力サブシステム3308は、ユーザインターフェイス入力デバイスと、ユーザインターフェイス出力デバイスとを含み得る。ユーザインターフェイス入力デバイスは、キーボード、マウスまたはトラックボール等のポインティングデバイス、ディスプレイに組み込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、音声コマンド認識システム付きの音声入力デバイス、マイク、およびその他のタイプの入力デバイスを含み得る。ユーザインターフェイス入力デバイスは、たとえば、ジェスチャーおよび発話コマンドを使用するナチュラルユーザインターフェイスを通してユーザが入力デバイスを制御し入力デバイスとやり取りすることを可能にする、Microsoft Xbox(登録商標)360ゲームコントローラ等のMicrosoft Kinect(登録商標)モーションセンサのような、モーション検知および/またはジェスチャー認識デバイスを含み得る。ユーザインターフェイス入力デバイスはまた、ユーザの目の活動(たとえば写真撮影中および/またはメニュー選択中の「まばたき」)を検出し目のジェスチャーを入力デバイス(たとえばGoogle Glass(登録商標))への入力として変換する、Google Glass(登録商標)まばたき検出器等のアイジェスチャー認識デバイスを含み得る。加えて、ユーザインターフェイス入力デバイスは、ユーザが音声コマンドを通して音声認識システム(たとえばSiri(登録商標)ナビゲータ)とやり取りすることを可能にする音声認識検知デバイスを含み得る。
【0153】
ユーザインターフェイス入力デバイスはまた、限定されないが、3次元(3D)マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、およびスピーカ等のオーディオ/ビジュアルデバイス、デジタルカメラ、デジタルカムコーダー、ポータブルメディアプレイヤー、ウェブカメラ、イメージスキャナ、指紋スキャナ、バーコードリーダー3Dスキャナ、3Dプリンタ、レーザ測距装置、および視線追跡デバイスを含み得る。加えて、ユーザインターフェイス入力デバイスは、たとえば、コンピュータ断層撮影装置、磁気共鳴撮像装置、ポジトロン断層撮影装置、医療用超音波検査装置等の医療用撮像入力デバイスを含み得る。ユーザインターフェイス入力デバイスはまた、たとえば、MIDIキーボード、デジタル楽器などのような音声入力装置を含み得る。
【0154】
ユーザインターフェイス出力デバイスは、ディスプレイサブシステム、表示灯、または音声出力装置等の非視覚的ディスプレイなどを含み得る。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)またはプラズマディスプレイを用いるもの等のフラットパネルデバイス、投影デバイス、タッチスクリーンなどであってもよい。一般的に、「出力デバイス」という用語を使用する場合は、コンピュータシステム3300からユーザまたは他のコンピュータに情報を出力するための可能なすべてのタイプのデバイスおよびメカニズムを含むことを意図している。たとえば、ユーザインターフェイス出力デバイスは、限定されないが、モニタ、プリンタ、スピーカ、ヘッドホン、カーナビゲーションシステム、プロッタ、音声出力デバイス、およびモデム等の、テキスト、図形、およびオーディオ/ビデオ情報を視覚的に伝えるさまざまなディスプレイデバイスを含み得る。
【0155】
コンピュータシステム3300は、現在はシステムメモリ3310内にあるものとして示されているソフトウェア要素を含むストレージサブシステム3318を含み得る。システムメモリ3310は、処理ユニット3304上にローディング可能であり処理ユニット上で実行可能なプログラム命令と、これらのプログラムの実行中に生成されたデータとを格納することができる。
【0156】
コンピュータシステム3300の構成および種類に応じて、システムメモリ3310は、揮発性(たとえばランダムアクセスメモリ(RAM))であってもよく、および/または不揮発性(たとえば読出専用メモリ(ROM)、フラッシュメモリなど)であってもよい。典型的に、RAMは、処理ユニット3304が直ちにアクセス可能でありおよび/または現在操作し実行している、データおよび/またはプログラムモジュールを含む。いくつかの実装例において、システムメモリ3310は、スタティックランダムアクセスメモリ(SRAM)またはダイナミックランダムアクセスメモリ(DRAM)等の複数の異なる種類のメモリを含み得る。いくつかの実装例において、たとえば起動中のコンピュータシステム3300内の要素間の情報の転送を支援する基本ルーチンを含む基本入出力システム(BIOS)は、典型的にはROMに格納することができる。例として、限定されないが、システムメモリ3310はまた、クライアントアプリケーション、ウェブブラウザ、ミッドティアアプリケーション、リレーショナルデータベース管理システム(RDBMS)などを含み得るアプリケーションプログラム3312と、プログラムデータ3314と、オペレーティングシステム3316とを示している。例として、オペレーティングシステム3316は、さまざまなバージョンのMicrosoft Windows(登録商標)、Apple Macintosh(登録商標)、および/またはLinux(登録商標)オペレーティングシステム、市場で入手可能な多様なUNIX(登録商標)またはUNIX(登録商標)系オペレーティングシステム(限定されないが多様なGNU/Linux(登録商標)オペレーティングシステム、Google Chrome(登録商標)OSなどを含む)、および/またはiOS、Windows(登録商標)Phone、Android(登録商標) OS、BlackBerry(登録商標) 10 OS、およびPalm(登録商標) OSオペレーティングシステム等のモバイルオペレーティングシステムを含み得る。
【0157】
ストレージサブシステム3318はまた、いくつかの実施形態の機能を提供する基本的なプログラミングおよびデータ構造を格納するための有形のコンピュータ読取可能記憶媒体を提供することができる。プロセッサによって実行されると上記機能を実行するソフトウェア(プログラム、コードモジュール、命令)は、ストレージサブシステム3318に格納することができる。これらのソフトウェアモジュールまたは命令は、処理ユニット3304によって実行されてもよい。ストレージサブシステムy3318はまた、本発明に従い使用されるデータを格納するためのリポジトリを提供することができる。
【0158】
ストレージサブシステム3318はまた、コンピュータ読取可能記憶媒体3322にさらに接続することが可能なコンピュータ読取可能記憶媒体リーダー3320を含み得る。システムメモリ3310とともに、また、任意でシステムメモリ3310と組み合わされて、コンピュータ読取可能記憶媒体3322は、コンピュータ読取可能情報を一時的におよび/またはより恒久的に含む、格納する、送信する、および取り出すための、リモート、ローカル、固定、および/またはリムーバブル記憶装置プラス記憶媒体を包括的に表すことができる。
【0159】
コードまたはコードの一部を含むコンピュータ読取可能記憶媒体3322はまた、限定されないが、情報の記憶および/または送信のための任意の方法または技術で実現される、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体等の、記憶媒体および通信媒体を含む、当該技術において周知のまたは使用されている適切な任意の媒体を含み得る。これは、RAM、ROM、電子的に消去可能プログラム可能なROM(EEPROM)、フラッシュメモリまたはその他のメモリ技術、CD-ROM、デジタル多目的ディスク(DVD)、もしくはその他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくはその他の磁気記憶装置、または、他の有形のコンピュータ読取可能媒体等の、有形のコンピュータ読取可能記憶媒体を含み得る。これはまた、所望の情報を送信するために使用することができコンピューティングシステム3300がアクセスすることができる、データ信号、データ送信、またはその他任意の媒体等の、非有形コンピュータ読取可能媒体を含み得る。
【0160】
例として、コンピュータ読取可能記憶媒体3322は、非リムーバブル不揮発性磁気媒体からの読取およびこの媒体への書込を行うハードディスクドライブ、リムーバブル不揮発性磁気ディスクからの読取およびこのディスクへの書込を行う磁気ディスクドライブ、ならびに、CD ROM、DVD、Blu-Ray(登録商標)ディスク、またはその他の光学媒体等のリムーバブル不揮発性光ディスクからの読取およびこのディスクへの書込を行う光ディスクドライブを含み得る。コンピュータ読取可能記憶媒体3322は、限定されないが、Zip(登録商標)ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス(USB)フラッシュドライブ、セキュアデジタル(SD)カード、DVDディスク、デジタルビデオテープなどを含み得る。コンピュータ読取可能記憶媒体3322はまた、フラッシュメモリベースのSSD、エンタープライズフラッシュドライブ、ソリッドステートROMなどのような、不揮発性メモリベースのソリッドステートドライブ(SSD)、ソリッドステートRAM、ダイナミックRAM、スタティックRAM等の揮発性メモリベースのSSD、DRAMベースのSSD、磁気抵抗RAM(MRAM)SSD、ならびにDRAMおよびフラッシュメモリベースのSSDの組み合わせを用いるハイブリッドSSDを、含み得る。ディスクドライブおよびこれらに対応付けられたコンピュータ読取可能媒体は、コンピュータ読取可能命令、データ構造、プログラムモジュール、およびコンピュータシステム3300のためのその他のデータの不揮発性ストレージを提供することができる。
【0161】
通信サブシステム3324は、他のコンピュータシステムおよびネットワークに対するインターフェイスを提供する。通信サブシステム3324は、他のシステムからデータを受信し、コンピュータシステム3300から他のシステムにデータを送信するためのインターフェイスの役割を果たす。たとえば、通信サブシステム3324は、コンピュータシステム3300がインターネットを介して1つ以上のデバイスに接続することを可能にする。いくつかの実施形態において、通信サブシステム3324は、(たとえば携帯電話技術、3G、4GもしくはEDGE(enhanced data rates for global evolution)等の高度データネットワーク技術、WiFi(登録商標)(IEEE 802.11系規格、または他の移動通信技術、またはそれらの任意の組み合わせを用いて)無線音声および/またはデータネットワークにアクセスするための無線周波数(RF)トランシーバーコンポーネント、グローバルポジショニングシステム(GPS)受信機コンポーネント、および/またはその他のコンポーネントを含み得る。いくつかの実施形態において、通信サブシステム3324は、無線インターフェイスに加えてまたはその代わりに、有線ネットワークコネクティビティ(たとえばイーサネット(登録商標))を提供することができる。
【0162】
いくつかの実施形態において、通信サブシステム3324は、コンピュータシステム3300を使用し得る1人以上のユーザの代わりに、構造化および/または非構造化データフィード3326、イベントストリーム3328、イベントアップデート3330などの形態の入力通信を受けることもできる。
【0163】
例として、通信サブシステム3324は、Twitter(登録商標)フィード、Facebook(登録商標)アップデート、Rich Site Summary(RSS)フィード等のウェブフィード、および/または1つ以上の第3者情報源からのリアルタイムアップデート等の、ソーシャルネットワークおよび/または他の通信サービスのユーザからのデータフィード3326をリアルタイムで受信するように構成されてもよい。
【0164】
加えて、通信サブシステム3324は、明確な終わりがない本質的に連続しているまたは無限である可能性があるリアルタイムイベントのイベントストリーム3328および/またはイベントアップデート3330を含み得る、連続データストリームの形態のデータを受信するように構成されてもよい。連続データを生成するアプリケーションの例は、たとえば、センサデータアプリケーション、金融ティッカー、ネットワーク性能測定ツール(たとえばネットワークモニタリングおよびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車交通監視などを含み得る。
【0165】
通信サブシステム3324はまた、構造化および/または非構造化データフィード3326、イベントストリーム3328、イベントアップデート3330などを、コンピュータシステム3300に結合された1つ以上のストリーミングデータソースコンピュータと通信し得る1つ以上のデータベースに出力するように構成されてもよい。
【0166】
コンピュータシステム3300は、ハンドヘルドポータブルデバイス(たとえばiPhone(登録商標)携帯電話、iPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブルデバイス(たとえばGoogle Glass(登録商標)ヘッドマウントディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバラック、またはその他任意のデータ処理システムを含む、さまざまなタイプのうちの1つであってもよい。
【0167】
コンピュータおよびネットワークには常に変化しているという性質があるので、図面に示されるコンピュータシステム3300の説明は、具体的な一例を意図しているにすぎない。図面に示されるシステムよりも多くのまたは少ないコンポーネントを有するその他多数の構成が可能である。たとえば、カスタマイズされたハードウェアが使用されてもよく、および/または特定の要素がハードウェア、ファームウェア、ソフトウェア(アプレットを含む)、または組み合わせで実現されてもよい。さらに、ネットワーク入出力デバイスのようなその他のコンピューティングデバイスに対する接続を用いてもよい。本明細書で提供される開示および教示に基づいて、当業者は、各種実施形態を実現するためのその他のやり方および/または方法を理解するであろう。
【0168】
上述の記載では、説明のために、本発明の各種実施形態の十分な理解が得られるよう、数多くの具体的な詳細を述べている。しかしながら、当業者には、本発明の実施形態はこれらの具体的な詳細のうちの一部がなくても実施し得ることが明らかであろう。その他の例では、周知の構造およびデバイスはブロック図の形態で示されている。
【0169】
上述の記載は、具体例としての実施形態を提供しているだけであって、本開示の範囲、利用可能性、または構成を限定することを意図しているのではない。むしろ、具体例としての実施形態の上述の記載は、具体例としての実施形態を実現することを可能にする説明を当業者に提供するであろう。以下の請求項に記載の本発明の精神および範囲から逸脱することなく、要素の機能および構成に各種変更を加え得ることが理解されるはずである。
【0170】
上述の記載において、具体的な詳細は、実施形態の十分な理解を得るために提供されている。しかしながら、当業者は、実施形態はこれらの具体的な詳細がなくても実現し得ることを理解するであろう。たとえば、回路、システム、ネットワーク、プロセス、およびその他のコンポーネントは、実施形態を不必要な詳細で不明瞭にすることがないよう、ブロック図の形態のコンポーネントとして示されている場合がある。その他の例において、周知の回路、プロセス、アルゴリズム、構造、および技術は、実施形態を不明瞭にすることを避けるために不必要な詳細なしで示されている場合がある。
【0171】
また、個々の実施形態は、フローチャート、フロー図、データフロー図、構造図、またはブロック図として示されるプロセスとして記載されている場合があることが注目される。フローチャートは動作を逐次プロセスとして説明している場合があるが、動作のうちの多くは並列または同時に実行することができる。加えて、動作の順序は構成し直してもよい。プロセスは、その動作が完了すると終了するが、図面に含まれていない追加のステップを有する可能性がある。プロセスは、方法、関数、手順、サブルーチン、サブプログラムなどに対応し得る。プロセスが関数に対応する場合、その終了は、この関数が呼び出し側関数またはメイン関数に戻ることに相当し得る。
【0172】
「コンピュータ読取可能媒体」という用語は、携帯型または固定記憶装置、光記憶装置、無線チャネル、ならびに、命令および/またはデータを格納する、含む、または保持することが可能なその他の各種媒体を含むが、これらに限定される訳ではない。コードセグメントまたはマシン実行可能命令は、手順、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または、命令、データ構造、もしくはプログラムステートメントの任意の組み合わせを表し得る。コードセグメントは、情報、データ、引数、パラメータ、またはメモリコンテンツを送ることおよび/または受けることにより、別のコードセグメントまたはハードウェア回路に結合されてもよい。情報、引数、パラメータ、データなどは、メモリ共有、メッセージパッシング、トークンパッシング、ネットワーク送信などを含む任意の適切な手段を介して、送る、転送する、または送信することができる。
【0173】
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはその任意の組み合わせによって実現することができる。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードで実現するとき、必要なタスクを実行するためのプログラムコードまたはコードセグメントは、マシン読取可能媒体に格納されていてもよい。プロセッサ(複数のプロセッサ)が必要なタスクを実行してもよい。
【0174】
上述の明細書では、本発明の局面を、その具体的な実施形態を参照しながら説明しているが、本発明がこれらの実施形態に限定される訳ではないことを当業者は認識するであろう。上記発明の各種特徴および局面は、個別に使用されてもよく、またはともに使用されてもよい。さらに、実施形態は、本明細書のより広い精神および範囲から逸脱することなく、本明細書に記載の環境およびアプリケーションを超える、任意の数の環境およびアプリケーションで利用することができる。したがって、本明細書および図面は、限定的なものではなく例示的なものであるとみなされねばならない。
【0175】
加えて、説明のために、方法は特定の順序で記載されている。代替実施形態においてこれらの方法は記載されている順序と異なる順序で実行され得ることが理解されるはずである。上記方法は、ハードウェアコンポーネントによって実行されてもよく、またはマシン実行可能命令のシーケンスで実施されてもよいことも、理解されるはずである。マシン実行可能命令は、当該命令でプログラミングされた汎用もしくは専用プロセッサまたは論理回路のようなマシンに当該方法を実行させるために使用することができる。これらのマシン実行可能命令は、CD-ROMもしくはその他のタイプの光ディスク、フロッピー(登録商標)ディスク、ROM、RAM、EPROM、EEPROM、磁気もしくは光カード、フラッシュメモリ、または、電子命令を格納するのに適したその他のタイプのマシン読取可能媒体等の、1つ以上のマシン読取可能媒体に、格納されてもよい。これに代えて、当該方法はハードウェアとソフトウェアとの組み合わせによって実行されてもよい。