(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-03-03
(54)【発明の名称】クラウドインフラストラクチャ上における自律的テラフォーム化
(51)【国際特許分類】
G06F 9/50 20060101AFI20230224BHJP
H04L 41/0806 20220101ALI20230224BHJP
【FI】
G06F9/50 120Z
H04L41/0806
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022540590
(86)(22)【出願日】2020-12-27
(85)【翻訳文提出日】2022-08-19
(86)【国際出願番号】 US2020067083
(87)【国際公開番号】W WO2021138224
(87)【国際公開日】2021-07-08
(32)【優先日】2019-12-30
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】スネハシス,ソウミャ
(72)【発明者】
【氏名】パリダ,スワヤム・シッダーント
(57)【要約】
インフラストラクチャ・アズ・コード(IaC)ツールにおいてクラウドサービスを定義するためのプロセスは、実行時に、クラスタ、可用性ドメイン、計算ノード、および/またはロードバランサの数を動的に決定するように設計される。これらの値は、次いで、サービスにおいて計算ノードおよびロードバランサノードの各々のためにサブネットを生成するためにクラス無しドメイン間ルーティング(CIDR)スライス操作のために必要とされるサブネットレベルの数を決定するために使用される。IaC言語はネスト化されたループ制御構造体を提供しないので、サブネットの各々に対するラベルは、ラベル要素のデカルト積を使用して生成および割り当てられ得る。これらのラベルは、ネスト化されたループ構造の効果をシミュレートするためにリソースがスクリプトにおいて複製されるたびにインクリメントされるカウント変数によって変更され得る。
【特許請求の範囲】
【請求項1】
1つ以上のプロセッサによって実行されると前記1つ以上のプロセッサに動作を実行させる命令を備える非一時的コンピュータ可読媒体であって、前記動作は、
クラウドインフラストラクチャにおいてサービスの一部としてプロビジョニングされるべきクラスタの数を決定することと、
前記クラウドインフラストラクチャにおいてプロビジョニングされるべき、前記クラスタの各々の可用性ドメインの数を決定することと、
前記クラウドインフラストラクチャにおいてプロビジョニングされるべき、前記可用性ドメインの各々の計算ノードの数を決定することと、
前記クラウドインフラストラクチャにおいてプロビジョニングされるべき、前記クラスタの各々のロードバランサの数を決定することと、
前記クラスタの数、前記可用性ドメインの数、前記計算ノードの数、および前記ロードバランサの数に基づいてサブネットレベルの数を計算することと、
前記サブネットレベルの数に基づいて複数のサブネットを生成することと、
前記複数のサブネットを前記クラウドインフラストラクチャにおいて前記計算ノードおよび前記ロードバランサに割り当てることとを含む、非一時的コンピュータ可読媒体。
【請求項2】
前記動作は、前記計算ノードの各々および前記ロードバランサの各々が、前記クラウドインフラストラクチャにおいて前記複数のサブネットをプロビジョニングされるようにすることをさらに含む、請求項1に記載のコンピュータ可読媒体。
【請求項3】
前記動作は、さらに、
前記可用性ドメインの数、前記クラスタの数、前記計算ノードの数、または前記ロードバランサの数に対する変更を受信することと、
前記変更に基づいて前記サブネットレベルの数を再計算することと、
前記サブネットレベルの数に基づいて前記複数のサブネットを再生成することとを含む、請求項1に記載のコンピュータ可読媒体。
【請求項4】
前記動作は、さらに、
前記クラウドインフラストラクチャにおいて第2のサービスの一部としてプロビジョニングされるべき第2の数のクラスタと、第2の数の可用性ドメインと、第2の数の計算ノードと、第2の数のロードバランサとを決定することを含み、前記第2のサービスは前記サービスとは異なり、前記動作はさらに、
前記第2の数のクラスタと、前記第2の数の可用性ドメインと、前記第2の数の計算ノードと、前記第2の数のロードバランサとに基づいて第2の数のサブネットレベルを計算することを含み、前記第2の数のサブネットレベルは、前記サブネットレベルの数とは異なり、前記動作はさらに、
前記第2の数のサブネットレベルに基づいて第2の複数のサブネットを生成することを含む、請求項1に記載のコンピュータ可読媒体。
【請求項5】
前記複数のサブネットの数は、底2^(サブネットレベルの数)に等しい、請求項1に記載のコンピュータ可読媒体。
【請求項6】
前記可用性ドメインの数を決定することは、
前記サービスのために、複数の所定の構成からの、ある構成の選択を受信することと、
前記構成のためにサービスレベル合意(SLA)を決定することとを含み、前記SLAは前記可用性ドメインの数を定義する、請求項1に記載のコンピュータ可読媒体。
【請求項7】
前記可用性ドメインの数を決定することは、
前記命令が前記1つ以上のプロセッサによって実行されると、実行時入力として前記可用性ドメインの数を受信することを含む、請求項1に記載のコンピュータ可読媒体。
【請求項8】
前記可用性ドメインにおけるある可用性ドメインは、前記計算ノードのうちの少なくとも1つと、前記ロードバランサのうちの少なくとも1つとを含む、請求項1に記載のコンピュータ可読媒体。
【請求項9】
前記サブネットレベルの数に基づいて前記複数のサブネットを生成することは、
最上位ネットワークアドレスのクラス無しドメイン間ルーティング(CIDR)スライスを実行する関数を実行することを含む、請求項1に記載のコンピュータ可読媒体。
【請求項10】
前記関数は、前記サブネットレベルの数が実行時に計算され得るように、前記サブネットレベルの数をパラメータとして受け付ける、請求項9に記載のコンピュータ可読媒体。
【請求項11】
前記動作は、前記複数のサブネットの各々に複数のラベルを割り当てることをさらに含む、請求項1に記載のコンピュータ可読媒体。
【請求項12】
前記複数のラベルは、前記可用性ドメインと前記クラスタとの組合せに基づく、請求項11に記載のコンピュータ可読媒体。
【請求項13】
前記動作は、デカルト積を計算することによって前記可用性ドメインと前記クラスタとの前記組合せを生成することをさらに含む、請求項12に記載のコンピュータ可読媒体。
【請求項14】
前記デカルト積を計算することは、前記可用性ドメインと前記クラスタとの間のベクトル交差積を生成することを含む、請求項12に記載のコンピュータ可読媒体。
【請求項15】
前記複数のラベルにおけるインデックスは、前記複数のラベルにおける前記インデックスを前記クラスタの数で割ることによって、前記クラスタにおけるインデックスに関係付けられる、請求項14に記載のコンピュータ可読媒体。
【請求項16】
前記複数のラベルにおけるインデックスは、前記複数のラベルにおける前記インデックスの前記可用性ドメインの数によるモジュラー除算を実行することによって、前記可用性ドメインにおけるインデックスに関係付けられる、請求項14に記載のコンピュータ可読媒体。
【請求項17】
前記複数のラベルは、計算ノードまたはロードバランサが宣言されるたびにインクリメントされるカウンタによって変更されるインデックスを含む、請求項12に記載のコンピュータ可読媒体。
【請求項18】
前記複数のラベルは、ネスト化されたループ構造を使用することなく生成される、請求項12に記載のコンピュータ可読媒体。
【請求項19】
システムであって、
1つ以上のプロセッサと、
前記1つ以上のプロセッサによって実行されると前記1つ以上のプロセッサに動作を実行させる命令を含む1つ以上のメモリデバイスとを備え、前記動作は、
クラウドインフラストラクチャにおいてサービスの一部としてプロビジョニングされるべきクラスタの数を決定することと、
前記クラウドインフラストラクチャにおいてプロビジョニングされるべき、前記クラスタの各々の可用性ドメインの数を決定することと、
前記クラウドインフラストラクチャにおいてプロビジョニングされるべき、前記可用性ドメインの各々の計算ノードの数を決定することと、
前記クラウドインフラストラクチャにおいてプロビジョニングされるべき、前記クラスタの各々のロードバランサの数を決定することと、
前記クラスタの数、前記可用性ドメインの数、前記計算ノードの数、および前記ロードバランサの数に基づいてサブネットレベルの数を計算することと、
前記サブネットレベルの数に基づいて複数のサブネットを生成することと、
前記複数のサブネットを前記クラウドインフラストラクチャにおいて前記計算ノードおよび前記ロードバランサに割り当てることとを含む、システム。
【請求項20】
プロビジョニングスクリプトを実行時調整数のリソース宣言とともに実行するための方法であって、
クラウドインフラストラクチャにおいてサービスの一部としてプロビジョニングされるべきクラスタの数を決定することと、
前記クラウドインフラストラクチャにおいてプロビジョニングされるべき、前記クラスタの各々の可用性ドメインの数を決定することと、
前記クラウドインフラストラクチャにおいてプロビジョニングされるべき、前記可用性ドメインの各々の計算ノードの数を決定することと、
前記クラウドインフラストラクチャにおいてプロビジョニングされるべき、前記クラスタの各々のロードバランサの数を決定することと、
前記クラスタの数、前記可用性ドメインの数、前記計算ノードの数、および前記ロードバランサの数に基づいてサブネットレベルの数を計算することと、
前記サブネットレベルの数に基づいて複数のサブネットを生成することと、
前記複数のサブネットを前記クラウドインフラストラクチャにおいて前記計算ノードおよび前記ロードバランサに割り当てることとを含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願に対する相互参照
本出願は、2019年12月30日に出願された、「AUTONOMOUS TERRAFORMING ON CLOUD INFRASTRUCTURES(クラウドインフラストラクチャ上における自律的テラフォーム化)」と題される米国特許出願第16/730,656号の利益および優先権を主張し、その出願の全体をここに引用により援用する。
【背景技術】
【0002】
背景
クラウドコンピューティングは、インフラストラクチャ・アズ・ア・サービス(IaaS)およびプラットフォーム・アズ・ア・サービス(PaaS)の両方を提供して、顧客がミッションクリティカルな企業アプリケーションおよびデータベースワークロードを共有インフラストラクチャ上で安全に実行できるようにすることができる。これらのクラウドコンピューティングインフラストラクチャは、様々なアプリケーションをホストしてもよく、産業は、クラウドベースの技術を提供するためにマイクロサービスベースのフレームワークに急速に向きつつある。例えば、マイクロサービスプロジェクトは、Kubernetes Engine(クバネティスエンジン)などのコンテナ化されたプロジェクトのクラスタでホストされてもよく、それらのすべてはテナント間でデータセキュリティを保証する共有クラウドインフラストラクチャを介してホストされアクセス可能である。
【0003】
顧客が自分のコンピューティングインフラストラクチャをクラウドに移動するプロセスを開始すると、クラウドインフラストラクチャは、その顧客のために新しいテナンシを作成することができる。テナンシが作成されると、顧客は、コンソールウェブアプリケーションを使用して、クラウド環境内でホストされる任意のマイクロサービスプロジェクトの所望の機能性を達成するために、必要とされる環境構築ブロックを作成してもよい。既存の技術では、新しいテナントは、既存の技術を選択し、それらを彼らのクラウドフットプリントに追加することによって、これらの構築ブロックを手動で作成することができる。代替として、いくつかのシステムは、テナントが、自動化されたスクリプティング技術を使用して、彼らのクラウドフットプリントの構築ブロックを編成することを可能にする。自動化されたスクリプトは、ユーザが高レベル構成言語を使用してデータセンタインフラストラクチャを定義およびプロビジョニングすることを可能にする任意の「コードとしてのインフラストラクチャ」ソフトウェアツールで書かれてもよい。これらの言語で書かれたスクリプトは、クラウドフットプリントのために構築ブロックを生成するよう実行することができ、プロビジョニングプロセスを大幅に簡略化することができる。しかしながら、これらのスクリプト言語は、クラウドハードウェア/ソフトウェアのインスタンスを表すことが意図されるため、典型的には、多くの異なるアプリケーションにわたってロバストで再利用可能なコードを書くために使用できる特徴およびコード構造体を提供しない。
【発明の概要】
【発明が解決しようとする課題】
【0004】
概要
インフラストラクチャ・アズ・コード(IaC)ツールは、クラウドインフラストラクチャにおいてサービスの一部としてプロビジョニングされるリソースを宣言するのに有用である。しかしながら、IaCツールは、コマンドおよび制御構造のセットを実行する命令型言語ではなく、プロビジョニングされるべきリソースを指定する宣言型言語を使用する。したがって、IaCスクリプトは、特定のサービスのためにプロビジョニングされるべき特定のリソースおよび構造を定義し得、スクリプトは、スクリプトに著しい変更を伴わずに、異なるサービスまたはプロビジョニングタスクのために容易に再使用されない。
【課題を解決するための手段】
【0005】
本明細書で説明される実施形態は、クラウドサービスをIaCツールにおいて定義するためのプロセスを提示し、IaCツールは、実行時に、クラスタ、可用性ドメイン、計算ノード、および/またはロードバランサの数を動的に決定するように設計される。これらの値は、次いで、サービスにおいて計算ノードおよびロードバランサノードの各々のためにサブネットを生成するためにクラス無しドメイン間ルーティング(CIDR)スライス操作のために必要とされるサブネットレベルの数を決定するために使用される。IaC言語はネスト化されたループ制御構造体を提供しないので、サブネットの各々に対するラベルは、ラベル要素のデカルト積を使用して生成および割り当てられ得る。これらのラベルは、ネスト化されたループ構造の効果をシミュレートするためにリソースがスクリプトにおいて複製されるたびにインクリメントされるカウント変数によって変更され得る。
【0006】
スクリプトは、プロビジョニングされている各サービスとともに変化してもよいパラメータのベースラインセットを受信または決定することができる。これらのパラメータは、実行時、スクリプトが実行されるときに受信または決定され得、サービスの一部としてプロビジョニングされるべきクラスタの数、各クラスタにおける可用性ドメインの数、各可用性ドメインにおける計算ノードの数、クラスタの各々におけるロードバランサの数などを含んでもよい。次いで、プロビジョニングされるべき計算ノードおよび/またはロードバランサノードのために適切な数のサブネットを保証するCIDRレベルの数を、スクリプトは、将来の拡張のための余地を提供する余分なサブネットとともに、決定することができる。これらの値を計算し、異なるプロビジョニングタスクごとにスクリプトにハードコーディングする代わりに、これらの値は、スクリプトが変更なしに任意の同様のプロビジョニングタスクのために再使用されることができるように、実行時に提供および計算されることができる。
【0007】
計算されたサブネットおよびラベルを宣言されたリソースの各々に割り当てることは、通常は、ネスト化されたループ制御構造をそのコード内に必要とするであろう。しかしながら、IaCツールは典型的にはそのような構造を提供しないので、スクリプトは、各サブネットラベルの成分を含むベクトルのデカルト積を計算することによって、ネスト化されたループの動作をシミュレートし得る。たとえば、可用性ドメインおよびクラスタラベルを使用して生成されるサブネットラベルは、これらのラベルベクトルを互いにたすき掛けして可用性ドメインおよびクラスタのすべての組合せのリストを生成することによって、生成されることができる。これらのラベルは、スクリプト内で宣言されたリソースを再生するために使用されるカウンタ値を含むよう、さらに変更される得る。
【0008】
図面の簡単な説明
種々の実施形態の性質および利点のさらなる理解は、明細書の残りの部分および図面を参照することによって実現され得、同様の参照番号は、いくつかの図面を通して、同様の構成要素を指すよう使用される。場合によっては、下位ラベルが、複数の同様のコンポーネントのうちの1つを示すよう、参照番号に関連付けられる。既存の下位ラベルを指定せずに参照番号に言及する場合、そのような複数の同様のコンポーネントすべてを参照することが意図される。
【図面の簡単な説明】
【0009】
【
図1】いくつかの実施形態による、構造テナンシおよびクラウド環境のアーキテクチャ設計を示す図である。
【
図2】いくつかの実施形態による、単一のネットワークアドレスが複数の異なるネットワークにどのように「スライス」され得るかを示す図である。
【
図3A】いくつかの実施形態による、アルゴリズムによって決定および/または受信されてもよいクラスタの数を指定する第1の入力を示す図である。
【
図3B】いくつかの実施形態による、アルゴリズムによって決定および/または受信されてもよい可用性ドメインの数を指定する第2の入力を示す図である。
【
図3C】いくつかの実施形態による、アルゴリズムによって決定および/または受信されてもよいワーカーサブネットの数を指定する第3の入力を示す図である。
【
図3D】いくつかの実施形態による、アルゴリズムによって決定および/または受信されてもよいロードバランササブネットの数を指定する第4の入力を示す図である。
【
図4】いくつかの実施形態による、デカルト積が、複数の異なる変数からラベルの単一リストを形成するためにどのように使用され得るかを示す図である。
【
図5】いくつかの実施形態による、モジュラー算術を使用してデカルト積がどのように計算され得るかを示す図である。
【
図6A】いくつかの実施形態による、付随する擬似コードを使用してクラウドインフラストラクチャにおいてサービスをプロビジョニングするための方法のフローチャートの第1の部分を示す図である。
【
図6B】いくつかの実施形態による、クラウドインフラストラクチャにおいてサービスをプロビジョニングする方法のフローチャートの続きを示す図である。
【
図6C】いくつかの実施形態による、クラウドインフラストラクチャにおいてサービスをプロビジョニングするための方法のフローチャートの続きを示す図である。
【
図6D】いくつかの実施形態による、クラウドインフラストラクチャにおいてサービスをプロビジョニングするための方法のフローチャートの続きを示す図である。
【
図6E】いくつかの実施形態による、クラウドインフラストラクチャにおいてサービスをプロビジョニングするための方法のフローチャートの完了を示す図である。
【
図7】いくつかの実施形態による、任意のIaC言語で実現されてもよい、可変数のサブネットを実行時に対応するラベルとともにプロビジョニングするための方法のフローチャートである。
【
図8】実施形態のいくつかを実現するための分散型システムの簡略ブロック図である。
【
図9】実施形態のシステムの構成要素によって提供されるサービスがクラウドサービスとして提供されてもよいシステム環境の構成要素の簡略化されたブロック図である。
【
図10】様々な実施形態が実現されてもよい例示的なコンピュータシステムを示す図である。
【発明を実施するための形態】
【0010】
詳細な説明
クラウドコンピューティング環境は、独自のハードウェアおよび/またはソフトウェア技術を各々が表す多数の個々の構築ブロックを含んでもよい。クラウドコンピューティングインフラストラクチャのテナントは、多数の個々のユーザのために大量のウェブトラフィックを処理し大量の情報を記憶することができる非常に複雑なクラウドベースのアプリケーションを設計することを望む場合がある。これらのクラウドベースのアプリケーションは、異なるクラウド技術間における対話の膨大な複雑さを表し得る。しかしながら、複雑なアプリケーションを設計およびプロビジョニングするプロセスを単純化するために、多くの現代のクラウドベースのアプリケーションが、マイクロサービスアプリケーションとして設計され得る。マイクロサービスアプリケーションは、複雑な技術のための構築ブロックとして個々の単純なマイクロサービスを使用する。大規模アプリケーションを設計するとき、テナントは、多くの個々のマイクロサービス構築ブロックをまとめて、アプリケーションの全体的な機能を形成してもよい。このプロセスは、大きな複雑な設計タスクを、単純な構築ブロックによって組み立てることができるように、単純化することができる。
【0011】
クラウドベースのアプリケーションが設計されるとき、設計の個々のハードウェア/ソフトウェアコンポーネントは、クラウド環境内でプロビジョニングされてもよく、アプリケーションは、ユーザに利用可能にされてもよい。クラウドプロビジョニングは、クラウドプロバイダのリソースおよびサービスの、特定のテナントへの割り当てである。本開示は、クラウドサービスにおいてアプリケーションを自動的にプロビジョニングするテナントまたはプロバイダの能力に焦点を当てる。例えば、このモデルでは、テナントは、ウェブインターフェイスまたはポータルを介して、自身のクラウドアプリケーションの構築ブロックを選択し、組み立ててもよい。このプロビジョニングモデルは、アプリケーションがクラウド環境内でどのように構築および編成されるかに関する直接制御をユーザに提供する。これは、典型的には、クラウドプロバイダサポートサービスと顧客との間の対話の必要性を軽減する。代わりに、顧客は、自分自身でクラウドアプリケーションをプロビジョニングすることができ、次いで、クラウド環境は、顧客から命令を自動的に受信し、プロセスとの大規模な管理対話を必要とせずに、必要なリソースをプロビジョニングすることができる。
【0012】
プロビジョニングプロセス中のマイクロサービスおよび簡略化された構築ブロックの使用にもかかわらず、いくつかのアプリケーションの複雑さは、依然として、ユーザにとって非常に困難であり得る。したがって、いくつかの実施形態は、スクリプト言語を使用して、クラウドアプリケーションを管理およびプロビジョニングするために「インフラストラクチャ・アズ・コード」(IaC)環境を実現してもよい。IaC言語は、物理的ハードウェア構成もしくは対話型構成ツールの代わりに、またはそれに加えて、機械可読定義ファイルを通してコンピュータデータセンタをプロビジョニングする。IaC言語は、ベアメタルサーバと、構成リソースに関連付けられた仮想マシンとの両方を管理することができる。これは、ユーザがコードを使用してインフラストラクチャをモデル化することを可能にし、これは、次いで、ソフトウェア最良実践および再利用可能なコーディング技術を使用してアプリケーションインフラストラクチャを設計、実現、および展開する能力をユーザに与える。IaCは、クラウドコンピューティングアーキテクチャによって取り込まれることができ、それは、次いで、コードによって宣言された構築ブロックを組み立て、構築ブロックをコード定義に基づいて接続された態様で配置することができる。
【0013】
IaC技術の使用に伴う明らかな利点にもかかわらず、IaC言語に固有の様々な制限が存在する。IaC言語は、クラウドインフラストラクチャの実際の部分およびそれらの相互接続性を表すことが意図されるため、典型的には、真のソフトウェアプログラミング言語において共通である制御構造を欠くように設計される。IaC言語におけるこれらの固有の制限は、単純なスクリプトが複数のインフラストラクチャにわたってスケーリングすることを困難にする。これらの言語は、既存の成長しつつあるインフラストラクチャによって要求され得る新たな変更に適応するように設計されていない。例えば、クラス無しドメイン間ルーティング(CIDR)スライシングは、手動で事前に計算されクラウドインフラストラクチャの構築時にスクリプトにハードコーディングされる値を必要とした。そのような手法は、新たなアプリケーションのためにコードを再利用することができるようになる前に、変更を再計算し、コードを変更し、スクリプトを再実行するための人的介入を必要とした。このプロセスは、時間がかかり、人的介入を必要とし、プロビジョニングプロセスに欠陥を導入する機会を増加させる。本開示で説明される新しいアルゴリズムとは対照的に、IaC言語をより汎用的かつ再利用可能にするための他の技術は、各々、それらの有効性または再利用性を制限する欠点を有していた。例えば、ほとんどの既存の解決策は、単に冗長コードを書くことによってこの問題を解決する。
【0014】
本明細書で説明する実施形態は、IaC言語の既存の制限を克服するために使用され得る新しいコーディング技術を示す。例えば、いかなる手動計算または汎用コードに対する変更も必要としない任意のサイズの完全なインフラストラクチャブループリントを生成することができる複数の反復子を使用して、CIDRスライシングのための新しいアルゴリズムが開発されている。入力変数のいかなる変更も、新しいアルゴリズムを使用する再計算を自動的にトリガし、スクリプトは、必要に応じてクラウドインフラストラクチャの再アライメントをトリガしてもよい。このタイプのプログラミングおよび実行は、この技術的問題に対する以前の産業解決策では可能ではなかった。この解決策は、既存のIaC言語機能を新しいコーディング技術とともに使用して、言語機能を元々意図されていたものを超えて増強する。
【0015】
図1は、いくつかの実施形態による、構造テナンシおよびクラウド環境のアーキテクチャ設計を図示する。アーキテクチャ100は、IaC言語を使用して指定されることができるアーキテクチャの例を提供する。IaC言語で記述されたスクリプトがクラウドインフラストラクチャによって受信され実行されると、アーキテクチャ100は、IaC言語スクリプトによって定義されたインフラストラクチャに従ってプロビジョニングされることができる。IaCスクリプトは、容易に解釈され、クラウドインフラストラクチャにおいて構築ブロック技術にマッチすることができる形式言語であるため、アーキテクチャ100は、著しい人的関与なしにクラウドインフラストラクチャによって自動的にプロビジョニングされることができる。IaCスクリプトは、個々の技術をアーキテクチャとしてレイアウトすることができ、クラウドインフラストラクチャは、IaCスクリプトを、スクリプトにおいて宣言された技術の各々をプロビジョニングするためのブループリントとして扱うことができる。
【0016】
図1のアーキテクチャ100は、単に例として提供され、限定することを意図しない。アーキテクチャ100におけるコンポーネントは、IaCスクリプトによって宣言されることができる技術構築ブロックの例を提供してもよい。離散的な数の各技術が
図1に示されているが、以下に記載されるアルゴリズムは、
図1の技術の各々が、限定なく、任意の数および任意の組み合わせでスケーリングされることを可能にすることを理解されたい。アーキテクチャ100は、特定の技術(例えば、可用性ドメイン、ロードバランサ、クラスタ、ワーカーサブネットなど)が本明細書で説明される実施形態によってどのようにスケーリングされ得るかの記述を提供する。
【0017】
アーキテクチャ100は、複数の可用性ドメイン102を含む。可用性ドメイン102の各々は、アプリケーション全体を構築するマイクロサービスの一部を含んでもよい。可用性ドメイン102は、可用性ドメイン102のうちの1つが利用不可能になった場合に可用性を維持することができるように冗長サービスを含んでもよい。可用性ドメイン102は、互いに隔離されてもよく、フォールトトレラントであってもよく、同時に故障する可能性が非常に低くてもよい。加えて、可用性ドメイン102は、異なる領域などの異なる地理的ロケーションに位置する物理ハードウェアの異なるアセンブリに対応してもよい。代替として、同じ領域内の可用性ドメインは、高可用性および災害復旧の両方のために複数の領域内に複製されたシステムを構築するために、低レイテンシの高帯域幅ネットワークによって相互に接続されてもよい。
【0018】
いくつかの異なる技術が、可用性ドメイン102の各々の一部であってもよい。たとえば、可用性ドメイン102の各々は、1つ以上のサブネット104を含んでもよい。サブネット104の各々には、特定のサブネットアドレスが割り当てられてもよい。サブネット104の正確な数を決定することは、最上位ネットワークアドレスを適切にスライスするために決定されてもよい。CIDRスライシングとして知られるこの手順は、以下でより詳細に説明される。サブネット104の各々は、サブネット104間のインバウンド/アウトバウンドネットワークアクセスおよび通信のために、割り当てられたサブネットアドレスを使用してもよい。
【0019】
サブネット104は、各クラスタにおいて見出されるリソースをホストしてもよい。多くの異なるリソースがサブネット104内でホストされてもよいが、2つの特定のリソースが
図1に例として示されている。サブネット104のいくつかは計算ノード108を含んでもよい。計算ノード108は、ワーカーノードと呼ばれることもある。計算ノード108は、対応するワーカーサブネットに関連付けられるアクションを実行する。たとえば、ワーカーサブネット104aのネットワークアドレスは、計算ノード108aによって実行されるサービスを呼び出すために使用されてもよい。クラスタ内の計算ノード108のいくつかは、ノードプール106として指定されてもよい。計算ノード108を含むサブネット104は、ワーカーサブネットと称されてもよい。
【0020】
計算ノード108を保持することに加えて、サブネット104は代替的にロードバランサ112を含んでもよい。ロードバランサ112は、可用性ドメイン102の各々における異なるワーカーサブネット間でトラフィックを受信し、分散させてもよい。これらのサブネットは、ロードバランササブネットと呼ばれ得る。
【0021】
サブネット104の各々は、セキュリティノード114にも関連付けられてもよい。セキュリティノード114は、ワーカーサブネット104の各々のセキュリティポリシーを管理してもよい。いくつかの実施形態では、セキュリティノード114は、対応するセキュリティノード114にアクセスしてもよいシステムおよび/またはユーザを管理するためにアクセスリスト110を使用してもよい。
【0022】
最後に、
図1に示されるアーキテクチャ100は、単一のクラスタに含まれ得る。サービスを高可用性で実現するために、
図1に示したクラスタと同じクラスタを複数形成してもよい。
【0023】
アーキテクチャ100は、IaCスクリプトをクラウドインフラストラクチャに提供することによってプロビジョニングされてもよい。次いで、構造は、スクリプトに列挙された技術を解釈し、それらの技術を自動的にプロビジョニングしてもよい。Pulumi, Chef, Otter, Puppet SaltStack, CFEngine, DSC, Pacoなどの任意のIaC言語を使用してもよい。一例として、本明細書に説明される実施形態は、Hashicorpによって提供されるTerraformツール150を使用してもよい。これらのツールの各々は、宣言型言語を使用して、クラウドインフラストラクチャの一部としてプロビジョニングされるべき様々な技術を定義してもよい。宣言型言語として、これらのIaCツールは、概して、他の言語で使用されてもよい高度な制御構造をサポートしない。例えば、Terraformツール150は、いかなるタイプのループ化機構もサポートしない。代わりに、あるリソースを、あるリソースのためのカウントメタ引数(count meta-argument)を使用して、定義された回数だけインスタンス化してもよい。これは、ツールが、複数の変数を使用して割り当てまたは計算を行うために有用であってもよい任意の形態のネスト化されたループを使用することを防止する。さらに、Terraformツールは、コードが書かれる時点ではわかっていない可変数のサブネットに対してCIDRスライシングを実行する簡単な方法を提供しない。
【0024】
図2は、いくつかの実施形態による、単一のネットワークアドレス202が複数の異なるネットワークにどのように「スライス」され得るかを示す。CIDRスライシングは、アドレス集約を使用して、単一のネットワークアドレスを複数のアドレス指定可能なネットワークに変える。
図1に関連して上述したように、サブネット104の各々は、最上位ネットワークアドレス202のサブネットとして存在するそれら自体のネットワークアドレスを必要としてもよい。CIDRスライシングの概念は、最上位ネットワークアドレス202を、必要とされるネットワークの数に基づいて、いくつかのサブネットワークに細分化する。本開示に先立って、最上位ネットワークアドレス202から複数のサブネットアドレスを導出することは、静的動作であった。言い換えれば、ユーザは、必要とされるサブネットの数を決定し、次いで、それに応じて最上位ネットワークアドレス202を分割するであろう。これらの値は、スクリプトが書かれ、サービスがクラウドインフラストラクチャにおけるプロビジョニングのために設計されたときに、Terraformスクリプトにハードコーディングされた。将来のスクリプトは既存のスクリプトに基づくことができるが、ハードコーディングされた値は、サブネットの数のサイズを拡張または縮小するために、新しいスクリプトにおいて常に変更される必要がある。これは、エラーを起こしやすい人的介入を必要とし、コードの全体的な有用性を低下させた。また、各スクリプトは対応する特定のプロビジョニングプロジェクトにしか使用できないため、保存する必要のあるスクリプトの数も増加させた。
【0025】
本明細書に説明される実施形態は、ユーザがプロビジョニングされるべき可用性ドメイン、クラスタ、ワーカーサブネット、および/またはロードバランサの数を変更するにつれて動的にサイズアップおよび/またはサイズダウンされることができるバイナリツリーとしてCIDRスライシングを概念化する新しいアルゴリズムおよび方法を使用することによって、これらおよび他の技術的問題を解決する。
図2は、最上位ネットワークアドレス202がレベル指定に基づいて可変数のサブネットにどのようにスライスされ得るかを示す。たとえば、プロビジョニングされているサービスが2つのサブネットを必要とする場合、レベル1(211)のスライス操作が実行されてもよい。4つまでのサブネットが使用される場合、レベル2(212)のスライス操作が実行されてもよい。
【0026】
必要とされるサブネットの最小数に基づいて、様々なレベルが使用されてもよい。
図2に示すレベル211、212、213、214は、底2の指数関数に基づく。例えば、レベル3(213)は、2
3=8個のサブネットに対応する。同様に、レベル4(214)は、2
4=16個のサブネットに対応する。スライス操作に必要とされるレベル数を決定するために、Terraformスクリプトは、必要とされるサブネットの最小数を決定し、次いで、少なくともその数のサブネットを提供するレベルを選択することができる。たとえば、プロビジョニングされているサービスのために6つのサブネットが必要とされる場合、スクリプトは、最上位ネットワークアドレス202上でレベル3(213)のスライス操作が行われるべきであることを動的に判断することができる。これは、必要な数のサブネットが、将来の拡張のために使用されてもよい追加のサブネットとともに提供されることを保証する。
【0027】
本明細書で説明される実施形態は、スクリプトが実行されるときにスクリプトがCIDRスライス操作のレベルを動的に決定することを可能にする。以下で詳細に説明されるように、これは、いかなるハードコーディングされた値がスクリプトに含まれることも必要としない。むしろ、スクリプトは、所望の数のクラスタ、可用性ドメイン、ワーカーサブネット、ロードバランサなどを使用して、実行時にスライス操作に必要なレベルを計算することができる。加えて、プロジェクトがスケールアップおよびスケールダウンするにつれて、サブネットアドレスは、単に、例えばプロジェクト内の可用性ドメインの数を変更することによって、再計算されることができる。次いで、スクリプトは、スライス操作で使用されるレベルの数を自動的に再計算することができる。
【0028】
これらの技術は、単一のプロジェクトの寿命にわたってコードをスケーラブルにするだけでなく、任意の規模の将来のプロジェクトのためにコードを再使用することも可能にする。コードは、サービス設計プロセス中にユーザによって指定された値を受け付けてもよい。例えば、ユーザは、ロードバランサの数、またはプロジェクトの一部であるべき可用性ドメインの数を共通に指定する。しかしながら、ユーザは、適切な数のサブネットアドレスを生成するために使用されるべきCIDRスライス操作のレベルを指定しない。これは、ユーザが理解する可能性が低いであろう低レベルの詳細である。サブネットアドレスは、代わりに、Terraformスクリプトにハードコーディングされなければならず、コードを、同じ特定のアーキテクチャなしで任意のプロジェクトに対して使用不可能にする。本明細書に説明される実施形態は、ユーザがスクリプトへの入力を動的に変更し、それによって、
図2に図示される異なるレベル211、212、213、214を上下に移動させることを可能にする。要するに、これらの実施形態は、以前は利用できなかった自動CIDRスライシングの形態を達成する。
【0029】
以下の図は、スクリプトによって決定および/または提供されてもよい異なる入力を通過する。次に、本開示は、スライシングレベルを決定し、対応するサブネットを自動的に生成するためのアルゴリズムを説明する。
図3Aは、いくつかの実施形態による、アルゴリズムによって決定および/または受信されてもよいクラスタの数302を指定する第1の入力を示す。
図1において上記で説明したように、各クラスタ302は、1つ以上の可用性ドメインから構成されてもよく、可用性ドメインの各々は、任意の数のワーカーサブネットおよび/またはロードバランサを含んでもよい。クラスタの数302は、以下で説明される方程式において省略表現として変数cを使用して本明細書で言及される場合がある。クラスタの数302は、スクリプトへの入力としてユーザによって明示的に指定されてもよい。代替的または追加的に、クラスタの数302はまた、ユーザによって提供される他の値および/または動作によって決定されてもよい。例えば、ユーザは、自身のプロジェクトのために利用可能な複数の構成から所定の構成を選択することができる。これらの構成は、所定の数のクラスタに対応してもよく、スクリプトは、ルックアップテーブル、データベースなどを使用して構成をクラスタの数302に変換してもよい。
【0030】
図3Bは、いくつかの実施形態による、アルゴリズムによって決定および/または受信されてもよい可用性ドメイン304の数を指定する第2の入力を示す。
図1において上述したように、可用性ドメイン102の各々は、プロビジョニングされているサービスについて高い可用性を提供するために提供されてもよい。可用性ドメイン102にわたって機能を複製して、1つの可用性ドメイン202bが利用不可能になった場合にサービスが依然として他の可用性ドメイン202a、202cを通して提供されてもよいようにしてもよい。可用性ドメインの数304は、以下で説明される方程式において省略表現として変数aを使用して表されてもよい。可用性ドメインの数304は、スクリプトへの入力として、ユーザによって提供されてもよい。例えば、ユーザは、3つの可用性ドメイン102を入力として指定してもよい。代替として、ユーザは、サービスについて可用性のレベル(例えば、高、中、低)を選択してもよい。次いで、スクリプトは、その特定のプロジェクトのために選択された可用性のレベルに対応する可用性ドメイン102の数を検索または計算してもよい。可用性ドメインの数304は、プロジェクト全体における可用性ドメインの総数を指定する必要はないことに留意されたい。代わりに、可用性ドメインの数304は、代わりに、クラスタ単位で提供されてもよい。言い換えれば、可用性ドメインの数304は、各クラスタ内の可用性ドメインの数を表してもよい。
【0031】
例えば、ある構成が、複数の事前定義された構成から、ユーザによって選択されてもよい。これらの構成は、値が実行時に入力されてもよいように、Terraformスクリプトの実行時実行の一部としてユーザに提示されてもよい。各構成は、サービスに必要とされる可用性のレベルを指定するサービスレベル合意(SLA)に関連付けられてもよい。システムは、SLAにおいて必要とされる可用性のレベルを満たすために必要とされてもよい可用性ドメインの数を導出してもよい。クラスタの数の決定、計算ノードの数の決定、および/またはロードバランサの数の決定のために、この同じ手順が使用されてもよいことに留意されたい。
【0032】
いくつかの実施形態では、これらの値は、実行時にスクリプトへの入力として動的に受信されてもよい。これは、異なる数のクラスタ、可用性ドメイン、計算ノード、および/またはロードバランサを必要とするであろう異なる特性を有する異なるサービスを定義するためにスクリプトを再使用することを可能にする。例えば、スクリプトを使用して第1のサービスをプロビジョニングした後、同じスクリプトを使用して第2の異なるサービスをプロビジョニングしてもよい。異なる数のクラスタ、可用性ドメイン、計算ノード、および/またはロードバランサを、実行時にスクリプトへの入力として提供することによって、異なるサブネットレベル、異なる最上位ネットワークアドレス、および/またはそれ以外の異なるトポロジを有する、異なるサービスがプロビジョニングされてもよい。これは、同じスクリプトが、編集されることを必要とすることなく、異なるサービスをプロビジョニングするために再使用されることを可能にする。以前は、これらのパラメータのいずれかが異なる場合、プロビジョニングされている各サービスに対して異なるスクリプトが必要であったであろう。
【0033】
いくつかの実施形態では、これらの値は、プロビジョニングプロセスが行われた後に動的に変更されてもよい。たとえば、スクリプトは、実行時値を受信することによってサービスをプロビジョニングするよう実行されてもよい。サービス提供後、顧客は、可用性のレベル、クラスタ位置/数、および/または任意の他のパラメータを変更することを望んでもよい。新しいスクリプトを生成する代わりに、同じスクリプトの2回目を実行でき、入力に対する変更を受信して、サブネットレベルの数を再計算し、新たな数の可用性ドメイン、クラスタ、計算ノード、ロードバランサなどに基づいてサブネットを再生成することができる。
【0034】
図3Cは、いくつかの実施形態による、アルゴリズムによって決定および/または受信されてもよいワーカーサブネット104の数を指定する第3の入力を示す。
図1において上述したように、ワーカーサブネット104の各々は、
図2において説明されたCIDRスライス操作からサブネットアドレスのうちの1つを割り当てられてもよい。各ワーカーサブネット104は、計算ノード108を含んでもよい。ワーカーサブネットの数306は、以下で説明される方程式において省略表現として変数wを使用して表されてもよい。可用性ドメインの数304の場合と同様に、ワーカーサブネットの数306は、可用性ドメイン単位で提供されてもよい。言い換えれば、ワーカーサブネットの数306は、各可用性ドメインにおけるワーカーサブネットの数を表してもよい。例えば、
図3Cの可用性ドメイン当たりのワーカーサブネットの数306は、1つのワーカーサブネットである。ワーカーサブネットの数306は、Terraformスクリプトによって受信および/または決定されてもよい。例えば、ユーザは、スクリプトへの入力として可用性ドメイン当たりのワーカーサブネットの数306を提供してもよい。代替として、ユーザは、可用性ドメインにおいて実行される機能を選択してもよく、スクリプトは、どのワーカーサブネットが設計に含まれるべきかを自動的に判断してもよく、それによって、ワーカーサブネットの数306を決定してもよい。
【0035】
図3Dは、いくつかの実施形態による、アルゴリズムによって決定および/または受信されてもよいロードバランササブネットの数308を指定する第4の入力を示す。
図1において上述したように、ロードバランササブネットの各々は、トラフィックを管理し、ワーカーサブネットにルーティングするロードバランサ112を含んでもよい。ロードバランササブネットの数は、以下で説明される式において省略表現として変数bを使用して表されてもよい。この数は、クラスタ当たりのロードバランササブネットの数を指定してもよい。典型的には、ユーザは、ロードバランササブネットを特定の可用性ドメインに編成する必要はなく、代わりに、単に、各クラスタにおいて必要とされるロードバランサの総数を指定することになる。この数は、スクリプトへの入力として指定されてもよい。代替的に、ロードバランササブネットの数308は、実行時にスクリプトによって決定されてもよい。たとえば、ユーザは、サービスのために1つ以上の事前定義された構成を指定することができ、スクリプトは、それらの構成から必要なロードバランサの数を導出してもよい。
【0036】
これらの入力に基づいて、プロビジョニングされているサービスのために使用されるべきサブネットの総数を決定するために、以下のアルゴリズムが使用されてもよい。あるステップでは、アルゴリズムは、プロビジョニングされるべきワーカーサブネットの総数を計算してもよい。ワーカーサブネットの総数は、クラスタの総数302、クラスタあたりの可用性ドメインの総数304、および可用性ドメインあたりのワーカーサブネットの総数306に基づいて計算されてもよい。例えば、ワーカーサブネットの総数は、以下の式を使用して計算されてもよい。
【0037】
【0038】
式1において、wtは、サービス全体でプロビジョニングされるワーカーサブネットの総数を表す。
【0039】
別のステップでは、アルゴリズムは、プロビジョニングされるべきロードバランササブネットの総数を計算してもよい。ロードバランササブネットの総数は、クラスタ302の総数およびクラスタあたりのロードバランサの総数308に基づいて計算されてもよい。たとえば、ロードバランササブネットの総数は、以下の式を使用して計算されてもよい。
【0040】
【0041】
式2において、btは、サービス全体でプロビジョニングされるべきロードバランササブネットの総数を表す。
【0042】
別のステップにおいて、アルゴリズムは、プロジェクトにおいてプロビジョニングされるべきサブネットの総数を計算してもよい。サブネットの総数は、ワーカーサブネットの総数およびロードバランササブネットの総数に基づいて計算されてもよい。例えば、サブネットの総数は、以下の式を使用して算出されてもよい。
【0043】
【0044】
式3において、sは、サービス全体で割り当てられるサブネットの総数を表す。
次に、アルゴリズムは、最上位ネットワークアドレスがスライスされるべきレベルを計算してもよい。
図2に関連して上述したように、このレベルは、最上位ネットワークアドレスから導出されるサブネットアドレスの数を決定する底2の指数関数に対応してもよい。いくつかの実施の形態では、底2を、計算されたスライスレベルの数に対応するべき指数で累乗したものは、サービスにおいて割り当てられるべきサブネットの総数(例えば、2^(サブネットレベルの数):底2および冪指数(サブネットレベルの数)をもつ冪)以上であってもよい。レベルを決定するために、サブネットの総数について底2の対数を計算することができ、次いで底2の対数の結果にシーリング演算(例えば、次に高い整数に丸める)を施してレベルを決定してもよい。例えば、ある特定の実施形態は、レベル数を決定するために以下の式を使用してもよい。
【0045】
【0046】
n∈Nであるので、シーリング演算を式7に適用して、スライス操作のための最終レベルnを計算することができる。
【0047】
【0048】
ここで、レベル番号nを用いて、最上位ネットワークアドレスに対してスライス操作を実行してもよい。いくつかの実施形態では、アルゴリズムは、ネットワークアドレスを2
n個の重複しないサブネットに分割することによって、各サブネットのための適正なIPアドレスを手動で計算してもよい。アーキテクチャを定義するために使用される特定のIaCツールに応じて、この演算を自動的に実行する事前定義された関数が存在してもよい。例えば、Terraformツールは、各サブネットについてこの数学的演算を実行するために使用されることができるcidrsubnet(prefix, newbits, netnum)関数を提供する。この関数では、以下の入力が使用されてもよい。
・prefixは、最上位ネットワークアドレスから導出される所定の値である。
・netnumは、
図2からのnレベルにおけるサブネットアドレスのうちの1つのサブネットアドレスのインデックスを表す値∈[0,2
n-1]である。
・newbitsは、各サブネットに割り当てられるよう充分なCIDRブロックがあることを保証する最小値を表すnの動的に計算された値である。
【0049】
この段階で、利用可能なサブネットは、
図1のアーキテクチャにおいて説明されるリソースの各々に割り当てられることができる。Terraformツールでは、これは、あるリソースについて単一のカウントメタ引数を使用して達成することができる。例えば、Terraformコードにおけるそのリソースの宣言の後にcount=num_worker_subnets行を挿入することで、そのリソースをワーカーサブネット毎に1回複製することができる。IaC言語およびツールは、典型的には、単一レベルのリソースのみが複製されることを可能にする、限定されたループ化機構を提供することが強調されるべきである。
【0050】
しかしながら、実際には、様々な変数の組み合わせに基づいて、ラベルを生成し、および/またはリソースの各々に割り当てることも有用である。たとえば、いくつかの実施形態は、各サブネットを、そのクラスタおよび可用性ドメインの組合せに従ってラベル付けしてもよい。各リソースについてラベルを生成するために反復される必要がある複数の変数を扱うとき、複数のループ化レベルが必要であってもよい。しかしながら、上述のように、IaC言語は、そのようなネスト化されたループ化構造制御を、その言語のネイティブな特徴として提供しない。したがって、複数の変数(例えば、クラスタ、可用性ドメインなど)に基づいてラベルを割り当てるためには、そのような各ラベルを手で計算し、スクリプトにハードコーディングしなければならなかった。上述のように、スクリプトへのハードコーディング値は、設計の再利用性およびスケーラビリティを制限し、設計が変更されるときはいつでも人的介入を必要とする。
【0051】
本明細書に記載される実施形態は、様々なラベル成分をまとめてラベルのベクトルに集め、モジュラー算術を実行してデカルト積を生成することによって、この問題を解決する。デカルト積は、次いで、Terraformツール内のカウントメタ引数によって模倣される単ループ特徴を使用してもよい。
【0052】
図4は、いくつかの実施形態による、デカルト積が、複数の異なる変数からラベルの単一リストを形成するためにどのように使用され得るかを示す。クラスタラベルのリスト402を含む第1のベクトルは、生産、開発、ステージング、品質保証などとして参照されるクラスタを含んでもよい。可用性ドメインのリスト404を含む第2のベクトルは、数値識別子(例えば、AD-1、AD-2等)によって参照されるドメインを含んでもよい。以前であれば、あるスクリプトが、これらのラベルの2つのベクトルの組み合わせによってハードコーディングされた単一のラベルベクトルに形成されるペアのすべてを静的に定義し、次いで、そのハードコーディングされた単一のラベルベクトルがサブネットの各々に適用されたかもしれない。しかしながら、これはスクリプトの再使用可能性を制限する。これが必要であったのは、従来のプログラミング言語は、クラスタ402が外側ループにおいて反復され得、可用性ドメイン404が内側ループにおいて反復され得るように、ネスト化されたループを提供するが、IaCツールは、典型的には、そのような制御構造を提供しないからである。
【0053】
いくつかの実施形態は、
図4に示されるようなモジュラー算術を使用することによってネスト化されたループ制御構造を近似する。これは、スクリプトが、任意の数のクラスタ、可用性ドメイン、または他のラベルを入力として受信し、次いで、Terraformツール内のカウントメタ引数を使用して適用され得るラベルの単一ベクトル406を動的に生成することを可能にする。以下で説明されるアルゴリズムを使用して、デカルト積が、2つの入力ラベルベクトルの各々ついてすべての順序付けられたペアのセットを含むように生成されてもよい。ラベルの2つのベクトルは、ここでは例としてのみ使用されることが強調されるべきである。他の実施形態は、2つより多いベクトルラベルを使用してもよく、デカルト積は、ラベルの各組み合わせについて計算されて、ネスト化されたループ化なしで適用されてもよい単一のラベルベクトルを形成してもよい。
【0054】
図4において、デカルト積は、クラスタ402および可用性ドメイン404からのラベルの一意の対の各々を含むラベルのベクトル406を生成した。
図5は、いくつかの実施形態による、モジュラー算術を使用してデカルト積がどのように計算され得るかを示す。この例では、デカルト積は、2次元座標を有するグリッドとして表される。2次元座標は、ネスト化されたループで使用されるであろうインデックスを表す。例えば、生産クラスタはインデックス0でループし、開発クラスタはインデックス1でループし、ステージングクラスタはインデックス2でループする等であろう。内側ループの場合、可用性ドメインの各々は、0から2にインクリメントされるインデックスでループするであろう。
【0055】
しかしながら、このネスト化されたループ化プロセスを使用する代わりに、デカルト積から得られた各ペアは、
図4に示すラベルの結果ベクトル406内の単一のインデックスを使用してインデックス付けすることができる。単一のインデックスは、モジュラー算術を使用して、ネスト化されたインデックスに関係付けられる。例えば、クラスタラベルを表す外側ループにおけるインデックスは、以下の式によってインデックスに関係付けられる。
【0056】
【0057】
変数aは、入力ベクトル内の値の数に対応し、それは、この場合、3であり、indexcはクラスタインデックスに対応する。同様に、可用性ドメインラベルを表す内側ループのインデックスは、以下の式によってインデックスに関係付けられてもよい。
【0058】
【0059】
index
adは、可用性ドメインインデックスに対応する。
図6A~
図6Eは、上述のアルゴリズムを実現するTerraformスクリプトの詳細な例を示す。このフローチャートおよび擬似コードは、例として提供され、限定することを意味しない。上記で説明されるアルゴリズムは、本開示を使用して、任意のIaC言語を用いて実現されてもよい。
【0060】
図6Aは、いくつかの実施形態による、あるサービスを、クラウドインフラストラクチャにおいて、付随する擬似コードとともにプロビジョニングするための方法のフローチャートの第1の部分を示す。本方法は、状態変数を受信することと、クラウドインフラストラクチャからデータを収集すること(602)とを含んでもよい。上記で説明したように、いくつかの実施形態は、プロビジョニングされるべきリソースを定義する変数の各々をスクリプトへの入力として受信してもよい。この例では、これは、可用性ドメインの数、各ドメインにおけるワーカーサブネットの数、各クラスタに関するロードバランササブネットの数などを含む。この例では、可用性ドメイン当たりのワーカーサブネットの数は1であると仮定されてもよく、クラスタ当たりのロードバランササブネットの数は2であると仮定されてもよい。これらの値を受信するための擬似コード601は、これらの値の各々を変数に割り当てることを含んでもよい。擬似コード601はまた、FastConnectユーティリティも使用し、これは、クラウドインフラストラクチャおよび他のオンラインサービスに接続するために公衆インターネットを使用することの代替となるネットワーク接続である。
【0061】
擬似コード601はまた、CIDRレベルの数を規定するために上記で説明したアルゴリズムの実現例も含む。例えば、上記の式8は、擬似コード601の最後の行において実現される:
【0062】
【0063】
この擬似コードの行は、ロードバランサおよびワーカーノードに必要とされるサブネットの総数を計算する。この総計は、底2の対数関数への入力として提供され、その結果は、サービスのためのCIDRレベルの最小数を決定するためにシーリング関数に提供される。
【0064】
本方法はまた、サービスのためにゲートウェイをプロビジョニングすること(604)を含んでもよい。擬似コード603は、サービスゲートウェイ、インターネットゲートウェイ、NATゲートウェイなどをどのように定義するかの例を示す。上述のように、擬似コード603のシンタックスは、Terraformツールに固有であってもよく、したがって、他のツールと作業するときに変更されてもよい。
【0065】
図6Bは、いくつかの実施形態による、クラウドインフラストラクチャにおいてサービスをプロビジョニングする方法のフローチャートの続きを示す。本方法は、サービスのためのルーティングテーブルおよびセキュリティルールを構成することをさらに含んでもよい(606)。擬似コード605は、デフォルトルーティングテーブルおよびロードバランサセキュリティリストを宣言するための例を示す。いくつかの追加のセキュリティおよび/またはルーティングリソースが、実世界プロジェクトにおいて宣言されてもよいことに留意されたい。擬似コード605において提供される例は、単に代表的なものであり、サービスの異なる局面のために他のセキュリティルール、セキュリティリスト、およびルーティングテーブルを生成するためのテンプレートとして使用されてもよい。
【0066】
図6Cは、いくつかの実施形態による、クラウドインフラストラクチャにおいてサービスをプロビジョニングするための方法のフローチャートの続きを示す。本方法は、すべてのワーカーサブネットがプロビジョニングされたかどうかを判断すること(608)をさらに含んでもよい。プロビジョニングされるべき残りのワーカーサブネットがある場合、本方法は、上で説明されたCIDRスライシングアルゴリズムを使用してサブネットアドレスを計算すること(610)を含んでもよい。サブネットの各々は、次いで、対応するCIDRブロックでプロビジョニングされてもよい(612)。このサイクルは、ワーカーサブネットの各々について繰り返されてもよい。
【0067】
疑似コード614において明らかなように、フローチャートに示されるループ構造体は、Terraform疑似コードに用いて現することはできない。代わりに、このコードは、規定された回数だけリソースを複製するメタ引数を提供する。例えば、リソース宣言後の擬似コードの第1行は、以下を含む:
【0068】
【0069】
ワーカーサブネットの数をカウント変数に割り当てることによって、擬似コード614は、ワーカーサブネットごとにoci_core_subnetリソースを生成するようTerraformツールに命令することができる。次いで、擬似コード614は、上記のcidrsubnet()を、上で計算された指定されたレベルでサブネットの各々をインデックス付けするために使用されるcount.index変数とともに使用する。
【0070】
擬似コード614はまた、クラスタ名と可用性ドメイン名との間でデカルト積を計算することによって上記で説明したネスト化されたループアルゴリズムも実現する。これらは、count.index変数によってインデックス付けされるavailability_domain配列に格納される。たとえば、以下のコマンドは、サブネットの各々についてラベルのアレイを生成する:
【0071】
【0072】
従来のネスト化されたループを実行する代わりに、このデカルト積はサブネットのためのラベルのリストを生成する。最後に、ラベルは、擬似コード614に示され、上で詳細に説明されたモジュラー算術を使用して、対応するサブネットに割り当てられることができる。
【0073】
図6Cに示されるプロセスは、プロジェクトにおいてワーカーサブネットの各々を割り当てるために実行されてもよい。具体的には示されないが、
図6Cに示されるプロセスは、ロードバランササブネットの各々について繰り返されてもよい。例えば、同様の手順に従って、上で計算されたレベルに基づいて最上位ネットワークアドレスをスライスしてもよく、デカルト積を使用してラベルのリストを生成してもよい。しかしながら、cidrsubnet()関数のためのnetnumパラメータは、ロードバランササブネットがワーカーサブネットの後にCIDRブロックに割り当てられるようにシフトされてもよい。
【0074】
図6Dは、いくつかの実施形態による、クラウドインフラストラクチャにおいてサービスをプロビジョニングするための方法のフローチャートの続きを示す。本方法は、充分なクラスタが、上で説明されたクラスタの数に基づいてプロビジョニングされたかどうかを判断すること(616)をさらに含んでもよい。クラスタがプロビジョニングされるべく残っている場合、本方法は、どのロードバランササブネットが必要とされるかを判断し(618)、クラスタに正しいロードバランサをプロビジョニングしてもよい(620)。上述のように、このループ手順は、擬似コード622において、カウント変数を使用して、指定された数のクラスタを動的に生成するよう、モデル化されてもよい。擬似コード622の第2の部分は、ロードバランササブネットをクラスタの各々に割り当ててもよい。
【0075】
図6Eは、いくつかの実施形態による、クラウドインフラストラクチャにおいてサービスをプロビジョニングするための方法のフローチャートを完了する。本方法は、充分なノードプールがプロビジョニングされたかどうかを判断すること(624)も含んでもよい。追加のノードプールがプロビジョニングされる必要がある限り、本方法は、ChunkList演算を使用して、サブネットを割り当てのためにノードプールに分割すること(626)を含んでもよい。擬似コード630では、TerraformツールからのChunkList関数を使用して、単一のリストを固定サイズのチャンクに分割し、したがってリストのリストを返すことができる。本方法は、次いで、ノードプールを、対応するワーカーサブネットとともにプロビジョニングすること(628)を含んでもよい。擬似コード630において、各ノードプールは、ファミリーマップに記述されるサブネット当たりの指定された数量のノードを有する。
【0076】
上記のフローチャートおよび説明はTerraformツールに特有であるが、CIDRサブネットを生成および割り当て、ラベルをサブネットに適用するために、ネスト化されたループをシミュレートするためのアルゴリズムは、任意のIaC言語で実現されてもよい。
図7は、いくつかの実施形態による、任意のIaC言語で実現されてもよい、可変数のサブネットを、実行時に、対応するラベルとともにプロビジョニングするための方法のフローチャートを示す。本方法は、クラウドインフラストラクチャにおいてサービスの一部としてプロビジョニングされるべきクラスタの数を決定すること(702)を含んでもよい。本方法はまた、クラスタの各々における可用性ドメインの数を決定すること(704)、可用性ドメインの各々における計算ノードの数を決定すること(706)、および/またはクラスタの各々におけるロードバランサの数を決定すること(708)を含んでもよい。これらのステップの各々において、これらの値は、スクリプトへの入力として受信されることによって、スクリプト内に定数として記憶されることによって、および/またはスクリプトにおいて計算もしくは関数によって決定されることによって、決定されてもよい。たとえば、各値は、ユーザによって選択された所定の構成に基づいて導出または検索されてもよい。いくつかの実施形態では、これらの値は、
図3A~
図3Bに関連して上記で説明されるように、または
図6Aに示されるように、決定されてもよい。
【0077】
本方法はまた、クラスタの数、可用性ドメインの数、計算ノードの数、およびロードバランサの数に基づいてサブネットレベルの数を計算すること(710)を含んでもよい。計算ノードは、上述のワーカーサブネットに対応してもよい。ロードバランサの各々も、ロードバランササブネットとして説明されてもよい。サブネットレベルの数は、式2~式8に関連しておよび
図6Cに関連して上で説明されたように計算されてもよい。本方法はさらに、サブネットレベルの数に基づいて複数のサブネットを生成すること(712)を含んでもよい。このステップは、上述のcidrsubnet関数を使用して実行されてもよい。代替的または追加的に、このステップは、2
nの細分化に基づいて最上位ネットワークアドレスを数学的に細分化することによって実行されてもよい。本方法はまた、複数のサブネットをクラウドインフラストラクチャ内の計算ノードおよびロードバランサに割り当てること(714)を含んでもよい。上述したように、ワーカーサブネットおよびロードバランササブネットの各々は、上述したデカルト積およびモジュラー算術アルゴリズムに基づいてラベルを割り当てられてもよい。
【0078】
図7に示される特定のステップは、様々な実施形態に従って、可変数のサブネットを、実行時に、対応するラベルとともにプロビジョニングする特定の方法を提供することを理解されたい。ステップの他のシーケンスも、代替的な実施形態に従って実行されてもよい。例えば、本発明の代替実施形態は、上記で概説されるステップを異なる順序で実行してもよい。さらに、
図7に示される個々のステップは、個々のステップに適切な様々なシーケンスで実行されてもよい複数のサブステップを含んでもよい。さらに、特定の用途に応じて追加のステップを追加または除去してもよい。当業者は、多くの変形物、修正物、および代替物を認識するであろう。
【0079】
本明細書で説明される方法の各々は、コンピュータシステムによって実現されてもよい。これらの方法の各ステップは、コンピュータシステムによって自動的に実行されてもよく、および/またはユーザに関与する入力/出力が提供されてもよい。例えば、ユーザは、ある方法の各ステップに対する入力を提供してもよく、これらの入力の各々は、そのような入力を要求する特定の出力に応答してもよく、その出力は、コンピュータシステムによって生成される。各入力は、対応する要求出力に応答して受信されてもよい。さらに、入力は、ユーザから、別のコンピュータシステムからデータストリームとして受信されてもよく、メモリ位置から取得されてもよく、ネットワークを介して取得されてもよく、ウェブサービスから要求されてもよい。同様に、出力は、ユーザに、データストリームとして別のコンピュータシステムに提供されてもよく、メモリ位置に記憶されてもよく、ネットワークを介して送信されてもよく、ウェブサービスに提供されてもよい。要するに、本明細書に記載される方法の各ステップは、コンピュータシステムによって実施されてもよく、ユーザが関与してもしなくてもよい、コンピュータシステムへの、およびコンピュータシステムからの、任意の数の入力、出力、および/または要求を含んでもよい。ユーザが関与しないステップは、人的介入なしにコンピュータシステムによって自動的に実行されると言ってもよい。したがって、本開示に照らして、本明細書で説明される各方法の各ステップは、ユーザへの入力およびユーザからの出力を含むように変更され得るか、または任意の決定がプロセッサによって行われる場合、人的介入を伴わずにコンピュータシステムによって自動的に行われ得ることが理解されるであろう。さらに、本明細書で説明される方法の各々のいくつかの実施形態は、有形のソフトウェア製品を形成するために、有形の非一時的記憶媒体上に記憶される命令のセットとして実現されてもよい。
【0080】
図8は、実施形態の1つを実現するための分散型システム800の簡略図を示す。図示の実施形態では、分散型システム800は、1つ以上のクライアントコンピューティングデバイス802,804,806,および808を含み、これらは、1つ以上のネットワーク810を介してウェブブラウザ、所有権付きクライアント(たとえば、Oracle Forms)などのクライアントアプリケーションを実行し動作させるよう構成される。サーバ812は、ネットワーク810を介してリモートクライアントコンピューティングデバイス802,804,806,および808と通信可能に結合されてもよい。
【0081】
種々の実施形態では、サーバ812は、システムのコンポーネントのうちの1つ以上によって提供される1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。いくつかの実施形態では、これらのサービスは、ウェブベースのサービスもしくはクラウドサービスとして、またはソフトウェア・アズ・ア・サービス(SaaS)モデルの下で、クライアントコンピューティングデバイス802、804、806、および/または808のユーザに対して提供されてもよい。クライアントコンピューティングデバイス802、804、806、および/または808を動作させるユーザは、次いで、1つ以上のクライアントアプリケーションを利用してサーバ812と対話して、これらのコンポーネントによって提供されるサービスを利用してもよい。
【0082】
図に示される構成では、システム800のソフトウェアコンポーネント818,820および822は、サーバ812上で実現されるものとして示される。他の実施形態では、システム800のコンポーネントのうちの1つ以上および/またはこれらのコンポーネントによって提供されるサービスは、クライアントコンピューティングデバイス802,804,806および/または808のうちの1つ以上によって実現されてもよい。クライアントコンピューティングデバイスを動作させるユーザは、次いで、1つ以上のクライアントアプリケーションを利用して、これらのコンポーネントによって提供されるサービスを用いてもよい。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせで実現されてもよい。分散型システム800とは異なってもよいさまざまな異なるシステム構成が可能であることが理解されるべきである。図に示される実施形態は、したがって、実施形態のシステムを実現するための分散型システムの一例であり、限定的であるよう意図されるものではない。
【0083】
クライアントコンピューティングデバイス802,804,806および/または808は、携帯可能なハンドヘルドデバイス(たとえば、iPhone(登録商標)、セルラー電話、 iPad(登録商標)、コンピューティングタブレット、携帯情報端末(PDA))またはウェアラブルデバイス(たとえばGoogle Glass(登録商標)頭部装着型ディスプレイ)であってもよく、Microsoft Windows Mobile(登録商標)などのソフトウェア、および/もしくは、iOS, Windows Phone, Android, BlackBerry 10, Palm OSなどのさまざまなモバイルオペレーティングシステムを実行し、インターネット、電子メール、ショートメッセージサービス(SMS)、Blackberry(登録商標)、または他の有効にされた通信プロトコルである。クライアントコンピューティングデバイスは、汎用パーソナルコンピュータとすることができ、一例として、Microsoft Windows(登録商標), Apple Macintosh(登録商標), および/もしくはLinux(登録商標)オペレーティングシステムのさまざまなバージョンを実行するパーソナルコンピュータならびに/またはラップトップコンピュータを含む。クライアントコンピューティングデバイスは、例えばGoogle Chrome OSなどの様々なGNU/Linux(登録商標)オペレーティングシステムを含むがこれに限定されない、様々な市販のUNIX(登録商標)またはUNIXのようなオペレーティングシステムのいずれかを実行するワークステーションコンピュータとすることができる。代替として、または加えて、クライアントコンピューティングデバイス802,804,806,および808は、ネットワーク810を介して通信することが可能な、シンクライアントコンピュータ、インターネット対応ゲームシステム(例えば、Kinect(登録商標)ジェスチャ入力装置を伴うかまたは伴わないMicrosoft Xboxゲームコンソール)、および/またはパーソナルメッセージングデバイス等の任意の他の電子デバイスであってもよい。
【0084】
例示の分散型システム800は、4つのクライアントコンピューティングデバイスとともに示されているが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサを伴うデバイスなど、他のデバイスがサーバ812と対話してもよい。
【0085】
分散型システム800内のネットワーク810は、TCP/IP(伝送制御プロトコル/インターネットプロトコル)、SNA(システムネットワークアーキテクチャ)、IPX(インターネットパケット交換)、AppleTalkなどを含むがこれらに限定されない様々な市販のプロトコルのいずれかを使用してデータ通信をサポートすることができる、当業者によく知られている任意のタイプのネットワークであってもよい。単に一例として、ネットワーク810は、イーサネット(登録商標)、トークンリングなどに基づくものなどのローカルエリアネットワーク(LAN)であってもよい。ネットワーク810は、ワイドエリアネットワークおよびインターネットであってもよい。それは、仮想プライベートネットワーク(VPN)、イントラネット、エクストラネット、公衆交換電話網(PSTN)、赤外線ネットワーク、無線ネットワーク(例えば、米国電気電子学会(IEEE)802.11プロトコル一式、Bluetooth(登録商標)、および/もしくは任意の他の無線プロトコルのいずれかの下で動作するネットワーク)を含むがこれらに限定されない仮想ネットワーク;ならびに/またはこれらおよび/もしくは他のネットワークの任意の組み合わせを含むことができる。
【0086】
サーバ812は、1つ以上の汎用コンピュータ、専用サーバコンピュータ(例として、PC(パーソナルコンピュータ)サーバ、UNIX(登録商標)サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウント型サーバなどを含む)、サーバファーム、サーバクラスタ、または任意の他の適切な構成および/もしくは組合せから構成されてもよい。種々の実施形態では、サーバ812は、前述の開示で説明される1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。例えば、サーバ812は、本開示のある実施形態に従って上記で説明された処理を実行するためのサーバに対応してもよい。
【0087】
サーバ812は、上述のもののいずれかを含むオペレーティングシステム、および任意の市場で入手可能なサーバオペレーティングシステムを実行してもよい。サーバ812はまた、HTTP(ハイパーテキスト転送プロトコル)サーバ、FTP(ファイル転送プロトコル)サーバ、CGI(コモンゲートウェイインターフェイス)サーバ、JAVA(登録商標)サーバ、データベースサーバなどを含むさまざまなさらに他のサーバアプリケーションおよび/または中間層アプリケーションのうちのいずれかを実行してもよい。例示的なデータベースサーバは、Oracle, Microsoft, Sybase, IBM(登録商標)(インターナショナルビジネスマシンズ)などから市場で入手可能なものを含むが、それらに限定されるものではない。
【0088】
いくつかの実現例では、サーバ812は、クライアントコンピューティングデバイス802,804,806,および808のユーザから受信されたデータフィードおよび/またはイベント更新を分析および整理統合するための1つ以上のアプリケーションを含んでもよい。一例として、データフィードおよび/またはイベント更新は、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム解析ツール、自動車交通監視などに関連するリアルタイムのイベントを含んでもよい、1つ以上の第三者情報源および連続データストリームから受信される、Twitter(登録商標)フィード、Facebook(登録商標)更新またはリアルタイムの更新を含んでもよいが、それらに限定されるものではない。サーバ812は、クライアントコンピューティングデバイス802,804,806,および808の1つ以上のディスプレイデバイスを介してデータフィードおよび/またはリアルタイムイベントを表示するための1つ以上のアプリケーションも含んでもよい。
【0089】
分散型システム800は、1つ以上のデータベース814および816も含んでもよい。データベース814および816は、様々な場所に存在してもよい。例として、データベース814および816のうちの1つ以上は、サーバ812にローカルな(および/または常駐する)非一時的記憶媒体上に常駐してもよい。代替として、データベース814および816は、サーバ812から遠隔にあり、ネットワークベースの接続または専用の接続を介してサーバ812と通信してもよい。一組の実施形態では、データベース814および816は、ストレージエリアネットワーク(SAN)内に常駐してもよい。同様に、サーバ812に帰する機能を実行するための任意の必要なファイルが、適宜、サーバ812上にローカルに、および/または遠隔で、記憶されてもよい。一組の実施形態では、データベース814および816は、SQLフォーマット化されたコマンドに応答してデータを記憶、更新、および検索するように適合される、Oracleによって提供されるデータベース等のリレーショナルデータベースを含んでもよい。
【0090】
図9は、本開示の一実施形態による、実施形態のシステムの1つ以上のコンポーネントによって提供されるサービスをクラウドサービスとして提供してもよいシステム環境900の1つ以上のコンポーネントの簡略ブロック図である。図示される実施形態では、システム環境900は、クラウドサービスを提供するクラウドインフラストラクチャシステム902と対話するためにユーザによって使用されてもよい、1つ以上のクライアントコンピューティングデバイス904,906,および908を含む。クライアントコンピューティングデバイスは、クラウドインフラストラクチャシステム902によって提供されるサービスを使用するためにクラウドインフラストラクチャシステム902と対話するためにクライアントコンピューティングデバイスのユーザによって使用されてもよい、ウェブブラウザ、知的所有権下にあるクライアントアプリケーション(たとえば、Oracle Forms)、または何らかの他のアプリケーションなどのクライアントアプリケーションを動作させるよう構成されてもよい。
【0091】
図示のクラウドインフラストラクチャシステム902は、図示されるコンポーネント以外のコンポーネントを有していてもよいことを理解されたい。さらに、図に示す実施形態は、本発明の実施形態を組み込んでもよいクラウドインフラストラクチャシステムの一例にすぎない。いくつかの他の実施形態では、クラウドインフラストラクチャシステム902は、図に示されるよりも多いまたは少ないコンポーネントを有してもよく、2つ以上のコンポーネントを組み合わせてもよく、またはコンポーネントの異なる構成もしくは配列を有してもよい。
【0092】
クライアントコンピューティングデバイス904,906,および908は、802,804,806,および808について上で説明されたものと同様のデバイスであってもよい。
【0093】
例示的なシステム環境900は3つのクライアントコンピューティングデバイスとともに示されるが、任意の数のクライアントコンピューティングデバイスがサポートされてもよい。センサを伴うデバイスなどの、他のデバイスが、クラウドインフラストラクチャシステム902と対話してもよい。
【0094】
ネットワーク910は、クライアント904,906,および908とクラウドインフラストラクチャシステム902との間のデータの通信および交換を容易にしてもよい。各ネットワークは、ネットワーク810について上で説明されたものを含む、様々な市販のプロトコルのいずれかを使用してデータ通信をサポートすることができる、当業者によく知られている任意のタイプのネットワークであってもよい。
【0095】
クラウドインフラストラクチャシステム902は、サーバ812について上述したものを含んでもよい1つ以上のコンピュータおよび/またはサーバを含んでもよい。
【0096】
ある実施形態では、クラウドインフラストラクチャシステムによって提供されるサービスは、オンラインデータストレージおよびバックアップソリューション、ウェブベースの電子メールサービス、ホストされたオフィススイートおよびドキュメントコラボレーションサービス、データベース処理、管理された技術サポートサービス等、オンデマンドでクラウドインフラストラクチャシステムのユーザに利用可能にされるサービスのホストを含んでもよい。クラウドインフラストラクチャシステムによって提供されるサービスは、そのユーザのニーズを満たすように動的にスケーリングすることができる。クラウドインフラストラクチャシステムによって提供されるサービスの特定のインスタンス化は、本明細書では「サービスインスタンス」と呼ばれる。一般に、クラウドサービスプロバイダのシステムからインターネットなどの通信ネットワークを介してユーザに利用可能にされる任意のサービスは、「クラウドサービス」と呼ばれる。典型的には、パブリッククラウド環境では、クラウドサービスプロバイダのシステムを構成するサーバおよびシステムは、顧客自身のオンプレミスサーバおよびシステムとは異なる。例えば、クラウドサービスプロバイダのシステムは、アプリケーションをホストしてもよく、ユーザは、インターネット等の通信ネットワークを介して、オンデマンドで、そのアプリケーションを注文および使用してもよい。
【0097】
いくつかの例では、コンピュータネットワーククラウドインフラストラクチャ内のサービスは、ストレージ、ホストされたデータベース、ホストされたウェブサーバ、ソフトウェアアプリケーション、またはクラウドベンダによってユーザに提供されるかもしくは当技術分野で公知の他のサービスへの、保護されたコンピュータネットワークアクセスを含んでもよい。例えば、サービスは、インターネットを介したクラウド上のリモートストレージへのパスワード保護されたアクセスを含むことができる。別の例として、サービスは、ウェブサービスベースのホストされたリレーショナルデータベースと、ネットワーク化された開発者による私的使用のためのスクリプト言語ミドルウェアエンジンとを含むことができる。別の例として、サービスは、クラウドベンダのウェブサイト上でホストされる電子メールソフトウェアアプリケーションへのアクセスを含むことができる。
【0098】
ある実施形態では、クラウドインフラストラクチャシステム902は、セルフサービスであり、サブスクリプションベースであり、弾性的にスケーラブルであり、信頼性があり、高い可用性があり、セキュリティ保護のある態様で顧客に配信される、アプリケーション、ミドルウェア、およびデータベースサービス提供の一式を含んでもよい。そのようなクラウドインフラストラクチャシステムの例は、本譲受人によって提供されるOracle Public Cloudである。
【0099】
さまざまな実施形態において、クラウドインフラストラクチャシステム902は、クラウドインフラストラクチャシステム902によって提供されるサービスに対する顧客のサブスクリプションを自動的にプロビジョニングし、管理し、追跡するように適合されてもよい。クラウドインフラストラクチャシステム902は、異なる展開モデルを介してクラウドサービスを提供してもよい。例えば、サービスは、クラウドインフラストラクチャシステム902が(例えば、Oracleによって所有される)クラウドサービスを販売する組織によって所有され、サービスが一般公衆または異なる業界企業に利用可能にされる、公衆クラウドモデルの下で提供されてもよい。別の例として、サービスは、クラウドインフラストラクチャシステム902が単一の組織に対してのみ動作し、その組織内の1つ以上のエンティティにサービスを提供してもよいプライベートクラウドモデルの下で提供してもよい。クラウドサービスはまた、クラウドインフラストラクチャシステム902およびクラウドインフラストラクチャシステム902によって提供されるサービスが関連するコミュニティ内のいくつかの組織によって共有されるコミュニティクラウドモデルの下で提供されてもよい。クラウドサービスはまた、2つ以上の異なるモデルの組み合わせであるハイブリッドクラウドモデルの下で提供されてもよい。
【0100】
いくつかの実施形態では、クラウドインフラストラクチャシステム902によって提供されるサービスは、サービスとしてのソフトウェア(SaaS)カテゴリ、サービスとしてのプラットフォーム(PaaS)カテゴリ、サービスとしてのインフラストラクチャ(IaaS)カテゴリ、またはハイブリッドサービスを含むサービスの他のカテゴリの下で提供される1つ以上のサービスを含んでもよい。顧客は、クラウドインフラストラクチャシステム902によって提供される1つ以上のサービスを、サブスクリプション注文を介して注文してもよい。次いで、クラウドインフラストラクチャシステム902は、顧客のサブスクリプション注文におけるサービスを提供するための処理を実行する。
【0101】
いくつかの実施形態では、クラウドインフラストラクチャシステム902によって提供されるサービスは、アプリケーションサービス、プラットフォームサービス、およびインフラストラクチャサービスを含んでもよいが、それらに限定はされない。いくつかの例では、アプリケーションサービスは、SaaSプラットフォームを介して、クラウドインフラストラクチャシステムによって提供されてもよい。SaaSプラットフォームは、SaaSカテゴリに該当するクラウドサービスを提供するよう構成されてもよい。例えば、SaaSプラットフォームは、統合された開発および展開プラットフォーム上でオンデマンドアプリケーションの一式を構築および配信するための能力を提供してもよい。SaaSプラットフォームは、SaaSサービスを提供するための基底のソフトウェアおよびインフラストラクチャを管理ならびに制御してもよい。SaaSプラットフォームによって提供されるサービスを利用することによって、顧客は、クラウドインフラストラクチャシステム上で実行するアプリケーションを利用することができる。顧客は、別途のライセンスおよびサポートを購入する必要なく、アプリケーションサービスを取得することができる。様々な異なるSaaSサービスが提供されてもよい。例としては、販売実績管理、企業統合、および大規模組織のための事業柔軟性のためのソリューションを提供するサービスが挙げられるが、それらに限定されない。
【0102】
いくつかの実施形態では、プラットフォームサービスは、PaaSプラットフォームを介して、クラウドインフラストラクチャシステムによって提供されてもよい。PaaSプラットフォームは、PaaSカテゴリに該当するクラウドサービスを提供するよう構成されてもよい。プラットフォームサービスの例は、組織(Oracle等)が共有の共通アーキテクチャ上で既存のアプリケーションを統合することを可能にするサービス、およびプラットフォームによって提供される共有サービスを活用する新たなアプリケーションを構築する能力を含んでもよいが、それらに限定されない。SaaSプラットフォームは、SaaSサービスを提供するための基底のソフトウェアおよびインフラストラクチャを管理ならびに制御してもよい。顧客は、顧客が別途のライセンスおよびサポートを購入する必要なく、クラウドインフラストラクチャシステムによって提供されるPaaSサービスを取得することができる。プラットフォームサービスの例は、Oracle Java Cloud Service (JCS), Oracle Database Cloud Service (DBCS)などを含むが、これらに限定されない。
【0103】
PaaSプラットフォームによって提供されるサービスを利用することによって、顧客は、クラウドインフラストラクチャシステムによってサポートされるプログラミング言語およびツールを採用することができ、展開されたサービスを制御することもできる。いくつかの実施形態では、クラウドインフラストラクチャシステムによって提供されるプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービス(例えば、Oracle Fusion Middlewareサービス)、およびJavaクラウドサービスを含んでもよい。一実施形態では、データベースクラウドサービスは、組織がデータベースリソースをプールし、顧客にサービスとしてのデータベースをデータベースクラウドの形で提供することを可能にする共有サービス展開モデルをサポートしてもよい。ミドルウェアクラウドサービスは、顧客が様々なビジネスアプリケーションを開発および展開するためのプラットフォームを提供してもよく、Javaクラウドサービスは、顧客がクラウドインフラストラクチャシステムにおいてJavaアプリケーションを展開するためのプラットフォームを提供してもよい。
【0104】
様々な異なるインフラストラクチャサービスが、クラウドインフラストラクチャシステムにおいてIaaSプラットフォームによって提供されてもよい。インフラストラクチャサービスは、SaaSプラットフォームおよびPaaSプラットフォームによって提供されるサービスを利用する顧客のためにストレージ、ネットワーク、および他の基本的なコンピューティングリソース等の基底のコンピューティングリソースの管理ならびに制御を促進する。
【0105】
ある実施形態では、クラウドインフラストラクチャシステム902はまた、クラウドインフラストラクチャシステムの顧客に様々なサービスを提供するために使用されるリソースを提供するためのインフラストラクチャリソース930を含んでもよい。一実施形態では、インフラストラクチャリソース930は、PaaSプラットフォームおよびSaaSプラットフォームによって提供されるサービスを実行するためにサーバ、ストレージ、およびネットワーキングリソースなどのハードウェアの事前統合され最適化された組合せを含んでもよい。
【0106】
いくつかの実施形態では、クラウドインフラストラクチャシステム902におけるリソースは、複数のユーザによって共有され、需要ごとに動的に再割り当てされてもよい。加えて、リソースは、異なる時間帯においてユーザに割り当てられてもよい。たとえば、クラウドインフラストラクチャシステム930は、第1の時間帯における第1の組のユーザがクラウドインフラストラクチャシステムのリソースを指定された時間数にわたって利用することを可能にし、次いで、異なる時間帯にいる別の組のユーザに同じリソースを再割り当てることを可能にし、それによってリソースの利用を最大にしてもよい。
【0107】
ある実施形態では、クラウドインフラストラクチャシステム902の異なるコンポーネントまたはモジュールによって、およびクラウドインフラストラクチャシステム902によって提供されるサービスによって共有されるいくつかの内部共有サービス932が提供されてもよい。これらの内部共有サービスは、セキュリティおよびアイデンティティサービス、統合サービス、企業リポジトリサービス、企業マネージャサービス、ウイルススキャンおよびホワイトリストサービス、高可用性、バックアップおよび回復サービス、クラウドサポートを可能にするためのサービス、電子メールサービス、通知サービス、ファイル転送サービスなどを含んでもよいが、これらに限定されない。
【0108】
特定の実施形態では、クラウドインフラストラクチャシステム902は、クラウドインフラストラクチャシステムにおけるクラウドサービス(例えば、SaaS、PaaS、およびIaaSサービス)の包括的な管理を提供してもよい。一実施形態では、クラウド管理機能は、クラウドインフラストラクチャシステム902によって受信された顧客のサブスクリプションをプロビジョニングし、管理し、追跡するための能力などを含んでもよい。
【0109】
一実施形態では、図に示すように、クラウド管理機能は、注文管理モジュール920、注文オーケストレーションモジュール922、注文プロビジョニングモジュール924、注文管理および監視モジュール926、ならびにアイデンティティ管理モジュール928などの1つ以上のモジュールによって提供されてもよい。これらのモジュールは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、もしくは任意の他の適切な構成および/もしくは組み合わせであってもよい1つ以上のコンピュータならびに/もしくはサーバを含むか、またはそれらを使用して提供されてもよい。
【0110】
例示的な動作934において、クライアントデバイス904、906または908などのクライアントデバイスを使用する顧客は、クラウドインフラストラクチャシステム902によって提供される1つ以上のサービスを要求し、クラウドインフラストラクチャシステム902によって提供される1つ以上のサービスのサブスクリプションの注文を出すことによって、クラウドインフラストラクチャシステム902と対話してもよい。ある実施形態では、顧客は、クラウドユーザインターフェイス(UI)、クラウドUI912、クラウドUI914、および/またはクラウドUI916にアクセスし、これらのUIを介してサブスクリプション注文を行ってもよい。顧客が注文を行うことに応答してクラウドインフラストラクチャシステム902によって受信される注文情報は、顧客と、顧客が加入しようとする、クラウドインフラストラクチャシステム902によって提供される1つ以上のサービスとを識別する情報を含んでもよい。
【0111】
顧客によって注文が行われた後、クラウドUI912、914および/または916を介して注文情報が受信される。
【0112】
動作936において、注文は注文データベース918に記憶される。注文データベース918は、クラウドインフラストラクチャシステム918によって操作され他のシステム要素と関連して操作されるいくつかのデータベースのうちの1つであることができる。
【0113】
動作938において、注文情報は注文管理モジュール920に転送される。いくつかの例では、注文管理モジュール920は、注文を検証し、検証されると注文を記帳するなど、注文に関連する料金請求および経理機能を実行するよう構成されてもよい。
【0114】
動作940において、注文に関する情報は、注文オーケストレーションモジュール922に通信される。注文オーケストレーションモジュール922は、注文情報を利用して、顧客によって行われた注文に対してサービスおよびリソースのプロビジョニングをオーケストレーションしてもよい。いくつかの例では、注文オーケストレーションモジュール922は、注文プロビジョニングモジュール924のサービスを使用して、サブスクライブされたサービスをサポートするためにリソースのプロビジョニングをオーケストレーションしてもよい。
【0115】
特定の実施形態では、注文オーケストレーションモジュール922は、各注文に関連付けられるビジネスプロセスの管理を可能にし、ビジネスロジックを適用して、注文がプロビジョニングに進むべきかどうかを判断する。動作942において、新たなサブスクリプションの注文を受信すると、注文オーケストレーションモジュール922は、リソースを割り当て、サブスクリプション注文を満たすのに必要とされるリソースを構成するよう、要求を注文プロビジョニングモジュール924に送信する。注文プロビジョニングモジュール924は、顧客によって注文されたサービスに対するリソースの割り当てを可能にする。注文プロビジョニングモジュール924は、クラウドインフラストラクチャシステム900によって提供されるクラウドサービス間の抽象化のレベル、および要求されたサービスを提供するためのリソースをプロビジョニングするために使用される物理的なインプリメンテーション層を提供する。したがって、注文オーケストレーションモジュール922は、サービスおよびリソースが実際にオンザフライでプロビジョニングされるか、または事前にプロビジョニングされ、要求に応じてのみ割り振られる/割り当てられるかどうかなど、実現の詳細から隔離されてもよい。
【0116】
動作944において、サービスおよびリソースがプロビジョニングされると、提供されたサービスの通知が、クラウドインフラストラクチャシステム902の注文プロビジョニングモジュール924によってクライアントデバイス904、906および/または908上の顧客に送信されてもよい。
【0117】
動作946において、顧客のサブスクリプション注文は、注文管理および監視モジュール926によって管理ならびに追跡されてもよい。いくつかの事例では、注文管理および監視モジュール926は、使用されるストレージの量、転送されるデータの量、ユーザの数、ならびにシステム起動時間およびシステム停止時間の量など、サブスクリプション注文におけるサービスについて使用統計を収集するよう構成されてもよい。
【0118】
ある実施形態では、クラウドインフラストラクチャシステム900は、アイデンティティ管理モジュール928を含んでもよい。アイデンティティ管理モジュール928は、クラウドインフラストラクチャシステム900におけるアクセス管理および認可サービスなどのアイデンティティサービスを提供するよう構成されてもよい。いくつかの実施形態では、アイデンティティ管理モジュール928は、クラウドインフラストラクチャシステム902によって提供されるサービスを利用することを望む顧客に関する情報を制御してもよい。そのような情報は、そのような顧客の素性を認証する情報、およびそれらの顧客が様々なシステムリソース(例えば、ファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど)に対してどのアクションを実行することを許可されるかを記述する情報を含むことができる。アイデンティティ管理モジュール928はまた、各顧客についての記述情報、ならびにその記述情報にアクセスしそれを変更することができる方法および人についての記述情報の管理も含んでもよい。
【0119】
図10は、本発明の様々な実施形態が実現されてもよい例示的なコンピュータシステム1000を示す。システム1000は、上記で説明されるコンピュータシステムのうちのいずれかを実現するために使用されてもよい。図に示されるように、コンピュータシステム1000は、バスサブシステム1002を介していくつかの周辺サブシステムと通信する処理ユニット1004を含む。これらの周辺サブシステムは、処理加速ユニット1006、I/Oサブシステム1008、ストレージサブシステム1018、および通信サブシステム1024を含んでもよい。ストレージサブシステム1018は、有形のコンピュータ可読記憶媒体1022およびシステムメモリ1010を含む。
【0120】
バスサブシステム1002は、コンピュータシステム1000のさまざまなコンポーネントおよびサブシステムに、意図されるように互いに通信させるための機構を提供する。バスサブシステム1002は、単一のバスとして概略的に示されるが、バスサブシステムの代替実施形態は、複数のバスを利用してもよい。バスサブシステム1002は、さまざまなバスアーキテクチャのうちのいずれかを用いるメモリバスまたはメモリコントローラ、周辺バスおよびローカルバスを含むいくつかのタイプのバス構造のうちのいずれかであってもよい。たとえば、そのようなアーキテクチャは、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA)ローカルバス、およびIEEE P1386.1規格に従って製造される中二階バスとして実現され得る周辺コンポーネントインターコネクト(PCI)バスを含んでもよい。
【0121】
処理ユニット1004は、1つ以上の集積回路(例えば、従来のマイクロプロセッサまたはマイクロコントローラ)として実現することができ、コンピュータシステム1000の動作を制御する。1つ以上のプロセッサが処理ユニット1004に含まれてもよい。これらのプロセッサは、シングルコアプロセッサまたはマルチコアプロセッサを含んでもよい。特定の実施形態では、処理ユニット1004は、シングルコアプロセッサもしくはマルチコアプロセッサが各処理ユニットに含まれる1つ以上の独立した処理ユニット1032および/または1034として実現されてもよい。他の実施形態では、処理ユニット1004はまた、2つのデュアルコアプロセッサを単一のチップに統合することによって形成されるクワッドコア処理ユニットとして実現されてもよい。
【0122】
様々な実施形態では、処理ユニット1004は、プログラムコードに応答して様々なプログラムを実行することができ、複数の同時に実行されるプログラムまたはプロセスを維持することができる。任意の所与の時間に、実行されるべきプログラムコードの一部またはすべてが、プロセッサ1004、および/またはストレージサブシステム1018に常駐することができる。好適なプログラミングを通して、プロセッサ1004は、上記で説明される種々の機能性を提供することができる。コンピュータシステム1000は、デジタル信号プロセッサ(DSP)、特殊目的プロセッサなどを含み得る処理加速ユニット1006をさらに含んでもよい。
【0123】
I/Oサブシステム1008は、ユーザインターフェイス入力デバイスおよびユーザインターフェイス出力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組み込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、音声コマンド認識システムを伴う音声入力デバイス、マイクロフォン、および他のタイプの入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、例えば、ユーザが、ジェスチャおよび発話コマンドを使用して、ナチュラルユーザインターフェイスを通して、Microsoft Xbox(登録商標)360ゲームコントローラ等の入力デバイスを制御し、それと相互作用することを可能にする、Microsoft Kinect(登録商標)モーションセンサ等のモーション感知および/またはジェスチャ認識デバイスを含んでもよい。ユーザインターフェイス入力デバイスは、ユーザから目の動き(たとえば、写真を撮っている間および/またはメニュー選択を行なっている間の「まばたき」)を検出し、アイジェスチャを入力デバイス(たとえばGoogle Glass(登録商標))への入力として変換するGoogle Glass(登録商標)瞬き検出器などのアイジェスチャ認識デバイスも含んでもよい。加えて、ユーザインターフェイス入力デバイスは、ユーザが音声コマンドを介して音声認識システム(たとえばSiri(登録商標)ナビゲータ)と対話することを可能にする音声認識感知デバイスを含んでもよい。
【0124】
ユーザインターフェイス入力デバイスは、三次元(3D)マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびにスピーカ、デジタルカメラ、デジタルカムコーダ、ポータブルメディアプレーヤ、ウェブカム、画像スキャナ、指紋スキャナ、バーコードリーダ3Dスキャナ、3Dプリンタ、レーザレンジファインダ、および視線追跡デバイスなどの聴覚/視覚デバイスも含んでもよいが、それらに限定されるものではない。加えて、ユーザインターフェイス入力デバイスは、例えば、コンピュータ断層撮影、磁気共鳴撮像、ポジトロン断層撮影、医療用超音波検査装置等の医療用撮像入力デバイスを含んでもよい。ユーザインターフェイス入力デバイスはまた、例えば、MIDIキーボード、デジタル楽器等の音声入力デバイスを含んでもよい。
【0125】
ユーザインターフェイス出力デバイスは、ディスプレイサブシステム、インジケータライト、または音声出力デバイス等の非視覚的ディスプレイを含んでもよい。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)またはプラズマディスプレイを使用するものなどのフラットパネルデバイス、投影デバイス、タッチスクリーンなどであってもよい。一般に、「出力デバイス」という語の使用は、コンピュータシステム1000からユーザまたは他のコンピュータに情報を出力するためのすべての考えられ得るタイプのデバイスおよび機構を含むよう意図される。たとえば、ユーザインターフェイス出力デバイスは、モニタ、プリンタ、スピーカ、ヘッドフォン、自動車ナビゲーションシステム、プロッタ、音声出力デバイスおよびモデムなどの、テキスト、グラフィックスならびに音声/映像情報を視覚的に伝えるさまざまな表示デバイスを含んでもよいが、それらに限定されるものではない。
【0126】
コンピュータシステム1000は、現在のところシステムメモリ1010内に位置しているものとして示されているソフトウェア要素を含むストレージサブシステム1018を備えてもよい。システムメモリ1010は、処理ユニット1004上でロード可能および実行可能なプログラム命令、ならびにこれらのプログラムの実行中に生成されるデータを記憶してもよい。
【0127】
コンピュータシステム1000の構成およびタイプに応じて、システムメモリ1010は、揮発性(ランダムアクセスメモリ(RAM)など)および/または不揮発性(読み出し専用メモリ(ROM)、フラッシュメモリなど)であってもよい。RAMは、典型的には、処理ユニット1004に即座にアクセス可能である、ならびに/もしくは処理ユニット1004によって現在操作および実行されている、データならびに/またはプログラムモジュールを含む。いくつかの実現例では、システムメモリ1010は、スタティックランダムアクセスメモリ(SRAM)またはダイナミックランダムアクセスメモリ(DRAM)など、複数の異なるタイプのメモリを含んでもよい。いくつかの実現例では、起動中などにコンピュータシステム1000内の要素間で情報を転送するのに役立つ基本的なルーチンを含むベーシックインプット/アウトプットシステム(BIOS)が、典型的には、ROMに記憶されてもよい。限定ではなく例として、システムメモリ1010はまた、クライアントアプリケーション、ウェブブラウザ、中間層アプリケーション、リレーショナルデータベース管理システム(RDBMS)などを含んでもよいアプリケーションプログラム1012、プログラムデータ1014、およびオペレーティングシステム1016も示す。例として、オペレーティングシステム1016は、様々なバージョンのMicrosoft Windows(登録商標)、Apple Macintosh(登録商標)、および/もしくはLinux(登録商標)オペレーティングシステム、様々な市販のUNIX(登録商標)もしくはUNIX様オペレーティングシステム(様々なGNU/Linuxオペレーティングシステム、Google Chrome(登録商標)OSなどを含むが、これらに限定されない)、ならびに/またはiOS, Windows(登録商標)Phone, Android(登録商標)OS、BlackBerry(登録商標)10OS、およびPalm(登録商標)OSオペレーティングシステムなどのモバイルオペレーティングシステムを含んでもよい。
【0128】
記憶サブシステム1018はまた、いくつかの実施形態の機能性を提供する基本的なプログラミングおよびデータ構造を記憶するための有形のコンピュータ可読記憶媒体も提供してもよい。プロセッサによって実行されると上述の機能を提供するソフトウェア(プログラム、コードモジュール、命令)が、ストレージサブシステム1018に格納されてもよい。これらのソフトウェアモジュールまたは命令は、処理ユニット1004によって実行されてもよい。ストレージサブシステム1018はまた、本発明に従って使用されるデータを記憶するためのリポジトリを提供してもよい。
【0129】
ストレージサブシステム1000はまた、コンピュータ可読記憶媒体1022にさらに接続され得るコンピュータ可読記憶媒体リーダ1020を含み得る。システムメモリ1010とともに、およびオプションとして、システムメモリ1010と組み合わせて、コンピュータ可読記憶媒体1022は、コンピュータ可読情報を、一時的および/またはより恒久的に収容、記憶、伝送、および検索するために、遠隔の、ローカルな、固定された、および/またはリムーバブルなストレージデバイスに記憶媒体を加えたものを包括的に表してもよい。
【0130】
コードまたはコードの一部を含むコンピュータ可読記憶媒体1022はまた、限定はしないが、情報の記憶および/または伝送のための任意の方法または技術で実現される揮発性および不揮発性の、リムーバブルおよび非リムーバブル媒体などの、記憶媒体ならびに通信媒体を含む、当技術分野で公知であるかまたは使用される任意の適切な媒体を含むことができる。これは、RAM、ROM、電子的に消去可能プログラマブルROM(EEPROM)、フラッシュメモリもしくは他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)、または他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または他の有形のコンピュータ可読媒体等の有形のコンピュータ可読記憶媒体を含んでもよい。これはまた、データ信号、データ伝送、または所望の情報を伝送するために使用することができ、コンピューティングシステム1000によってアクセスすることができる、任意の他の媒体等の非有形のコンピュータ可読媒体を含むことができる。
【0131】
例として、コンピュータ可読記憶媒体1022は、非リムーバブル不揮発性磁気媒体に対して読み書きするハードディスクドライブ、リムーバブル不揮発性磁気ディスクに対して読み書きする磁気ディスクドライブ、CD ROM、DVDおよびBlu-Ray(登録商標)ディスクなどの、リムーバブル不揮発性光ディスクに対して読み書きする光ディスクドライブ、または他の光学媒体を含んでもよい。コンピュータ可読記憶媒体1022は、Zip(登録商標)ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス(USB)フラッシュドライブ、セキュアデジタル(SD)カード、DVDディスク、デジタルビデオテープなどを含んでもよいが、これらに限定されない。コンピュータ可読記憶媒体1022はまた、フラッシュメモリベースのSSD、エンタープライズフラッシュドライブ、ソリッドステートROMなどの不揮発性メモリに基づくソリッドステートドライブ(SSD)、ソリッドステートRAM、ダイナミックRAM、スタティックRAMなどの揮発性メモリに基づくSSD、DRAMベースのSSD、磁気抵抗RAM(MRAM)SSD、およびDRAMとフラッシュメモリベースのSSDとの組み合わせを使用するハイブリッドSSDも含んでもよい。ディスクドライブおよびそれらに関連付けられるコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性記憶をコンピュータシステム1000に提供してもよい。
【0132】
通信サブシステム1024は、他のコンピュータシステムおよびネットワークに対するインターフェイスを提供する。通信サブシステム1024は、他のシステムとコンピュータシステム1000との間のデータの送受のためのインターフェイスとして働く。例えば、通信サブシステム1024は、コンピュータシステム1000がインターネットを介して1つ以上のデバイスに接続することを可能にしてもよい。いくつかの実施形態では、通信サブシステム1024は、(たとえば、セルラー電話技術、3G、4GもしくはEDGE(グローバル進化のための高速データレート)などの先進データネットワーク技術、WiFi(IEEE802.11ファミリー規格、もしくは他のモバイル通信技術、またはそれらのいずれかの組み合わせを用いて)無線音声および/もしくはデータネットワークにアクセスするための無線周波数(RF)送受信機コンポーネント、グローバルポジショニングシステム(GPS)受信機コンポーネント、ならびに/または他のコンポーネントを含んでもよい。いくつかの実施形態では、通信サブシステム1024は、無線インターフェイスに加えて、またはその代わりに、有線ネットワーク接続性(例えば、イーサネット(登録商標))を提供することができる。
【0133】
いくつかの実施形態では、通信サブシステム1024はまた、コンピュータシステム1000を使用してもよい1人以上のユーザの代わりに、構造化されたおよび/または構造化されていないデータフィード1026、イベントストリーム1028、イベント更新1030等の形式で入力通信を受信してもよい。
【0134】
例として、通信サブシステム1024は、Twitter(登録商標)フィード、Facebook(登録商標)更新、Rich Site Summary(RSS)フィードなどのウェブフィード、および/もしくは1つ以上の第三者情報源からのリアルタイム更新などの、ソーシャルネットワークならびに/または他の通信サービスのユーザからリアルタイムでデータフィード1026を受信するよう構成されてもよい。
【0135】
加えて、通信サブシステム1024はまた、連続データストリームの形式でデータを受信するよう構成されてもよく、これは、明示的な終端を伴わない、本質的に連続的または無限であってもよい、リアルタイムイベントのイベントストリーム1028および/またはイベント更新1030を含んでもよい。連続データを生成するアプリケーションの例としては、たとえば、センサデータアプリケーション、金融株式相場表示板、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム解析ツール、自動車交通監視などが含まれてもよい。
【0136】
通信サブシステム1024はまた、構造化されたおよび/または構造化されていないデータフィード1026、イベントストリーム1028、イベント更新1030などを、コンピュータシステム1000に結合される1つ以上のストリーミングデータソースコンピュータと通信してもよい1つ以上のデータベースに出力するよう構成されてもよい。
【0137】
コンピュータシステム1000は、ハンドヘルドポータブルデバイス(例えば、iPhone(登録商標)携帯電話、iPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブルデバイス(例えば、Google Glass(登録商標)ヘッドマウントディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバラック、または任意の他のデータ処理システムを含む、種々のタイプの1つとすることができる。
【0138】
常に変化するコンピュータおよびネットワークの性質のため、図に示されるコンピュータシステム1000の記載は、単に具体的な例として意図される。図に描写されるシステムより多いまたは少ないコンポーネントを有する、多くの他の構成が可能である。たとえば、カスタマイズされたハードウェアも使用されるかもしれず、および/または、特定の要素が、ハードウェア、ファームウェア、ソフトウェア(アプレットを含む)、または組み合わせで実現されるかもしれない。さらに、ネットワーク入力/出力デバイス等の他のコンピューティングデバイスへの接続が採用されてもよい。本明細書に提供される開示および教示に基づいて、当業者は、種々の実施形態を実現するための他の態様および/または方法を理解するであろう。
【0139】
前述の説明では、説明の目的で、本発明の様々な実施形態の完全な理解のために、多数の具体的な詳細を記載した。しかしながら、本発明の実施形態は、これらの具体的な詳細のいくつかがなくても実施されてもよいことが当業者には明らかであろう。他の例では、周知の構造およびデバイスがブロック図形式で示される。
【0140】
前述の説明は、例示的な実施形態のみを提供し、本開示の範囲、適用性、または構成を限定することを意図しない。むしろ、例示的な実施形態の前述の説明は、例示的な実施形態を実施するための実施可能な説明を当業者に提供するであろう。特許請求の範囲に記載されている本発明の精神および範囲から逸脱することなく、要素の機能および構成にさまざまな変更を加えることができることを理解されたい。
【0141】
上記の説明では、実施形態の完全な理解を与えるために具体的な詳細が与えられている。しかしながら、当業者には、実施の形態はこれらの具体的な詳細なしに実施されてもよいことが理解される。例えば、回路、システム、ネットワーク、プロセス、および他のコンポーネントは、実施形態を不必要な詳細において不明瞭にしないために、ブロック図の形態でコンポーネントとして示されている場合がある。他の事例では、周知の回路、プロセス、アルゴリズム、構造、および技術は、実施形態を不明瞭にすることを回避するために、不必要な詳細を伴わずに示されている場合がある。
【0142】
また、個々の実施形態は、フローチャート、フロー図、データフロー図、構造図、またはブロック図として描写されるプロセスとして記載されている場合があることに留意されたい。あるフローチャートは動作を逐次プロセスとして記載している場合があるが、動作の多くは並列または同時に実行され得る。加えて、動作の順序は並べ替えられてもよい。プロセスは、その動作が完了されるときに終結されるが、図に含まれない追加のステップを有し得る。プロセスは、方法、関数、プロシージャ、サブルーチン、サブプログラムなどに対応してもよい。プロセスが関数に対応する場合では、その終結は、その関数が呼出関数または主関数に戻ることに対応し得る。
【0143】
「コンピュータ可読媒体」という用語は、命令および/またはデータを記憶するか、含むか、または担持することができるポータブルまたは固定された記憶装置、光記憶装置、ワイヤレスチャネルおよびさまざまな他の媒体を含むが、それらに限定はされない。コードセグメントまたは機械実行可能な命令は、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または命令、データ構造、もしくはプログラム文の任意の組合せを表してもよい。コードセグメントは、情報、データ、引数、パラメータ、またはメモリコンテンツを受け渡すおよび/または受け取ることによって、別のコードセグメントまたはハードウェア回路に結合されてもよい。情報、引数、パラメータ、データなどは、メモリ共有、メッセージ受渡し、トークン受渡し、ネットワーク伝送などを含む任意の好適な手段を介して渡されるか、転送されるか、または伝送されてもよい。
【0144】
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組合せによって実現されてもよい。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードで実現されるとき、必要なタスクを実行するプログラムコードまたはコードセグメントは、機械可読媒体に記憶されてもよい。必要なタスクはプロセッサが実行してもよい。
【0145】
前述の明細書においては、本発明の局面が、その特定の実施形態を参照して説明されているが、当業者は、本発明がそれに限定されないことを認識するであろう。上記の発明のさまざまな特徴および局面は、個々に、または一緒に用いられてもよい。さらに、実施形態は、本明細書の、より広い精神および範囲から逸脱することなく、本明細書に説明されるものを超えて、任意の数の環境および用途において利用されることができる。したがって、明細書および図面は、限定的ではなく例示的であると見なされるべきである。
【0146】
さらに、例示の目的のため、方法が特定の順序で説明された。代替の実施形態では、方法は、説明された順序とは異なる順序で実行されてもよいことを理解されたい。また、上記の方法は、ハードウェアコンポーネントによって実行されてもよいし、マシン実行可能命令であって、用いられると、そのような命令でプログラムされた汎用もしくは専用のプロセッサまたは論理回路などのマシンに上記の方法を実行させるマシン実行可能命令のシーケンスで具体化されてもよいことも理解されたい。これらのマシン実行可能命令は、CD-ROMもしくは他のタイプの光ディスク、フロッピー(登録商標)ディスケット、ROM、RAM、EPROM、EEPROM、磁気もしくは光カード、フラッシュメモリなど、または電子命令を記憶するために好適な他のタイプの機械可読媒体等の、1つ以上の機械可読媒体上に記憶されてもよい。代替的に、本方法は、ハードウェアとソフトウェアとの組合せによって実行されてもよい。
【国際調査報告】