(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2025-03-05
(54)【発明の名称】クラウドリージョンにデータセンタを構築するための技術
(51)【国際特許分類】
G06F 9/50 20060101AFI20250226BHJP
【FI】
G06F9/50 150Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024547098
(86)(22)【出願日】2023-01-31
(85)【翻訳文提出日】2024-08-16
(86)【国際出願番号】 US2023012035
(87)【国際公開番号】W WO2023154198
(87)【国際公開日】2023-08-17
(32)【優先日】2022-02-08
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2022-02-22
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2022-02-28
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2022-12-06
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ミラー,エリック・ジョセフ
(72)【発明者】
【氏名】ドックター,ケイレブ
(57)【要約】
自動化されたリージョン構築を実行するための技術が説明されている。クラウドコンピューティング環境のオーケストレーションサービス(例えば、マルチフロックオーケストレータ)は、1つまたは複数のデータセンタに対応するリージョン内でブートストラップされるサービスに対応する構成ファイルを取得してもよい。サービスの各々は、少なくとも1つのインフラストラクチャコンポーネントまたは対応するソフトウェアアーティファクトを含むリソースのそれぞれのセットと関連付けられてもよい。オーケストレーションサービスは、構成ファイルに少なくとも部分的に基づいてサービス間の依存を識別してもよい。サービスをブートストラップするためのオペレーションが実行される順序は、識別された依存に少なくとも部分的に基づいて決定されてもよい。オーケストレーションサービスは、決定された順序に従ってサービスをブートストラップするための対応するオペレーションを実行するようにプロビジョニングおよびデプロイメントマネジャにインクリメントに命令してもよい。
【特許請求の範囲】
【請求項1】
コンピュータが実行する方法であって、
クラウドコンピューティング環境のオーケストレーションサービスが、1つまたは複数のデータセンタに対応するリージョン内でブートストラップされる複数のサービスに対応する複数の構成ファイルを取得することを含み、前記複数のサービスの各々は、インフラストラクチャコンポーネントまたは対応するソフトウェアアーティファクトのうちの少なくとも1つを含むリソースのそれぞれのセットと関連付けられており、
前記方法は、
前記オーケストレーションサービスが、前記複数の構成ファイルに少なくとも部分的に基づいて前記複数のサービスの間の1つまたは複数の依存を識別することと、
前記オーケストレーションサービスが、識別された前記1つまたは複数の依存に少なくとも部分的に基づいて、前記複数のサービスをブートストラップするためのオペレーションが実行される順序を決定することと、
前記オーケストレーションサービスが、決定された前記順序に従って前記複数のサービスをブートストラップするための対応するオペレーションを実行するようにプロビジョニングおよびデプロイメントマネジャにインクリメントに命令することと
をさらに含む、コンピュータが実行する方法。
【請求項2】
前記1つまたは複数の依存のレコードを維持することと、
第1のサービスが、利用可能な第2のサービスのケイパビリティへの対応する依存を有することを識別することと、
前記第2のサービスの前記ケイパビリティが利用不可能であることを識別することと、
前記ケイパビリティが利用可能になったときに通知されるリクエストを示すデータをケイパビリティサービスへ送信することと
をさらに含む、請求項1に記載のコンピュータが実行する方法。
【請求項3】
前記第2のサービスの前記ケイパビリティが利用不可能であることを識別することは、前記第2のサービスの前記ケイパビリティが利用可能であることを示す通知が前記クラウドコンピューティング環境の前記ケイパビリティサービスからまだ受信されていないことを決定することを含む、請求項2に記載のコンピュータが実行する方法。
【請求項4】
前記プロビジョニングおよびデプロイメントマネジャにインクリメントに命令することは、
前記ケイパビリティサービスから、前記ケイパビリティが利用可能であることを示す対応する通知を受信することと、
前記ケイパビリティが利用可能であるという前記通知を受信することに応答して、前記第2のサービスに対応するリソースを前記リージョン内でブートストラップするためのオペレーションを実行するように前記プロビジョニングおよびデプロイメントマネジャに命令することと
をさらに含む、請求項1~請求項3のいずれかに記載のコンピュータが実行する方法。
【請求項5】
前記複数のサービスをブートストラップするための前記対応するオペレーションを実行するように前記プロビジョニングおよびデプロイメントマネジャにインクリメントに命令することにより、前記プロビジョニングおよびデプロイメントマネジャは、少なくとも1つのインフラストラクチャコンポーネントをプロビジョニングし、前記少なくとも1つのインフラストラクチャコンポーネントへ1つまたは複数のアーティファクトをデプロイする、請求項1~請求項4のいずれかに記載のコンピュータが実行する方法。
【請求項6】
前記1つまたは複数の依存は、前記複数の構成ファイルの1つまたは複数のパースを実行することに少なくとも部分的に基づいて識別される、請求項1~請求項5のいずれかに記載のコンピュータが実行する方法。
【請求項7】
前記オーケストレーションサービスが、前記1つまたは複数の依存および前記複数のサービスをブートストラップするためのオペレーションが実行される順序を識別することに少なくとも部分的に基づいて、1つまたは複数の有向グラフを生成することをさらに含み、決定された前記順序に従って前記複数のサービスをブートストラップするための前記対応するオペレーションを実行するように前記プロビジョニングおよびデプロイメントマネジャにインクリメントに命令することは、前記1つまたは複数の有向グラフの1つまたは複数のトラバースに少なくとも部分的に基づく、請求項1~請求項6のいずれかに記載のコンピュータが実行する方法。
【請求項8】
クラウドコンピューティングシステムであって、
1つまたは複数のプロセッサと、
前記1つまたは複数のプロセッサによって実行されると前記クラウドコンピューティングシステムのオーケストレーションサービスに、
1つまたは複数のデータセンタに対応するリージョン内でブートストラップされる複数のサービスに対応する複数の構成ファイルを取得させ、前記複数のサービスの各々は、インフラストラクチャコンポーネントおよび対応するソフトウェアアーティファクトを含むリソースのそれぞれのセットと関連付けられており、
前記複数の構成ファイルに少なくとも部分的に基づいて前記複数のサービスの間の1つまたは複数の依存を識別させ、
識別された前記1つまたは複数の依存に少なくとも部分的に基づいて、前記複数のサービスをブートストラップするためのオペレーションが実行される順序を決定させ、
決定された前記順序に従って前記複数のサービスをブートストラップするための対応するオペレーションを実行するようにプロビジョニングおよびデプロイメントマネジャにインクリメントに命令させる
コンピュータ実行可能命令を記憶する1つまたは複数のメモリとを含む、クラウドコンピューティングシステム。
【請求項9】
前記命令を実行することは、さらに、前記オーケストレーションサービスに、
第1のサービスが、利用可能な第2のサービスのケイパビリティへの対応する依存を有することを識別させ、
前記第2のサービスの前記ケイパビリティが利用不可能であることを識別させ、
前記ケイパビリティが利用可能になったときに通知されるリクエストを示すデータをケイパビリティサービスへ送信させる、請求項8に記載のクラウドコンピューティングシステム。
【請求項10】
前記オーケストレーションサービスに、前記第2のサービスの前記ケイパビリティが利用不可能であることを識別させる前記命令を実行することは、さらに、前記オーケストレーションサービスに、前記第2のサービスの前記ケイパビリティが利用可能であることを示す通知が前記クラウドコンピューティングシステムの前記ケイパビリティサービスからまだ受信されていないことを決定させる、請求項9に記載のクラウドコンピューティングシステム。
【請求項11】
前記プロビジョニングおよびデプロイメントマネジャにインクリメントに命令するために前記命令を実行することは、さらに、前記オーケストレーションサービスに、
前記ケイパビリティサービスから、前記ケイパビリティが利用可能であることを示す対応する通知を受信させ、
前記ケイパビリティが利用可能であるという前記通知を受信することに応答して、前記第2のサービスに対応するリソースを前記リージョン内でブートストラップするためのオペレーションを実行するように前記プロビジョニングおよびデプロイメントマネジャに命令させる、請求項8~請求項10のいずれかに記載のクラウドコンピューティングシステム。
【請求項12】
前記複数のサービスをブートストラップするための前記対応するオペレーションを実行するように前記プロビジョニングおよびデプロイメントマネジャにインクリメントに命令するために前記命令を実行することは、前記プロビジョニングおよびデプロイメントマネジャに、少なくとも1つのインフラストラクチャコンポーネントをプロビジョニングさせ、前記少なくとも1つのインフラストラクチャコンポーネントへ1つまたは複数のアーティファクトをデプロイさせる、請求項8~請求項11のいずれかに記載のクラウドコンピューティングシステム。
【請求項13】
前記1つまたは複数の依存は、前記複数の構成ファイルの1つまたは複数のパースを実行することに少なくとも部分的に基づいて識別される、請求項8~請求項12のいずれかに記載のクラウドコンピューティングシステム。
【請求項14】
前記命令を実行することは、さらに、前記オーケストレーションサービスに、前記1つまたは複数の依存および前記複数のサービスをブートストラップするためのオペレーションが実行される順序を識別することに少なくとも部分的に基づいて、1つまたは複数の有向グラフを生成させ、決定された前記順序に従って前記複数のサービスをブートストラップするための前記対応するオペレーションを実行するように前記プロビジョニングおよびデプロイメントマネジャにインクリメントに命令することは、前記1つまたは複数の有向グラフの1つまたは複数のトラバースに少なくとも部分的に基づく、請求項8~請求項13のいずれか1項に記載のクラウドコンピューティングシステム。
【請求項15】
クラウドコンピューティングシステムのオーケストレーションサービスに対応する1つまたは複数のプロセッサによって実行されると、前記オーケストレーションサービスに、
1つまたは複数のデータセンタに対応するリージョン内でブートストラップされる複数のサービスに対応する複数の構成ファイルを取得させ、前記複数のサービスの各々は、インフラストラクチャコンポーネントおよび対応するソフトウェアアーティファクトを含むリソースのそれぞれのセットと関連付けられており、
前記複数の構成ファイルに少なくとも部分的に基づいて前記複数のサービスの間の1つまたは複数の依存を識別させ、
識別された前記1つまたは複数の依存に少なくとも部分的に基づいて、前記複数のサービスをブートストラップするためのオペレーションが実行される順序を決定させ、
決定された前記順序に従って前記複数のサービスをブートストラップするための対応するオペレーションを実行するようにプロビジョニングおよびデプロイメントマネジャにインクリメントに命令させる
コンピュータ実行可能命令を記憶する非一時的コンピュータ可読記憶媒体。
【請求項16】
前記命令を実行することは、さらに、前記オーケストレーションサービスに、
第1のサービスが、利用可能な第2のサービスのケイパビリティへの対応する依存を有することを識別させ、
前記第2のサービスの前記ケイパビリティが利用不可能であることを識別させ、
前記ケイパビリティが利用可能になったときに通知されるリクエストを示すデータをケイパビリティサービスへ送信させる、請求項15に記載の非一時的コンピュータ可読記憶媒体。
【請求項17】
前記オーケストレーションサービスに、前記第2のサービスの前記ケイパビリティが利用不可能であることを識別させる前記命令を実行することは、さらに、前記オーケストレーションサービスに、前記第2のサービスの前記ケイパビリティが利用可能であることを示す通知が前記クラウドコンピューティングシステムの前記ケイパビリティサービスからまだ受信されていないことを決定させる、請求項16に記載の非一時的コンピュータ可読記憶媒体。
【請求項18】
前記プロビジョニングおよびデプロイメントマネジャにインクリメントに命令するために前記命令を実行することは、さらに、前記オーケストレーションサービスに、
前記ケイパビリティサービスから、前記ケイパビリティが利用可能であることを示す対応する通知を受信させ、
前記ケイパビリティが利用可能であるという前記通知を受信することに応答して、前記第2のサービスに対応するリソースを前記リージョン内でブートストラップするためのオペレーションを実行するように前記プロビジョニングおよびデプロイメントマネジャに命令させる、請求項15~請求項17のいずれかに記載の非一時的コンピュータ可読記憶媒体。
【請求項19】
前記複数のサービスをブートストラップするための前記対応するオペレーションを実行するように前記プロビジョニングおよびデプロイメントマネジャにインクリメントに命令するために前記命令を実行することは、前記プロビジョニングおよびデプロイメントマネジャに、少なくとも1つのインフラストラクチャコンポーネントをプロビジョニングさせ、前記少なくとも1つのインフラストラクチャコンポーネントへ1つまたは複数のアーティファクトをデプロイさせる、請求項15~請求項18のいずれかに記載の非一時的コンピュータ可読記憶媒体。
【請求項20】
前記1つまたは複数の依存は、前記複数の構成ファイルの1つまたは複数のパースを実行することに少なくとも部分的に基づいて識別され、前記命令を実行することは、さらに、前記オーケストレーションサービスに、前記1つまたは複数の依存および前記複数のサービスをブートストラップするためのオペレーションが実行される順序を識別することに少なくとも部分的に基づいて、1つまたは複数の有向グラフを生成させ、決定された前記順序に従って前記複数のサービスをブートストラップするための前記対応するオペレーションを実行するように前記プロビジョニングおよびデプロイメントマネジャにインクリメントに命令することは、前記1つまたは複数の有向グラフの1つまたは複数のトラバースに少なくとも部分的に基づく、請求項15~請求項19のいずれかに記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本PCT出願は、「Techniques for Bootstrapping a Region Build」という名称の、2022年2月8日に出願された米国仮特許出願第63/308,003号、「Techniques for Implementing Virtual Data Centers」という名称の、2022年2月22日に出願された米国仮特許出願第63/312,814号、「Techniques for Building Data Centers in Cloud Regions」という名称の、2022年2月28日に出願された米国仮特許出願第63/315,005号、および「Techniques for Building Data Centers in Cloud Regions」という名称の、2022年12月6日に出願された米国特許出願第18/076,238号の優先権を主張し、それらの開示は、全ての目的のためにそれらの全体が参照により本明細書に組み込まれる。
【0002】
発明の分野
本開示は、クラウドコンピューティング環境にデータセンタを構築するための技術に関する。より具体的には、本開示は、自動化された形式においてデータセンタ内に様々なクラウドコンピューティングコンポーネント(例えば、サービス)に対応するリソースをプロビジョニングおよびデプロイするための技術を説明する。
【背景技術】
【0003】
背景
今日、クラウドインフラストラクチャサービスは、データセンタを構築するために(例えば、特定の地理的リージョンのデータセンタに様々なリソースをブートストラップするために)多くの個々のサービスを利用する。いくつかの例において、リージョンは、1つまたは複数のデータセンタが配置された(またはされる)局所的な地理的エリアに対応する論理的抽象である。データセンタを構築することは、(例えば、様々なサービスのために)インフラストラクチャリソースをプロビジョニングおよび構成し、これらのリソースにコードをデプロイすることを含んでもよい。データセンタを構築するためのオペレーションは、集合的に「リージョン構築」を実行すると呼ばれることがある。あらゆる適切な数のデータセンタが、リージョンに含まれてもよく、したがって、リージョン構築は、多数のデータセンタを構築するためのオペレーションを含んでもよい。リージョンを構築するための従来のツールは、かなりの手作業の労力を必要とする。加えて、1つのサービスのためのブートストラップオペレーションは、まだ利用可能ではない場合があるリージョンの他の機能および/またはサービスに依存する場合がある。サービスチームおよびリージョンの数が増えるほど、プロビジョニングおよびデプロイをオーケストレーションするために実行されるタスクが劇的に増加する。サービスをブートストラップするためのおよび/またはリージョンを構築するための手作業の労力に実質的に依存することは、非常に時間がかかり、リスクを招き、十分なスケールにならない場合がある。
【発明の概要】
【発明が解決しようとする課題】
【0004】
簡単な概要
本開示の実施形態は、自動化されたリージョン構築を実行することに関する(例えば、リージョン(例えば、1つまたは複数のデータセンタに関連した地理的位置)内のあらゆる適切な数のサービスのためのリソース(例えば、インフラストラクチャコンポーネント、アーティファクトなど)をブートストラップ(例えば、プロビジョニングおよび/またはデプロイ)すること)。ブートストラップオペレーションは、これらのオペレーション間の依存の自動的な検出に少なくとも部分的に基づいてオーケストレーションサービス(例えば、マルチフロックオーケストレータ)によってコーディネートおよびオーケストレーションされることができる。マルチフロックオーケストレータは、さらに、構成ファイルおよび/またはソフトウェアアーティファクトの様々なバージョンを維持してもよく、それによってリージョン構築が実行される特定のバージョンセットを知的にかつ自動的に識別することができる。
【0005】
少なくとも1つの実施形態は、コンピュータが実行する方法に関する。方法は、クラウドコンピューティング環境のマルチフロックオーケストレータが、1つまたは複数のデータセンタに対応するリージョン内でブートストラップされる複数のサービスに対応する複数の構成ファイルを取得することを含んでもよい。いくつかの実施形態において、複数のサービスのそれぞれは、インフラストラクチャコンポーネントおよび対応するソフトウェアアーティファクトを含むリソースのそれぞれのセットに関連付けられている。方法は、マルチフロックオーケストレータが、複数の構成ファイルに少なくとも部分的に基づいて複数のサービスの間の1つまたは複数の依存を識別することをさらに含んでもよい。方法は、マルチフロックオーケストレータが、識別された1つまたは複数の依存に少なくとも部分的に基づいて、複数のサービスをブートストラップするためのオペレーションが実行される順序を決定することをさらに含んでもよい。方法は、マルチフロックオーケストレータが、決定された順序に従って複数のサービスをブートストラップするための対応するオペレーションを実行するようにブートストラップコントローラにインクリメントに命令することをさらに含んでもよい。
【0006】
別の実施形態は、別のコンピュータが実行する方法に関する。方法は、クラウドコンピューティング環境のマルチフロックオーケストレータが、複数のサービスに関連した複数の構成ファイルの構成ファイルのそれぞれのセットを識別する複数のバージョンセットを維持することを含んでもよい。方法は、マルチフロックオーケストレータが、複数の構成ファイルから構成ファイルの第1のセットを識別する第1のバージョンセットを決定することをさらに含んでもよい。方法は、マルチフロックオーケストレータが、第1のバージョンセットによって識別された構成ファイルの第1のセットを検証するための検証過程を実行することをさらに含んでもよい。方法は、マルチフロックオーケストレータが、フロック構成ファイルの第2のセットを識別する第2のバージョンセットを生成することをさらに含んでもよい。いくつかの実施形態において、構成ファイルの第2のセットは、検証過程に合格した構成ファイルを識別することに少なくとも部分的に基づいて構成ファイルの第1のセットから識別されてもよい。方法は、マルチフロックオーケストレータが、第2のバージョンセットによって識別された構成ファイルの第2のセットを利用するリージョン構築を実行することをさらに含んでもよい。
【0007】
別の実施形態は、1つまたは複数のプロセッサと、1つまたは複数のプロセッサによって実行されると、コンピューティングデバイスに、本明細書に開示された方法を実行させる命令と、を含むコンピューティングデバイスに関する。
【0008】
さらに別の実施形態は、コンピューティングクラスタの1つまたは複数のプロセッサによって実行されると、コンピューティングクラスタに、本明細書に開示された方法を実行させるコンピュータ実行可能命令を記憶する非一時的コンピュータ可読媒体に関する。
【0009】
あらゆる特定の要素または行為の議論を容易に識別するために、参照番号における最も重要な1つまたは複数の数字は、その要素が最初に紹介される図面の番号を表す。
【図面の簡単な説明】
【0010】
【
図1】少なくとも1つの実施形態による、クラウドインフラストラクチャオーケストレーションサービス(CIOS)102が、リージョンにおいてブートストラップサービスをダイナミックに提供するために動作し得る環境のブロック図である。
【
図2】少なくとも1つの実施形態による、仮想ブートストラップ環境(ViBE)を構築するための環境および方法を示すためのブロック図である。
【
図3】少なくとも1つの実施形態による、ViBEを利用するターゲットリージョンにサービスをブートストラップするための環境および方法を示すためのブロック図である。
【
図4】少なくとも1つの実施形態による、どの構成ファイルバージョンおよび対応するアーティファクトが、ターゲットリージョンにサービスをブートストラップするために利用されるかを識別する多数のバージョンセットを維持するための例示的な方法を示すブロック図である。
【
図5】少なくとも1つの実施形態による、リージョンに多数のサービスをプロビジョニングおよびデプロイするためのオペレーションを実行するための例示的なフローを示すブロック図である。
【
図6】少なくとも1つの実施形態による、リージョン構築に関連付けられたサービスに関連する情報を表す例示的なインターフェースを示すブロック図である。
【
図7】少なくとも1つの実施形態による、リージョン構築に関連付けられたイベントに関連する情報を表す例示的なインターフェースを示すブロック図である。
【
図8】少なくとも1つの実施形態による、リージョン構築を実行するための(例えば、ブートストラップオペレーションをインクリメントに実行することによってリージョンを修正するための)例示的な方法を示す図である。
【
図9】少なくとも1つの実施形態による、リージョン構築を実行するためにバージョンセットを利用するための例示的な方法を示す図である。
【
図10】少なくとも1つの実施形態による、サービスシステムとしてのクラウドインフラストラクチャを実施するための1つのパターンを示すブロック図である。
【
図11】少なくとも1つの実施形態による、サービスシステムとしてのクラウドインフラストラクチャを実施するための別のパターンを示すブロック図である。
【
図12】少なくとも1つの実施形態による、サービスシステムとしてのクラウドインフラストラクチャを実施するための別のパターンを示すブロック図である。
【
図13】少なくとも1つの実施形態による、サービスシステムとしてのクラウドインフラストラクチャを実施するための別のパターンを示すブロック図である。
【
図14】少なくとも1つの実施形態による、例示的なコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【0011】
詳細な説明
以下の記述において、説明の目的で、ある実施形態の完全な理解を提供するために具体的な詳細が示される。しかしながら、これらの具体的な詳細なく様々な実施形態が実施され得ることが明らかになるであろう。図面および記述は、制限的であることは意図されていない。「例示的」という用語は、「例、実例または例示として働く」ことを意味するために本明細書において使用される。「例示的」なものとして本明細書に記述されたあらゆる実施形態または設計は、必ずしも他の実施形態または設計よりも好ましいまたは有利であると解釈されるべきではない。
【0012】
例示的な自動化されたデータセンタ構築(リージョン構築)インフラストラクチャ
クラウドサービスの採用は、近年、急速な増加を示している。今では、様々なタイプのクラウドサービスが、様々な異なるクラウドサービスプロバイダ(CSP)によって提供されている。クラウドサービスという用語は、一般的に、CSPによって提供されるシステムおよびインフラストラクチャ(クラウドインフラストラクチャ)を使用してオンデマンドで(例えば、サブスクリプションモデルを介して)ユーザまたはカスタマーにCSPによって利用可能にされるサービスまたは機能を指すために用いられる。典型的には、カスタマーにクラウドサービスを提供するために使用される、CSPのインフラストラクチャを構成するサーバおよびシステムは、カスタマーの自己の自社運用のサーバおよびシステムとは別のものである。したがって、カスタマーは、サービスのための別のハードウェアおよびソフトウェアリソースを購入する必要なく、CSPによって提供されるクラウドサービスを利用することができる。クラウドサービスは、カスタマーが、サービスまたは機能を提供するために使用されるインフラストラクチャを調達することに投資する必要なく、アプリケーションおよびコンピューティングリソースへの容易で、スケーラブルかつオンデマンドのアクセスを、サブスクライブするカスタマーに提供するように設計されている。サービスとしてのソフトウェア(SaaS)、サービスとしてのプラットフォーム(PaaS)、サービスとしてのインフラストラクチャ(IaaS)、およびその他のものなどの、クラウドサービスの様々な異なるタイプまたはモデルが提供され得る。カスタマーは、CSPによって提供される1つまたは複数のクラウドサービスをサブスクライブすることができる。カスタマーは、個人、組織、企業等のあらゆるエンティティであることができる。
【0013】
上記で示したように、CSPは、サブスクライブするカスタマーにクラウドサービスを提供するために使用されるインフラストラクチャおよびリソースを提供する責任を負う。CSPによって提供されるリソースは、ハードウェアリソースおよびソフトウェアリソースの両方を含むことができる。これらのリソースは、例えば、計算リソース(例えば、仮想マシン、コンテナ、アプリケーション、プロセッサ)、メモリリソース(例えば、データベース、データストア)、ネットワークリソース(例えば、ルータ、ホストマシン、ロードバランサ)、アイデンティティ、およびその他のリソースを含むことができる。ある実装形態では、クラウドサービスCSPのセットを提供するためにCSPによって提供されるリソースは、データセンタに組織化されている。データセンタは、クラウドサービスの特定のセットを提供するように構成されてもよい。CSPは、クラウドサービスのその特定のセットを提供するために使用されるインフラストラクチャおよびリソースをデータセンタに備え付ける責任を負う。CSPは、1つまたは複数のデータセンタを構築してもよい。
【0014】
CSPによって提供されるデータセンタは、異なるリージョンにおいてホストされてもよい。リージョンは、局所的な地理的エリアであり、リージョン名によって識別されてもよい。リージョンは、一般的に、互いに独立しており、国またはさらには大陸を横断するなど、大きな距離によって分離されることができる。リージョンは、レルムにグループ化される。CSPのためのリージョンの例は、US西部、US東部、オーストラリア東部、オーストラリア南東部などを含んでもよい。
【0015】
リージョンは、1つまたは複数のデータセンタを含むことができ、データセンタは、リージョンに対応するある地理的エリア内に配置されている。一例として、リージョンにおけるデータセンタは、そのリージョン内の都市に配置されてもよい。例えば、特定のCSPのために、US西部リージョンにおけるデータセンタは、カリフォルニア州サンホセに配置されてもよく、US東部リージョンにおけるデータセンタは、バージニア州アッシュバーンに配置されてもよく、オーストラリア東部リージョンにおけるデータセンタは、オーストラリアのシドニーに配置されてもよく、オーストラリア南東部リージョンにおけるデータセンタは、オーストラリアのメルボルンに配置されてもよい、などである。
【0016】
リージョン内のデータセンタは、1つまたは複数のアベイラビリティドメインに組織化されてもよく、アベイラビリティドメインは、高いアベイラビリティおよび災害復旧目的のために使用される。アベイラビリティドメインは、リージョン内の1つまたは複数のデータセンタを含むことができる。リージョン内のアベイラビリティドメインは、互いに隔離されており、フォールトトレラントであり、多数のアベイラビリティドメインにおけるデータセンタが同時に故障する可能性が非常に低くなるように設計されている。例えば、リージョン内のアベイラビリティドメインは、リージョン内の1つのアベイラビリティドメインにおける故障が、同じリージョン内の他のアベイラビリティドメインにおけるデータセンタのアベイラビリティに影響する可能性が低くなるように構築されてもよい。
【0017】
カスタマーまたはサブスクライバが、CSPによって提供される1つまたは複数のサービスをサブスクライブするまたは1つまたは複数のサービスと契約すると、CSPは、カスタマーのためのテナンシを生成する。テナンシは、カスタマーのために生成されるアカウントのようなものである。ある実装形態において、カスタマーのためのテナンシは、1つのレルムに存在し、そのレルムに属する全てのリージョンにアクセスすることができる。したがって、カスタマーのユーザは、このテナンシの下でカスタマーによってサブスクライブされるサービスにアクセスすることができる。
【0018】
上記に示したように、CSPは、カスタマーにクラウドサービスを提供するためにデータセンタを構築またはデプロイする。CSPのカスタマーベースが成長するにつれて、CSPは、一般的に、カスタマーの増大する需要にサービスを提供しかつカスタマーにより良いサービスを提供するために、新たなリージョンに新たなデータセンタを構築するかまたは既存のデータセンタのキャパシティを増大する。好ましくは、データセンタは、そのデータセンタによってサービスを受けるカスタマーのロケーションの地理的近傍に構築される。データセンタと、データセンタによってサービスを受けるカスタマーとの間の地理的近接は、リソースのより効率的な利用およびより迅速かつより信頼できるサービスがカスタマーに提供されることにつながる。したがって、CSPは、一般的に、データセンタによってサービスを受けるカスタマーに地理的に近接する地理的エリアにおける新たなリージョンに新たなデータセンタを構築する。例えば、ドイツにおける成長するカスタマーベースのために、CSPは、ドイツにおける新たなリージョンに1つまたは複数のデータセンタを構築してもよい。
【0019】
リージョンにおいてデータセンタ(または多数のデータセンタ)を構築することは、時には、リージョンを構築するとも呼ばれる。「リージョン構築」という用語は、リージョンにおいて1つまたは複数のデータセンタを構築することを指すために使用される。リージョンにおいてデータセンタを構築することは、そのデータセンタが提供するように構成されているサービスのセットを提供するために必要とされるまたは使用される新たなリソースのセットをプロビジョニングまたは生成することを必要とする。リージョン構築プロセスの最終結果は、リージョンにおけるデータセンタの生成であり、データセンタは、そのデータセンタのために意図されたサービスのセットを提供することができ、サービスのセットを提供するために使用されるリソースのセットを含む。
【0020】
リージョンにおいて新たなデータセンタを構築することは、様々なブートストラップアクティビティ間の広範囲の調整を必要とする非常に複雑なアクティビティである。ハイレベルにおいて、これは、データセンタによって提供されるサービスのセットを識別する、サービスのセットを提供するために必要とされる様々なリソースを識別する、識別されたリソースを生成、プロビジョニング、およびデプロイする、意図した形式で使用することができるようにリソースを適切にワイヤリングする、などの様々なタスクの実行および調整を必要とする。これらのタスクのそれぞれは、調整される必要があるサブタスクをさらに有し、複雑性をさらに高める。この複雑性により、現在、リージョンにおけるデータセンタの構築は、注意深い手動調整を必要とするいくつかの手動で開始されるまたは手動でコントロールされるタスクを必要とする。その結果、新たなリージョンを構築する(すなわち、リージョンに1つまたは複数のデータセンタを構築する)タスクは、非常に時間がかかるものである。データセンタを構築するために、時間、例えば数カ月かかる可能性がある。加えて、プロセスは、非常にエラーを起こしやすく、時には、データセンタの所望の構成が達成される前に何回かの反復を必要とし、これは、データセンタを構築するためにかかる時間をさらに長くする。これらの制限および問題は、増大するカスタマーニーズに応答してタイムリーな形式でコンピューティングリソースを成長させるCSPのケイパビリティを著しく制限する。
【0021】
技術的効果
本開示は、構築時間を短縮し、コンピューティングリソースの無駄を削減し、リージョンに1つまたは複数のデータセンタを構築することに関連するリスクを低減するための技術を記述する。過去にリージョンにおいてデータセンタを構築するために数週間および数カ月が必要とされた代わりに、本明細書に記載された技術は、従来のアプローチよりもエラーのリスクを減じながら、比較的大幅に短い時間でリージョンに新たなデータセンタを構築するために使用することができる。
【0022】
データセンタに対する所与の変更を実施するためのリソース(例えば、インフラストラクチャコンポーネントおよびデプロイされるソフトウェア)を識別する所定の構成ファイルに基づいてサービスを新たなデータセンタにブートストラップ(例えば、プロビジョニングおよびデプロイ)するように構成されたクラウドインフラストラクチャオーケストレーションサービス(CIOS)が本明細書に開示される。CIOSは、リソース、実行ターゲット、フェーズ、およびフロックの間の依存を識別するために構成ファイル(例えば、フロック設定)をパースおよび分析することができる。CIOSは、分析から特定のデータ構造を生成してもよく、これらのデータ構造を用いて、オペレーションをドライブし、サービスがリージョンにブートストラップされる順序を管理してもよい。CIOSは、これらのデータ構造を利用して、いつCIOSがサービスをブートストラップすることができるか、いつブートストラップがブロックされるかおよび/または前にブロックされたサービスに関連したブートストラップオペレーションをいつ再開することができるかを識別してもよい。有利には、CIOSは、データ構造内の循環依存を識別し、タスク実行の前にこれらの循環依存を排除/解消するためにオペレーションを実行することができる。これらの技術を用いて、CIOSは、それらのタスクが依存するリソースのアベイラビリティの前にタスクを実行するリスクを実質的に提言する。
【0023】
本明細書に開示された技術を利用して、CIOSは、それらのタスクが依存する機能がリージョンにおいて利用可能になるまでタスクが開始されないことを保証しながらデータセンタに対する変更を実行するために並列処理を最適化し得る。これにより、CIOSは、リージョン構築がより効率的に実行されることを可能にし、これは、データセンタを構築するために必要とされる時間および従来のアプローチに見られる無駄な計算リソース使用を大幅に減じる。
【0024】
マルチフロックオーケストレータ(MFO)が本明細書に開示される。MFOは、テストおよび/またはリージョン構築(例えば、リージョンのデータセンタへのプロビジョニングおよびデプロイ)のために利用される構成ファイルの異なるセットを識別する多数のバージョンセットを利用するように構成されてもよい。特定のバージョンセットは、リージョンのデータセンタを構築するために用いられることができる。そのバージョンセットは、そこからリージョンにおけるブートストラップタスク(例えば、プロビジョニングおよびデプロイタスク)が決定され得る構成ファイルの特定のセットを識別することができる。MFOは、構成ファイルの静的解析を行うことによって、サービス間の依存を識別し、リージョン構築の前に循環依存を識別および解消してもよい。MFOは、それらのタスクが依存するリソースが利用可能になるまで、依存するブートストラップタスクが開始されないことを保証しながら、ブートストラップタスクを実行するようにプロビジョニングおよびデプロイメントマネジャ(例えば、
図1~
図3において検討されるCIOSセントラル)にインクリメントに命令してもよい。リージョンの様々なケイパビリティが利用可能になるので、MFOは、実行される後続のブートストラップタスクを識別および実施してもよく、構築プロセスを完了までインクリメントに駆動する。開示された技術は、それらのファイルがリージョン構築のために利用される前に単体および/または統合テストが構成ファイルとともに実行されることを可能にし、これは、リージョン構築が成功する可能性を高める。開示された技術を用いて、MFOは、従来のシステムにおいて必要とされるエラーのリスクおよび時間を減じながら、自動化されたリージョン構築が実行されることを可能にする。
【0025】
定義
「リージョン」は、地理的位置に対応する論理的抽象である。リージョンは、あらゆる適切な数の1つまたは複数の実行ターゲットを含むことができる。いくつかの実施形態において、実行ターゲットは、データセンタに対応することができる。
【0026】
「実行ターゲット」は、リリースを実行するための変化の最小単位を意味する。「リリース」は、サービスに対する特定の変更をオーケストレーションする意図の表現を意味する(例えば、バージョン8をデプロイする、「内部DNSレコードを加える」など)。ほとんどのサービスにとって、実行ターゲットは、サービスの「インスタンス」を表す。1つのサービスは、1つまたは複数の実行ターゲットのそれぞれにブートストラップされることができる。実行ターゲットは、デバイスのセット(例えば、データセンタ)と関連付けられてもよい。
【0027】
「ブートストラップ」は、1つのサービスに対応するあらゆる適切な数のリソース(例えば、インフラストラクチャコンポーネント、アーティファクトなど)のプロビジョニングおよびデプロイに関連付けられた集合的タスクを意味することが意図されている。
【0028】
「サービス」は、リソースのセットによって提供される機能を意味する。サービスのためのリソースのセットは、サービスの機能を提供するように構成されることができるクラウドプロバイダによってホストされるインフラストラクチャ、プラットフォーム、またはソフトウェア(例えば、アプリケーション)のあらゆる適切な組合せを含む。サービスは、インターネットを通じてユーザに利用可能にすることができる。
【0029】
「アーティファクト」は、インフラストラクチャコンポーネントまたはKubernetesエンジンクラスタにデプロイされるコードを意味し、これは、ソフトウェア(例えば、アプリケーション)、インフラストラクチャコンポーネントのための構成情報(例えば、構成ファイル)などを含んでもよい。
【0030】
「フロック設定」は、1つのサービスに関連付けられた全てのリソース(例えば、インフラストラクチャコンポーネントおよびアーティファクト)のセットを記述する構成ファイル(または構成ファイルのセット)を意味する。フロック設定は、サービスのリソースの所望の状態に対応する1つまたは複数の態様を指定する宣言文を含んでもよい。
【0031】
「サービス状態」は、サービスと関連付けられた全てのリソース(例えば、インフラストラクチャリソース、アーティファクトなど)の現時点のスナップショットを意味する。サービス状態は、サービスリソースに関連付けられたプロビジョニングおよび/またはデプロイメントタスクに対応する状態を示す。
【0032】
IaaSプロビジョニング(または「プロビジョニング」)は、使用のためにコンピュータまたは仮想ホストを獲得すること、さらには必要なライブラリまたはサービスをそれらにインストールすることを意味する。「デバイスをプロビジョニングする」という表現は、それらの特定の使用のためのエンドユーザによって利用されることができる状態にデバイスを発展させることを意味する。プロビジョニングプロセスを受けたデバイスは、「プロビジョニングされたデバイス」と呼ばれてもよい。プロビジョニングされたデバイスを準備すること(ライブラリおよびデーモンをインストールすること)は、プロビジョニングの一部であり得る。この準備は、準備されたデバイスに新たなアプリケーションまたは新たなバージョンのアプリケーションをデプロイすることとは異なる。ほとんどのケースでは、デプロイメントはプロビジョニングを含まず、プロビジョニングは最初に実行される必要がある場合がある。準備されると、装置は、「インフラストラクチャコンポーネント」と呼ばれてもよい。
【0033】
IaaSデプロイメント(または「デプロイメント」)は、プロビジョニングされたインフラストラクチャコンポーネントに新たなアプリケーションまたは新たなバージョンの炙りケーションを提供するおよび/またはインストールするプロセスを意味する。インフラストラクチャコンポーネントがプロビジョニング(例えば、獲得、アサイン、準備など)されると、追加のソフトウェアがデプロイ(例えば、インフラストラクチャコンポーネントに提供およびインストール)されてもよい。インフラストラクチャコンポーネントは、プロビジョニングおよびデプロイメントが完了した後、「リソース」と呼ぶことができる。リソースの例は、仮想マシン、データベース、オブジェクトストレージ、ブロック記憶域、ロードバランサなどを含み得るが、それらに限定されない。
【0034】
「ケイパビリティ」は、サービスと関連付けられた機能のユニットを識別する。ユニットは、サービスによって提供される機能の一部または全部であることができる。例えば、リソースが許可/認証処理(例えば、リソースによって提供される機能のサブセット)のために利用可能であることを示すケイパビリティをパブリッシュすることができる。別の例として、サービスの完全な機能が利用可能であることを示すケイパビリティをパブリッシュすることができる。ケイパビリティは、リソースまたはサービスが依存する機能および/または使用のために利用可能なリソースまたはサービスの機能を識別するために使用することができる。
【0035】
「仮想ブートストラップ環境」(ViBE)は、既存のリージョン(例えば、「ホストリージョン」)のオーバーレイにおいてプロビジョニングされる仮想クラウドネットワークを意味する。プロビジョニングされると、ViBEは、通信チャネル(例えば、IPsecトンネルVPN)を使用して新たなリージョンに接続される。デプロイメントオーケストレータ、パブリックキーインフラストラクチャ(PKI)サービスなどの、ある必須のコアサービス(または「シード」サービス)をViBEにおいてプロビジョニングすることができる。これらのサービスは、ハードウェアをオンラインにもたらし、新たなリージョンへのトラストのチェーンを確立し、新たなリージョンにおいて残りのサービスをデプロイするために必要とされるケイパビリティを提供することができる。仮想ブートストラップ環境を利用することは、ホストリージョンのリソースを利用することによってブートストラップリソースの間の循環依存を防止することができる。サービスは、物理的リージョン(例えば、ターゲットリージョン)が利用可能になる前にViBEにおいてステージングおよびテストされることができる。
【0036】
「クラウドインフラストラクチャオーケストレーションサービス」(CIOS)は、リージョン構築の一部としてあらゆる適切な数のサービスのためのプロビジョニングおよびデプロイメントオペレーションを管理するように構成されたシステムを意味し得る。
【0037】
マルチフロックオーケストレータ(MFO)は、ターゲットリージョン(例えば、新たなリージョン)にサービスをプロビジョニングおよびデプロイするためにCIOSのコンポーネント間でイベントを調整するコンピューティングコンポーネント(例えば、サービス)であり得る。MFOは、リージョン構築の各々のサービスのための関連するイベントを追跡し、これらのイベントに応答して動作を行う。
【0038】
「ホストリージョン」は、仮想ブートストラップ環境(ViBE)をホストするリージョンを意味する。ホストリージョンは、ViBEをブートストラップするために使用され得る。
【0039】
「ターゲットリージョン」は、構築中のリージョンを意味する。
「ケイパビリティをパブリッシュする」とは、特定のケイパビリティが利用可能である(または利用不可能である)ことの指示を提供する「パブリッシャ-サブスクライバ」コンピューティング設計またはその他のものにおいて使用される場合の「パブリッシング」を意味する。ケイパビリティは、リソース/サービスの機能が利用可能であるという指示を提供するために「パブリッシュ」される(例えば、ケイパビリティサービスによって収集される、ケイパビリティサービスへ提供される、プッシュされる、プルされるなど)。いくつかの実施形態において、ケイパビリティは、イベント、通知、データ伝送、ファンクションコール、API呼び出しなどを介してパブリッシュ/送信され得る。特定のケイパビリティのアベイラビリティを示すイベント(またはその他の通知/データ伝送など)は、ケイパビリティサービスへブロードキャスト/アドレス(例えば、パブリッシュ)されることができる。
【0040】
「ケイパビリティサービス」は、異なるフロック間の依存をモデル化するように構成されたフロックであり得る。ケイパビリティサービスは、クラウドインフラストラクチャオーケストレーションサービス内に提供されてもよく、どのケイパビリティ、サービス、フィーチャがリージョンにおいて利用可能になっているかを定義し得る。
【0041】
「リアルタイムリージョナルデータディストリビュータ」(RRDD)は、リージョンデータを管理するように構成されたサービスまたはシステムであり得る。このリージョンデータは、新たなリージョンのための実行ターゲットをダイナミックに生成するためにフロック設定へ注入されることができる。
【0042】
いくつかの例において、クラウドインフラストラクチャオーケストレーションサービス(CIOS)を実施するための技術が本明細書に記載される。このような技術は、上記で簡単に記述されているように、クラウド環境(例えば、リージョン)内にインフラストラクチャコンポーネントをブートストラップすること(例えば、インフラストラクチャコンポーネントにソフトウェアをプロビジョニングおよびデプロイすること)を管理するように構成されることができる。いくつかの例において、CIOSは、与えられたサービスのためのブートストラップタスク(プロビジョニングおよびデプロイメント)を管理するように構成され得るコンピューティングコンポーネント(例えば、CIOSセントラルおよびCIOSリージョナルであり、それらは両方とも後でさらに詳細に説明される)およびリージョン構築(例えば、多数のサービスに対応するブートストラップオペレーション)を開始/管理するように構成されたマルチフロックオーケストレータ(これも後でさらに詳細に説明される)を含むことができる。
【0043】
CIOSは、サービスチームからの最小限の手動ランタイム努力で(例えば、いくつかの例において、ハードウェアの初期承認および/または物理的輸送を超えて)リージョン構築およびワールドワイドのインフラストラクチャプロビジョニングおよびコードデプロイメントを可能にする。CIOSのハイレベルな責任は、リージョン構築を調整すること、ユーザに(例えば、リージョンの、リージョンを横断する、ワールドワイドの、など)CIOSによって管理されるリソースの現在の状態のビューを提供すること、およびリージョン内にリソースをブートストラップするためのブートストラップオペレーションを管理することを含むが、これらに限定されない。
【0044】
CIOSは、ビューリコンシリエーションを提供してもよく、そこでは、リソースの所望の状態(例えば、所望の構成)のビューが、リソースの現在の/実際の状態(例えば、現在の構成)によってリコンサイルされ得る。いくつかの例において、ビューリコンシリエーションは、どのリソースが実際に動作しているかおよびそれらの現在の構成および/または状態を識別するために状態データを取得することを含み得る。リコンシリエーションは、サービスレベルにおけるなど、様々なグラニュラリティにおいて実行されることができる。
【0045】
CIOSは、プラン生成を実行することができ、そこでは、リソースの所望の状態と現在の状態との差が識別される。プラン生成の部分は、リソースを現在の状態から所望の状態へもたらすために実行される必要があるオペレーションを識別することを含むことができる。いくつかの例において、CIOSは、生成されたプラントを承認のためにユーザに提示することができる。これらの例において、CIOSは、ユーザからのユーザ入力に基づいてプランを承認または拒絶されたものとしてマークすることができる。したがって、ユーザは、プランについて判断することにより少ない時間を費やすことができ、プランは、機械生成されるため、より正確である。プランは、人間の消費のためにはほとんど詳細すぎる。しかしながら、CIOSは、このデータを、非常に高度なユーザインターフェース(UI)を介して提供することができる。
【0046】
いくつかの例において、CIOSは、承認されたプランを実行することによってチェンジマネジメントの実行を処理することができる。実行プランが生成および承認されると、エンジニアは、CIOSがロールバックを開始するまでもはやチェンジマネジメントに関与する必要がない場合がある。CIOSは、(例えば、CIOSが、実行しながらサービスヘルス低下を検出したとき)サービスを前の(例えば、リリース前の)状態に戻すプラントを生成することによって前のサービスバージョンへのロールバックを処理することができる。
【0047】
CIOSは、アラームをモニタリングしかつ統合テストを実行することによってサービスヘルスを計測することができる。CIOSは、サービス低下のイベント時にチームが迅速にロールバック挙動を定義することを助けることができ、後でロールバック挙動を実行することができる。CIOSは、プランを生成および表示することができ、承認を追跡することができる。CIOSは、リージョン構築を横断してこれらのタスクを調整する1つのシステムにおいてプロビジョニングおよびデプロイメントの機能を組み合わせることができる。CIOSは、フロック(例えば、あらゆる適切な数のサービスに対応するフロック設定などのサービスリソース)、アーティファクト、リソース、および依存の発見もサポートする。CIOSは、1つまたは複数の構成ファイルの静的解析(例えば、コンテンツをパースおよび処理することを含む)によって全てのレベル(例えば、リソースレベル、実行ターゲットレベル、フェーズレベル、サービスレベルなど)において実行タスクの間の依存を発見することができる。これらの依存を用いて、CIOSは、これらの依存から様々なデータ構造を生成することができ、これらのデータ構造は、タスク実行(例えば、リージョンを横断するインフラストラクチャリソースのプロビジョニングおよびアーティファクトのデプロイメントに関するタスク)を推進するために使用されることができる。
【0048】
図1は、少なくとも1つの実施形態による、クラウドインフラストラクチャオーケストレーションサービス(CIOS)が、リージョンにおいてブートストラップサービスをダイナミックに提供するために動作し得る環境100のブロック図である。CIOS102は、以下のコンポーネント、すなわちリアルタイムリージョナルデータディストリビュータ(RRDD)104、マルチフロックオーケストレータ(MFO)106、CIOSセントラル108、CIOSリージョナル110、およびケイパビリティサービス112を含むことができるが、これらに限定されない。CIOSセントラル108およびCIOSリージョナル110の特定の機能は、その内容全体が全ての目的のためにその全体が組み込まれる、「Techniques for Deploying Infrastructure Resources with a Declarative Provisioning Tool」という名称の米国特許出願第17/016,754号により詳細に提供されている。いくつかの実施形態において、CIOS102のコンポーネントのあらゆる適切な組合せがサービスとして提供されてもよい。いくつかの実施形態において、CIOS102のある部分は、リージョン(例えば、ホストリージョン103によって表されるデータセンタ)にデプロイされてもよい。いくつかの実施形態において、CIOS102は、米国特許出願第17/016,754号にさらに詳細におよび以下で
図2および
図3に関して検討されるあらゆる適切な数のクラウドサービス(
図1には示されていない)を含んでもよい。
【0049】
リアルタイムリージョナルデータディストリビュータ(RRDD)104は、レルム、リージョン、実行ターゲット、およびアベイラビリティドメインを識別するリージョンデータを維持および提供するように構成されてもよい。いくつかのケースにおいて、リージョンデータは、あらゆる適切な形式(例えば、JSONフォーマット、データオブジェクト/コンテナ、XMLなど)であってもよい。RRDD104によって維持されるリージョンデータは、対応する識別子によって個々に参照可能であることができるあらゆる適切な数のデータのサブセットを含んでもよい。例えば、「all_regions」という識別子は、全ての定義されたリージョンのためのメタデータを含むデータ構造(例えば、リスト、構造、オブジェクトなど)に関連付けられることができる。別の例として、「realm」などの識別子は、多数のレルムおよび各レルムに対応するリージョンのセットのためのメタデータを識別するデータ構造に関連付けられることができる。一般的に、リージョンデータは、識別子、DNS拡張子、状態(例えば、リージョンの状態)などの、1つまたは複数のレルム、リージョン、アベイラビリティドメイン(AD)、実行ターゲット(ET)などのあらゆる適切な属性を維持してもよい。RRDD104は、リージョン状態をリージョンデータの一部として管理するように構成されてもよい。リージョン状態は、リージョン内のブートストラップの状態を示すあらゆる適切な情報を含んでもよい。例えば、いくつかの例示的なリージョン状態は、「初期」、「構築」、「生産」、「休止」または「廃止予定」を含むことができる。「初期」状態は、まだブートストラップされていないリージョンを示してもよい。「構築」状態は、リージョン内の1つまたは複数のフロックのブートストラップが開始したことを示してもよい。「生産」状態は、ブートストラップが完了し、リージョンが検証のために準備されていることを示してもよい。「休止」状態は、CIOSセントラル108またはCIOSリージョナル110が、恐らく運用問題により、リージョナルスタックとの内部相互作用を休止していることを示してもよい。「廃止予定」状態は、リージョンが廃止予定であり、利用できなくなる可能性が高いおよび/または再びコンタクトされないことを示してもよい。
【0050】
CIOSセントラル108は、それによってユーザ(例えば、ユーザ109)がCIOS102と相互作用し得るあらゆる適切な数のユーザインターフェースを提供するように構成されている。例えば、ユーザは、CIOSセントラル108によって提供されるユーザインターフェースを介してリージョンデータに変更を加えることができる。CIOSセントラル108は、加えて、ユーザが、フロック設定および/またはアーティファクトに加えられた変更を見る、プランを生成しかつ見る、プランを承認/拒絶する、プラン実行(例えば、CIOS102によって管理されるあらゆる適切な数のリソースのインフラストラクチャプロビジョニング、デプロイメント、リージョン構築、および/または所望の状態に対応する)におけるステータスを見ることを可能にする様々なインターフェースを提供してもよい。CIOSセントラル108は、あらゆる適切な数のCIOSリージョナル110インスタンスを管理するように構成された制御プレーンを実施してもよい。CIOSセントラル108は、リージョンデータを表すための1つまたは複数のユーザインターフェースを提供することができ、ユーザ109がリージョンデータを見るおよび/または変更することを可能にする。CIOSセントラル108は、あらゆる適切な数のインターフェースを介してRRDD104の機能を呼び出すように構成されることができる。一般的に、CIOSセントラル108は、直接的または間接的に(例えば、RRDD104を介して)、リージョンデータを管理するように構成されてもよい。CIOSセントラル108は、フロック設定内の変数としてリージョンデータを注入するためにフロック設定をコンパイルするように構成されてもよい。
【0051】
CIOSリージョナル110の各インスタンスは、リージョンの1つのサービスに関連付けられたブートストラップタスクを実行するように構成されたモジュールに対応してもよい。CIOSリージョナル110は、CIOSセントラル108から所望の状態データを受信することができる。いくつかの実施形態において、所望の状態データは、サービスに関連付けられたリソースの所望の状態を(例えば、宣言文を介して)宣言するフロック設定を含んでもよい。CIOSセントラル108は、サービスに関連付けられたリソースの現在の状態のあらゆる適切な態様を示す現在の状態データを維持することができる。いくつかの実施形態において、CIOSリージョナル110は、所望の状態データと現在の状態データとの比較によって、1つまたは複数のリソースに対して変更が必要であることを識別することができる。例えば、CIOSリージョナル110は、1つまたは複数のインフラストラクチャコンポーネントがプロビジョニングされる必要がある、1つまたは複数のアーティファクトがデプロイされる、またはそれらのリソースの状態を所望の状態と一致させるためにサービスのリソースにあらゆる適切な変更が必要とされることを決定することができる。CIOSリージョナル110がブートストラップオペレーションを実行するので、CIOSリージョナル110は、それらが利用可能になるときのリソースの様々なケイパビリティを示すデータを発行してもよい。「ケイパビリティ」は、サービスと関連付けられた機能のユニットを識別する。ユニットは、サービスによって提供される機能の一部または全部であることができる。例えば、リソースが許可/認証プロセシング(例えば、リソースによって提供される機能のサブセット)のために利用可能であることを示すケイパビリティが発行されることができる。別の例として、サービスの完全な機能が利用可能であることを示すケイパビリティが発行されることができる。ケイパビリティは、リソースまたはサービスが依存する機能および/または使用のために利用可能なリソースまたはサービスの機能を識別するために使用されることができる。
【0052】
ケイパビリティサービス112は、1)様々なサービスのどのケイパビリティが現在利用可能であるか、2)あらゆるリソース/サービスが特定のケイパビリティにおいて待機しているかどうか、3)どの特定のリソースおよび/またはサービスが、与えられたケイパビリティにおいて待機しているか、または上記のあらゆる適切な組合せを示すケイパビリティデータを維持するように構成されている。ケイパビリティサービス112は、それによってケイパビリティサービスがリクエストされ得るインターフェースを提供してもよい。ケイパビリティサービス112は、ケイパビリティデータをMFO106および/またはCIOSリージョナル110(例えば、CIOSリージョナル110の各インスタンス)に送信することを可能にする1つまたは複数のインターフェース(例えば、アプリケーションプログラミングインターフェース)を提供してもよい。いくつかの実施形態において、MFO106および/またはCIOSリージョナル110のあらゆる適切なコンポーネントまたはモジュールは、ケイパビリティサービス112からケイパビリティデータをリクエストするように構成されてもよい。
【0053】
いくつかの実施形態において、マルチフロックオーケストレータ(MFO)106は、リージョン構築努力を推進するように構成されてもよい。いくつかの実施形態において、MFO106は、リージョン内の与えられたサービスをブートストラップするために(またはターゲットリージョンに変更のユニットを行うために)どのフロック/フロック設定バージョンおよび/またはアーティファクトバージョンが利用されるかを記述する情報を管理することができる。いくつかの実施形態において、MFO106は、リアルタイムリージョナルデータディストリビュータ104によって管理されるリージョンデータへの変更をモニタする(またはさもなければ通知される)ように構成されてもよい。いくつかの実施形態において、リージョンデータが変更されたことの指示を受信すると、リージョン構築がMFO106によってトリガされてもよい。いくつかの実施形態において、MFO106は、リージョン構築のために用いられる様々なフロック設定およびアーティファクトを収集してもよい。フロック設定のいくつかまたは全ては、リージョンに依存しないように構成されてもよい。すなわち、フロック設定は、どのリージョンにフロックがブートストラップされるかを明示的に識別しなくてもよい。いくつかの実施形態において、MFO106は、データ注入プロセスをトリガしてもよく、このデータ注入プロセスを通じて、収集されたフロック設定が(例えば、CIOSセントラル108によって)再コンパイルされる。再コンパイルの間、オペレーションは、リアルタイムリージョナルデータディストリビュータ104によって維持されるリージョンデータを設定ファイルへ注入させるために(例えば、CIOSセントラル108によって)実行されてもよい。フロック設定は、リージョンデータのハードコードされた識別を要求することなく変数/パラメータを通じてリージョンデータを参照することができる。フロック設定は、リージョンデータがハードコードされる、したがって、変更することをより困難にするのではなく、このデータ注入を用いてランタイムにおいてダイナミックに修正されることができる。
【0054】
マルチフロックオーケストレータ106は、静的フロック分析を実行することができ、ここで、リソース、実行ターゲット、フェーズ、およびフロックの間の依存を識別し、特に、除去される必要がある循環依存を識別するために、フロック設定がパースされる。いくつかの実施形態において、MFO106は、識別された依存に基づいてあらゆる適切な数のデータ構造を生成することができる。これらのデータ構造(例えば、有向非巡回グラフ、連結リストなど)は、リージョン構築を実行するためのオペレーションを推進するためにクラウドインフラストラクチャオーケストレーションサービス102によって利用されてもよい。例えば、これらのデータ構造は、サービスがリージョン内でブートストラップされる順序を集合的に定義してもよい。このようなデータ構造の一例は、
図3の構築依存グラフ338に関して以下でさらに検討される。循環依存(例えば、サービスAがサービスBを要求し、その逆でもある)が存在し、静的フロック分析および/またはグラフを通じて識別されると、MFOは、これらの循環依存を修正するために、対応するフロック設定に対して変更が要求されることを、あらゆる適切なサービスチームに通知するように構成されてもよい。MFO106は、サービスがリージョンにブートストラップされる順序を管理するために1つまたは複数のデータ構造を横断するように構成されることができる。MFO106は、あらゆる与えられた時間に、与えられたリージョン内で利用可能なケイパビリティを(例えば、ケイパビリティサービス112から取得されたデータを用いて)識別することができる。MFO106は、いつサービスをブートストラップすることができるか、いつブートストラップがブロックされるか、および/またはいつ前にブロックされたサービスに関連付けられたブートストラップオペレーションが再開することができるかを識別するために、このデータを用いることができる。この横断に基づいて、MFO106は、あらゆる適切な数のフロック設定に対応するブートストラップオペレーションを実行するために命令がMFO106によってCIOSセントラル108へ送信される様々なリリースを実行することができる。いくつかの例において、MFO106は、グラフ内に見られる循環依存により1つまたは複数のフロック設定が多数のリリースを要求し得ることを識別するように構成されてもよい。その結果、MFO106は、グラフにおいて識別された循環依存を破壊するために、与えられたフロック設定のためのCIOSセントラル108へ多数の命令セットを送信してもよい。
【0055】
いくつかの実施形態において、ユーザは、新たなリージョン(例えば、ターゲットリージョン114)が構築されることをリクエストすることができる。これは、様々なサービスに対応するリソースをブートストラップすることを必要とする可能性がある。いくつかの実施形態において、ターゲットリージョン114は、リージョン構築リクエストが開始される時間に通信的に利用可能(および/またはセキュア)でなくてもよい。ターゲットリージョン114が、ブートストラップオペレーションを実行するために利用可能でありかつ構成されるような時間まで、ブートストラップを遅らせるのではなく、CIOS102は、仮想ブートストラップ環境116を用いてリージョン構築を開始してもよい。仮想ブートストラップ環境(ViBE)116は、ホストリージョン103(サービスのコアセットとともに前に構成されておりかつ通信的に利用可能かつセキュアである、既存のリージョン)によってホストされるオーバーレイネットワークであってもよい。MFO106は、ViBE116へリソースをブートストラップするために(一般的に「ViBEを構築する」と呼ばれる)ホストリージョン103のリソースを活用することができる。例えば、MFO106は、ホストリージョン(例えば、ホストリージョン103)内のCIOSリージョナル110のインスタンスにViBE116内のCIOSリージョナルの別のインスタンスをブートストラップさせる命令を、CIOSセントラル108を通じて提供することができる。ViBE内のCIOSリージョナルが処理のために利用可能になると、ターゲットリージョン114のためのサービスのブートストラップは、ViBE116内で継続することができる。ターゲットリージョン114が、ブートストラップオペレーションを実行するために利用可能であるとき、ViBE116内の前にブートストラップされたサービスは、ターゲットリージョン114に移動させられてもよい。これらの技術を利用して、CIOS102は、あらゆる手動入力および/または構成が提供される必要性を劇的に減じることによって、リージョンが構築される速度を著しく高めることができる。
【0056】
図2は、少なくとも1つの実施形態による、仮想ブートストラップ環境(ViBE)202(
図1のViBE116の一例)を構築するための環境200および方法を示すためのブロック図である。ViBE202は、既存のリージョン(例えば、ホストリージョン204、
図1のおよび実施形態におけるホストリージョン103の一例は、ホストリージョンサービスエンクレーブである)のオーバーレイにおいてプロビジョニングされる仮想クラウドネットワークを表す。ViBE202は、ターゲットリージョンが利用可能となる前にサービスがターゲットリージョン(例えば、
図1のターゲットリージョン114などの構築中のリージョン)のためにステージングされることができる環境を表す。
【0057】
新たなリージョン(例えば、
図1のターゲットリージョン114)をブートストラップするために、サービスのコアセットがブートストラップされてもよい。サービスのこれらのコアセットはホストリージョン204に存在してもよいが、まだViBEには(ターゲットリージョンにも)存在しない。これらの必須のコアサービスは、デバイスをプロビジョニングし、新たなリージョンへのトラストのチェーンを確立し、リージョン内へ残りのサービス(例えば、負ロック)をデプロイするために必要とされる機能を提供する。ViBE202は、ホストリージョン204においてデプロイされるテナンシであってもよい。これは、仮想リージョンとして考えることができる。
【0058】
ターゲットリージョンが、ブートストラップオペレーションを提供するために利用可能になると、ViBE202をターゲットリージョンに接続することができ、これにより、ViBEにおけるサービスは、ターゲットリージョンのサービスおよび/またはインフラストラクチャコンポーネントと相互作用することができる。これは、従前のシステムにおけるような自己完結型シードサービスの代わりに、生産レベルサービスのデプロイメントを可能にし、インターネット上でターゲットリージョンへの接続を必要とする。従来、シードサービスは、コンテナ収集の一部としてデプロイされ、リージョンを構築するために必要な依存をブートストラップするために使用されていた。既存のリージョンのインフラストラクチャ/ツーリングを用いて、リソースは、ViBE202内へブートストラップ(例えば、プロビジョニングおよびデプロイ)され、ターゲットリージョンが自給自足でき、直接通信されることができるまで、ハードウェアをプロビジョニングしかつサービスをデプロイするためにリージョン(例えば、ホストリージョン204)のサービスエンクレーブに接続されてもよい。ViBE202を利用することは、コアサービスの循環依存を破壊するためにホストリージョンのリソースを利用しながらインフラストラクチャをプロビジョニング/準備しかつソフトウェアをデプロイすることができるために必要とされる依存およびサービスをスタンドアップさせることを可能にする。
【0059】
マルチフロックオーケストレータ(MFO)206は、ViBE202を構築(例えば、構成)するためにオペレーションを実行するように構成されてもよい。MFO206は、新たなリージョン(このケースでは、ViBEリージョン、ViBE202)にブートストラップされる様々なリソースに対応する適用可能なフロック設定を取得することができる。例えば、MFO206は、ケイパビリティサービス208およびワーカー210をブートストラップする態様を識別するフロック設定(例えば、「ViBEフロック設定」)を取得してもよい。別の例として、MFO206は、ViBE202にドメイン名サービス(DNS)212をブートストラップすることに対応する別のフロック設定を取得してもよい。
【0060】
ステップ1において、MFO206は、CIOSセントラル214(例えば、それぞれ
図1および
図2のCIOSセントラル108およびCIOSセントラル214の一例)に命令してもよい。例えば、MFO206は、この時にはまだViBE202に存在しないケイパビリティサービス208およびワーカー210のブートストラップを要求するためのリクエスト(例えば、ViBEフロック設定を含む)を送信してもよい。いくつかの実施形態において、CIOSセントラル214は、全てのフロック設定へのアクセスを有してもよい。したがって、いくつかの例において、MFO206は、ファイル自体ではなくViBEフロック設定のための識別子を送信してもよく、CIOSセントラル214は、それをストレージから(例えば、
図3のDB308またはフロックDB312から)独立して取得してもよい。
【0061】
ステップ2において、CIOSセントラル214は、CIOSリージョナル216への対応するリクエストによってViBEフロック設定を提供してもよい。CIOSリージョナル216は、ステップ3において特定のインフラストラクチャプロビジョニングおよびデプロイメントオペレーションを識別および実行するためにViBEフロック設定をパースしてもよい。
【0062】
いくつかの実施形態において、CIOSリージョナル216は、プロビジョニングおよびデプロイメントのための追加的な対応するサービスを利用してもよい。例えば、ステップ4において、CIOSリージョナル216CIOSリージョナルは、デプロイメントオーケストレータ218(例えば、ホストリージョン204の、コアサービスまたはその他の書き込み、構築およびデプロイアプリケーションソフトウェアの一例)に命令し、命令を実行させてもよく、この命令自体は、ケイパビリティサービス208およびワーカー210をViBE202内でブートストラップさせる。
【0063】
ステップ5において、ケイパビリティは、(CIOSリージョナル216、ワーカー210を介してデプロイメントオーケストレータ218、またはその他から)ケイパビリティサービス208へ送信されてもよく、ViBEフロックに対応するリソースが利用可能であることを示す。ケイパビリティサービス208は、このデータを持続してもよい。いくつかの実施形態において、ケイパビリティサービス208は、ViBEとともに利用可能なケイパビリティのそれが維持するリストにこの情報を加える。例えば、ステップ5においてケイパビリティサービス208に提供されるケイパビリティは、ケイパビリティサービス208およびワーカー210が処理のために利用可能であることを示してもよい。
【0064】
ステップ6において、MFO206は、ケイパビリティが、ケイパビリティサービス208からデータ(ケイパビリティに対応する識別子)を受信または取得することに基づいてケイパビリティサービス208およびワーカー210が利用可能であることを示していることを識別してもよい。
【0065】
ステップ7において、ステップ6においてデータを受信/取得した結果、MFO206は、ViBE202にDNSサービス(例えば、DNS212)をブートストラップするようにCIOSセントラル214に命令してもよい。命令は、DNSサービスに対応する特定のフロック設定を識別してもよいまたは含んでもよい。
【0066】
ステップ8において、CIOSセントラル214は、ViBE202にDNS212をデプロイするようにCIOSリージョナル216に命令してもよい。いくつかの実施形態において、DNS212のためのDNSフロック設定は、CIOSセントラル214によって提供される。
【0067】
ステップ9において、今ではViBE202においてデプロイされているワーカー210は、CIOSリージョナル216によって、DNS212をデプロイするタスクに割り当てられてもよい。ワーカーは、DNS212をデプロイするために実行される必要があるオペレーションのセットを識別するために(例えば、フロック設定(所望の状態)を、フロックに関連付けられた(現在は存在しない)リソースの現在の状態と比較することによって)、
図3に関連して上記で記述された形式で宣言型インフラストラクチャプロビジョナを実行してもよい。
【0068】
ステップ10において、デプロイメントオーケストレータ218は、ステップ9において識別されたオペレーションに従ってDNS212をデプロイするようにワーカー210に命令してもよい。示されているように、ワーカー210は、ステップ11においてViBE202にDNS212をデプロイするためのオペレーションを実行することを進める。ステップ12において、ワーカー210は、ViBE202においてDNS212が利用可能であることをケイパビリティサービス208に通知する。MFO206は、続いて、ViBEフロック設定およびDNSフロック設定に関連付けられたリソースが利用可能であることを識別してもよく、ViBEにあらゆる適切な数の追加的なリソースをブートストラップするために進行してもよい。
【0069】
ステップ1~12が完了した後、ViBE202を構築するためのプロセスが完了したと考えることができ、ViBE202が構築されたと考えることができる。
【0070】
図3は、少なくとも1つの実施形態による、ViBEを利用してターゲットリージョンにサービスをブートストラップするための環境300および方法を示すためのブロック図である。
【0071】
ステップ1において、ユーザ302は、リージョンデータを修正するために、CIOSセントラル304(それぞれ
図1および
図2のCIOSセントラル108およびCIOSセントラル214の一例)によって提供されるあらゆる適切なユーザインターフェースを利用してもよい。例えば、ユーザ302は、そこに多数のサービスがブートストラップされる新たなリージョンを生成してもよい。
【0072】
ステップ2において、CIOSセントラル304は、RRDD306(例えば、
図1のRRDD104の一例)に変更を送信するためのオペレーションを実行してもよい。ステップ3において、RRDD306は、受信したリージョンデータを、データベース308、リージョン、AD、レルム、ETなどのあらゆる適切な識別子、属性、状態などを含むリージョンデータを記憶するように構成されたデータストアに記憶してもよい。いくつかの実施形態において、アップデータ307は、リージョンデータをデータベース308またはあらゆる適切なデータストアに記憶するために利用されてもよく、そこからこのようなアップデートが(例えば、サービスチームに)アクセス可能であってもよい。いくつかの実施形態において、アップデータ307は、データベース308に対してなされたアップデータを(例えば、あらゆる適切な電子通知を介して)通知するように構成されてもよい。
【0073】
ステップ4において、MFO310(それぞれ
図1および
図2のMFO106および206の一例)は、リージョンデータにおける変更を検出してもよい。いくつかの実施形態において、MFO310は、リージョンデータにおける変更のためのRRDD306をポーリングするように構成されてもよい。いくつかの実施形態において、RRDD306は、リージョン変更をMFO310に発行またはさもなければ通知するように構成されてもよい。
【0074】
ステップ5において、リージョンデータにおける変更を検出することは、バージョンセット(例えば、「ゴールデンバージョンセット」識別子等の特定の識別子に関連付けられたバージョンセット)を取得するようにMFO310をトリガしてもよい。新たなリージョンにブートストラップされる各々のフロック(例えば、サービス)のための特定のバージョンおよびそのフロックに対応する各々のアーティファクトのための特定のバージョンを識別する。バージョンセットは、DB312から取得されてもよい。フロックが発達および変化するにつれて、リージョン構築のために使用されるそれらの対応する設定およびアーティファクトのためのバージョンが変化し得る。これらの変更はフロックDB312において持続されてもよく、これにより、MFO310は、リージョン(例えば、ViBEリージョン、ターゲットリージョン/非ViBEリージョンなど)を構築するために使用するためにフロック設定およびアーティファクトのどのバージョンを使用するかを識別してもよい。フロック設定(例えば、フロック設定の全てのバージョン)および/またはアーティファクト(例えば、アーティファクトの全てのバージョン)は、DB308、DB312、またはCIOSセントラル304および/またはMFO310にアクセス可能なあらゆる適切なデータストアに記憶されてもよい。
【0075】
ステップ6において、MFO310は、現在のリージョンデータを備えるバージョンセットに関連付けられたフロック設定の各々を再コンパイルするようにCIOSセントラル304にリクエストしてもよい。いくつかの実施形態において、リクエストは、各々のフロック設定および/またはこれらのフロック設定に対応するアーティファクトのためのバージョンを示してもよい。
【0076】
ステップ7において、CIOSセントラル304は、(例えば、直接、またはリアルタイムリージョナルデータディストリビュータ306を介して)DB308から現在のリージョンデータを取得し、MFO310によってリクエストされたバージョンに従ってあらゆる適切なフロック設定およびアーティファクトを検索してもよい。
【0077】
ステップ8において、CIOSセントラル304は、現在のリージョンデータを備えるフロック設定を注入するために、ステップ7において取得されたリージョンデータを備えるフロック設定を再コンパイルしてもよい。CIOSセントラル304は、コンパイルされたフロック設定をMFO310に返してもよい。いくつかの実施形態において、CIOSセントラル304は、コンパイルが行われたことを単に示してもよい、またはMFO310は、RRDD306を介して、再コンパイルされたフロック設定にアクセスしてもよい。
【0078】
ステップ9において、MFO310は、再コンパイルされたフロック設定の静的解析を実行してもよい。静的解析の一部として、MFO310は、フロック間の依存を識別するために、(例えば、宣言型インフラストラクチャプロビジョナ(例えば、Terraformなど)と関連付けられたライブラリを使用して)フロック設定をパースしてもよい。識別された分析および依存から、MFO310は、構築依存グラフ338を生成することができる。構築依存グラフ338は、フロックが新たなリージョンにブートストラップされる順序(および/またはフロック設定において示される変更が適用される順序)を識別する、非巡回有向グラフであってもよい。グラフにおける各々のノードは、特定のフロックのあらゆる適切な部分をブートストラップすることに対応してもよい。特定のブートストラップ順序は、依存に少なくとも部分的に基づいて識別されてもよい。いくつかの実施形態において、依存は、ノードの属性として表されてもよいおよび/またはノードを接続するグラフのエッジを介して示されてもよい。MFO310は、リージョン構築のオペレーションを推進するために、グラフ(例えば、開始ノードにおいて始まる)をトラバースしてもよい。
【0079】
いくつかの実施形態において、MFO310は、循環の存在(例えば、サービスAはサービスBに依存し、その逆でもある)を検出するための循環検出アルゴリズムを利用してもよい。MFO310は、孤立したケイパビリティ依存を識別することができる。例えば、MFO310は、いかなる他のノードにも接続されていない構築依存グラフ338の孤立したノードを識別することができる。MFO310は、(例えば、ケイパビリティが早く発行されすぎたとき、および対応する機能が実際にはまだ利用可能ではないとき)、誤って発行されたケイパビリティを識別してもよい。MFO310は、同じケイパビリティを発行する1つまたは複数のインスタンスが存在することをグラフから検出することができる。いくつかの実施形態において、あらゆる適切な数のこれらのエラーが検出されてもよく、MFO310(またはCIOSセントラル304などの別の適切なコンポーネント)は、(例えば、電子通知、ユーザインターフェースなどを介して)この情報をユーザに通知またはさもなければ提示するように構成されてもよい。いくつかの実施形態において、MFO310は、循環依存を破壊するためにリソースを強制的に削除/再現させるように構成されてもよく、これらのリソースおよび/または対応するフロック設定のためのブートストラップオペレーションを実行するようにCIOSセントラル304に再び命令を提供してもよい。
【0080】
開始ノードはViBEフロックをブートストラップすることに対応してもよく、第2のノードはDNSをブートストラップすることに対応してもよい。ステップ10~15は、(デプロイメントオーケストレータ317、
図2のデプロイメントオーケストレータ218の一例を介して)ViBEフロックをViBE316(例えば、それぞれ
図1および
図2のViBE116および202の一例)にデプロイすることに対応する。すなわち、
図3のステップ10~15は、概して、
図2のステップ1~6に対応する。デプロイされるViBEフロックに対応するケイパビリティが存在することが通知されると(例えば、
図2のケイパビリティサービス208およびワーカー210に対応する、ケイパビリティサービス318およびワーカー320が利用可能であることを示す)、MFO310は、実行される次のオペレーションを識別するために構築依存グラフ338のトラバースを再開する。
【0081】
例えば、MFO310は、DNSフロックがデプロイされることを識別するために、構築依存グラフ338をトラバースし続けてもよい。ステップ16~21は、DNS322(
図2のDNS212の一例)をデプロイするために実行されてもよい。これらのオペレーションは、概して、
図2のステップ7~12に対応してもよい。
【0082】
ステップ21において、DNS322が利用可能であることを示すケイパビリティが記憶されてもよい。このケイパビリティを検出すると、MFO310は、構築依存グラフ338のトラバースを再開してもよい。このトラバースにおいて、MFO310は、CIOSリージョナル(例えば、CIOSリージョナル314の一例)のインスタンスのあらゆる適切な部分がViBE316にデプロイされることを通知してもよい。いくつかの実施形態において、ステップ16~21は、CIOSリージョナル(ViBE)326(CIOSリージョナル314のインスタンス、
図1のCIOSリージョナル110)およびワーカー328をViBE316にデプロイすることに関して実質的に反復されてもよい。ケイパビリティは、CIOSリージョナル(ViBE)326が利用可能であるケイパビリティサービス318へ送信されてもよい。
【0083】
CIOSリージョナル(ViBE)326が利用可能であることを検出すると、MFO310は、構築依存グラフ338のトラバースを再開してもよい。このトラバースにおいて、MFO310は、デプロイメントオーケストレータ(例えば、デプロイメントオーケストレータ330、デプロイメントオーケストレータ317の一例)がViBE316にデプロイされることを識別してもよい。いくつかの実施形態において、ステップ16~21は、デプロイメントオーケストレータ330をデプロイすることに関して実質的に反復されてもよい。ケイパビリティを識別する情報がケイパビリティサービス318へ送信されてもよく、デプロイメントオーケストレータ330が利用可能であることを示す。
【0084】
デプロイメントオーケストレータ330がデプロイされると、ViBE316は、後続のリクエストを処理するために利用可能であると考えられてもよい。デプロイメントオーケストレータ330が利用可能であることを検出すると、MFO310は、ホストリージョンコンポーネント(ホストリージョン322のコンポーネント)を利用するのではなく、ViBEコンポーネントへルーティングされるように後続のブートストラップリクエストに命令してもよい。したがって、MFO310は、CIOSセントラル304を介してViBE316へフロックデプロイメントを命令する各々のノードにおいて、構築依存グラフ338をトラバースし続けることができる。CIOSセントラル304は、フロック設定に従ってリソースをデプロイするようにCIOSリージョナル(ViBE)326にリクエストしてもよい。
【0085】
このプロセスの間のある時点において、ターゲットリージョン334が利用可能になってもよい。ターゲットリージョンが利用可能であることの指示は、(例えば、リージョンデータに対する更新として)ユーザ302によって提供されるターゲットリージョン334のためのリージョンデータから識別可能であってもよい。ターゲットリージョン334のアベイラビリティは、ターゲットリージョン334と外部ネットワーク(例えば、インターネット)との間のネットワーク接続を確立することに依存してもよい。ネットワーク接続は、公共ネットワーク(例えば、インターネット)上でサポートされてもよいが、1つまたは複数の暗号化トンネル(例えば、トンネル336などのIPsecトンネル)をViBE316からターゲットリージョン334に提供するためにソフトウェアセキュリティツール(例えば、IPsec)を使用してもよい。本明細書で使用される場合、「IPsec」は、インターネットプロトコル(IP)を使用するネットワーク上でネットワークトラフィックを認証および暗号化するためのプロトコル群を意味し、プロトコル群(例えば、Openswan、Libreswan、strongSwanなど)の1つまたは複数の利用可能な実装を含むことができる。ネットワークは、ViBE316をターゲットリージョン334のサービスエンクレーブに接続してもよい。
【0086】
IPsecトンネルを確立する前に、ターゲットリージョン334への初期ネットワーク接続は、IPsecがターゲットリージョン334におけるアセット(例えば、ベアメタルアセット)においてデプロイされ得るまで、ネットワーキングサービスのブートストラップを許容するように十分な接続(例えば、帯域外VPNトンネル)上にあってもよい。ターゲットリージョン334のネットワークリソースをブートストラップするために、デプロイメントオーケストレータ330は、ターゲットリージョン334内のアセットにおいてIPsecゲートウェイをデプロイすることができる。次いで、デプロイメントオーケストレータ330は、ViBE316からのIPsecトンネルを終了させるように構成されたターゲットリージョン334においてVPNホストをデプロイしてもよい。ViBE316におけるサービス(例えば、デプロイメントオーケストレータ330、サービスAなど)は、ターゲットリージョン334におけるVPNホストとのIPsec接続を確立することができ、ViBE316からターゲットリージョン334へのブートストラップオペレーションが開始してもよい。
【0087】
いくつかの実施形態において、ブートストラップオペレーションは、ViBE316からデプロイされるときにコアサービスのインスタンスをホストすることをサポートするために、ViBE316におけるサービスがターゲットリージョン334においてリソースをプロビジョニングすることによって開始してもよい。例えば、ホストプロビジョニングサービスは、VMのためのコンピューティングリソースを割り当てるためにターゲットリージョン334においてインフラストラクチャ(例えば、ベアメタルホスト)上にハイパーバイザをプロビジョニングしてもよい。ホストプロビジョニングサービスがターゲットリージョン334における物理的リソースの割り当てを完了すると、ホストプロビジョニングサービスは、ターゲットリージョン334における物理的リソースが割り当てられたことを示すケイパビリティを示す情報を発行してもよい。ケイパビリティは、CIOSリージョナル(ViBE)326を介して(例えば、ワーカー328によって)ケイパビリティサービス318へ発行されてもよい。
【0088】
ターゲットリージョン334のハードウェア割り当てが確立され、ケイパビリティサービス318へポストされると、CIOSリージョナル(ViBE)326は、ViBE316からターゲットリージョン334へのコアサービスのインスタンスのデプロイメントをオーケストレーションすることができる。このデプロイメントは、ViBE316を構築するための上記で説明されたプロセスと類似のものであってもよいが、ホストリージョン332サービスエンクレーブのコンポーネントの代わりに、ViBEのコンポーネント(例えば、CIOSリージョナル(ViBE)326、ワーカー328、デプロイメントオーケストレータ330)を使用する。デプロイメントオペレーションは、概して、上記で説明されたステップ16~21に対応してもよい。
【0089】
サービスがViBE316からターゲットリージョン334へデプロイされるので、そのサービスと関連付けられたDNSレコードは、ViBE316におけるサービスのインスタンスに対応してもよい。サービスと関連付けられたDNSレコードは、ターゲットリージョン334へのサービスのデプロイメントを完了するための後に更新されてもよい。言い換えれば、ViBE316におけるサービスのインスタンスは、DNSレコードが更新されるまで、サービスへトラフィック(例えば、リクエスト)を受信し続けてもよい。サービスは、部分的にターゲットリージョン334内へデプロイしてもよく、サービスが部分的にデプロイされるケイパビリティを示す情報を(例えば、ケイパビリティサービス318へ)発行してもよい。例えば、ViBE316において動作するサービスは、対応するコンピュートインスタンス、ロードバランサ、および関連付けられたアプリケーションおよびその他のソフトウェアを備えるターゲットリージョン334内へデプロイされてもよいが、完全にデプロイされる前にデータベースデータがターゲットリージョン334へ移動するのを待つ必要があり得る。DNSレコード(例えば、DNS322によって管理される)は、依然として、ViBE316におけるサービスと関連付けられていてもよい。サービスのためのデータ移動が完了すると、DNSレコードは、ターゲットリージョン334においてデプロイされたオペレーショナルサービスへのポイントに更新されてもよい。ターゲットリージョン334におけるデプロイされたサービスは、次いで、サービスのためのトラフィック(例えば、リクエスト)を受信してもよいのに対し、ViBE316におけるサービスのインスタンスは、もはやサービスのためのトラフィックを受信しなくてもよい。
【0090】
バージョンセットとのマルチフロックオーケストレーション
図4は、少なくとも1つの実施形態による、多数のバージョンセットを維持するための例示的な方法400を示すブロック図である。方法400は、
図1のクラウドインフラストラクチャオーケストレーションサービス102のあらゆる適切なコンポーネントによって実行されてもよい。いくつかの実施形態において、方法400は、
図1のマルチフロックオーケストレータ106によって実行されてもよい。バージョンセットは、リージョン構築を実行するために用いられる全てのアーティファクトおよび構成ファイル(例えば、本明細書では略して「フロック設定」と呼ばれる、フロック構成ファイル)のスナップショットを指す。バージョンセットにおいて提供されるフロック設定および/またはアーティファクトは、そのアーティファクトまたはフロック設定の他のバージョンからアーティファクトおよび/またはフロック設定の特定のバージョンを識別するバージョン識別子と関連付けられてもよい。例えば、フロック設定は、識別子「サービス1」と関連付けられてもよいが、多数のバージョン(例えば、バージョン1、バージョン2、バージョン3.1など)を有する。マルチフロックオーケストレータ(例えば、それぞれ
図1、
図2および
図3のMFO106、206および310)は、潜在的に異なるフロック設定および/またはフロック設定のバージョン、または利用されるアーティファクトおよび/またはアーティファクトのバージョンに対応する多数のバージョンセットを管理するように構成されてもよい。バージョンセットは、リージョン構築を実行するために使用されることができるのに対し、テストおよび統合努力のために異なるバージョンセットを使用することができる。異なるバージョンセットを追跡することによって、マルチフロックオーケストレータは、リージョン構築のために、安定したバージョンセット(例えば、成功したリージョン構築を生成する可能性が高いバージョンセット)が使用されることを保証することができる。バージョンセットは、それによってバージョンセットが参照されることができる識別子(例えば、「us-ashburn-1」およびスコープ識別子と関連付けられてもよい。例示的なスコープ識別子は、「golden」、「nightly」、「break-glass」、および「default」を含むことができ、それらに限定されないが、その他の識別子を使用することができる。1つのスコープ識別子(例えば、golden)は、リージョン構築のために使用されるバージョンセットを示すことができる。別のスコープ識別子(例えば、nightly)は、テスト(例えば、毎夜実行される単位テスト)のために使用されるバージョンセットを示してもよい。別のスコープ識別子(例えば、break-glass)は、リージョン構築中に受けたエラーから回復するために使用することができるバージョンセットを示してもよい。別のスコープ識別子(例えば、default)は、リージョン構築における最終的な包含を期待してテストされるフロック設定/アーティファクトのバージョンセットを示してもよい。
【0091】
ステップ1において、各々のサービスチームは、フロック設定データ(例えば、フロック設定識別子、およびフロック設定の他のバージョンからフロック設定の特定のバージョンを一意的に識別する対応するバージョン識別子)を発行してもよい。いくつかの実施形態において、フロック設定データを発行することは、アプリケーションプログラミングインターフェース(API)コールまたは別の適切なファンクションコールを利用することによって実行されてもよい。このコールを実行することによって、フロック設定データ(例えば、フロック設定識別子およびバージョン識別子)が、defaultバージョンセット(例えば、defaultバージョンセット402)に加えられてもよい。いくつかの実施形態において、defaultバージョンセット402は、
図3のDB312またはあらゆる適切なデータストアに記憶されてもよい。別の例として、フロック設定がdefaultバージョンセットに含まれるべきであることを示すフロック設定の特定のバージョンは、手動で(例えば、ラベル/タグを用いて)修正されてもよい。マルチフロックオーケストレータは、defaultバージョンセットと関連付けられるセットを識別するために全てのフロック設定をパースしてもよい。defaultバージョンセット404に示されているように、「A」~「D」は、それぞれのフロックと関連付けられたフロック設定識別子に対応するのに対し、defaultバージョンセット402において提供された「8」、「9」および「3」は、フロック設定のバージョンを指す。したがって、フロック設定A、バージョン8、フロック設定B、バージョン9、およびフロック設定C、バージョン2が、defaultバージョンセット404に加えられてもよい。defaultバージョンセットは、フロック設定「D」、バージョン9を予め含んでもよい。ステップ1の後に維持されるdefaultバージョンセットは、406に示されている。
【0092】
ステップ2において、あらゆる適切なオペレーションが、テストのためのnightlyバージョンセットを決定するために実行されてもよい。例えば、フロック設定識別子および対応するバージョン識別子のセットが、defaultバージョンセット(例えば、406に示されている)からnightlyバージョンセット(例えば、nightlyバージョンセット408)へコピーされてもよい。いくつかの実施形態において、nightlyバージョンセットは、検証過程と関連付けられてもよい(例えば、所定のスケジュールに従って行われるnightlyユニットおよび/または統合テスト)。nightlyバージョンセットは、あらゆる適切な検証過程に対応してもよく、毎夜実行される検証過程に必ずしも対応しなくてもよいことが認められるべきである。nightlyバージョンセットは、フロック設定識別子、およびリージョン構築の各々のサービスのためのバージョンを識別してもよい。408に示されているように、テストが開始されたとき、nightlyバージョンセットは、フロック設定A、バージョン2、フロック設定「B」、バージョン7、およびフロック設定「C」、バージョン3を含んでいてもよい。異なるバージョンが(406に示されているように)引き続き使用されてもよいが、テストが開始される時点のdefaultバージョンセットは、nightlyバージョンセットにコピーされるセットである。サービスは、nightlyバージョンセットによって識別されたフロック設定(およびこれらのフロック設定内で識別された対応するアーティファクトバージョン)を用いてテスト環境内でブートストラップされてもよく、リージョンのこのバージョンが検証されてもよい。
【0093】
ステップ3において、検証過程(1つまたは複数のユニットおよび/または統合テストを含む)が、テスト環境においてブートストラップされるサービスを検証するために実行されてもよい。いくつかの実施形態において、検証過程は、あらゆる適切な所定のオペレーションを含んでもよい。これらのオペレーションは、nightlyバージョンセットによって識別されたサービスに対応する様々な機能をテストすることに向けられてもよい。マルチフロックオーケストレータ(MFO)は、検証過程の出力として提供される1つまたは複数のエラーを識別してもよい。これらのエラーは、1つまたは複数のサービスに対応してもよい。いくつかの実施形態において、特定のサービスに対応するエラーが識別されると、MFOは、フロック設定のそのバージョンが、MFOによって維持されかつ後続のリージョン構築のために使用されるgoldenバージョンセットに促進/コピーされることを制限するように構成されてもよい。
【0094】
ステップ4において、ステップ3において検証過程を完了した後、MFOは、goldenバージョンセットを決定するように構成されてもよい。サービスが検証過程をうまく通過すると(例えば、エラーを発生しないことによってまたは少なくとも許容できるエラーを発生することによって)、MFOは、対応するフロック設定データ(例えば、設定識別子およびバージョン識別子)をgoldenバージョンセットにコピーしてもよい。サービスが検証過程に不合格になると(例えば、エラーを発生することによってまたは少なくとも許容できないエラーを発生することによって)、MFOは、検証過程を通過したことが分かっているフロック設定の最後の既知のバージョンを維持してもよい。例えば、フロック設定「A」、バージョン1が検証過程を通過すると、これは、goldenバージョンセットへ促進されてもよい。その後、フロック設定「A」、バージョン2が、defaultバージョンセットへ発行され、後で、nightlyバージョンセットへ促進されてもよい。しかしながら、フロック設定「A」、バージョン2が検証過程に不合格になると(例えば、1つまたは複数の許容できないエラーを発生する)、フロック設定「A」、バージョン2は、goldenバージョンセットへ促進されなくてもよい。代わりに、MFOは、goldenバージョンセット内にフロック設定「A」、バージョン1(例えば、410に示されたgoldenバージョンセット)を維持してもよい。
【0095】
ステップ5において、リージョン構築(例えば、新たなリージョンデータを識別するとMFOによって開始される、またはその他)を開始すると、goldenバージョンセットは、リージョン構築のために利用されるためにMFOによってコピーおよび/または取得されてもよい。このプロセスは、概して、上記で説明された
図5のステップ5に対応してもよい。
【0096】
goldenバージョンセットは、リージョン構築のために利用されてもよい。いくつかの実施形態において、サービスチームは、フロック設定におけるエラーを識別してもよく、更新された(または異なる)バージョンのフロック設定を提供してもよい。ステップ6において、更新されたフロック設定は、Break Glassバージョンセットに加えられることができる。このBreak Glassバージョンセットは、Goldenバージョンセットのあらゆる適切なフロック設定のオーバーライドとして使用されてもよい。例えば、ステップ6において、フロック設定「A」、バージョン9が、Break Glassバージョンセットに加えられてもよい。フロック設定「A」のバージョン9は、412に示されたgoldenバージョンセットのバージョン1とは異なってもよい。Break Glassバージョンセットにフロック設定「A」のバージョン9を加えることにより、MFOがトリガされてもよく、これにより、414に示されたBreak Glassバージョンセットのフロック構成のセットの静的解析を実行することによって構築依存グラフ314を再生し、ここで、フロック設定「A」、バージョン1が、フロック設定「A」、バージョン9と置き換えられる。いくつかの実施形態において、MFOが構築依存グラフ314を実行してもよいおよび/またはブートストラップオペレーションを管理するためのあらゆる適切なデータ構造(例えば、
図3の宣言型インフラストラクチャプロビジョナ315によって生成および/または利用される1つまたは複数のデータ構造)が再生されてもよい。再生されたあらゆるデータ構造が、ノードが訪問される上記で説明されたのと類似の形式でトラバースされてもよい。ノードと関連付けられたケイパビリティ(例えば、ノードに対応するサービスが依存するケイパビリティ)が(
図1のケイパビリティサービス112と協議することによって識別されるように)利用可能である場合、トラバースは、同じ評価が起こり得る次のノードへ進んでもよい。このプロセスは、ノードが依存するケイパビリティがそのために利用不可能であることが決定されるノードに達するまで、継続されてもよい。この時点で、MFOは、ケイパビリティが利用可能であることを確認するまで(例えば、ポーリングによっておよび/またはケイパビリティサービス112によって通知されることによって)、トラバースをパースしてもよい。例えば、MFOは、ノードが依存するケイパビリティが利用可能であるときに通知されるようにケイパビリティサービス112へリクエストを送信してもよく、ケイパビリティサービス112は、ケイパビリティが利用可能であることを示すデータを受信したときに対応する通知を提供するように構成されてもよい。代替的に、MFOは、ケイパビリティサービス112からケイパビリティのステータス(または全てのケイパビリティなどのケイパビリティのあらゆる適切な組合せ)をリクエストするために、あらゆる適切な所定のスケジュールにおいて1つまたは複数のリクエストを送信してもよい。いくつかの実施形態において、MFOは、ケイパビリティのステータス(例えば、ケイパビリティが利用可能または利用不可能である)を示すあらゆる適切な時間にケイパビリティサービス112からデータを受信してもよい。いくつかの実施形態において、ケイパビリティサービス112は、あらゆる適切な送信において、あらゆる適切な数のケイパビリティのステータスを示してもよい。
【0097】
図4に示された様々なバージョンセットを利用することによって、マルチフロックオーケストレータ(MFO)は、リージョン構築中にエラーの数および/またはエラーを発生する可能性を減じることができる。これは、新たなフロック設定(潜在的に新たなアーティファクトバージョンを含む)がdefaultバージョンの包含により指名されることを可能にし、defaultバージョンセットにおいて提供されたバージョンから生成されたnightlyバージョンセットにおける検証過程を実行し、合格したフロック設定バージョンのみを、それにより後続のリージョン構築が実行され得るgoldenバージョンセットへ促進することによって、達成される。
【0098】
図5は、少なくとも1つの実施形態による、リージョンへリソースをブートストラップ(例えば、プロビジョニングおよびデプロイ)するためのオペレーションを実行するための例示的な方法500を示すブロック図である。方法500は、マルチフロックオーケストレータ502(
図1のマルチフロックオーケストレータ106の一例)によって実行されてもよい。ケイパビリティサービス504は、
図1のケイパビリティサービス112の一例であってもよい。方法500のオペレーションを実行する前に、
図5のステップ1~9が実行されてもよい。したがって、静的解析が(例えば、マルチフロックオーケストレータ502によって)実行されてもよい。「静的解析」という用語は、プログラムコード(例えば、フロック設定などの構成ファイル)から、ブートストラップオペレーション間の依存のセットを識別するためのオペレーションを指すことが意図されている。リージョン構築のための静的解析を実行することは、構成ファイルのセット(例えば、
図4に関して上記で説明された、goldenバージョンセットに対応するフロック設定)を取得し、そこに定義されたリソース間の明確なおよび/または黙示的な依存を識別するためにこれらのファイルをパースすることを含んでもよい。いくつかの実施形態において、構成ファイルは、選択的なおよび/または所要の依存を識別してもよい。選択的な依存は、選択的に無視または実施され得る依存を識別してもよい。所要の依存は、例外なく依存が実施されることを示す。いくつかの実施形態において、マルチフロックオーケストレータ502は、これらの依存を維持および/または実施するための1つまたは複数のレコードを生成してもよい。例えば、マルチフロックオーケストレータ502は、識別された依存に基づいてグラフ(例えば、
図3の構築依存グラフ314、レコードの一例であるデータ構造など)を生成してもよい。グラフにおける各々のノードは、サービスのためのプロビジョニングおよびデプロイメントオペレーションに対応してもよい。いくつかの実施形態において、別々のグラフが、プロビジョニング対デプロイメントオペレーションのために維持されてもよい。これらのレコード(例えば、データ構造)を生成および/または利用するための例示的な技術は、その内容全体が全ての目的のために参照により組み込まれる、「Techniques for Managing Region Build Dependencies」という名称の米国特許仮出願第63/315,034号に提供されている。以下の例は、有向グラフを利用するが、サービス/フロック間の依存を維持するためのあらゆる適切なレコードが利用されてもよい。いくつかの実施形態において、方法500は、有向グラフの第1のノードが、依存を有さないフロックを示すことをマルチフロックオーケストレータ(MFO)502が識別することに少なくとも部分的に基づいて開始してもよい。
【0099】
ブートストラップされるリソースのセットをカプセル化/識別するためにフロック設定が使用され得ることが認められるべきである。いくつかのケースにおいて、フロック設定は、サービスの全てのリソースを識別してもよいが、必ずしも、サービスの全てのリソースが1つのフロック設定に含まれるケースである必要はない。
【0100】
ステップ1において、MFO502は、第1のフロック設定によるインフラストラクチャコンポーネントをプロビジョニングするための命令を実行してもよい。例えば、MFO502は、サービス1のためのインフラストラクチャコンポーネントをブートストラップするためにCIOSセントラル(例えば、それぞれ
図1~
図3のCIOSセントラル108、214および304)に命令および/またはリクエストしてもよい。いくつかの実施形態において、命令/リクエストは、利用されるフロック設定を含んでもよいか、または、リクエストは、利用されるフロック設定に対応するバージョンを示してもよい。バージョンが識別されると、CIOSセントラル(ここには示されていない)は、リクエストされたバージョンに対応するフロック設定を(例えば、
図3のDB308または312などから)取得してもよい。引き続き、CIOSセントラルは、
図2および
図3に関して上記で検討されたのと類似の形式で(例えば、リアルタイムリージョンデータがフロック設定に注入された後に)CIOSリージョナル(例えば、それぞれ
図1~
図3のCIOSリージョナル110、216および/または314の一例)からサービス1のためのインフラストラクチャリソースのプロビジョニングを命令/リクエストすることへ進んでもよい。
【0101】
ステップ2において、MFO502は、ステップ1においてプロビジョニングされたインフラストラクチャコンポーネントへ1つまたは複数のアーティファクトをデプロイするようにCIOSセントラルに命令/リクエストしてもよい。ステップ1におけるように、リクエストは、利用されるフロック設定(または利用されるフロック設定のためのバージョン識別子)および/またはデプロイされる各々のアーティファクトのためのバージョン識別子を含んでもよい。ステップ1およびステップ2におけるリクエストは各々、プロビジョニングリクエスト(例えば、インフラストラクチャコンポーネントをプロビジョニングするためのリクエスト)に対応するものとしてのリクエストまたはデプロイメントリクエスト(例えば、アプリケーション、構成ファイルまたは同様のものなどの様々なアーティファクトをデプロイするためのリクエスト)を識別する指示記号を有してもよい。いくつかの実施形態において、MFO502は、サービスのためのインフラストラクチャコンポーネントをプロビジョニングするためのリクエストおよびこれらのインフラストラクチャコンポーネントに様々なアーティファクトをデプロイするためのデプロイメントリクエストを示すサービス1をブートストラップするための1つのリクエストを行ってもよい。したがって、いくつかの例において、ステップ1および2は、MFO502からCIOSセントラルへの1つのリクエストによって実行されてもよい。他の実施形態において、ステップ1および2の各々(または、一緒に発行された場合、集合的にステップ1および2)は、グラフを通じたMFO502の「パス」に対応してもよい。非限定的な例として、グラフをトラバースする第1のパスは、ステップ1のオペレーションを実行させ得るのに対し、グラフの第2のパスは、ステップ2のパスレーションを実行させ得る。
【0102】
ステップ3において、ケイパビリティ(ケイパビリティ1)は、ケイパビリティサービス504(例えば、それぞれ
図1~
図3のケイパビリティサービス112、208および/または308の一例)へ発行される。ケイパビリティを発行することは、ケイパビリティのための識別子(「ケイパビリティ識別子」と呼ばれる)によってアプリケーションプログラミングインターフェース(API)または別のファンクションコールをコールすることを含んでもよい。ケイパビリティ識別子は、あらゆる適切な長さの英数字値などのあらゆる適切な形式のものであってもよい。ケイパビリティ識別子は、特定の機能と関連付けられてもよい。いくつかの実施形態において、ケイパビリティは、1つまたは複数のアーティファクトがデプロイされているときに発行されてもよい。ケイパビリティは、サービスによって提供された機能の一部と関連付けられることができるか、またはケイパビリティは、サービスの全ての機能が利用可能であることを示すことができる。いくつかの実施形態において、多数のケイパビリティが、(例えば、サービス1のためにインフラストラクチャがプロビジョニングされるときおよび/またはアーティファクトがデプロイされるとき)ブートストラップサービス1の一部としてステップ3において発行されてもよい。ケイパビリティを発行する特定のコンピューティングコンポーネントは、
図1のCIOS102のあらゆる適切なコンポーネント(例えば、CIOSリージョナル110、または、ViBEが使用される場合、それぞれ
図2および
図3のCIOSリージョナル216または314、または
図3のCIOSリージョナル(ViBE)326、デプロイメントオーケストレータ218、317、
図2および
図3のOS330など)であってもよい。
【0103】
ステップ4において、MFO502は、利用可能なケイパビリティの指示をポールまたはさもなければリクエストしてもよい。このリクエストは、所定の周期に従って、所定のスケジュールに従ってなど、あらゆる適切な時間に行われてもよい。いくつかの実施形態において、リクエストは、ケイパビリティサービス504に、発行/受信された全てのケイパビリティ識別子のリストを提供させてもよい。いくつかの実施形態において、リクエストは、特定のケイパビリティ識別子を含むことができ、提供される応答は、ケイパビリティ識別子が発行されたかどうか(例えば、ケイパビリティが発行されたかどうか、ケイパビリティが利用可能であるかどうか、など)を示すことができる。
【0104】
MFO502は、リージョン構築を促進するためにそれが使用しているグラフ(例えば、構築依存グラフ314)を介して、他のリソースが、ステップ4において識別されたケイパビリティに依存しているかどうかを評価してもよい。例えば、グラフは、サービス2が、サービス1に関連付けられた機能に依存していることを示してもよい。この依存は、ケイパビリティとして表されてもよい。例えば、グラフは、サービス1が完全に(または部分的に)ブートストラップされている/動作可能であることを示すケイパビリティ(例えば、ケイパビリティ「1234」)が発行されるまでブートストラップされることができないことを示すサービス2との関連を維持してもよい。所要のケイパビリティ(例えば、ケイパビリティ「1234」)がステップ4を介して利用可能であることを識別すると、MFO502は、グラフのトラバースを継続してもよく、ステップ5へ進む。
【0105】
いくつかの実施形態において、MFO502は、ケイパビリティが利用不可能であることを識別してもよい。いくつかの実施形態において、MFO502は、ケイパビリティサービス504へ、ケイパビリティが必要であるという指示を発行してもよい。MFO502は、サービス2がサービス1(例えば、ケイパビリティ「1234」)に対応する)に依存することを識別するためにグラフをトラバースしてもよい。いくつかの実施形態において、MFO502は、サービス1が利用可能であることを示すケイパビリティを待ちながらグラフのトラバースを休止してもよい。リージョンの様々なリソースが利用可能になるので、ケイパビリティは、ケイパビリティサービス504へ発行されてもよく、これらのケイパビリティが利用可能になったことを示す。いくつかの実施形態において、ケイパビリティサービス504が、特定のケイパビリティが利用可能になったことを識別すると、ケイパビリティサービス504は、MFO502に同じことを通知するために、アプリケーションプログラミングインターフェース、ファンクションコールなどのあらゆる適切な電子的方法を介してデータを送信してもよい。加えて、または代替的に、MFO502は、利用可能なケイパビリティ(例えば、1つまたは複数のケイパビリティの特定のセット)の識別を周期的にポーリングまたはリクエストしてもよいおよび/またはケイパビリティサービス504は、利用可能なケイパビリティを周期的に発行してもよい。MFO702は、ケイパビリティサービス504が、ケイパビリティが利用可能であることを示すデータを提供するまで、ケイパビリティが利用不可能であると見なしてもよく、グラフのさらなるトラバース(またはグラフの特定のパスのトラバース)を控えてもよい。MFO702が、ケイパビリティが利用可能になったことを識別すると(例えば、ケイパビリティサービス504によって提供されるデータに基づいて)、MFO702は、グラフのトラバースを継続してもよく、ここで追加のサービスがブートストラップされてもよいことを識別する。
【0106】
ステップ5、6および7は、サービス2をブートストラップするという観点から、概してステップ1、2および3に対応してもよい。上記で説明されているように、ステップ5および6は、別々に実行されても、または1つのリクエストとして実行されてもよい。ステップ7において、ケイパビリティ2が発行されてもよく、サービス2の機能の一部または全てが利用可能であることを示す。上記で説明されているように、ケイパビリティサービス504は、このケイパビリティ情報を持続してもよい。
【0107】
ステップ8において、MFO502は、サービス2に関連付けられたケイパビリティが利用可能であることを決定してもよい。上記で説明されているようにMFO502は、(例えば、特にケイパビリティ識別子によって、または利用可能なケイパビリティのリストを取得することを介して)この情報をリクエストしてもよいまたはケイパビリティサービス504は、MFO502に、ケイパビリティのアベイラビリティを通知してもよい。いくつかの実施形態において、ケイパビリティサービス502はMFO502に特に通知してもよい、またはケイパビリティは、サービス2に関連付けられたケイパビリティが利用可能である1つまたは複数のコンピューティングコンポーネント(MFO502を含む)へブロードキャストされてもよい。
【0108】
ステップ9、10、11は、サービス3をブートストラップするという観点から、ステップ1、2および3、および/または5、6および7に対応する。ステップ12は、ステップ4および8に対応してもよい。
【0109】
方法500のオペレーションは、あらゆる適切な回数実行されてもよい。例えば、ステップ1~4は、リージョン構築を推進するためにMFO502が使用しているグラフのトラバースに従ってあらゆる適切な回数(例えば、リージョンにおいてブートストラップされる各々のサービスのために)実行されてもよい。いくつかの実施形態において、
図5のステップのあらゆる適切な部分が、
図5に示されている順次方式ではなく並行方式で実行されてもよいことが認められるべきである。例えば、サービス1~3のリソースが依存を有さない場合、またはそれらが依存する全てのケイパビリティが利用可能である場合、それは、各々のサービスのために実行されるブートストラップオペレーションの少なくとも一部が実質的に並列方式で実行されることができるケースであり得る。方法500は、サービスおよび/またはリソースをViBE(例えば、
図5のViBE524)へまたは(例えば、新たなリージョンが通信により利用可能である場合)ViBEを使用することなく新たなリージョンへ直接にブートストラップするために利用されてもよい。
【0110】
図6は、少なくとも1つの実施形態による、リージョン構築と関連付けられたサービスに関連した情報を表す例示的なユーザインターフェース600を示すブロック図である。いくつかの実施形態において、UI600は、
図1のクラウドインフラストラクチャオーケストレーションサービス102のあらゆる適切なコンポーネント(例えば、それぞれ
図1~
図3のCIOSセントラル108、214および/または304)によってホストされてもよい。リージョン構築に対応するあらゆる適切なデータが、ユーザインターフェース(UI)600に表示されてもよい。いくつかの実施形態において、UI600は、特定のリージョン構築を選択するためのUIエレメント(例えば、UIエレメント602、ドロップダウンメニュー)を含んでもよい。UIエレメント602から特定のリージョン構築(例えば、リージョンX)を選択すると、そのリージョン構築に対応するデータが、UI600に表示されてもよい。
【0111】
UI600に表示されたデータは、最初、「サービス」タブ(例えば、サービスタブ604)に対応してもよい。いくつかの実施形態において、サービスタブ604は、選択されたリージョンにおいてブートストラップされるサービスに対応するあらゆる適切な情報を含んでもよい。非限定的な例として、サービスタブ604は、サービス識別子(コラム606)、バージョンセット識別子(コラム608)、変更タイプ(例えば、インフラストラクチャまたはアプリケーション/アーティファクト)およびステータス(例えば、成功/失敗)(コラム610)、消費されたケイパビリティ(コラム612)、生成されたケイパビリティ(コラム614)、および依存(コラム616)に対応するコラム606~616を含んでもよい。いくつかの実施形態において、コラム606は、選択されたリージョンにおいてブートストラップされる各々のサービスのための識別子を提供する。いくつかの実施形態において、サービス識別子(例えば、サービス識別子617)をクリックすることにより、UIは、エリア618内でUI600に提供されたデータが、選択されたサービス識別子と関連付けられたデータのみにフィルタリングされ得る。バージョンセット識別子619を選択することにより、UI600は、与えられたサービスと関連付けられたフロック設定および/またはアーティファクトのためのバージョン識別子と、バージョンセット識別子619とを(例えば、ポップアップウィンドウを介して)表示してもよい。
【0112】
コラム608は、サービスのための現在アクティブなバージョンセットを示すバージョンセット識別子(例えば、バージョンセット識別子619、「Golden」)を表示している。いくつかの実施形態において、ユーザが、同じサービスと関連付けられた2つのバージョンセットを見るおよび/または比較し得るように、現在のバージョンセット(例えば、Golden)を、サービスと関連付けられたあらゆるその他の選択されたバージョンセット識別子と比較するオプションが選択されてもよい。いくつかの実施形態において、アイコン(例えば、アイコン628)が、各々のサービスのためのコラム608内に表示されてもよい。アイコンを選択することにより、バージョンセット情報を表示するためにポップアップまたはその他の適切なインターフェースが表示されてもよい。例えば、フロック設定(例えば、「Golden」バージョンセットにおいて使用される特定のバージョン)のための識別子が識別されてもよいおよび/または1つまたは複数のアーティファクト識別子および対応するバージョンが表示されてもよい。いくつかの実施形態において、アイコン628を選択することにより、あらゆる適切な数のバージョンセットに対応するバージョンセット情報が表示されてもよい。例えば、アイコン628を選択することにより、「Golden」バージョンセットと関連付けられた情報がその中で提供され得るポップアップまたはその他のユーザインターフェースが提供されてもよい。いくつかの実施形態において、サービスが、あらゆるその他のバージョンセット(例えば、Break Glassバージョンセット)に関連する場合、その他のバージョンセットに対応する情報が表示されてもよい。したがって、ユーザは、あらゆる適切なバージョンセットに対応する情報(例えば、フロック設定を識別するフロック識別子、フロック設定に対応するバージョン識別子、およびそのフロック設定によって参照されるあらゆる適切な数のアーティファクトに対応するデータを含む)へアクセスし得る。アーティファクトデータのインスタンスは、アーティファクトのための識別子(例えば、アプリケーションA)およびアーティファクトのバージョンに対応するバージョン識別子(例えば、バージョン1)を含んでもよい。いくつかの実施形態において、バージョンセット情報は、サービスと関連付けられたリリースに対応するリリース識別子を含んでもよい。リリース
コラム610は、インフラストラクチャのプロビジョニングおよびアーティファクト(例えば、アプリケーション、構成ファイルなど)のデプロイメントに関連する情報を表示する。いくつかの実施形態において、識別子(例えば、インフラストラクチャおよび/またはアーティファクトに対応する特定のリリースを識別するリリース識別子)がコラム610に示されてもよい。ステータスは、リリースに対応するオペレーションの現在のステータスを示してもよい。
【0113】
コラム612は、どのケイパビリティが消費されたかを識別するインジケータを表示する。消費されたケイパビリティは、処理された対応するサービスが依存するケイパビリティである。言い換えれば、消費されたケイパビリティは、現在のサービスが依存する他のサービスに関連して発行されたケイパビリティを示す。
【0114】
コラム614は、どのケイパビリティをサービスが生成したかを識別するインジケータを表示する。生成されたケイパビリティは、与えられたサービスをブートストラップする経過において発行されたケイパビリティである。その他のサービスは、これらの生成されたケイパビリティのうちの1つまたは複数に依存してもよい。
【0115】
いくつかの実施形態において、ステータスを示すケイパビリティ識別子の隣にアイコンが現れることができる。例えば、アイコン620は、ケイパビリティがうまく消費/生成されたことを示してもよい。
図6に示されているように、アイコン620は、ケイパビリティ2がうまく生成されたことを示している。同様に、アイコン621は、
図6に表示されているように、ケイパビリティ(例えば、ケイパビリティ5)がまだ生成されていないことを示している。アイコン623は、ケイパビリティが失敗した(例えば、生成されなかった、または消費されなかった)ことを示すために使用されることができる。アイコン625は、サービスが依存するケイパビリティが失敗したことを示すために使用されることができる。アイコン627は、まだ生成されていないケイパビリティへの依存を示すために使用されることができる。アイコン/ケイパビリティインジケータのいずれかを選択することにより、選択されたケイパビリティに対応するサービスを示すポップアップまたはその他のディスプレイが表示されてもよい。例えば、アイコン627(またはアイコン627に対応するインジケータ)を選択することにより、そのケイパビリティ(この例では、サービス2および3)に依存する全てのサービスを列挙するポップアップウィンドウが提供されてもよい。
【0116】
UI600は、エリア630を含んでもよい。エリア630は、リージョンと関連付けられたあらゆる適切な情報を表示するように構成されてもよい。例えば、エリア630は、リージョン構築のステータス(なし、構築、生成、休止、廃止予定など)、発行されたケイパビリティの数(例えば、3)、発行されることが予想される総ケイパビリティの数(例えば123)を示してもよい。いくつかの実施形態において、エリア630は、ケイパビリティのステータスを示す進捗インジケータを表示してもよい。進捗インジケータの部分632は、うまく発行されたケイパビリティを示してもよい。進捗インジケータの部分632は、うまく発行されたケイパビリティを示してもよい。進捗インジケータの部分634は、まだ発行されていないケイパビリティを示してもよい。進捗インジケータの部分636は、失敗したケイパビリティを示してもよい。
【0117】
UI600は、エリア638を含んでもよい。エリア638は、エリア618に表示されたデータをフィルタリングするためのあらゆる適切なUIエレメントを含んでもよい。ユーザは、識別子と関連付けられたフィルタのセットを定義してもよい。これらの所定のフィルタセットは、640に示されているように、エリア638内に(例えば、識別子によって)表示されてもよい。いくつかの実施形態において、UIエレメント642を選択することによってユーザ入力が提供されてもよい。ユーザは、このエレメントを介してあらゆる適切なフィルタを入力してもよく、それによりエリア618に表示されたデータがフィルタリングされてもよい。
【0118】
イベントタブ642を選択することにより、ユーザが
図7のユーザインターフェース(UI)700へナビゲートされてもよい。
【0119】
図7は、少なくとも1つの実施形態による、リージョン構築と関連付けられたイベントに関連した情報を表示する例示的なユーザインターフェース700を示すブロック図である。UI700は、UI600を介した選択後のイベントタブのビューを表示してもよい。イベントタブ702(
図6のイベントタブ642に対応する)を選択することにより、データがエリア704に表示されてもよい。イベントは、ケイパビリティに対応してもよい。
【0120】
イベントタブ702は、イベント識別子(コラム706)、イベントが受信された時間に対応する時間/タイムスタンプ(コラム708)、ケイパビリティが発行されると仮定される順序を示すポジション(コラム710)、イベントのタイプ(例えば、ケイパビリティ)を示すタイプ(コラム712)、イベントが関連付けられた(例えば、サービスをブートストラップすることにより発行された)特定のサービス(フロック設定)を識別する名前(コラム714)またはその他の識別子に対応するコラム706~714を含んでもよい。エリア704に表示されていないイベントと関連付けられたあらゆる適切な情報が、オプション716の選択に基づいて表示されてもよい。
【0121】
図8は、少なくとも1つの実施形態による、リージョン構築を実行するための(例えば、ブートストラップオペレーションをインクリメントに実行することによってリージョンを修正するための)例示的な方法800を示す。方法800は、
図1のクラウドインフラストラクチャオーケストレーションサービス102(例えば、
図1のマルチフロックオーケストレータ106などのオーケストレーションサービス)の1つまたは複数のコンポーネントによって実行されてもよい。コンピューティングデバイスの1つまたは複数のプロセッサによって実行されるとコンピューティングデバイスに方法800を実行させるコンピュータ可読命令を含むコンピュータ可読記憶媒体。方法800は、あらゆる適切な順序でまたは並行して実行されてもよい。方法800は、
図8に示されているよりも多くのまたは少ないステップを含んでもよいことが認められるべきである。
【0122】
方法800は、802において開始してもよく、ここで、1つまたは複数のデータセンタに対応するリージョン内でブートストラップされる複数のサービスに対応する複数の構成ファイルが取得されてもよい。いくつかの実施形態において、複数のサービスの各々は、インフラストラクチャコンポーネントおよび対応するソフトウェアアーティファクトを含むリソースのそれぞれのセットと関連付けられてもよい。
【0123】
804において、複数のサービスの間の1つまたは複数の依存が、複数の構成ファイルに少なくとも部分的に基づいて識別されてもよい。上記で説明されているように、静的解析が実行されてもよく、この静的解析は、1つまたは複数の依存を識別するために構成ファイルをパースすることを含むことができる(他のサービスと関連付けられた変数および/または識別子の直接参照、他のサービスと関連付けられた変数および/または識別子の関節参照など)。
【0124】
806において、複数のサービスをブートストラップするためのオペレーションが実行される順序が、1つまたは複数の識別された依存に少なくとも部分的に基づいて決定されてもよい。上記で説明されているように、レコード、データ構造(例えば、
図5の構築依存グラフ314などの有向グラフ)が、これらの依存の知識を維持するために生成されてもよい。
【0125】
808において、プロビジョニングおよびデプロイメントマネジャ(例えば、
図1のCIOSセントラル108)が、決定された順序に従って複数のサービスをブートストラップするための対応するオペレーションを実行するようにインクリメントに命令されてもよい。いくつかの実施形態において、依存を管理するためにデータ構造が使用される場合など、データ構造は、リージョン構築に対応するあらゆる適切な数のサービスのブートストラップオペレーションをインクリメントに推進するために
図7に関連して上記で説明されているのと類似の形式でトラバースされることができる。
【0126】
図9は、少なくとも1つの実施形態による、リージョン構築を実行する(例えば、リージョン内の1つまたは複数のデータセンタへリソースをブートストラップする)ためにバージョンセットを利用するための例示的な方法900を示す。方法900は、
図1のクラウドインフラストラクチャオーケストレーションサービス102の1つまたは複数のコンポーネント(例えば、
図1のマルチフロックオーケストレータ106などのオーケストレーションサービス)によって実行されてもよい。コンピューティングデバイスの1つまたは複数のプロセッサによって実行されるとコンピューティングデバイスに方法900を実行させるコンピュータ可読命令を含むコンピュータ可読記憶媒体。方法900は、あらゆる適切な順序でまたは並行して実行されてもよい。方法900は、
図900に示されているよりも多いまたは少ないステップを含んでもよい。
【0127】
方法900は、902において開始してもよく、ここで、複数のバージョンセット(例えば、
図6のバージョンセット)が維持されてもよい。複数のサービスと関連付けられた複数の構成ファイルの構成ファイルのそれぞれのセットを識別する複数のバージョンセットの各々。
【0128】
904において、第1のバージョンセット(例えば、nightlyバージョンセット)が決定されてもよい。第1のバージョンセットは、複数の構成ファイルから構成ファイルの第1のセットを識別してもよい。
【0129】
906において、第1のバージョンセットによって識別された構成ファイルの第1のセットを検証するための検証過程が実行されてもよい。
【0130】
908において、構成ファイルの第2のセットを識別する第2のバージョンセット(例えば、goldenバージョンセット)が生成されてもよい。いくつかの実施形態において、検証過程をうまく通過したフロック構成ファイルを識別することに少なくとも部分的に基づいて構成ファイルの第1のセットから識別される構成ファイルの第2のセット。
【0131】
910において、リージョン構築は、第2のバージョンセットによって識別された構成ファイルの第2のセットを利用して実行されてもよい。
【0132】
例示的なクラウドサービスインフラストラクチャアーキテクチャ
上記のように、サービスとしてのインフラストラクチャ(IaaS)は、クラウドコンピューティングの1つの特定のタイプである。IaaSは、公共ネットワーク(例えば、インターネット)上で、仮想化されたコンピューティングリソースを提供するように構成されることができる。IaaSモデルにおいて、クラウドコンピューティングプロバイダは、インフラストラクチャコンポーネント(例えば、サーバ、記憶装置、ネットワークノード(例えば、ハードウェア)、デプロイメントソフトウェア、プラットフォーム仮想化(例えば、ハイパーバイザレイヤ)など)をホストすることができる。いくつかのケースにおいて、IaaSプロバイダは、これらのインフラストラクチャコンポーネントに伴うための様々なサービス(例えば、ビリング、モニタリング、ロギング、ロードバランシングおよびクラスタリングなど)を供給してもよい。したがって、これらのサービスはポリシードリブンであり得るため、IaaSユーザは、アプリケーションアベイラビリティおよびパフォーマンスを維持するためにロードバランシングを推進するためのポリシーを実行することができてもよい。
【0133】
いくつかの例において、IaaSカスタマーは、インターネットなどのワイドエリアネットワーク(WAN)を通じてリソースおよびサービスにアクセスしてもよく、アプリケーションスタックの残りのエレメントをインストールするためにクラウドプロバイダのサービスを使用することができる。例えば、ユーザは、IaaSプラットフォームにログインして、仮想マシン(VM)を生成し、各々のVMにオペレーティングシステム(OS)をインストールし、データベースなどのミドルウェアをデプロイし、ワークロードおよびバックアップのためのストレージバケットを生成し、さらには企業ソフトウェアをそのVMにインストールすることができる。次いで、カスタマーは、プロバイダのサービスを使用して、ネットワークトラフィックのバランスを取る、アプリケーション問題をトラブルシューティングする、パフォーマンスをモニタリングする、災害復旧を管理する、などを含む様々な機能を実行することができる。
【0134】
ほとんどのケースでは、クラウドコンピューティングモデルは、クラウドプロバイダの参加を必要とする。クラウドプロバイダは、IaaSを提供(オファー、レンタル、販売)することを専門とするサードパーティサービスであってもよいが、そうである必要はない。エンティティは、プライベートクラウドをデプロイすることを選択し、インフラストラクチャサービスの自己のプロバイダとなってもよい。
【0135】
いくつかの例において、IaaSデプロイメントは、準備されたアプリケーションサーバなどに、新たなアプリケーションまたはアプリケーションの新たなバージョンを加えるプロセスである。これは、サーバを準備する(例えば、ライブラリ、デーモンなどをインストールする)プロセスも含んでもよい。これは、しばしば、ハイパーバイザレイヤ(例えば、サーバ、ストレージ、ネットワークハードウェア、および仮想化)の下で、クラウドプロバイダによって管理される。したがって、カスタマーは、(OS)、ミドルウェア、および/またはアプリケーションデプロイメント(例えば、セルフサービス仮想マシン(例えば、オンデマンドでスピンアップされることができるもの)において)をハンドリングするための責任があり得る。
【0136】
いくつかの例において、IaaSプロビジョニングは、使用するためのコンピュータまたは仮想ホストを獲得すること、さらには、それらに所要のライブラリまたはサービスをインストールすることを指す場合がある。ほとんどのケースでは、デプロイメントはプロビジョニングを含まず、プロビジョニングは最初に実行される必要はなくてもよい。
【0137】
いくつかのケースでは、IaaSプロビジョニングのための2つの異なる課題が存在する。第1に、あらゆるものが動作する前にインフラストラクチャの初期セットをプロビジョニングするという初期の課題がある。第2に、全てがプロビジョニングされると、既存のインフラストラクチャを発展させる(例えば、新たなサービスを追加する、サービスを変更する、サービスを除去するなど)という課題がある。いくつかのケースにおいて、これらの2つの課題は、インフラストラクチャの構成が宣言的に定義されることを可能にすることによって解決されてもよい。言い換えれば、インフラストラクチャ(例えば、どのコンポーネントが必要とされ、それらがどのように相互作用するか)は、1つまたは複数の構成ファイルによって定義されることができる。したがって、インフラストラクチャの全体的なトポロジー(例えば、どのリソースがどれに依存するか、それらが各々どのように協働するか)は、宣言的に記述されることができる。いくつかの例において、トポロジーが定義されると、構成ファイルに記述された異なるコンポーネントを生成および/または管理するワークフローが生成されることができる。
【0138】
いくつかの例において、インフラストラクチャは、多くの相互接続されたエレメントを有してもよい。例えば、コアネットワークとしても知られる、1つまたは複数の仮想プライベートクラウド(VPC)(例えば、構成可能および/または共有コンピューティングリソースの潜在的にオンデマンドのプール)が存在してもよい。いくつかの例において、ネットワークのインバウンドおよび/またはアウトバウンドトラフィックがどのようにセットアップされるかを定義するためにプロビジョニングされる1つまたは複数のインバウンド/アウトバウンドトラフィックグループおよび1つまたは複数の仮想マシン(VM)も存在してもよい。ロードバランサ、データベースなどのその他のインフラストラクチャエレメントもプロビジョニングされてもよい。より多くのインフラストラクチャエレメントが望まれるおよび/または追加されるので、インフラストラクチャは、インクリメントに発展し得る。
【0139】
いくつかの例において、様々な仮想コンピューティング環境を横断したインフラストラクチャコードのデプロイメントを可能にするために、連続的なデプロイメント技術が採用されてもよい。加えて、記述された技術は、これらの環境内でインフラストラクチャマネジメントを可能にすることができる。いくつかの例において、サービスチームは、1つまたは複数の、ただししばしば多くの、異なる生産環境へ(例えば、様々な異なる地理的ロケーションを横断して、時には全世界にわたって)デプロイされることが望まれるコードを書くことができる。しかしながら、いくつかの例において、コーデがデプロイされるインフラストラクチャは、まずセットアップされなければならない。いくつかの例において、プロビジョニングは手動で行われることができる、リソースをプロビジョニングするためにプロビジョニングツールが利用されてもよい、および/またはインフラストラクチャがプロビジョニングされるとコードをデプロイするためにデプロイメントツールが利用されてもよい。
【0140】
図10は、少なくとも1つの実施形態による、IaaSアーキテクチャの例示的なパターンを示すブロック
図1000である。サービスオペレータ1002は、仮想クラウドネットワーク(VCN)1006およびセキュアホストサブネット1008を含むことができるセキュアホストテナンシ1004に通信により結合されることができる。いくつかの例において、サービスオペレータ1002は、1つまたは複数のクライアントコンピューティングデバイスを使用してもよく、これは、Microsoft Windows Mobile(登録商標)などのソフトウェア、および/またはiOS、Windows Phone、Android、BlackBerry 8、Palm OSなどの様々なモバイルオペレーティングシステムを実行し、インターネット、Eメール、ショートメッセージサービス(SMS)、Blackberry(登録商標)、またはその他の通信プロトコルが有効化される、ポータブルハンドヘルドデバイス(例えば、iPhone(登録商標)、携帯電話、iPad(登録商標)、コンピューティングタブレット、パーソナルデジタルアシスタント(PDA))またはウェアラブルデバイス(例えば、Google Glass(登録商標)ヘッドマウントディスプレイ)であることができる。代替的に、クライアントコンピューティングデバイスは、例えば、Microsoft Windows(登録商標)、Apple Macintosh(登録商標)、および/またはLinux(登録商標)オペレーティングシステムの様々なバージョンを実行するパーソナルコンピュータおよび/またはラップトップコンピュータを含む汎用パーソナルコンピュータであることができる。クライアントコンピューティングデバイスは、例えば、Google Chrome OSなどの、限定することなく様々なGNU/Linuxオペレーティングシステムを含む、様々な市販のUNIX(登録商標)またはUNIXのようなオペレーティングシステムのいずれかを実行するワークステーションコンピュータであることができる。代替的に、または加えて、クライアントコンピューティングデバイスは、VCN1006および/またはインターネットへアクセスすることができるネットワーク上で通信することができる、シンクライアントコンピュータ、インターネット接続可能なゲーミングシステム(例えば、Kinect(登録商標)ジェスチャ入力デバイスを備えるまたは備えないMicrosoft Xboxゲーミングコンソール)、および/またはパーソナルメッセージングデバイスなどの、あらゆるその他の電子デバイスであってもよい。
【0141】
VCN1006は、SSH VCN1012に含まれたLPG1010を介してセキュアシェル(SSH)VCN1012に通信により結合されることができるローカルピアリングゲートウェイ(LPG)1010を含むことができる。SSH VCN1012は、SSHサブネット1014を含むことができ、SSH VCN1012は、コントロールプレーンVCN1016に含まれたLPG1010を介してコントロールプレーンVCN1016に通信により結合されることができる。また、SSH VCN1012は、LPG1010を介してデータプレーンVCN1018に通信により結合されることができる。コントロールプレーンVCN1016およびデータプレーンVCN1018は、IaaSプロバイダによって所有および/または運用されることができるサービステナンシ1019に含まれることができる。
【0142】
コントロールプレーンVCN1016は、ペリメータネットワーク(例えば、企業イントラネットと外部ネットワークとの間の企業ネットワークの部分)として機能するコントロールプレーン非武装地帯(DMZ)ティア1020を含むことができる。DMZベースサーバは、制限された責任を有してもよく、違反を閉じ込めておくことを助けてもよい。加えて、DMZティア1020は、1つまたは複数のロードバランサ(LB)サブネット1022、アプリサブネット1026を含むことができるコントロールプレーンアプリティア1024、データベース(DB)サブネット1030(例えば、フロントエンドDBサブネットおよび/またはバックエンドDBサブネット)を含むことができるコントロールプレーンデータティア1028を含むことができる。コントロールプレーンDMZティア1020に含まれたLBサブネット1022は、コントロールプレーンアプリティア1024に含まれたアプリサブネット1026およびコントロールプレーンVCN1016に含まれることができるインターネットゲートウェイ1034に通信により結合されることができ、アプリサブネット1026は、コントロールプレーンデータティア1028に含まれたDBサブネット1030、サービスゲートウェイ1036、およびネットワークアドレストランスレーション(NAT)ゲートウェイ1038に通信により結合されることができる。コントロールプレーンVCN1016は、サービスゲートウェイ1036およびNATゲートウェイ1038を含むことができる。
【0143】
コントロールプレーンVCN1016は、アプリサブネット1026を含むことができるデータプレーンミラーアプリティア1040を含むことができる。データプレーンミラーアプリティア1040に含まれたアプリサブネット1026は、コンピュートインスタンス1044を実行することができる仮想ネットワークインターフェースコントローラ(VNIC)1042を含むことができる。コンピュートインスタンス1044は、データプレーンミラーアプリティア1040のアプリサブネット1026を、データプレーンアプリティア1046に含まれることができるアプリサブネット1026に通信により結合することができる。
【0144】
データプレーンVCN1018は、データプレーンアプリティア1046、データプレーンDMZティア1048、およびデータプレーンデータティア1050を含むことができる。データプレーンDMZティア1048は、データプレーンアプリティア1046のアプリサブネット1026およびデータプレーンVCN1018のインターネットゲートウェイ1034に通信により結合されることができるLBサブネット1022を含むことができる。アプリサブネット1026は、データプレーンVCN1018のサービスゲートウェイ1036およびデータプレーンVCN1018のNATゲートウェイ1038に通信により結合されることができる。データプレーンデータティア1050は、データプレーンアプリティア1046のアプリサブネット1026に通信により結合されることができるDBサブネット1030も含むことができる。
【0145】
コントロールプレーンVCN1016およびデータプレーンVCN1018のインターネットゲートウェイ1034は、公共インターネット1054に通信により結合されることができるメタデータマネジメントサービス1052に通信により結合されることができる。公共インターネット1054は、コントロールプレーンVCN1016およびデータプレーンVCN1018のNATゲートウェイ1038に通信により結合されることができる。コントロールプレーンVCN1016およびデータプレーンVCN1018のサービスゲートウェイ1036は、クラウドサービス1056に通信により結合されることができる。
【0146】
いくつかの例において、コントロールプレーンVCN1016およびデータプレーンVCN1018のサービスゲートウェイ1036は、公共インターネット1054を通過することなくクラウドサービス1056へアプリケーションプログラミングインターフェース(API)コールを行うことができる。サービスゲートウェイ1036からクラウドサービス1056へのAPIコールは、一方向であることができる。サービスゲートウェイ1036はクラウドサービス1056へAPIコールを行うことができ、クラウドサービス1056は、リクエストされたデータをサービスゲートウェイ1036へ送信することができる。しかしながら、クラウドサービス1056は、サービスゲートウェイ1036へのAPIコールを開始しなくてもよい。
【0147】
いくつかの例において、セキュアホストテナンシ1004は、さもなければ隔離され得るサービステナンシ1019に直接接続されることができる。セキュアホストサブネット1008は、さもなければ隔離されるシステム上の双方向通信を可能にし得るLPG1010を通じてSSHサブネット1014と通信することができる。セキュアホストサブネット1008をSSHサブネット1014に接続することは、セキュアホストサブネット1008に、サービステナンシ1019内の他のエンティティへのアクセスを与えてもよい。
【0148】
コントロールプレーンVCN1016は、サービステナンシ1019のユーザが、所望のリソースをセットアップまたはさもなければプロビジョニングすることを可能にし得る。コントロールプレーンVCN1016においてプロビジョニングされる所望のリソースは、データプレーンVCN1018においてデプロイまたはさもなければ使用されてもよい。いくつかの例において、コントロールプレーンVCN1016は、データプレーンVCN1018から隔離されることができ、コントロールプレーンVCN1016のデータプレーンミラーアプリティア1040は、データプレーンミラーアプリティア1040およびデータプレーンアプリティア1046に含まれることができるVNIC1042を介して、データプレーンVCN1018のデータプレーンアプリティア1046と通信することができる。
【0149】
いくつかの例において、システムのユーザ、またはカスタマーは、メタデータマネジメントサービス1052へリクエストを通信することができる公共インターネット1054を通じて、リクエストを行う、例えば、オペレーションを作成、読み出し、更新、または削除(CRUD)することができる。メタデータマネジメントサービス1052は、インターネットゲートウェイ1034を通じてコントロールプレーンVCN1016へリクエストを通信することができる。リクエストは、コントロールプレーンDMZティア1020に含まれたLBサブネット1022によって受信されることができる。LBサブネット1022は、リクエストが有効であることを決定してもよく、この決定に応答して、LBサブネット1022は、コントロールプレーンアプリティア1024に含まれたアプリサブネット1026へリクエストを送信することができる。リクエストが検証され、公共インターネット1054へのコールを要求すると、公共インターネット1054へのコールがNATゲートウェイ1038へ送信されてもよく、NATゲートウェイ1038は公共インターネット1054へのコールを行うことができる。リクエストによって記憶されることが望まれ得るメタデータは、DBサブネット1030に記憶されることができる。
【0150】
いくつかの例において、データプレーンミラーアプリティア1040は、コントロールプレーンVCN1016とデータプレーンVCN1018との間の直接通信を容易にすることができる。例えば、構成に対する変更、更新、またはその他の適切な修正が、データプレーンVCN1018に含まれたリソースに適用されることが望まれる場合がある。VNIC1042を介して、コントロールプレーンVCN1016は、データプレーンVCN1018に含まれたリソースと直接通信することができ、これにより、それらに対して構成への変更、更新、またはその他の適切な修正を実行することができる。
いくつかの実施形態において、コントロールプレーンVCN1016およびデータプレーンVCN1018は、サービステナンシ1019に含まれることができる。このケースでは、システムのユーザ、またはカスタマーは、コントロールプレーンVCN1016またはデータプレーンVCN1018のいずれも所有または操作しない場合がある。その代わりに、IaaSプロバイダが、コントロールプレーンVCN1016およびデータプレーンVCN1018を所有または操作してもよく、それら両方は、サービステナンシ1019に含まれてもよい。この実施形態は、ユーザまたはカスタマーが他のユーザまたは他のカスタマーのリソースと相互作用することを防止し得るネットワークの隔離を可能にすることができる。また、この実施形態は、記憶のために、所望のレベルの脅威防止を有さない場合がある公共インターネット1054に依存する必要なく、システムのユーザまたはカスタマーが、プライベートでデータベースを記憶することを可能にしてもよい。
【0151】
その他の実施形態において、コントロールプレーンVCN1016に含まれたLBサブネット1022は、サービスゲートウェイ1036から信号を受信するように構成されることができる。この実施形態において、コントロールプレーンVCN1016およびデータプレーンVCN1018は、公共インターネット1054をコールすることなくIaaSプロバイダのカスタマーによってコールされるように構成されてもよい。IaaSプロバイダのカスタマーは、この実施形態を望む場合がある。なぜならば、カスタマーが使用するデータベースが、IaaSプロバイダによって制御されてもよく、公共インターネット1054から隔離されてもよいサービステナンシ1019に記憶されてもよいからである。
【0152】
図11は、少なくとも1つの実施形態による、IaaSアーキテクチャの別の例示的なパターンを示すブロック
図1100である。サービスオペレータ1102(例えば、
図10のサービスオペレータ1002)は、仮想クラウドネットワーク(VCN)1106(例えば、
図10のVCN1006)およびセキュアホストサブネット1108(例えば、
図10のセキュアホストサブネット1008)を含むことができるセキュアホストテナンシ1104(例えば、
図10のセキュアホストテナンシ1004)に通信により結合されることができる。VCN1106は、SSH VCN1112に含まれたLPG1010を介してセキュアシェル(SSH)VCN1112(例えば、
図10のSSH VCN1012)に通信により結合されることができるローカルピアリングゲートウェイ(LPG)1110(例えば、
図10のLPG1010)を含むことができる。SSH VCN1112は、SSHサブネット1114(例えば、
図10のSSHサブネット1014)を含むことができ、SSH VCN1112は、コントロールプレーンVCN1116に含まれたLPG1110を介してコントロールプレーンVCN1116(例えば、
図10のコントロールプレーンVCN1016)に通信により結合されることができる。コントロールプレーンVCN1116は、サービステナンシ1119(例えば、
図10のサービステナンシ1019)に含まれることができ、データプレーンVCN1118(例えば、
図10のデータプレーンVCN1018)は、システムの、ユーザまたはカスタマーによって所有または操作され得るカスタマーテナンシ1121に含まれることができる。
【0153】
コントロールプレーンVCN1116は、LBサブネット1122(例えば、
図10のLBサブネット1022)を含むことができるコントロールプレーンDMZティア1120(例えば、
図10のコントロールプレーンDMZティア1020)、アプリサブネット1126(例えば、
図10のアプリサブネット1026)を含むことができるコントロールプレーンアプリティア1124(例えば、
図10のコントロールプレーンアプリティア1024)、およびデータベース(DB)サブネット1130(例えば、
図10のDBサブネット1030に類似のもの)を含むことができるコントロールプレーンデータティア1128(例えば、
図10のコントロールプレーンデータティア1028)を含むことができる。コントロールプレーンDMZティア1120に含まれたLBサブネット1122は、コントロールプレーンアプリティア1124に含まれたアプリサブネット1126およびコントロールプレーンVCN1116に含まれることができるインターネットゲートウェイ1134(例えば、
図10のインターネットゲートウェイ1034)に通信により結合されることができ、アプリサブネット1126は、コントロールプレーンデータティア1128に含まれたDBサブネット1130、サービスゲートウェイ1136(例えば、
図10のサービスゲートウェイ1036)、およびネットワークアドレストランスレーション(NAT)ゲートウェイ1138(例えば、
図10のNATゲートウェイ1038)に通信により結合されることができる。コントロールプレーンVCN1116は、サービスゲートウェイ1136およびNATゲートウェイ1138を含むことができる。
【0154】
コントロールプレーンVCN1116は、アプリサブネット1126を含むことができるデータプレーンミラーアプリティア1140(例えば、
図10のデータプレーンミラーアプリティア1040)を含むことができる。データプレーンミラーアプリティア1140に含まれたアプリサブネット1126は、コンピュートインスタンス1144(例えば、
図10のコンピュートインスタンス1044に類似のもの)を実行することができる仮想ネットワークインターフェースコントローラ(VNIC)1142(例えば、1042のVNIC)を含むことができる。コンピュートインスタンス1144は、データプレーンミラーアプリティア1140に含まれたVNIC1142およびデータプレーンアプリティア1146に含まれたVNIC1142を介して、データプレーンミラーアプリティア1140のアプリサブネット1126と、データプレーンアプリティア1146(例えば、
図10のデータプレーンアプリティア1046)に含まれることができるサプリサブネット1126との間の通信を容易にすることができる。
【0155】
コントロールプレーンVCN1116に含まれたインターネットゲートウェイ1134は、公共インターネット1154(例えば、
図10の公共インターネット1054)に通信により結合されることができるメタデータマネジメントサービス1152(例えば、
図10のメタデータマネジメントサービス1052)に通信により結合されることができる。公共インターネット1154は、コントロールプレーンVCN1116に含まれたNATゲートウェイ1138に通信により結合されることができる。コントロールプレーンVCN1116に含まれたサービスゲートウェイ1136は、クラウドサービス1156(例えば、
図10のクラウドサービス1056)に通信により結合されることができる。
【0156】
いくつかの例において、データプレーンVCN1118は、カスタマーテナンシ1121に含まれることができる。このケースでは、IaaSプロバイダは、各々のカスタマーのためのコントロールプレーンVCN1116を提供してもよく、IaaSプロバイダは、各々のカスタマーのために、サービステナンシ1119に含まれた固有のコンピュートインスタンス1144をセットアップしてもよい。各々のコンピュートインスタンス1144は、サービステナンシ1119に含まれたコントロールプレーンVCN1116と、カスタマーテナンシ1121に含まれたデータプレーンVCN1118との間の通信を可能にし得る。コンピュートインスタンス1144により、サービステナンシ1119に含まれたコントロールプレーンVCN1116においてプロビジョニングされるリソースが、カスタマーテナンシ1121に含まれたデータプレーンVCN1118においてデプロイまたはさもなければ使用されることができる。
【0157】
その他の例において、IaaSプロバイダのカスタマーは、カスタマーテナンシ1121に存在するデータベースを有してもよい。この例において、コントロールプレーンVCN1116は、アプリサブネット1126を含むことができるデータプレーンミラーアプリティア1140を含むことができる。データプレーンミラーアプリティア1140は、データプレーンVCN1118に存在することができるが、データプレーンミラーアプリティア1140は、データプレーンVCN1118に存在しなくてもよい。すなわち、データプレーンミラーアプリティア1140は、カスタマーテナンシ1121へのアクセスを有してもよいが、データプレーンミラーアプリティア1140は、データプレーンVCN1118に存在しなくてもよいまたはIaaSプロバイダのカスタマーによって所有または操作されなくてもよい。データプレーンミラーアプリティア1140は、データプレーンVCN1118に対してコールを行うように構成されてもよいが、コントロールプレーンVCN1116に含まれたあらゆるエンティティに対するコールを行うように構成されなくてもよい。カスタマーは、コントロールプレーンVCN1116においてプロビジョニングされるデータプレーンVCN1118におけるリソースをデプロイまたはさもなければ使用することを望む場合があるが、データプレーンミラーアプリティア1140は、カスタマーの、所望のデプロイメントまたはリソースのその他の使用を容易にすることができる。
【0158】
いくつかの実施形態において、IaaSプロバイダのカスタマーは、データプレーンVCN1118にフィルタを適用することができる。この実施形態において、カスタマーは、どのデータプレーンVCN1118がアクセスすることができるかを決定することができ、カスタマーは、データプレーンVCN1118から公共インターネット1154へのアクセスを制限してもよい。IaaSプロバイダは、フィルタを適用することができなくてもよいまたはさもなければあらゆる外部のネットワークまたはデータベースへのデータプレーンVCN1118のアクセスを制御することができなくてもよい。カスタマーテナンシ1121に含まれたデータプレーンVCN1118にカスタマーによってフィルタおよび制御を適用することは、データプレーンVCN1118を他のカスタマーおよび公共インターネット1154から隔離することに役立つことができる。
【0159】
いくつかの実施形態において、クラウドサービス1156は、コントロールプレーンVCN1116またはデータプレーンVCN1118における、公共インターネット1154に存在しない場合があるサービスにアクセスするために、サービスゲートウェイ1136によってコールされることができる。クラウドサービス1156と、コントロールプレーンVCN1116またはデータプレーンVCN1118との間の接続は、ライブまたは連続的でなくてもよい。クラウドサービス1156は、IaaSプロバイダによって所有または操作される異なるネットワークに存在してもよい。クラウドサービス1156は、サービスゲートウェイ1136からのコールを受信するように構成されてもよく、公共インターネット1154からのコールを受信しないように構成されてもよい。いくつかのクラウドサービス1156は、他のクラウドサービス1156から隔離されてもよく、コントロールプレーンVCN1116は、コントロールプレーンVCN1116と同じリージョンにはない場合があるクラウドサービス1156から隔離されてもよい。例えば、コントロールプレーンVCN1116は、「リージョン1」に配置されてもよく、クラウドサービス「デプロイメント10」は、リージョン1および「リージョン2」に配置されてもよい。リージョン1に配置されたコントロールプレーンVCN1116に含まれたサービスゲートウェイ1136によってデプロイメント10に対するコールが行われると、コールは、リージョン1におけるデプロイメント10へ送信されてもよい。この例において、コントロールプレーンVCN1116、またはリージョン1におけるデプロイメント10は、リージョン2におけるデプロイメント10に通信により結合されなくてもよいまたはさもなければリージョン2におけるデプロイメント10と通信しなくてもよい。
【0160】
図12は、少なくとも1つの実施形態による、IaaSアーキテクチャの別の例示的なパターンを示すブロック
図1200である。サービスオペレータ1202(例えば、
図10のサービスオペレータ1002)は、仮想クラウドネットワーク(VCN)1206(例えば、
図10のVCN1006)およびセキュアホストサブネット1208(例えば、
図10のセキュアホストサブネット1008)を含むことができるセキュアホストテナンシ1204(例えば、
図10のセキュアホストテナンシ1004)に通信により結合されることができる。VCN1206は、SSH VCN1212に含まれたLPG1210を介してSSH VCN1212(例えば、
図10のSSH VCN1012)に通信により結合されることができるLPG1210(例えば、
図10のLPG1010)を含むことができる。SSH VCN1212は、SSHサブネット1214(例えば、
図10のSSHサブネット1014)を含むことができ、SSH VCN1212は、コントロールプレーンVCN1216に含まれたLPG1210を介してコントロールプレーンVCN1216(例えば、
図10のコントロールプレーンVCN1016)に、およびデータプレーンVCN1218に含まれたLPG1210を介してデータプレーンVCN1218(例えば、
図10のデータプレーン1018)に通信により結合されることができる。コントロールプレーンVCN1216およびデータプレーンVCN1218は、サービステナンシ1219(例えば、
図10のサービステナンシ1019)に含まれることができる。
【0161】
コントロールプレーンVCN1216は、ロードバランサ(LB)サブネット1222(例えば、
図10のLBサブネット1022)を含むことができるコントロールプレーンDMZティア1220(例えば、
図10のコントロールプレーンDMZティア1020)、アプリサブネット1226(例えば、
図10のアプリサブネット1026と類似のもの)を含むことができるコントロールプレーンアプリティア1224(例えば、
図10のコントロールプレーンアプリティア1024)、およびDBサブネット1230を含むことができるコントロールプレーンデータティア1228(例えば、
図10のコントロールプレーンデータティア1028)を含むことができる。コントロールプレーンDMZティア1220に含まれたLBサブネット1222は、コントロールプレーンアプリティア1224に含まれたアプリサブネット1226、およびコントロールプレーンVCN1216に含まれることができるインターネットゲートウェイ1234(例えば、
図10のインターネットゲートウェイ1034)に通信により結合されることができ、アプリサブネット1226は、コントロールプレーンデータティア1228に含まれたDBサブネット1230、サービスゲートウェイ1236(例えば、
図10のサービスゲートウェイ)およびネットワークアドレストランスレーション(NAT)ゲートウェイ1238(例えば、
図10のNATゲートウェイ1038)に通信により結合されることができる。コントロールプレーンVCN1216は、サービスゲートウェイ1236およびNATゲートウェイ1238を含むことができる。
【0162】
データプレーンVCN1218は、データプレーンアプリティア1246(例えば、
図10のデータプレーンアプリティア1046)、データプレーンDMZティア1248(例えば、
図10のデータプレーンDMZティア1048)、およびデータプレーンデータティア1250(例えば、
図10のデータプレーンデータティア1050)を含むことができる。データプレーンDMZティア1248は、LBサブネット1222を含むことができ、このLBサブネット1222は、データプレーンアプリティア1246の信頼できるアプリサブネット1260および信頼できないアプリサブネット1262、ならびにデータプレーンVCN1218に含まれたインターネットゲートウェイ1234に通信により結合されることができる。信頼できるアプリサブネット1260は、データプレーンVCN1218に含まれたサービスゲートウェイ1236、データプレーンVCN1218に含まれたNATゲートウェイ1238、およびデータプレーンデータティア1250に含まれたDBサブネット1230に通信により結合されることができる。信頼できないアプリサブネット1262は、データプレーンVCN1218に含まれたサービスゲートウェイ1236およびデータプレーンデータティア1250に含まれたDBサブネット1230に通信により結合されることができる。データプレーンデータティア1250は、データプレーンVCN1218に含まれたサービスゲートウェイ1236に通信により結合されることができるDBサブネット1230を含むことができる。
【0163】
信頼できないアプリサブネット1262は、テナント仮想マシン(VM)1266(1)~(N)に通信により結合されることができる1つまたは複数のプライマリVNIC1264(1)~(N)を含むことができる。各々のテナントVM1266(1)~(N)は、それぞれのカスタマーテナンシ1270(1)~(N)に含まれることができるそれぞれのコンテナエグレスVCN1268(1)~(N)に含まれることができるそれぞれのアプリサブネット1267(1)~(N)に通信により結合されることができる。それぞれのセカンダリVNIC1272(1)~(N)は、データプレーンVCN1218に含まれた信頼できないアプリサブネット1262と、コンテナエグレスVCN1268(1)~(N)に含まれたアプリサブネットとの間の通信を容易にすることができる。各々のコンテナエグレスVCN1268(1)~(N)は、公共インターネット1254(例えば、
図10の公共インターネット1054)に通信により結合されることができるNATゲートウェイ1238を含むことができる。
【0164】
コントロールプレーンVCN1216およびデータプレーンVCN1218に含まれたインターネットゲートウェイ1234は、公共インターネット1254に通信により結合されることができるメタデータマネジメントサービス1252(例えば、
図10のメタデータマネジメントシステム1052)に通信により結合されることができる。公共インターネット1254は、コントロールプレーンVCN1216およびデータプレーンVCN1218に含まれたNATゲートウェイ1238に通信により結合されることができる。コントロールプレーンVCN1216およびデータプレーンVCN1218に含まれたサービスゲートウェイ1236は、クラウドサービス1256に通信により結合されることができる。
【0165】
いくつかの実施形態において、データプレーンVCN1218は、カスタマーテナンシ1270と統合されることができる。この統合は、コードを実行するときにサポートを望む場合があるケースなどのいくつかのケースでは、IaaSプロバイダのカスタマーにとって有用であるまたは望ましい可能性がある。カスタマーは、破壊的であり得る実行するためのコードを提供する場合がある、または他のカスタマーリソースと通信する場合がある、またはさもなければ望ましくない効果を生じる場合がある。これに応答して、IaaSプロバイダは、カスタマーによってIaaSプロバイダに与えられたコードを実行すべきかどうかを決定してもよい。
【0166】
いくつかの例において、IaaSプロバイダのカスタマーは、IaaSプロバイダに一時的なネットワークアクセスを許可してもよく、データプレーンアプリティア1246にアタッチされる機能をリクエストしてもよい。機能を実行するためのコードは、VM1266(1)~(N)において実行されてもよく、コードは、データプレーンVCN1218における他のどこでも実行されないように構成されてもよい。各々のVM1266(1)~(N)は、1つのカスタマーテナンシ1270に接続されてもよい。VM1266(1)~(N)に含まれたそれぞれのコンテナ1271(1)~(N)は、コードを実行するように構成されてもよい。このケースでは、デュアルアイソレーション(例えば、コードを実行するコンテナ1271(1)~(N)であって、コンテナ1271(1)~(N)は、少なくとも、信頼できないアプリサブネット1262に含まれたVM1266(1)~(N)に含まれてもよい)が存在することができ、これは、誤ったまたはさもなければ望ましくないコードがIaaSプロバイダのネットワークを損傷することまたは異なるカスタマーのネットワークを損傷することを防止するのに役立ち得る。コンテナ1271(1)~(N)は、カスタマーテナンシ1270に通信により結合されてもよく、カスタマーテナンシ1270からデータを送信または受信するように構成されてもよい。コンテナ1271(1)~(N)は、データプレーンVCN1218におけるいかなる他のエンティティからもデータを送信または受信するように構成されなくてもよい。コードの実行が完了すると、IaaSプロバイダは、コンテナ1271(1)~(N)をキルまたはさもなければ廃棄してもよい。
【0167】
いくつかの実施形態において、信頼できるアプリサブネット1260は、IaaSプロバイダによって所有または操作されてもよいコードを実行してもよい。この実施形態において、信頼できるアプリサブネット1260は、DBサブネット1230に通信により結合されてもよく、DBサブネット1230においてCRUDオペレーションを実行するように構成されてもよい。信頼できないアプリサブネット1262は、DBサブネット1230に通信により結合されてもよいが、この実施形態において、信頼できないアプリサブネットは、DBサブネット1230において読み出しオペレーションを実行するように構成されてもよい。各々のカスタマーのVM1266(1)~(N)に含まれることができかつカスタマーからコードを実行してもよいコンテナ1271(1)~(N)は、DBサブネット1230に通信により結合されなくてもよい。
【0168】
その他の実施形態において、コントロールプレーンVCN1216およびデータプレーンVCN1218は、直接に通信により結合されなくてもよい。この実施形態において、コントロールプレーンVCN1216とデータプレーンVCN1218との間には直接通信が存在しなくてもよい。しかしながら、通信は、少なくとも1つの方法を通じて間接的に行われることができる。LPG1210がIaaSプロバイダによって確立されてもよく、このLPG1210は、コントロールプレーンVCN1216とデータプレーンVCN1218との間の通信を容易にすることができる。別の例において、コントロールプレーンVCN1216またはデータプレーンVCN1218は、サービスゲートウェイ1236を介してクラウドサービス1256へコールを行うことができる。例えば、コントロールプレーンVCN1216からクラウドサービス1256へのコールは、データプレーンVCN1218と通信することができるサービスのためのリクエストを含むことができる。
【0169】
図13は、少なくとも1つの実施形態による、IaaSアーキテクチャの別の例示的なパターンを示すブロック
図1300である。サービスオペレータ1302(例えば、
図10のサービスオペレータ1002)は、仮想クラウドネットワーク(VCN)1306(例えば、
図10のVCN1006)およびセキュアホストサブネット1308(例えば、
図10のセキュアホストサブネット1008)を含むことができるセキュアホストテナンシ1304(例えば、
図10のセキュアホストテナンシ1004)に通信により結合されることができる。VCN1306は、SSH VCN1312に含まれたLPG1310を介してSSH VCN1312(例えば、
図10のSSH VCN1012)に通信により結合されることができるLPG1310(例えば、
図10のLPG1010)を含むことができる。SSH VCN1312は、SSHサブネット1314(例えば、
図10のSSHサブネット1014)を含むことができ、SSH VCN1312は、コントロールプレーンVCN1316に含まれたLPG1310を介してコントロールプレーンVCN1316(例えば、
図10のコントロールプレーンVCN1016)に、およびデータプレーンVCN1318に含まれたLPG1310を介してデータプレーンVCN1318(例えば、
図10のデータプレーンVCN1018)に通信により結合されることができる。コントロールプレーンVCN1316およびデータプレーンVCN1318は、サービステナンシ1319(例えば、
図10のサービステナンシ1019)に含まれることができる。
【0170】
コントロールプレーンVCN1316は、LBサブネット1322(例えば、
図10のLBサブネット1022)を含むことができるコントロールプレーンDMZティア1320(例えば、
図10のコントロールプレーンDMZティア1020)、アプリサブネット1326(例えば、
図10のアプリサブネット1026)を含むことができるコントロールプレーンアプリティア1324(例えば、
図10のコントロールプレーンアプリティア1024)、およびDBサブネット1330(例えば、
図12のDBサブネット1230)を含むことができるコントロールプレーンデータティア1328(例えば、
図10のコントロールプレーンデータティア1028)を含むことができる。コントロールプレーンDMZティア1320に含まれたLBサブネット1322は、コントロールプレーンアプリティア1324に含まれたアプリサブネット1326およびコントロールプレーンVCN1316に含まれることができるインターネットゲートウェイ1334(例えば、
図10のインターネットゲートウェイ1034)に通信により結合されることができ、アプリサブネット1326は、コントロールプレーンデータティア1328に含まれたDBサブネット1330、サービスゲートウェイ1336(例えば、
図10のサービスゲートウェイ)およびネットワークアドレストランスレーション(NAT)ゲートウェイ1338(例えば、
図10のNATゲートウェイ1038)に通信により結合されることができる。コントロールプレーンVCN1316は、サービスゲートウェイ1336およびNATゲートウェイ1338を含むことができる。
【0171】
データプレーンVCN1318は、データプレーンアプリティア1346(例えば、
図10のデータプレーンアプリティア1046)、データプレーンDMZティア1348(例えば、
図10のデータプレーンDMZティア1048)、およびデータプレーンデータティア1350(例えば、
図10のデータプレーンデータティア1050)を含むことができる。データプレーンDMZティア1348は、データプレーンアプリティア1346の信頼できるアプリサブネット1360(例えば、
図12の信頼できるアプリサブネット1260)および信頼できないアプリサブネット1362(例えば、
図12の信頼できないアプリサブネット1262)、ならびにデータプレーンVCN1318に含まれたインターネットゲートウェイ1334に通信により結合されることができるLBサブネット1322を含むことができる。信頼できるアプリサブネット1360は、データプレーンVCN1318に含まれたサービスゲートウェイ1336、データプレーンVCN1318に含まれたNATゲートウェイ1338、およびデータプレーンデータティア1350に含まれたDBサブネット1330に通信により結合されることができる。信頼できないアプリサブネット1362は、データプレーンVCN1318に含まれたサービスゲートウェイ1336およびデータプレーンデータティア1350に含まれたDBサブネット1330に通信により結合されることができる。データプレーンデータティア1350は、データプレーンVCN1318に含まれたサービスゲートウェイ1336に通信により結合されることができるDBサブネット1330を含むことができる。
【0172】
信頼できないアプリサブネット1362は、信頼できないアプリサブネット1362内に存在するテナント仮想マシン(VM)1366(1)~(N)に通信により結合されることができるプライマリVNIC1364(1)~(N)を含むことができる。各々のテナントVM1366(1)~(N)は、それぞれのコンテナ1367(1)~(N)においてコードを実行することができ、コンテナエグレスVCN1368に含まれることができるデータプレーンアプリティア1346に含まれることができるアプリサブネット1326に通信により結合されることができる。それぞれのセカンダリVNIC1372(1)~(N)は、データプレーンVCN1318に含まれた信頼できないアプリサブネット1362と、コンテナエグレスVCN1368に含まれたアプリサブネットとの間の通信を容易にすることができる。コンテナエグレスVCNは、公共インターネット1354(例えば、
図10の公共インターネット1054)に通信により結合されることができるNATゲートウェイ1338を含むことができる。
【0173】
コントロールプレーンVCN1316およびデータプレーンVCN1318に含まれたインターネットゲートウェイ1334は、公共インターネット1354に通信により結合されることができるメタデータマネジメントサービス1352(例えば、
図10のメタデータマネジメントサービス1052)に通信により結合されることができる。公共インターネット1354は、コントロールプレーンVCN1316およびデータプレーンVCN1318に含まれたNATゲートウェイ1338に通信により結合されることができる。コントロールプレーンVCN1316およびデータプレーンVCN1318に含まれたサービスゲートウェイ1336は、クラウドサービス1356に通信により結合されることができる。
【0174】
いくつかの例において、
図13のブロック
図1300のアーキテクチャによって示されたパターンは、
図12のブロック
図1200のアーキテクチャによって示されたパターンに対する例外であると考えられてもよく、IaaSプロバイダがカスタマー(例えば、切断されたリージョン)と直接通信することができない場合に、IaaSプロバイダのカスタマーにとって望ましい場合がある。各々のカスタマーのためにVM1366(1)~(N)に含まれたそれぞれのコンテナ1367(1)~(N)は、カスタマーによってリアルタイムでアクセスされることができる。コンテナ1367(1)~(N)は、コンテナエグレスVCN1368に含まれることができるデータプレーンアプリティア1346のアプリサブネット1326に含まれたそれぞれのセカンダリVNIC1372(1)~(N)へコールを行うように構成されてもよい。セカンダリVNIC1372(1)~(N)は、公共インターネット1354へコールを送信してもよいNATゲートウェイ1338へコールを送信することができる。この例において、カスタマーによってリアルタイムでアクセスされることができるコンテナ1367(1)~(N)は、コントロールプレーンVCN1316から隔離されることができ、データプレーンVCN1318に含まれた他のエンティティから隔離されることができる。コンテナ1367(1)~(N)は、他のカスタマーからのリソースから隔離されてもよい。
【0175】
その他の例において、カスタマーは、クラウドサービス1356をコールするためにコンテナ1367(1)~(N)を使用することができる。この例において、カスタマーは、クラウドサービス1356からサービスをリクエストするコードをコンテナ1367(1)~(N)において実行してもよい。コンテナ1367(1)~(N)は、このリクエストをセカンダリVNIC1372(1)~(N)へ送信することができ、セカンダリVNICは、リクエストをNATゲートウェイへ送信することができ、NATゲートウェイは、リクエストを公共インターネット1354へ送信することができる。公共インターネット1354は、インターネットゲートウェイ1334を介して、コントロールプレーンVCN1316に含まれたLBサブネット1322へリクエストを送信することができる。リクエストが有効であるという決定に応答して、LBサブネットは、リクエストをアプリサブネット1326へ送信することができ、アプリサブネット1326は、サービスゲートウェイ1336を介してリクエストをクラウドサービス1356へ送信することができる。
【0176】
図示されたIaaSアーキテクチャ1000、1100、1200、1300は、示されたもの以外のコンポーネントを有してもよいことが認められるべきである。さらに、図示された実施形態は、開示の実施形態を組み込んでもよいクラウドインフラストラクチャシステムのいくつかの例でしかない。いくつかの他の実施形態において、IaaSシステムは、図示されたよりも多いまたは少ないコンポーネントを有してもよい、2つ以上のコンポーネントを組み合わせてもよい、またはコンポーネントの異なる構成または配置を有してもよい。
【0177】
ある実施形態において、本明細書において説明されたIaaSシステムは、セルフサービス、サブスクリプションベース、弾力的にスケーラブル、信頼できる、非常に利用可能な、およびセキュアな形式でカスタマーに供給される、アプリケーション、ミドルウェア、およびデータベースサービスオファリングのスイートを含んでもよい。このようなIaaSシステムの例は、本譲受人によって提供されるOracle Cloud Infrastructure(OCI)である。
【0178】
図14は、様々な実施形態が実施され得る、例示的なコンピュータシステム1400を示す。システム1400は、上記で説明されたコンピュータシステムのいずれかを実施するために使用されてもよい。図示されているように、コンピュータシステム1400は、バスサブシステム1402を介して多数の周辺サブシステムと通信する処理ユニット1404を含む。これらの周辺サブシステムは、処理加速ユニット1406、I/Oサブシステム1408、記憶サブシステム1418、および通信サブシステム1424を含んでもよい。記憶サブシステム1418は、有形コンピュータ可読記憶媒体1422およびシステムメモリ1410を含む。
【0179】
バスサブシステム1402は、コンピュータシステム1400の様々なコンポーネントおよびサブシステムに意図したように互いに通信させるための機構を提供する。バスサブシステム1402は1つのバスとして概略的に示されているが、バスサブシステムの代替的な実施形態は、多数のバスを利用してもよい。バスサブシステム1402は、様々なバスアーキテクチャのうちのいずれかを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造のうちのいずれかであってもよい。例えば、このようなアーキテクチャは、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、エンハンストISA(EISA)バス、ビデオエレクトロニクススタンダーズアソシエーション(VESA)ローカルバス、および周辺コンポーネントインターコネクト(PCI)バスを含んでもよく、これらは、IEEE P 1386.1規格に従って製造されたメザニンバスとして実施されることができる。
【0180】
1つまたは複数の集積回路(例えば、従来のマイクロプロセッサまたはマイクロコントローラ)として実施されることができる処理ユニット1404は、コンピュータシステム1400のオペレーションを制御する。1つまたは複数のプロセッサは、処理ユニット1404に含まれてもよい。これらのプロセッサは、シングルコアまたはマルチコアプロセッサを含んでもよい。ある実施形態において、処理ユニット1404は、各々の処理ユニットに含まれたシングルコアまたはマルチコアプロセッサを備える1つまたは複数の独立した処理ユニット1432および/または1434として実施されてもよい。その他の実施形態において、処理ユニット1404は、2つのデュアルコアプロセッサを1つのチップに統合することによって形成されるクアッドコア処理ユニットとして実施されてもよい。
【0181】
様々な実施形態において、処理ユニット1404は、プログラムコードに応答して様々なプログラムを実行することができ、多数の同時に実行するプログラムまたは処理を維持することができる。あらゆる与えられた時間において、実行されるプログラムコードのいくつかまたは全ては、プロセッサ1404および/または記憶サブシステム1418に存在することができる。適切なプログラミングにより、プロセッサ1404は、上記で説明された様々な機能を提供することができる。コンピュータシステム1400は、加えて、デジタル信号プロセッサ(DSP)、専用プロセッサ、および/または同様のものを含むことができる処理加速ユニット1406を含んでもよい。
【0182】
I/Oサブシステム1408は、ユーザインターフェース入力デバイスおよびユーザインターフェース出力デバイスを含んでもよい。ユーザインターフェース入力デバイスは、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組み込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、音声命令認識システムを備えるオーディオ入力デバイス、マイクロフォン、およびその他のタイプの入力デバイスを含んでもよい。ユーザインターフェース入力デバイスは、例えば、ジェスチャおよび音声指示を使用するナチュラルユーザインターフェースを通じて、ユーザが、Microsoft Xbox(登録商標) 360ゲームコントローラなどの入力デバイスを制御しかつこれと相互作用することを可能にする、Microsoft Kinect(登録商標)モーションセンサなどのモーション感知および/またはジェスチャ認識デバイスを含んでもよい。ユーザインターフェース入力デバイスは、ユーザから目の動き(例えば、写真を撮影するときおよび/またはメニューを選ぶときの「まばたき」)を検出し、アイジェスチャを入力デバイス(例えば、Google Glass(登録商標))への入力として変換する、Google Glass(登録商標)まばたき検出器などのアイジェスチャ認識デバイスも含んでもよい。加えて、ユーザインターフェース入力デバイスは、音声命令を通じて、ユーザが音声認識システム(例えば、Siri(登録商標)ナビゲータ)と相互作用することを可能にする音声認識センシングデバイスを含んでもよい。
【0183】
ユーザインターフェース入力デバイスは、これらに限定されることなく、3次元(3D)マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、およびオーディオ/ビジュアルデバイス、例えば、スピーカ、デジタルカメラ、デジタルカムコーダ、ポータブルメディアプレーヤ、ウェブカム、イメージスキャナ、指紋スキャナ、バーコードリーダ3Dスキャナ、3Dプリンタ、レーザ距離計、視線検出デバイスも含んでもよい。加えて、ユーザインターフェース入力デバイスは、例えば、医用画像入力デバイス、例えば、コンピュータ断層撮影、磁気共鳴イメージング、陽電子放出断層撮影、医用超音波検査デバイスを含んでもよい。ユーザインターフェース入力デバイスは、例えば、オーディオ入力デバイス、例えば、MIDIキーボード、デジタル楽器なども含んでもよい。
【0184】
ユーザインターフェース出力デバイスは、ディスプレイサブシステム、インジケータライト、または非視覚的ディスプレイ、例えば、オーディオ出力デバイスなどを含んでもよい。ディスプレイサブシステムは、陰極線管(CRT)、フラットパネルデバイス、例えば、液晶ディスプレイ(LCD)またはプラズマディスプレイを使用するフラットパネルデバイス、プロジェクションデバイス、タッチスクリーンなどであってもよい。一般的に、「出力デバイス」という用語の使用は、コンピュータシステム1400からユーザまたは他のコンピュータへ情報を出力するための全ての可能なタイプのデバイスおよび機構を含むことが意図されている。例えば、ユーザインターフェース出力デバイスは、これらに限定されることなく、テキスト、グラフィックおよびオーディオ/ビデオ情報を視覚的に伝達する様々なディスプレイデバイス、例えば、モニタ、プリンタ、スピーカ、ヘッドフォン、自動車ナビゲーションシステム、プロッタ、音声出力デバイス、およびモデムを含んでもよい。
【0185】
コンピュータシステム1400は、本開示において説明された実施形態の機能を提供するソフトウェアおよびデータ構造を記憶するための有形非一時的コンピュータ可読記憶媒体を提供する記憶サブシステム1418を含んでもよい。ソフトウェアは、処理ユニット1404の1つまたは複数のコアまたはプロセッサによって実行されると上記で説明された機能を提供する、プログラム、コードモジュール、命令、スクリプトなどを含むことができる。記憶サブシステム1418は、本開示に従って使用されるデータを記憶するためのリポジトリも提供してもよい。
【0186】
図14における例に示されているように、記憶サブシステム1418は、システムメモリ1410、コンピュータ可読記憶媒体1422、およびコンピュータ可読記憶媒体リーダ1420を含む様々なコンポーネントを含むことができる。システムメモリ1410は、処理ユニット1404によってロード可能および実行可能なプログラム命令を記憶してもよい。システムメモリ1410は、命令の実行中に使用されるデータおよび/またはプログラム命令の実行中に生成されるデータを記憶してもよい。様々な異なる種類のプログラムが、クライアントアプリケーション、ウェブブラウザ、ミッドティアアプリケーション、リレーショナルデータベースマネジメントシステム(RDBMS)、仮想マシン、コンテナなどを含むがこれらに限定されないシステムメモリ1410へロードされてもよい。
【0187】
システムメモリ1410は、オペレーティングシステム1416を記憶してもよい。オペレーティングシステム1416の例は、Microsoft Window(登録商標)、Apple Macintosh(登録商標)、および/またはLinuxオペレーティングシステムの様々なバージョン、様々な市販のUNIX(登録商標)またはUNIXのようなオペレーティングシステム(制限されることなく様々なGNU/Linuxオペレーティングシステム、Google Chrome(登録商標) OSなどを含む)および/またはモバイルオペレーティングシステム、例えば、iOS、Windows(登録商標)Phone、Android(登録商標) OS、BlackBerry(登録商標) OS、およびPalm(登録商標) OSオペレーティングシステムを含んでもよい。コンピュータシステム1400が1つまたは複数の仮想マシンを実行するある実装形態において、ゲストオペレーティングシステム(GOS)を伴う仮想マシンが、システムメモリ1410にロードされ、処理ユニット1404の1つまたは複数のプロセッサまたはコアによって実行されてもよい。
【0188】
システムメモリ1410は、コンピュータシステム1400のタイプに依存する異なる構成で提供されることができる。例えば、システムメモリ1410は、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM))および/または不揮発性メモリ(例えば、読み出し専用メモリ(ROM)、フラッシュメモリなど)であってもよい。スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)およびその他を含む、異なるタイプのRAM構成が提供されてもよい。いくつかの実装形態において、システムメモリ1410は、スタートアップ中など、コンピュータシステム1400内のエレメント間で情報を伝達するのに役立つ基本ルーチンを含むベーシック入力/出力システム(BIOS)を含んでもよい。
【0189】
コンピュータ可読記憶媒体1422は、コンピュータシステム1400の処理ユニット1404によって実行可能な命令を含む、コンピュータシステム1400によって自要するためのコンピュータ可読情報を一時的におよび/またはより永久に含み、記憶するための、リモート、ローカル、固定、ならびに/またはリムーバブルな記憶デバイスおよび記憶媒体を表してもよい。
【0190】
コンピュータ可読記憶媒体1422は、情報の記憶および/または送信のためのあらゆる方法または技術において実施される、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体などの、ただしこれらに限定されない、記憶媒体および通信媒体を含む、当該技術分野において知られるまたは使用されるあらゆる適切な媒体を含むことができる。これは、有形コンピュータ可読記憶媒体、例えば、RAM、ROM、電子的に消去可能なプログラマブルROM(EEPROM)、フラッシュメモリまたはその他のメモリ技術、CD-ROM、デジタルバーサタイルディスク(DVD)、またはその他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたはその他の磁気記憶デバイス、またはその他の有形コンピュータ可読媒体を含むことができる。
【0191】
例えば、コンピュータ可読記憶媒体1422は、非リムーバブル、不揮発性磁気媒体から読み出すまたはそれに書き込むハードディスクドライブ、リムーバブル、不揮発性磁気ディスクから読み出すまたはそれに書き込む磁気ディスクドライブ、CD-ROM、DVD、およびBlu-Ray(登録商標)ディスクなどのリムーバブル、不揮発性光ディスクまたはその他の光媒体から読み出すまたはそれに書き込む光ディスクドライブを含んでもよい。コンピュータ可読記憶媒体1422は、これらに限定されないが、Zip(登録商標)ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス(USB)フラッシュドライブ、セキュアデジタル(SD)カード、DVDディスク、デジタルビデオテープなどを含んでもよい。コンピュータ可読記憶媒体1422は、フラッシュメモリベースSSD、企業フラッシュドライブ、ソリッドステートROMなどの不揮発性メモリに基づくソリッドステートドライブ(SSD)、ソリッドステートRAM、ダイナミックRAM、スタティックRAM、DRAMベースSSD、磁気抵抗RAM(MRAM)SSADなどの揮発性メモリに基づくSSD、DRAMおよびフラッシュメモリメースSSDの組合せを使用するハイブリッドSSDも含んでもよい。ディスクドライブおよびそれらの関連するコンピュータ可読媒体は、コンピュータシステム1400のためのコンピュータ可読命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性ストレージを提供してもよい。
【0192】
処理ユニット1404の1つまたは複数のプロセッサまたはコアによって実行可能な機械可読命令は、非一時的コンピュータ可読記憶媒体に記憶されてもよい。非一時的コンピュータ可読記憶媒体は、揮発性メモリ記憶装置および/または不揮発性記憶装置を含む物理的に有形のメモリまたは記憶装置を含むことができる。非一時的コンピュータ可読記憶媒体の例は、磁気記憶媒体(例えば、ディスクまたはテープ)、光記憶媒体(例えば、DVD、CD)、様々なタイプのRAM、ROM、またはフラッシュメモリ、ハードドライブ、フロッピードライブ、取り外し可能なメモリドライブ(例えば、USBドライブ)、またはその他のタイプの記憶装置を含む。
【0193】
通信サブシステム1424は、他のコンピュータシステムおよびネットワークへのインターフェースを提供する。通信サブシステム1424は、他のシステムからデータを受信し、コンピュータシステム1400から他のシステムへデータを送信するためのインターフェースとして働く。例えば、通信サブシステム1424は、コンピュータシステム1400がインターネットを介して1つまたは複数のデバイスに接続されることを可能にし得る。いくつかの実施形態において、通信サブシステム1424は、(例えば、携帯電話技術、3G、4GまたはEDGE(エンハンストデータレートフォーグローバルエボリューション))などの、アドバンストデータネットワーク技術、WiFi(IEEE802.11ファミリー規格、またはその他のモバイル通信技術、またはそれらのあらゆる組合せ)、全地球測位システム(GPS)レシーバコンポーネント、および/またはその他のコンポーネントを使用して)無線音声および/またはデータネットワークにアクセスするための無線周波数(RF)トランシーバコンポーネントを含むことができる。いくつかの実施形態において、通信サブシステム1424は、無線インターフェースに加えてまたはその代わりに、有線ネットワーク接続(例えば、イーサネット)を提供することができる。
【0194】
いくつかの実施形態において、通信サブシステム1424は、コンピュータシステム1400を使用してもよい1つまたは複数のユーザの代わりに、構造化されたおよび/または構造化されていないデータフィード1426、イベントストリーム1428、イベントアップデート1430などの形式で入力通信を受信してもよい。
【0195】
例えば、通信サブシステム1424は、ソーシャルネットワークおよび/またはその他の通信サービスのユーザからリアルタイムでデータフィード1426、例えばTwitter(登録商標)フィード、Facebook(登録商標)アップデート、リッチサイトサマリ(RSS)フィードなどのウェブフィード、および/または1つまたは複数のサードパーティ情報ソースからのリアルタイムアップデートなどを受信するように構成されてもよい。
【0196】
加えて、通信サブシステム1424は、連続的であってもよいまたは本質的に明確な終わりがなく無制限であってもよい、リアルタイムイベントのイベントストリーム1428および/またはイベントアップデート1430を含んでもよい、連続的なデータストリームの形式のデータを受信するように構成されてもよい。連続的なデータを生成するアプリケーションの例は、例えば、センサデータアプリケーション、ファイナンシャルティッカー、ネットワークパフォーマンス測定ツール(例えば、ネットワークモニタリングおよびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車トラフィックモニタリングなどを含んでもよい。
【0197】
通信サブシステム1424は、コンピュータシステム1400に結合された1つまたは複数のストリーミングデータソースコンピュータと通信してもよい1つまたは複数のデータベースへ、構造化されたおよび/または構造化されていないデータフィード1426、イベントストリーム1428、イベントアップデート1430などを出力するように構成されてもよい。
【0198】
コンピュータシステム1400は、ハンドヘルドポータブルデバイス(例えば、iPhone(登録商標)携帯電話、iPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブルデバイス(例えば、Google Glass(登録商標)頭部装着型ディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバラック、またはあらゆるその他のデータ処理システムを含む、様々なタイプのうちの1つであることができる。
【0199】
コンピュータおよびネットワークの絶え間なく変化する性質により、図示されたコンピュータシステム1400の説明は、特定の例としてのみ意図されている。図示されたシステムよりも多いまたは少ないコンポーネントを有する多くのその他の構成が可能である。例えば、カスタマイズされたハードウェアが使用されてもよいおよび/または特定のエレメントがハードウェア、ファームウェア、ソフトウェア(アプレットを含む)、または組合せにおいて実施されてもよい。さらに、ネットワーク入力/出力デバイスなどの他のコンピューティングデバイスへの接続が採用されてもよい。本明細書に提供された開示および教示に基づいて、当業者は、様々な実施形態を実施するための他のやり方および/または方法を認識するであろう。
【0200】
特定の実施形態が説明されているが、様々な修正、変更、代替的な構成、および均等物も開示の範囲に含まれる。実施形態は、ある特定のデータ処理環境内のオペレーションに制限されず、複数のデータ処理環境内で自由に操作される。実施形態は、特定の連続のトランザクションおよびステップを用いて説明されているが、本開示の範囲は、説明された連続のトランザクションおよびステップに限定されないことが、当業者に明らかになるべきである。上述の実施形態の様々な特徴および態様は、個々にまたは組み合わせて使用されてもよい。
【0201】
さらに、ハードウェアおよびソフトウェアの特定の組合せを用いて実施形態が説明されているが、ハードウェアおよびソフトウェアの他の組合せも本開示の範囲内であることが認識されるべきである。実施形態は、ハードウェアにおいてのみ、ソフトウェアにおいてのみ、またはそれらの組合せを用いて、実施されてもよい。本明細書に説明された様々なプロセスは、同じプロセッサまたはあらゆる組合せにおける異なるプロセッサにおいて実施されることができる。したがって、コンポーネントまたはモジュールが、あるオペレーションを実行するように構成されていると説明されている場合、このような構成は、例えば、オペレーションを実行するために電子回路を設計することによって、オペレーションを実行するためにプログラマブル電子回路(マイクロプロセッサなど)をプログラムすることによって、またはそれらのあらゆる組合せで達成されることができる。プロセッサは、プロセス間通信のための従来技術を含むがこれに限定されない様々な技術を用いて通信することができ、プロセスの異なる対は異なる技術を用いてもよい、またはプロセスの同じ対は異なる時点で異なる技術を用いてもよい。
【0202】
実施形態は、プロセッサによって実行されるとプロセッサに開示において説明された方法のうちのいずれかを実行させるコンピュータプログラム/命令を含むコンピュータプログラム製品を使用することによって実施されてもよい。
【0203】
したがって、明細書および図面は、制限的な意味ではなく例示的な意味で見なされるべきである。しかしながら、特許請求の範囲に示されているより広い趣旨および範囲から逸脱することなくそれらに対して追加、削減、削除、およびその他の修正および変更が加えられ得ることが明らかになるであろう。したがって、特定の開示実施形態が説明されているが、これらは限定的であることは意図されていない。様々な修正および均等物が、以下の請求項の範囲に含まれる。
【0204】
開示された実施形態を説明する文脈において(特に、以下の請求項の文脈において)「a」、「an」および「the」という用語ならびに類似の指示対象の使用は、本明細書に別段の指示がない限りまたは文脈によって明らかに矛盾しない限り、単数形および複数形の両方をカバーすると解釈されるべきである。「含む(comprising)」、「有する(having)」、「含む(including)」および「含む(containing)」という用語は、別段の注意がない限り無制限の用語(すなわち、「含むが、限定されない」を意味する)であると解釈されるべきである。「接続される」という用語は、介在する何かが存在するとしても、部分的にまたは全体的に内部に含まれる、取り付けられる、または接合されると解釈されるべきである。本明細書における値の範囲の列挙は、単に、本明細書において別段の指示がない限り、その範囲内に含まれる各々の別個の値にそれぞれ言及する簡潔な方法として働くことが意図されており、各々の別個の値は、本明細書において個々に列挙されたものとして明細書に組み込まれる。本明細書において説明された全ての方法は、本明細書において別段の指示がない限りまたは文脈によって明らかに矛盾しない限り、あらゆる適切な順序で実行されることができる。本明細書において提供されたあらゆるおよび全ての例、または例示的な言語(例えば、「など」)の使用は、単に実施形態をより明らかにすることが意図されており、そうでないことが請求されない限り開示の範囲に対する制限を加えない。明細書における言語は、あらゆる請求されていない要素を、開示の実行にとって必須であるものとして示すものとして解釈されるべきではない。
【0205】
「X、YまたはZのうちの少なくとも」という表現などの離接的言語は、特にそうでないことが述べられていない限り、アイテム、用語などが、X、YまたはZのいずれか、またはそれらのあらゆる組合せ(例えば、X、Yおよび/またはZ)であってもよいことを表すために一般的に使用されるものとして文脈の中で理解されることが意図されている。したがって、このような離接的言語は、概して、ある実施形態がXのうちの少なくとも1つ、Yのうちの少なくとも1つ、またはZのうちの少なくとも1つが各々存在することを要求することを暗示することは意図されておらず、また暗示すべきではない。
【0206】
開示を実行するために知られた最良の形態を含む、本開示の好ましい実施形態が本明細書に説明されている。これらの好ましい実施形態の変化態様は、前記説明を読むことにより、当業者に明らかになり得る。当業者は、このような変化態様を必要に応じて採用することができるべきであり、開示は、本明細書において具体的に説明されたもの以外の形式で実行されてもよい。したがって、本開示は、適用法によって許可された、それに添付された請求項において列挙された主題の全ての修正および均等物を含む。さらに、その全ての可能な変化態様における上述の要素のあらゆる組合せは、本明細書において別段の指示がない限り、開示によって包含される。
【0207】
本明細書において引用された、出版物、特許出願、および特許を含む全ての参照物は、各々の参照物が、参照によって組み込まれることが個々におよび具体的に指示されておりかつその全体が本明細書に示されたものとして、参照により同じ範囲に本明細書に組み込まれる。
【0208】
前記明細書において、開示の態様は、その特定の実施形態に関連して説明されているが、当業者は、開示がそれに限定されないことを認識するであろう。上述の開示の様々な特徴および態様は、個々にまたは組み合わせて使用されてもよい。さらに、実施形態は、明細書のより広い趣旨および範囲から逸脱することなく、本明細書に説明されたものを超えてあらゆる数の環境および用途において利用されることができる。したがって、明細書および図面は、制限的ではなく例示的であると見なされるべきである。
【国際調査報告】