数百あるいは数千もの同時並行的データプロデューサおよびデータコンシューマを処理するように設計された大規模なデータストリームを作成、記憶、検索および処理を管理するための方法および装置の様々な実施形態を説明する。「データストリーム」の用語は、本明細書内で用いられるように、1つ以上のデータプロデューサによって生成され、また1つ以上のデータコンシューマによってアクセスされてもよく、各データレコードを変更不能なバイト列とする、データレコードのシーケンスを指す。いくつかの実施形態において、ストリーム管理サービス(SMS)はストリームの作成、構成および削除、ならびにストリームデータレコードの送信、記憶および検索を可能にするプログラムインターフェイス(例、アプリケーションプログラミングインターフェイス(API)、ウェブページもしくはウェブサイト、グラフィックユーザーインターフェイス、またはコマンドラインツール)を提供してもよい。SMS制御コンポーネントと対話するものであるストリーム操作(ストリーム作成もしくは削除、または以下に述べる動的再分割操作の種類など)のいくつかのタイプは、本明細書内で「制御プレーン」操作と称することがある。一方、データレコード送信、記憶および検索などの通常(例、正常な動作状態において)制御コンポーネントとの対話を要求しない操作は、本明細書内では「データプレーン」操作と称るることがある。動的にプロビジョニングされた計算、記憶およびネットワーキングリソース群は、そのような実施形態のいくつかにおいて、例えば、以下でさらに詳細に述べるように、多数のサービスコンポーネントの間でスケーラブルな形式でストリーム管理の作業負荷を分散させることができる様々な分割ポリシーに基づいて、サービスを実装するために利用されてもよい。本明細書において、ストリーム管理サービス、また、ストリーム管理サービスを実装するために利用される仮想及び/または物理リソースの収集を含むストリーム管理システムを指すために、SMSの頭字語が用いられることがある。
SMSの顧客の一部は、様々な実施形態においてSMSプログラムインターフェイスを直接呼び出すアプリケーションを開発してもよい。しかし少なくともいくつかの実施形態では、SMSインターフェイスに加えて、SMSに直接サポートされた下位ストリーム管理関数を利用してアプリケーションを開発することを望まないクライアントのために、ストリーム処理の様々な態様を簡略化することができる高抽象度またはアプリケーションレベルの処理のフレームワークが顧客のために提供されてもよい。そのようなフレームワークは、顧客が下位ストリーム管理操作よりもストリームレコードを利用して実装されるビジネスロジックにより重点を置くことを可能にする(例えばSMSインターフェイス上に構築された)それ自体のプログラムインターフェイスを提供してもよい。いくつかの実施形態において、それ自体の制御プレーンおよびデータプレーンコンポーネントを有する、ストリーム処理のためのリソースの自動供給、処理ノードの自動フェイルオーバー、任意のストリーム処理ワークフローグラフを構築する能力、一時ストリームのためのサポート、作業負荷の変更または他のトリガする条件に基づく動的再分割、などの高度機能を提供することができるストリーム処理サービス(SPS)として、上位フレームワークが実装されてもよい。少なくともいくつかの実施形態では、ストリーム管理サービス、ストリーム処理サービス、または両方のサービスのいずれかが、マルチテナント管理のネットワークアクセス可能サービスとして仮想化環境において実装されてもよい。すなわちそのような実施形態において、少なくとも場合によってはリソースが共有されている方法を必ずしも顧客に正確に認識させることなく、または所定のリソースが共有されていることを一切顧客に認識させることなく、様々な物理リソース(コンピュータサーバまたはホスト、記憶装置、ネットワーキング装置など)が異なる顧客のストリーム間で共有されてもよい。管理されたマルチテナントストリーム管理及び/または処理管理サービスの制御コンポーネントは、クライアントによる選択が一部可能な様々な適用可能なポリシーに基づいて、特定のストリームのために利用されるノードまたはリソースを動的に追加し、取り除き、または再構成してもよい。加えて、制御コンポーネントもまた、(例えば、少なくともいくつかのハードウェアまたはソフトウェアが両方のクライアントによって共有されることが可能であるにもかかわらず、あるクライアントのストリームアプリケーションが別のクライアントのデータにアクセスできないように万全を期すために)様々な種類のセキュリティプロトコルの透明な形での実装、請求のためのリソースの使用の監視、監査またはデバッグのために利用可能なロギング情報の生成などの役割を担ってもよい。(1つ以上の)管理されたマルチテナントサービスのクライアントのパースペクティブから、(1つ以上の)サービスによって実装される制御/管理機能により、大規模ストリーミングアプリケーションのサポートに関わる複雑性の大部分を解消することができる。いくつかのシナリオでは、そのようなマルチテナントサービスの顧客が少なくともいくつかのタイプのストリーム関連の操作のためのリソースの共有を望まないことを示すことができる可能性があり、その場合少なくとも一時的に、それらのタイプの操作のための(すなわち、単一の顧客またはクライアントのために実行される操作に限定される)シングルテナントとして、いくつかの物理リソースが指定されてもよい。
様々な実施形態において、SMS及び/またはSPS制御プレーンならびにデータプレーン操作の実装のためにいくつかの異なる手法が取られてもよい。例えば制御プレーン操作に関して、いくつかの実装において、制御サーバまたはノードの冗長グループが設定されてもよい。冗長グループは、複数の制御サーバを含んでもよく、それら複数の制御サーバにおいては、あるサーバが様々なストリームに関する管理要求への応答の役割を担うプライマリサーバとして指定される。一方で、現在のプライマリにおける障害(またはその接続の喪失)などのトリガする条件の場合に、プライマリとして引き継ぐために別のサーバが指定されてもよい。別の実装においては、ネットワークアクセス可能データベースサービスにおいて作成される1つ以上のテーブルが、様々なストリームのための(パーティションマップなどの)制御プレーンメタデータを記憶させるために利用されてもよく、様々な採集、記憶または検索ノードが、データプレーン操作のために要求されるメタデータのサブセットを取得するために必要なテーブルにアクセスすることができる可能性がある。異なる実施形態におけるSPSおよびSMSデータプレーンならびに制御プレーン機能の様々な態様に関する詳細については、以下で説明する。ストリーム管理サービスが実装されるいくつかの実施形態においては、上位プリミティブを提供するストリーム処理サービスが必ずしも実装されなくてもよいことに留意されたい。他の実施形態では、ストリーム処理サービスの高レベルのプログラムインターフェイスのみが顧客に公開されてもよく、によって利用される下位ストリーム管理インターフェイスがクライアントに利用可能にされなくてもよい。
いくつかの実施形態によると、ストリーム管理システムは、データレコードの取得または収集の役割を主に担うレコード採集サブシステム、適用可能な永続性または持続性ポリシーにしたがうデータレコードの内容の保存の役割を主に担うレコード記憶サブシステム、および記憶するレコードに向けられる読み出し要求への応答の役割を主に担うレコード検索サブシステムを含む、複数の独立的に構成可能なサブシステムを含んでもよい。いくつかの実施形態では、制御サブシステムも、例えば、仮想または物理サーバなどの選択されたリソースにおいて、採集、記憶および検索サブシステムのそれぞれのために要求されたノード数を動的に決定及び/または初期化することにより、残りのサブシステムを構成する役割を担う1つ以上の管理または制御コンポーネントを含んで、実装されてもよい。採集、記憶、検索および制御サブシステムのそれぞれが、それぞれの複数のハードウェア及び/またはソフトウェアコンポーネントを利用して実装されてもよい。利用されるものは、サブシステムの「ノード」または「サーバ」と総称される場合がある、。従ってSMSの様々なリソースについては、採集、記憶、検索または制御の4つの機能カテゴリの1つに属すると論理的に言うことができる。いくつかの実装においては、他のサブシステムの各々について、それぞれの制御コンポーネント群が構築されてもよく、例えば、独立した採集制御サブシステム、記憶制御サブシステム及び/または検索制御サブシステムが実装されてもよい。そのような制御サブシステムのそれぞれが、対応するサブシステムの他のノードのために利用されるリソースの識別、及び/またはクライアントからのまたは他のサブシステムからの管理クエリへの応答、の役割を担ってもよい。いくつかの実装においては、様々な種類のSMS、及び/またはSPS関数の実行が可能であるノードのプールが事前に設定されてもよく、それらのプールのうちの選択された構成要素が、必要に応じて新しいストリームまたは新しい処理ステージに割り当てられてもよい。
少なくともいくつかの実施形態では、例えば、採集、記憶、検索及び/または制御ノードの異なる群の間にデータレコードのサブセットを分散させるために、ストリーム分割ポリシーおよび関連するマッピングが実装されてもよい。例えば、特定のデータストリームのために選択された分割ポリシーに基づき、また、レコード採集率及び/または検索率の予測などの他の要因に基づき、いくつのノード(例、処理またはスレッド)が最初に(すなわちストリーム作成時に)採集、記憶および検索のために構築されるべきかを、また、それらのノードがどのようにして仮想及び/または物理マシンにマッピングされるべきかを、制御コンポーネントが決定してもよい。時間と共に、所定のストリームに関連する作業負荷が増加するか、または減少することがあり、それが(他のトリガする条件の間で)ストリームの再分割につながる可能性がある。そのような再分割は、レコードのパーティション、利用される分割キー、パーティションの総数、採集ノード、記憶ノードもしくは検索ノードの数、または異なる物理または仮想リソース上のノードの配置を決定するために利用される関数などの様々なパラメータを変更するものであってもよい。少なくともいくつかの実施形態では、以下に詳細に述べる技術を利用して、データレコードの流れを中断することなく、再分割が動的に実装されてもよい。いくつかの実施形態では、異なる分割スキームおよび再分割トリガ基準が、例えばクライアントが提供するパラメータに基づいて、またはSMS制御ノードのヒューリスティックに基づいて、異なるデータストリームのために利用されてもよい。いくつかの実施形態では、例えばクライアントの選好、ストリームの予測生存時間または他の要因に基づいて、再分割の数及び/または頻度を制限することが可能な場合がある。
異なる実施形態では、いくつかの異なるレコード採集ポリシーおよびインターフェイスが実装されてもよい。例えば、いくつかの実施形態では、クライアント(例えば、SMSの顧客のためにSMSのプログラムインターフェイスを呼び出すよう構成された実行可能コンポーネントまたはモジュール)が、インライン送信インターフェイスまたはバイリファレンス送信インターフェイスのいずれかを利用してもよい。そのような実施形態では、インライン送信のため、データレコードの内容または本体の一部として送信要求が含まれてもよい。対照的にバイリファレンス送信要求においては、データレコードの内容または本体をそこから取得することができるアドレス(記憶装置アドレス、データベースレコードアドレスまたはURL(ユニフォームレコードロケータなど))が提供されてもよい。いくつかの実装においては、ハイブリッド送信インターフェイスも同様に、またはハイブリッド送信インターフェイスが代わりにサポートされてもよく、そのようなハイブリッド送信インターフェイスにおいては、データレコードの第1のNバイト列がインラインで含まれてもよく、一方で残りのバイト列(もしあれば)が参照用に提供され得る。そのようなシナリオでは、(Nバイト列の長さより本体が短い)短いレコードの送信要求によって完全に特定されてもよく、一方で、より長いレコードの一部を対応するアドレスから取得しなければならない場合もあり得る。
いくつかの実施形態では、採集中にレコード内容を特定するための異なる代替例に加えて、多様な応答また重複排除に関する採集ポリシーが実装されてもよい。例えば、いくつかのストリームアプリケーションのために、あらゆるデータレコードがSMSによって確実に採集されることをクライアントが求める場合がある。大規模な分散ストリーム管理環境では、データプロデューサと採集ノードとの間のパスにおいて、パケットが失われるか、または様々な障害が時に生じる場合があり、その結果いくつかの送信データが失われる可能性がある。従っていくつかの実施形態では、SMSが少なくとも1回の採集ポリシーを実装し、それに従って採集サブシステムから肯定応答を受信するまで、レコードサブミッタが同じレコードを1回以上送信してもよい。正常な動作状態において、レコードは1回送信され、受信する採集ノードがレコードを取得し記憶させた後にサブミッタが応答を受信してもよい。応答が失われるかまたは遅延した場合、またはレコード送信要求自体が失われた場合は、応答が最終的に受信されるまでサブミッタが同じデータレコードを1回以上再送信してもよい。採集ノードは、例えば、応答がサブミッタにより受信されていればレコードは再送信されないという予測に基づいて、それが重複であるかどうかに関わらず各送信のための応答を生成してもよい。しかし、少なくともいくつかの実施形態において、同じデータレコードが複数回送信されたことを認識し、重複データの新しいコピーを不必要に記憶させることを回避する役割を採集ノードが担ってもよい。1つの実施形態において、少なくとも1回の採集ポリシーの少なくとも2つのバージョンがサポートされてもよい。すなわち、SMSがデータレコードの重複を排除する(すなわち、2つ以上の送信群のうちの1つのみを受けてデータが確実にSMS記憶サブシステムに記憶されるようにする)役割を担う1つのバージョン(「少なくとも1回の採集、重複なし」と称される場合がある)と、SMSによるデータレコード記憶の重複が許可される1つのバージョン(「少なくとも1回の、重複が許可された」と称される場合がある)である。少なくとも1回の、重複が許可された手法は、データレコード重複の否定的な結果がほとんど、あるいはまったくないストリームアプリケーションにとって、及び/または自身の重複削除を実行するストリームアプリケーションにとって有用である場合がある。送信されるすべてのデータレコードごとに応答が要求されるわけではないベストエフォート型採集ポリシーなどの他の採集ポリシーもまた、サポートされてもよい。少なくともいくつかの実施形態では、ベストエフォート型採集ポリシーが有効である場合、少数のデータレコードの喪失は容認されることがある。様々な実施形態においてクライアントは、自身が様々なストリームについてどの採集ポリシーの利用を望むか選択してもよい。
ストリームレコードの記憶に関しては、少なくともいくつかの実施形態において、いくつかの代替的なポリシーもまたサポートされてもよい。例えば、クライアントは、記憶される所定のデータレコードのコピー数、コピーのために利用される記憶技術のタイプ(例、揮発性または不揮発性RAM、回転式ディスクベースの記憶装置、ソリッドステート装置(SSD)、ネットワーク接続型記憶装置など)などのレコード記憶の態様を左右する、SMSにサポートされたいくつかの中から1つの永続性ポリシーを選択することができる場合がある。例えば、クライアントがディスクベースの記憶装置にN個のレプリカの永続性ポリシーを選択する場合、N個のレコードのコピーがN個それぞれのディスク装置に安全に書き込まれるまでデータレコード送信は完了したものとみなされないことがある。ディスクベースの記憶装置が利用される少なくともいくつかの実施形態では、例えば、ディスクシークによる性能への影響を回避するために、SMS記憶サブシステムが所定のパーティションの受信データレコードをディスクに順次書き込むことを試みてもよい。例えば、採集時間に基づく順序付けられたレコード検索を可能にするタイムスタンプを用いた技術を含む、以下に述べる様々な技術を利用して、シーケンス番号がデータレコードのために(また、データレコードと共に記憶されても)生成されてもよい。少なくともいくつかの実施形態では、所定のパーティションのデータレコードが、例えば、ディスク上に隣接して、また他のパーティションのデータレコードから離れて、ともに記憶されてもよい。いくつかの実装においては、(クライアントによって、またはSMSによって選択された)保持ポリシーまたは(いくつかの重複が送信されたとしても、所定のデータレコードが重複してSMS記憶サブシステムに記憶されないように万全を期すようSMSに要求してもよい期間に、その所定のデータレコードのいずれかの送信に続く時限を示す)重複排除時間窓ポリシーに従って、少なくともいくつかのデータレコードが異なるタイプの記憶サービスへとアーカイブされ、及び/または時限後にSMSから削除されてもよいそのような除去操作は、本明細書内でストリーム「トリミング」と称することがある。いくつかの実施形態において、クライアントは、ストリームトリミング要求を送信してもよい。これは、例えば、特定のデータレコードがもはや必要とされなくなったために、トリミング要求を送信するクライアントのパースペクティブから、その特定のデータレコードを削除することが可能であることをSMSに通知する、または特定のデータレコードの削除を明示的に要求することである。所定のストリームのデータレコードを消費する複数のクライアントが存在するシナリオにおいては、SMSが関係するすべてのコンシューマによってアクセスされる前に所定のレコードが早まって削除される、あるいはトリミングされることがないよう万全を期す役割を担ってもよい。いくつかの実装においては、所定のストリームのN個のデータコンシューマがある場合、SMSは、自身がN個のデータコンシューマすべてが、ストリームの所定のレコードRの読み出しまたは処理を行ったと判定するまで、レコードRの削除を待ってもよい。例えばコンシューマからのそれぞれのトリミング要求に基づいて、またはストリームにおいてデータコンシューマがどこまで進行したかに関するそれぞれの指示に基づいて、すべてのコンシューマによってRが読み出されたとSMSが判定してもよい。いくつかの実施形態では、いくつかのタイプのデータコンシューマ(試験関連のアプリケーションなど)が、少なくともデータレコードの小規模なサブセットのアクセスされる前の削除を容認してもよい。従って、少なくともいくつかの実施形態において、アプリケーションは検索前にデータ削除の容認性に関する通知をSMSに行うことが可能である場合があり、SMSがその通知にしたがって削除をスケジュールしてもよい。いくつかの実施形態では、例えばストリームデータレコードのコピー先となるべきタイプの記憶装置を示すデータ保持ポリシーおよびそのようなコピーに利用されるスケジューリングポリシーの一部として、アーカイバルポリシーが実装されてもよい。
少なくともいくつかの実施形態では、複数のプログラムインターフェイスもまたレコード検索のためにサポートされてもよい。1つの実施形態においては、1つのプログラムインターフェイス(例、getIterator)がイテレータまたはカーソルをインスタンス化しストリームのパーティション内の(例えば、シーケンス番号またはタイムスタンプに基づく)特定の論理オフセットに位置付けるために利用されてもよい、あるいは、イテレータを用いた手法が利用されてもよい。異なるプログラムインターフェイス(getNextRecordsなど)がその後、イテレータの現在の位置から順次開始される特定の数のデータレコードを読み出すために利用されてもよい。イテレータのインスタンス化により、クライアントによるストリームパーティション内のレコード検索の任意のまたはランダムな開始位置の特定が事実上可能になることがある。そのような実施形態において、クライアントがデータレコードをランダムアクセスパターンで読み出すことを望む場合、クライアントが新しいイテレータを繰り返し作成しなければならない可能性がある。回転式ディスクを用いた記憶システムにおいては、頻繁なランダムアクセスのために要求されたディスクシークが、I/O応答時間に深刻な影響を与える場合がある。従って、少なくともいくつかの実施形態では、クライアントがストリームデータレコードのランダムではなく順次の読み出しを行う動機として、順次読み出しアクセスに適用される課金率とは異なる(例えば、より高い)課金率がランダム読み出しアクセスに適用される可能性がある。従って、いくつかの実装においては、X>Yとして、クライアントが例えば、getIteratorの呼び出しごとにX通貨単位を、また、getNextRecordsを介して検索されるレコードごとにY通貨単位を請求されることがある。代替的なクライアントインターフェイスが他の操作カテゴリ(採集など)のためにサポートされるとき、少なくともいくつかの実施形態では、代替例のための課金率または価格が異なる場合がある。例えば、クライアントが順次読み出しよりもランダム読み出しにより高い料金を請求される場合があるように、クライアントがオンライン送信要求よりもバイリファレンス送信要求により高い料金を請求される場合がある。様々な実施形態において、データレコードの大きさ、時間の経過による書き込み対読み出し要求の分散、選択された永続性ポリシーなどの他の要因も請求に影響を与える可能性がある。
いくつかの実施形態によると、ストリーム処理サービス(SPS)により、クライアントが多数の処理ステージを含む、所定のステージにおいて実行される処理の出力が0個以上の他のステージのための入力として利用されてもよい複雑な処理ワークフローを任意に特定することが可能になる場合がある。分割ポリシー(データレコードの採集、記憶および検索のためのSMSについて説明するポリシーと同様に)は、いくつかの実施形態における様々なステージで、複数のワーカーノード間の処理作業負荷を分割するために利用されてもよい。そのような1つの実施形態において、例えば、ステージのための(1つ以上の)入力データソース(例えば、ストリームのための分割ポリシーと共にデータレコードが検索される1つ以上のストリーム)、ステージにおいて実行される処理操作、およびステージからの出力または結果の分散のための記述子または特定(例えば、出力が記憶位置に保存され、ネットワークエンドポイントに送信され、または1つもしくは複数の他の処理ステージに異なるストリームの形式で入力されるか否か)を含む所与のステージのための様々な構成設定を特定することを、クライアントが可能にするプログラムSPSインターフェイスが実装されてもよい。少なくともいくつかの実施形態では、SPSステージのために特定された処理操作は、冪等であってもよい。すなわち所定の処理操作が同じ入力データにおいて複数回実行される場合、その操作の結果は操作が1回のみ実行された場合に取得されていたであろう結果と異ならない。以下に詳細に述べるように、処理操作が冪等である場合、障害(例、SPSステージにおけるワーカーノード障害)からの回復は簡略化されてもよい。いくつかの実施形態によると、SPSステージの一部またはすべてにおいて非冪等処理操作が許可されてもよい。
入力ストリーム分割ポリシー、次いでSPSプログラムインターフェイスを介して受信される処理操作の性質などの構成情報に少なくとも部分的に基づき、様々な実施形態において、処理ワークフローの様々なステージのために最初に設定されるワーカーノードの数をSPS制御サーバが決定してもよい。ワーカーノードのために利用されるリソースの性能もまた(例、利用されている仮想または物理マシン)、ワーカーノードの初期数および配置の決定の際に考慮されてもよい。(いくつかの実装において、それぞれが実行可能スレッドまたは実行可能処理を含んでもよい)選択された数のワーカーノードがインスタンス化されてもよい。例えば、適切な入力ソースから(例えば、1つ以上のストリームパーティションの検索ノードから)データレコードを取得し、データレコード上で特定の処理操作を実行し、また処理の結果を(1つ以上の)特定の出力先に送信するために、各ワーカーノードが構成されてもよい。加えて、少なくともいくつかの実施形態では、チェックポイントスキームが実装されてもよく、それに従って、パーティションレコードが順次処理されていることを前提として、そのワーカーノードにおいて処理されているパーティションの一部を示すプログレスレコードまたはチェックポイントを記憶させるために、所定のワーカーノードが構成されてもよい。ワーカーノードは、例えば、いくつかの実装においてプログレスレコードを永続性記憶装置に周期的に(例えば、N秒に1回またはR個のデータレコードが処理されるごとに1回)、及び/またはSPS制御サーバからのチェックポイント要求に応じて書き込んでもよい。
いくつかの実施形態では、ワーカーノード障害からの迅速な回復のためにプログレスレコードが利用されてもよい。例えば、ハートビート機構を利用して、及び/またはリソース利用レベル(CPU利用、I/O装置利用またはネットワーク利用レベルなど)を監視することで、SPS制御サーバが時間の経過に伴う様々なワーカーノードの健全性状態を監視するなどしてもよい。特定のワーカーノードが所望のまたは不健全な状態(例えば、応答しないまたは過負荷である場合)にあることをSPS制御サーバが判定することに応じて、置換ワーカーノードが特定のワーカーノードの役割を引き継ぐためにインスタンス化されてもよい。置換ワーカーノードは、置換ワーカーノードが処理するべきデータ、レコード群を識別するために、置換されたワーカーノードによって記憶された最新のプログレスレコードにアクセスしてもよい。処理操作が冪等である実施形態において、いくつかの操作が繰り返されたとしても(例えば、最新のプログレスレコードが置換ワーカーのインスタンス化のしばらく前に書き込まれたために)、処理の全体的な結果は障害および置換による影響を受けない。いくつかの実装においては、それによって処理される所定のストリームまたはパーティションのサブセットを示すプログレスレコードの記憶に加えて、ワーカーノードもまた蓄積されたアプリケーション状態の情報を記憶させるよう構成されてもよい。例えば、ストリーム処理ワークフローがサービス使用メトリクスを示すストリーミングデータレコードの分析に基づいて特定のサービスのためのクライアントの課金額を決定する役割を担う場合、ワーカーノードが、様々なクライアントのために決定された累積課金額を周期的に記憶してもよい。
少なくともいくつかの実施形態では、SPS制御サーバがまた、様々なステージのための入力ストリームの動的再分割の要求、所定のステージにおいて所定のパーティションに割り当てられたワーカーノード数の変更、より高性能なワーカーノードのいくつかのステージへの割り当て、またはワーカーノードある物理リソースから異なる性能を有する別の物理リソースへの転送などの他のアクションの起動によって、変化する作業負荷レベルまたは検知される作業負荷の不均衡(例えば、あるパーティションのための採集率が他の採集率よりも不釣り合いに高い)などの様々な他のトリガに応答するように構成されてもよい。いくつかの実施形態では、例えば、SPS制御サーバによるチェックポイントを用いた回復ポリシーではなく、ベストエフォート型回復ポリシーが所定のステージのために実装されることの決定を受けて、上述のタイプのプログレスレコードが、少なくともいくつかのSPSステージのワーカーノードによって記憶されない可能性がある。そのようなベストエフォート型回復ポリシーのいくつかの実装においては、置換ワーカーノードは、プログレスレコードへのアクセスを要求することなく、新しいデータレコードを受信されたとおりに、単純に処理してもよい。いくつかの実施形態では、クライアントがベストエフォート型回復ポリシーをSPSステージにおいて実装することを望む場合、ステージにおいて実行されるストリーム処理操作が必ずしも冪等である必要はない。非冪等処理操作が、SPSステージのストリームレコードにおいて実行されるいくつかの実施形態では、チェックポイントを用いた回復がサポートされない場合があり、ベストエフォート型回復などの異なる回復スキームが利用されてもよい。少なくとも1つの実施形態では、冪等ストリーム処理操作のみが、SPSステージにおいて可能である場合がある。
いくつかのストリームのデータレコードが慎重な扱いを要する機密情報を含む場合があり、またはSPSステージにおいて実行される処理操作が競合者により発見されると問題となる可能性がある独自のアルゴリズムを含む場合がある。従って、特にクライアント自身によって完全制御されないプロバイダーネットワークデータセンターに位置するリソースを利用して操作が実行される場合に、クライアントがストリーム管理および処理操作の様々なカテゴリのセキュリティに関して懸念を抱く可能性がある。会社または公的部門の組織などの法人によって1つ以上のインターネット及び/または他のネットワークを介して分散されたクライアント群へとアクセス可能なネットワークアクセス可能サービス(様々な種類のクラウドベースのデータベース、計算または記憶サービスなど)を提供するよう設定されたネットワークは、本明細書においてプロバイダーネットワークと称する場合がある。いくつかの実施形態では、クライアントが、複数のセキュリティ関連のオプションから自身のデータストリームのためのものを選択することができる場合がある。上述のように、SPSおよびSMSの組み合せられた構成は、SMS及び/またはSPSのための制御ノード、SMS採集ノード、SMS記憶ノード、SMS検索ノードおよびSPS処理またはワーカーノードなどの、いくつかの異なる機能カテゴリに属するノードを含んでもよい。いくつかの実施形態において、クライアントが行うことができるセキュリティ関連の選択は、様々な種類のノードの配置または位置のためのオプションを含んでもよい。例えば、1つの実施形態において、ストリームレコードがプロバイダーネットワークに位置するリソースを利用して最初に収集され、及び/または記憶される場合であっても、ストリームワークフローの1つ以上の処理ステージのためのSPSワーカーノードのクライアント所有の設備に位置する計算装置における実装を、クライアントが要求できる可能性がある。そのような配置要求に応じて、所定のストリームのための異なる機能カテゴリのノードが、それぞれの異なるセキュリティ特徴またはプロファイルを有するリソース群においてインスタンス化されてもよい。
リソース群については、異なる実施形態において様々なセキュリティ関連の特徴、例えば、物理位置、利用される(例えば、リソースへの物理アクセスを有する)物理セキュリティプロトコル、(例えば、エンティティにとってリソースのネットワークアドレスが可視である程度の)ネットワーク隔離レベル、マルチテナンシー対シングルテナンシーなどを含めて互いに異なってもよい。いくつかの実施形態では、クライアントが隔離された仮想ネットワーク(IVN)を、所定のクライアントをそのクライアントのIVN内に含まれる様々な装置のネットワーキング構成への所定の実質的制御として、プロバイダーネットワーク内に構築することができる場合がある。特に、クライアントは、自身のIVN内の様々なサーバまたは計算インスタンスに割り当てられたネットワークアドレス(例、インターネットプロトコルまたはIPアドレス)へのアクセスを制限することができる場合がある。そのような実施形態では、自身のSMSまたはSPSノードの特定のサブセットが特定のIVN内でインスタンス化されるようにクライアントが要求してもよい。(通常はマルチテナントホストとして構成されてもよい)仮想化インスタンスホストなどのプロバイダーネットワークリソースが、SMSまたはSPSノードの様々なカテゴリのために利用されている実施形態においては、いくつかのノード群がそのクライアント単体に属するインスタンスの実装に制限されるインスタンスホスト上でインスタンス化されるようにクライアントが要求してもよい(すなわち、いくつかのSMSまたはSPSノードが、シングルテナントホストとして構成されるインスタンスホストにおいて実装されてもよい)。
いくつかの実施形態では、別のセキュリティ関連のオプションとして、特定のストリームのデータレコードがネットワークリンクで送信される前に、例えば、SMSにおいて採集される前に、採集および記憶サブシステムの間で、記憶および検索サブシステムの間で、検索サブシステムとSPSワーカーノードとの間で、及び/またはワーカーノードとSPS出力先との間で暗号化されるように、クライアントが要求してもよい。クライアントは、いくつかの実施形態において利用される暗号化アルゴリズムを特定してもよい。1つの実施形態において、TLS(トランスポートレイヤーセキュリティ)またはSSL(セキュアソケットレイヤー)プロトコルなどの安全なネットワーキングプロトコルが、データレコード送信のために、及び/またはSPS処理結果の送信のために利用されてもよい。
データストリームの概念および概要
図1は少なくともいくつかの実施形態による、データストリームの概念の簡便な概要を示している。図示のように、ストリーム100は、DR110A、110B、110C、110Dおよび110Eなどの複数のデータレコード(DR)110を含んでもよい。データプロデューサ120Aおよび120Bなどの1つ以上のデータプロデューサ120(データソースとも称される場合がある)は、ストリーム100のデータレコードの内容を生成するための書き込み操作151を実行してもよい。いくつかの異なるタイプのデータプロデューサが、例えば、携帯電話またはタブレットアプリケーション、センサーアレイ、ソーシャルメディアプラットフォーム、ロギングアプリケーションまたはシステムロギングコンポーネント、様々な種類の監視エージェントなどの異なる実施形態におけるデータのストリームを生成してもよい。1つ以上のデータコンシューマ130(データコンシューマ130Aおよび130Bなど)が、データプロデューサ120によって生成されたデータレコードの内容にアクセスするための読み出し操作152を実行してもよい。いくつかの実施形態では、データコンシューマ130が、例えば、ストリーム処理ステージのワーカーノードを含んでもよい。
少なくともいくつかの実施形態では、SMSに記憶されるような所定のデータレコード110が、データ部分101(例、DR110A、110B、110C、110Dおよび110Eのそれぞれのデータ部分101A、101B、101C、101Dおよび101E)およびシーケンス番号SN102(例、DR110A、110B、110C、110Dおよび110EのそれぞれのSN102A、102B、102C、102Dおよび102E)を含んでもよい。図示する実施形態において、ストリーム管理システムにおいて(またはストリーム管理システムの特定のノードにおいて)DRが受信される順序を、シーケンス番号102が示してもよい。データ部分101は、いくつかの実装において、変更不能な解釈されないバイト列を含んでもよい。すなわち、書き込み操作152が完了すると、書き込み結果として生成されたDRの内容をSMSによって変更することはできず、また一般的にはSMSがデータの意味論を認識することはできない。いくつかの実装においては、所定のストリーム100の異なるデータレコードが異なる量のデータを含んでもよい。一方、他の実装においては、所定のストリームのすべてのデータレコードが同じ大きさであってもよい。少なくともいくつかの実装において、SMSのノード(例えば、採集サブシステムノード及び/または記憶サブシステムノード)が、SN102を生成する役割を担ってもよい。以下に詳細に述べるように、データレコードのシーケンス番号が、常に必ずしも連続している必要はない。1つの実装では、クライアントまたはデータプロデューサ120が、書き込み要求の一部として対応するデータレコードのために利用される最小のシーケンス番号の指示を出してもよい。いくつかの実施形態では、例えば、データ部分が取得されてもよい記憶装置アドレス(装置内のデバイス名およびオフセットなど)またはネットワークアドレス(URLなど)を提供することによって、データプロデューサ120が、データレコードのデータ部分へのポインタ(またはそのアドレス)を含む書き込み要求を送信してもよい。
ストリーム管理サービスは、様々な実施形態においてデータプロデューサ120からのデータを受信し、データを記憶し、またデータコンシューマ130が1つ以上のアクセスパターンでデータにアクセスすることを可能にする役割を担ってもよい。少なくともいくつかの実施形態では、データレコードの受信、記憶および検索の作業負荷を分散するためにストリーム100が分割されるかまたは「共有され」てもよい。そのような実施形態においては、データレコードの1つ以上の属性に基づく受信データレコード110のためにパーティションまたは分割データベースが、選択されてもよい。また、データレコードを採集する、記憶させる、または検索する特定のノードが、パーティションに基づいて識別されてもよい。いくつかの実装においては、データプロデューサ120が、明示的な分割キーに分割属性としての役割を果たす各書き込み操作を提供してもよく、そのようなキーが、パーティション識別子へとマッピングされてもよい。他の実装においては、データプロデューサ120の識別、データプロデューサのIPアドレスなどの要因に基づいて、または送信されるデータの内容に基づいて、SMSがパーティションIDを推定してもよい。データストリームが分割されるいくつかの実装においては、シーケンス番号がパーティション単位で割り当てられてもよい。例えば、シーケンス番号が特定のパーティションのデータレコードが受信される順序を示してもよいが、異なる2つのパーティションにおけるデータレコードDR1およびDR2のシーケンス番号は、DR1およびDR2が受信された相対順序を必ずしも示すとは限らない。他の実装においては、データレコードDR1に割り当てられるシーケンス番号SN1が、データレコードDR2に割り当てられるシーケンス番号SN2より小さい場合、DR1およびDR2が属するパーティションに関わらず、DR1がSMSによってDR2より先に受信されたことが、これにより示されるように、シーケンス番号が、パーティション単位ではなくストリーム全体に割り当てられてもよい。
様々な実施形態において、SMSによってサポートされる検索または読み出しインターフェイスにより、データコンシューマ130が、データレコードに順次及び/またはランダムにアクセスすることが可能になる場合がある。1つの実施形態において、イテレータを用いた読み出しアプリケーションプログラミングインターフェイス(API)群がサポートされてもよい。データコンシューマ130は、特定のシーケンス番号及び/またはパーティション識別子によって示されるイテレータの初期位置でデータストリームのためのイテレータを取得するための要求を送信してもよい。イニシエータがインスタンス化された後、データコンシューマは、データレコードをストリームまたはパーティション内のその初期位置から順次読み出すための要求を送信してもよい。データコンシューマが、いくつかのランダムな順序でデータレコードの読み出しを望む場合、そのような実施形態の各読み出しのために新しいイテレータが、インスタンス化されなければならない可能性がある。少なくともいくつかの実装において、所定のパーティションまたはストリームのデータレコードが、ディスクシークを回避する順次書き込み操作を通常利用して、シーケンス番号順にディスクベースの記憶装置に書き込まれてもよい。順次読み出し操作はまた、ディスクシークのオーバーヘッドを回避してもよい。従って、いくつかの実施形態では、例えば、イテレータのインスタンス化などのランダムアクセス読み出し操作に関連する課金率が順次アクセス読み出し操作よりも高い場合があるなど、価格に関する動機のために、データコンシューマにランダム読み出しよりも順次読み出しの実行がより求められる場合がある。
(例示的なシステム環境)
図2は、少なくともいくつかの実施形態による、ストリーム管理システム(SMS)およびストリーム処理ステージの収集を含むストリーム処理システム(SPS)の様々なサブコンポーネントの間のデータの流れの概要を示している。図示のように、SMS280は、採集サブシステム204、記憶サブシステム206、検索サブシステム208およびSMS制御サブシステム210を含んでもよい。SMSサブシステムの各々は、例えば、以下に述べるようにプロバイダーネットワーク(またはクライアント所有のもしくはサードパーティの設備)の様々なリソースにおいて、それぞれの実行可能スレッドまたはインスタンス化された処理を利用して実装される1つ以上のノードまたはコンポーネントを含んでもよい。採集サブシステム204のノードは、(例えば、SMS制御サブシステム210のノードによって)データプロデューサ120(120A、120Bおよび120Cなど)から特定のデータストリームのデータレコードを、ストリームのために利用されている分割ポリシーに基づいて取得するようするよう構成されてもよく、各採集ノードが受信されたデータレコードを、記憶サブシステム206の対応するノードへと伝えてもよい。記憶サブシステムノードは、ストリームのために選択される永続性ポリシーに従って、様々な種類の記憶装置のいずれかにデータレコードを保存してもよい。検索サブシステム208のノードは、SPS290のワーカーノードなどのデータコンシューマからの読み出し要求に応答してもよい。SPS290のステージ215A、215B、1215Cおよび215Dなどのストリーム処理ステージ215は、SPS制御サブシステム220を用いて構築されてもよい。各ステージ215は、SPS制御サブシステム220によって構成される、受信されたデータレコード上の処理操作群を実行するための1つ以上のワーカーノードを含んでもよい。図示のように、いくつかのステージ215(215Aおよび215Bなど)は、データレコードをSMS280から直接取得してもよい。一方、他のステージ215(215Cおよび215Dなど)が、それ以外のステージからそれらの入力を受信してもよい。いくつかの実施形態では、複数のSPSステージ215が並列に動作してもよい。例えば、ステージ215Aおよび215Bにおいて、同じストリームから検索されたレコード上の異なる処理操作が、同時に実行されてもよい。図2において説明されるサブシステムおよび処理ステージに類似した、特定のストリームのためのそれぞれのサブシステムおよび処理ステージが、他のストリームと同様にインスタンス化されてもよいことに留意されたい。
少なくともいくつかの実施形態では、図2に示されるサブシステムおよび処理ステージの少なくともいくつかのノードが、プロバイダーネットワークリソースを利用して実装されてもよい。上述のように、インターネット及び/または他のネットワークを介して分散したクライアント群にアクセス可能な1つ以上のネットワークアクセス可能サービス(様々な種類のクラウドベースのデータベース、計算または記憶サービスなど)を提供するために、会社または公的部門の組織などの法人によって設定されたネットワークは、本明細書内でプロバイダーネットワークと称する場合がある。上位サービスを構築するために、いくつかのサービスが利用されてもよい。例えば、計算、記憶またはデータベースサービスが、ストリーム管理サービスまたはストリーム処理サービスのための構築ブロックとして利用されてもよい。プロバイダーネットワークの少なくともいくつかのコアサービスが、「インスタンス」と呼ばれるサービスユニットのクライアントの利用のために実装されてもよい。例えば、仮想化された計算サービスによってインスタンス化された仮想マシンが、「計算インスタンス」を表す場合があり、記憶サービスによってインスタンス化されたブロックレベルのなどの記憶装置が、「ストレージインスタンス」と称されることがあるか、またはデータベース管理サーバが、「データベースインスタンス」と称されることがある。プロバイダーネットワークの様々なネットワークアクセス可能サービスのそのようなユニットが実装されるサーバなどの計算装置は、本明細書において「インスタンスホスト」または単に「ホスト」と称することがある。いくつかの実施形態では、採集サブシステム204、記憶サブシステム206、検索サブシステム208、SMS制御システム210、処理ステージ215、及び/またはSPS制御サブシステム220のノードは、複数のインスタンスホスト上の様々な計算インスタンスにおいて実行するスレッドまたは処理を含んでもよい。所定のインスタンスホストは、いくつかの計算インスタンスを含んでもよく、特定のインスタンスホストにおける計算インスタンスの収集は、1つ以上のクライアントの様々な異なるストリームのためのノードを実装するために利用されてもよい。いくつかの実施形態では、ストレージインスタンスは、様々なストリームのデータレコードの記憶のために、またはストリーム処理ステージの結果の宛先として利用されてもよい。時間の経過に従って、例えば、図15および図16を参照して以下に述べるように、データレコードの受信、記憶および処理の継続中にノードの追加もしくは除去、ノードの処理または計算インスタンスもしくはインスタンスホストへのマッピングの変更、または所定のストリームの再分割を行うことで、制御サブシステムノードは、他のサブシステム群を様々なトリガする条件に応じて動的に修正してもよい。
プロバイダーネットワークリソースが、ストリーム関連の操作のために利用される実施形態の文脈では、「クライアント」の語は、所定の通信のソースまたは宛先として利用される際に、プロバイダーネットワークの少なくとも1つのネットワークアクセス可能サービスへのアクセスおよびその利用が可能な法人(複数のユーザまたは単一のユーザを有する組織、グループなどの)によって所有され、管理され、またそのような法人に割り当てられる計算装置、処理、ハードウェアモジュールまたはソフトウェアモジュールのいずれかを指す場合がある。あるサービスのクライアントは、それ自体が別のサービスのリソースを利用して実装されてもよい。例えば、ストリームデータコンシューマ(ストリーム管理サービスのクライアント)が、計算インスタンス(仮想化された計算サービスによって提供されるリソース)を含んでもよい。
所定のプロバイダーネットワークは、物理及び/または仮想化されたコンピュータサーバ、1つ以上の記憶装置を各々が有する記憶サーバ、ネットワーク装置などの収集などの様々なリソースプールをホスティングし、プロバイダによって提供されるインフラストラクチャおよびサービスの実装、構成および分散のために必要とされる(異なる地域に分散されてもよい)多数のデータセンターを含んでもよい。様々な実施形態において、その一部が、異なるデータセンターまたは異なる地域においてインスタンス化されるかまたは実行されてもよい、いくつかの異なるハードウェア及び/またはソフトウェアコンポーネントは、各サービスを実装するためにまとめて利用されてもよい。クライアントは、クライアント所有の、またはクライアントが管理する敷地もしくはプロバイダーネットワークの外部のデータセンターに位置する装置から、及び/またはプロバイダーネットワーク内の装置からのプロバイダーネットワークにおけるリソースおよびサービスと対話してもよい。プロバイダーネットワークは、本明細書内に記載のストリーム管理および処理技術の多くが実装されてもよい1つの例示的なコンテキストとしての役割を果たす。しかし、これらの技術はまた、プロバイダーネットワーク以外のタイプの分散システムに、例えば、単一の事業体によってそれ自体のアプリケーションのために操作される大規模分散環境に適用されてもよいことに留意されたい。
プログラムインターフェイス実施例
上述のように、少なくともいくつかの実施形態では、様々なストリームを用いたアプリケーションのための所望のビジネスロジックを実装するために、SPSクライアントがより容易に利用することが可能な上位機能を構築するために、SPSがSMSプログラムインターフェイスを利用してもよい。SPSとSMS機能との間の違いを考慮すると、類似が有用である場合がある。SPS関数は、一般にC++などの上位言語におけるプログラム言語構造と比較されることがあり、一方SMS関数は、一般にプログラム言語構造がコンパイラによって翻訳されるアセンブリ言語命令と比較されることがある。アセンブリ言語命令を直接利用して同じ操作を実装することが可能である場合があるが、上位言語のプログラミングは、通常、顧客またはユーザの多くのカテゴリにとってより容易であることがある。同様に、SMSによって提供されるプリミティブを利用して様々なアプリケーションを実装することが可能である場合があるが、SPSの特徴を利用するとその実行がより容易であることがある。SPS処理操作(データレコード上で実行される冪等処理操作など)が、ストリームレコードのデータ内容において実装されてもよく、一方SMS操作は、レコードの内容を考慮せずにレコード自体を取得し、記憶させ、検索するために実行される。図3は、少なくともいくつかの実施形態による、SMSおよびSPSに実装されてもよいそれぞれのプログラムインターフェイス群の実施例を説明する。いくつかの異なるアプリケーションプログラミングインターフェイス(API)がSMSおよびSPSの両方のために例として示される。説明されるAPIは、任意の所与の実装においてサポートされるそれらAPIの網羅的なリストであることを意図されておらず、説明されるAPIの一部は、所定の実装においてサポートされない場合がある。
矢印350によって示すように、SPSクライアント375は、処理ステージを構成するSPSプログラムインターフェイス305を呼び出してもよい。様々な種類のSPSプログラムインターフェイス305が、異なる実施形態において実装されてもよい。例えば、ステージのワーカーノードが、インターフェイス呼び出しにおいて特定される冪等操作群を実行するようにする場合がある。また、出力分布記述子またはポリシーによって示された宛先へと結果を分散させるように、クライアントが、それぞれ構成される特定の入力ストリームのための新しい処理ステージ215の構成を要求することを、createStreamProcessingStage APIが可能にする場合がある。createStreamProcessingStage API またはその等価物のいくつかのバージョンにおいては、クライアントが、入力ストリームの作成を同様に要求することができ、一方他のバージョンにおいては、処理ステージが作成される前に入力ストリームを作成しなければならない場合がある。回復ポリシーがワーカーノードのために特定され、例えば、チェックポイントを用いた回復技術が利用されるか、またはベストエフォート型回復技術が選好されるかを示してもよい。いくつかの実施形態では、initializeWorkerNode APIがサポートされ、特定のステージでのワーカーノードの明示的なインスタンス化を要求してもよい。チェックポイントを用いた回復が実装される実施形態においては、saveCheckpoint APIがサポートされ、プログレスレコードがワーカーノードによって生成されるよう、クライアントが要求することを可能にしてもよい。
特定のステージにおいて実行される処理操作結果を利用して作成される1つ以上のストリームおよび新しく作成されるストリームのために利用される特定の分割ポリシーをクライアントが示すことができるsetOutputDistribution APIなどの様々な種類のSPS出力管理APIが、異なる実施形態においてサポートされてもよい。いくつかの処理ステージが主に再分割のために構成されてもよい。例えば、レコード属性集合A1に基づいてデータレコードをN1パーティションへとマッピングする1つの分割関数PF1が、入力ストリームS1のために利用されてもよく、これらの同じデータレコードをN2パーティションへと(異なる属性集合A2または同じ属性集合A1のいずれかを利用して)マッピングする異なる分割関数PF2を実装するために、処理ステージが利用されてもよい。複数のステージを含む任意のグラフ(例えば、有向非巡回グラフ)を構成するために、linkStagesなどのいくつかのSPS APIが利用されてもよい。いくつかの実施形態では、サードパーティもしくはオープンソースのストリーム処理フレームワークまたはサービスへのコネクタがサポートされてもよい。そのような1つの実施形態においては、既存のサードパーティのまたはオープンソースのシステムによって消費するためのデータレコードを、(例えば、ステージにおいて実行される処理操作結果を適切にフォーマットすることによって)準備するために、SPSステージが利用されてもよい。図示する実施形態においては、そのようなコネクタを設定するためにcreateThirdPartyConnectorなどのAPIが利用されてもよく、SPSステージの結果のサードパーティのシステムと互換性のあるフォーマットへの適切な変換が、createThirdPartyConnectorの呼び出し結果としてインスタンス化された1つ以上のコネクタモジュールによって実行されてもよい。
SPSは、その少なくともいくつかの関数を実行するために、矢印352で示されるようにSMS API307を呼び出してもよい。図示する実施形態において、SMS API307は、例えば、(ストリームをそれぞれ作成し削除する)createStreamおよびdeleteStreamならびに(所定のパーティションの役割を担う様々な種類のノードのネットワークアドレスなどの、ストリームのためのメタデータを取得する)getStreamInfoを含んでもよい。データレコードを書き込むために、putRecordインターフェイスが利用されてもよく、一方、getIteratorおよびgetNextRecordsインターフェイスが、それぞれ非順次および順次読み出しのために利用されてもよい。いくつかの実施形態では、特定のストリームの動的再分割を要求するために、repartitionStreamインターフェイスが利用されてもよい。矢印354で示すように、その実行を望むクライアント370がSMS API307を直接呼び出してもよい。上述のように、他の実施形態において、様々な他のSMS及び/またはSPS APIがまた実装されてもよく、図3に示すいくつかのAPIはいくつかの実施形態においては実装されない可能性がある。
様々な実施形態において、SPSまたはSMSのいずれかのために、API以外のプログラムインターフェイスが、同様にまたは代わりに実装されてもよい。そのようなインターフェイスは、グラフィックユーザーインターフェイス、ウェブページまたはウェブサイト、コマンドラインインターフェイスなどを含んでもよい。場合によっては、ウェブベースのインターフェイスまたはGUIが、APIを構築ブロックとして利用してもよい。例えば、ウェブベースの対話が、結果的にSMSまたはSPSの制御コンポーネントにおいて1つ以上のAPIの呼び出しを行ってもよい。図4は、少なくともいくつかの実施形態による、SPSクライアントによるストリーム処理ステージのグラフの生成を可能にするために実装され得るウェブベースのインターフェイスの実施例を説明する。図示のように、インターフェイスはメッセージ領域402、グラフメニュー領域404およびグラフデザイン領域403を有するウェブページ400を含む。
メッセージ領域402内のストリーム処理グラフの構築に関する汎用命令と同様にストリームの概念およびプリミティブに関して詳細に知るために利用することが可能なリンクが、ユーザに提供されてもよい。いくつかのグラフィックアイコンが、メニュー領域404においてストリーム処理グラフのツールセットの一部として提供されてもよい。例えば、クライアントは、様々なSPS処理ステージの入力または出力として、永続性ストリーム451、一時ストリーム452、またはサードパーティの処理環境へのコネクタ453を示すことができる場合がある。ウェブベースのインターフェイスが実装されるSPS/SMSに関して、永続性ストリーム451は、ディスク、不揮発性RAMまたはSSDなどの永続性記憶装置上にそのデータレコードが記憶されるストリームとして定義されてもよく、一時ストリーム452は、そのデータレコードが永続性記憶装置に記憶される必要がないストリームとして定義されてもよい。一時ストリームは、例えば、ベストエフォート型回復ポリシーが実装される異なるSPSステージによって入力として消費されることが予期されるSPSステージの出力から作成されてもよい。
チェックポイントを用いたワーカーノード回復が利用されるステージ455(例えば、各ワーカーノードが間隔を置いてプログレスレコードを保存し、また特定のワーカーノードの障害時には、処理を開始するデータレコードを決定するために置換ノードが障害の起きたノードのプログレスレコードを参照する)およびベストエフォート型回復が利用されるステージ456(例えば、置換ワーカーノードがプログレスレコードを参照せず、単純に新しいデータレコードの処理を受信されたまま開始する)の2つのタイプの処理ステージが、例示的なSPSグラフ構築ウェブページ400においてサポートされる。メッセージ領域402の指示によって示される通り、各ステージにおいて実行される処理操作に関する詳細が、グラフ構築領域403の対応するアイコンのクリックによって入力されてもよい。ストリーム、コネクタおよび処理ステージのためのアイコンに加えて、メニュー領域404もまたサードパーティのまたは外部のストリーム処理システムを示すアイコンタイプ459およびそのリソースが、処理ステージのために利用中であるプロバイダーネットワークにおいて実装されてもよい記憶サービスのノードを示すアイコンタイプ460を含む。
図4に示される例示的なシナリオにおいては、クライアントが3つの処理ステージ412、415および416を含むグラフ405をグラフデザイン領域403内に構築している。チェックポイントを用いた回復を利用するよう構成される処理ステージ412は、永続性ストリーム411を入力として利用する。ステージ412における処理の出力または結果は、ステージ415の入力を形成する異なる永続性ストリーム413のフォーマットで、またステージ416の入力を形成する一時ストリーム414のフォーマットで2つの宛先に送信される。ステージ415および416の両方それらのワーカーノードのためのベストエフォート型回復ポリシーを利用する。ステージ415の出力が、一時ストリームの形式で記憶サービスノード419に送信される。ステージ415の出力が、コネクタ417を介してサードパーティの処理システム418に送信される。処理ステージグラフの表示を保存するために、「グラフ保存」ボタン420が、例えば、JSON(JAVAスクリプト・オブジェクト・ノーテーション)、XML(エクステンシブル・マークアップ・ランゲージ)またはYAMLなどの任意の適切なフォーマットで利用されてもよい。様々な実施形態において、図4に示されるツールと同様のツールを利用して任意に複雑な処理ワークフローが構築されてもよい。そのようなツールを利用して作成されるワークフローが続いて起動されてもよく、そのような起動が、結果的にSMS APIを呼び出してもよい。例えば、図4のステージ412などの処理ステージのためのデータレコードを取得するために、getIterator及び/またはgetNextRecordsインターフェイスがストリーム411において呼び出されてもよい。
図5は、少なくともいくつかの実施形態による、SMSに実装されてもよいプログラムレコード送信インターフェイスおよびレコード検索インターフェイスの実施例を説明する。図示する実施形態においては、示されるDR110Kおよび110Qなどのデータレコードが様々な種類のプログラム採集インターフェイス510を介してSMSへと送信されてもよい。いくつかの実施形態では、(ストリーム「S1」のための)501Aまたは(ストリーム「S2」のための)501Bなどのストリーム識別子、レコードのデータまたは本体の指示、(504Aまたは504Bなどの)任意のパーティションキー504および(シーケンシング優先インジケータ506Aおよび506Bなどの)任意のシーケンシング優先インジケータ506の4つのタイプの要素をDR110が含んでもよい。いくつかのデータレコード(例、DR110Kのインラインデータ502)においては、データ自体がインラインで提供されてもよく、一方他のデータレコードのためには、ポインタまたはアドレス503が提供され、SMSにネットワークアクセス可能な位置(またはネットワーク転送を要求しないローカルデバイスのアドレス)を示してもよい。いくつかの実施形態では、所定のストリームがインラインおよび(アドレスを用いた)リファレンスによる両方のデータレコード送信をサポートしてもよい。他の実施形態では、すべてのデータをインラインで、またはすべてのデータをリファレンスにより供給するために、所定のストリームが、データプロデューサを要求してもよい。いくつかの実装においては、データレコード送信が、レコードのために利用されるパーティション識別子を含んでもよい。
図示する実施形態において、受信データレコード110は、分割ポリシーに基づいてそれぞれの採集及び/または記憶ノードに向けられてもよい。同様に、レコード検索はまた、パーティションに基づいてもよい。例えば、所定のパーティションのレコードに向けられた読み出し要求に応答するために、1つ以上の検索ノードが指定されてもよい。いくつかのストリームについては、データプロデューサが、明示的なパーティションキーに各データレコードの書き込み要求を提供するように要求されてもよい。他のストリームについては、明示的に供給されるパーティションキー以外のメタデータまたは属性に依拠する分割スキームに従って、SMSがデータレコードを分散させることが可能である場合がある。例えば、データプロデューサの送信に関連する識別情報が、パーティションキーとして利用されてもよいか、またはデータプロデューサのIPアドレスの送信の一部もしくは全部が利用されてもよいか、または送信中のデータの一部が利用されてもよい。いくつかの実装においては、例えば128ビットの整数などの特定の大きさの整数値を取得するために、ハッシュ関数が、パーティションキーに適用されてもよい。その大きさの正の整数の全範囲(例えば、0から2^128−1)が、各サブレンジがそれぞれのパーティションを表すN個の連続したサブレンジに分割されてもよい。従って、そのような実施例では、データレコードのために決定されるかまたは供給される所与のパーティションキーが対応する128ビットの整数にハッシュされ、またその整数が属する128ビットの整数の連続したサブレンジが、データレコードが属するパーティションを示してもよい。分割ポリシーおよびそれらの利用に関する詳細を、図15を参照して以下に示す。
特定のパーティションのデータレコードを採集しまたは受け入れ、データレコードを記憶し、特定のパーティションのための読み出し要求に応答する役割を担うノード群は、図5においてパーティションのためのISR(採集、記憶および検索)ノードと総称される。ストリームSiのk番目のパーティションを示すためにSj〜Pkの表記が利用される。説明する実施形態においては、パーティションS1〜P1のレコードの採集、記憶および検索のためにISRノード520Aが構成され、ISRノード520BがパーティションS1〜P2のレコードのために設定され、ISRノード520CがパーティションS1〜P3のレコードのために設定され、ISRノード520KがパーティションS2〜P1のレコードのために設定され、またISRノード520LがパーティションS2〜P2のレコードのために設定される。いくつかの実施形態では、2つ以上のパーティション(または2つ以上のストリームの2つ以上のパーティション)のデータレコードを処理するように、採集サブシステム、記憶サブシステムまたは検索サブシステムの所与のノードが構成されてもよい。いくつかの実施形態では、所定のストリームの単一のパーティションのレコードが、2つ以上のノードによって採集され、記憶され、または検索されてもよい。所定のパーティションSj〜Pkのために指定される採集ノード数は、少なくともいくつかの場合には、異なるパーティションSj〜Plのために指定される採集ノードと異なってもよく、またSj〜Pkのために指定される記憶ノード数及び/またはSj〜Pkのために指定される検索ノード数とも異なってもよい。採集及び/または検索に関連して、いくつかの実施形態では、どのノードがどのパーティションのための役割を担うかをクライアントが決定することを可能にするために、SMS制御ノードが、API(getStreamInfoなど)を実装してもよい。データレコードとパーティションとの間の、パーティションと構成されるISRノード(または制御ノード)との間のマッピングは、動的再分割に関して以下に述べるように時間の経過に応じて修正されてもよい。
いくつかの実施形態では、いくつかの異なるプログラムインターフェイス580が、所定のパーティションからのストリームデータレコードの検索または読み出しのために実装されてもよい。図5に示すように、(特定のシーケンス番号を有するデータレコードにおいてまたはその後に、イテレータをインスタンス化するか、またはカーソルを読み出すための)getIteratorまたは(特定のシーケンス番号を有するデータレコードを読み出すための)getRecordなどの非順次アクセスのために、いくつかの検索インターフェイス581が実装されてもよい。getNextRecords(N個のレコードをイテレータの現在の位置からシーケンス番号順に読み出すように要求するインターフェイス)などの順次検索のために、他の検索インターフェイス582が実装されてもよい。回転式ディスクベースの記憶装置システムにおいては上述のように、I/Oについて平均的に要求されるディスクヘッドのシーク数は、順次I/OについてはランダムI/Oよりも通常はるかに小さい可能性があるため、順次I/Oが、ランダムI/Oよりも多くの場合はるかに効率的である可能性がある。多くの実施形態において、所定のパーティションのデータレコードがシーケンス番号順に書き込まれてもよく、結果的に(例えば、getNextRecordsまたは同様のインターフェイスを利用する)シーケンス番号順の順次読み出し要求が、ランダム読み出し要求よりもはるかに効率的である場合がある。従って、少なくともいくつかの実施形態では、順次対非順次検索インターフェイスのために異なる課金率が設定されてもよい。例えば、クライアントが非順次読み出しについてより多く課金されてもよい。
(採集サブシステム)
図6は、少なくともいくつかの実施形態による、SMSの採集サブシステム204の例示的な要素を説明する。図示する実施形態においては、採集操作が、データプロデューサ120(例、120A、120B、又は120C)と対話するものであるフロントエンド関数、およびSMS記憶サブシステムと対話するものであるバックエンド関数に、論理的に分割される。そのようなフロントエンド/バックエンドの分割は、記憶サブシステムのセキュリティの向上およびデータプロデューサに分割ポリシーを提供する必要性の回避など、いくつかの利点を有する場合がある。SMSクライアントライブラリ602が、様々なデータプロデューサ120においてインストールのために提供されてもよく、データプロデューサが、ライブラリ602に含まれるプログラムインターフェイスを呼び出して、採集のためのデータを送信してもよい。例えば、1つの実施形態において、データプロデューサ120が、数百または数千のプロバイダーネットワークの物理及び/または仮想サーバにおいてインスタンス化されたロギングまたは監視エージェントを含んでもよい。そのようなエージェントは、そのそれぞれのサーバにおける様々なログメッセージ及び/またはメトリクスを収集し、収集されたメッセージまたはメトリクスを、フロントエンド負荷分散機604の、SMSの1つ以上の採集制御ノード660によってインスタンス化されたエンドポイントへと周期的に送信してもよい。いくつかの実施形態では、データプロデューサが、ストリームデータを送信する宛先であってもよい負荷分散機のために、1つ以上の仮想IPアドレス(VIP)が構築されてもよい。1つの実装においては、データが、データプロデューサ120によって送信される宛先であるいくつかの同等に構成される負荷分散機の間から、VIPが特定の負荷分散機を選択するために、ラウンドロビンDNS(ドメイン名システム)技術が利用されてもよい。
図示する実施形態においては、受信されたデータレコードがいくつかのフロントエンドノード606(例、606A、606Bまたは606C)のいずれかに向けられてもよい。少なくともいくつかの実施形態では、負荷分散機604が、データレコードのために利用中である分割ポリシー650を認識しない場合がある。従って、所定のデータレコードのために、パーティションを用いたロードバランシングではなくラウンドロビンロードバランシング(またはいくつかの汎用ロードバランシングアルゴリズム)を利用して、フロントエンドノード606が選択される可能性がある。フロントエンドノード606は、様々なストリームのための分割ポリシー650を認識してもよく、所定のパーティションのデータレコードのために構成される特定のバックエンド採集ノード608(例、608A、608Bおよび608C)の識別情報を取得するための採集制御ノード660と対話してもよい。従って、図示する実施形態においては、データレコードが属するそれぞれのパーティションに基づいて、フロントエンドノード604が、複数のバックエンドノード606へとデータレコードをそれぞれ送信してもよい。上述のように、データレコードが属するパーティションは、データプロデューサによって供給されるパーティションキー、データプロデューサの識別情報またはアドレスなどの1つ以上の他の属性、またはデータの内容などの様々な要因の任意の組み合わせに基づいて決定されてもよい。
バックエンドノード606は、1つ以上のストリームの1つ以上のパーティションに属するデータレコードをそれぞれ受信し、データレコードを記憶サブシステムの1つ以上のノードへと送信してもよい。データがHTTP(ハイパーテキスト・トランスファー・プロトコル)「PUT」ウェブサービスAPIを介して送信されるいくつかの実施形態において、バックエンドノードは、「PUTサーバ」と称されることがある。(異なるサブシステムのための制御関数が個別のノード群によって処理される実施形態において、次に記憶サブシステムの制御ノードへと対応するクエリを送信してもよい)制御ノード660へとクエリを送信することにより、そのデータレコードが送信される宛先である記憶サブシステムノード群を、所定のバックエンドノードが決定してもよい。
少なくともいくつかの実施形態では、少なくとも1回の採集ポリシーまたはベストエフォート型採集ポリシーなどのいくつかの異なる採集応答ポリシー652がサポートされてもよい。少なくとも1回のポリシーにおいては、データプロデューサ120が、送信された各データレコードのための肯定応答を要求してもよく、(第1の送信の応答が受信されない場合には)応答が最終的に受信されるまで同じデータレコードを繰り返し送信してもよい。ベストエフォート型採集ポリシーにおいては、(採集サブシステムが時折応答を提供してもよいか、またはデータプロデューサからの応答のための明示的な要求に応答してもよいが)送信された少なくともいくつかのデータレコードのために、肯定応答が要求されない場合がある。採集サブシステム204が、データプロデューサに応答を提供することを要求されるいくつかの実施形態では、所定のデータレコードのための役割を担うバックエンド採集ノード608は、(例えば、ストリームのために構築される永続性ポリシーに従って)要求される数のデータレコードのレプリカが、応答の生成前に記憶サブシステムにおいて正常に作成されるまで待ってもよい。様々な実施形態においては、例えば、受信された各データレコードのための採集サブシステムによって同じパーティションまたはストリームの他のレコードに対して、レコードが採集された順序を示すシーケンス番号が生成されてもよく、またそのようなシーケンス番号が応答として、または応答の一部として、データプロデューサへと返されてもよい。シーケンス番号に関するさらなる詳細が、図13aおよび図13bを参照して以下に示される。いくつかの実装において、応答及び/またはシーケンス番号が、フロントエンドノード606を介してデータプロデューサへと送信し返されてもよい。少なくとも1つの実装においては、少なくとも1回のポリシーが採集サブシステム自体のフロントエンドとバックエンドノードとの間で実装されてもよい。例えば、バックエンドノードが応答を提供するまで、所定のフロントエンドノード606がデータレコードを適切なバックエンドノード608へと繰り返し送信してもよい。
採集制御ノード660は、他の関数の間で、ストリームの動的再分割から生じる採集関連の構成操作のためにフロントエンドおよびバックエンドノードを起動し、ノードの健全性および作業負荷レベルを監視し、必要に応じてフェイルオーバーを統合し、どのノードが所定のパーティションのための役割を担うかに関するクエリへの、またはポリシー関連のクエリへの応答を提供する役割を担ってもよい。いくつかの実施形態では、時間の経過に従って、所定の1つ以上のストリーム群のために指定される採集制御ノードの数自体が変更されてもよい。例えば、1つ以上の主制御ノードが、必要に応じて制御ノードプールを再構成する役割を担ってもよい。採集フロントエンドまたはバックエンドノードのために冗長グループが設定されるいくつかの実施形態では、図9および図10を参照して以下に詳細に述べるように、制御ノード660は、どのノードがプライマリであり、どれが非プライマリであるかを把握し、フェイルオーバーのためのトリガする条件を検知し、また選択し、フェイルオーバーを要求されている際に置換を選択する役割を担ってもよい。図6で説明する多層採集サブシステム構造は、いくつかの実施形態では実装されない可能性があることに留意されたい。例えば、いくつかのシナリオでは、単一の採集ノード群のみが構成されてもよい。
記憶サブシステム
図7は、少なくともいくつかの実施形態による、SMSの記憶サブシステムの例示的な要素を説明する。図示のように、採集ノード608(例、異なるノード群によってフロントエンドおよびバックエンド採集の役割が果たされる実施形態におけるバックエンド採集ノード)が、ストリームの1つ以上のパーティションのデータレコードをこれらのパーティションのために構成されるそれぞれの記憶ノード702へと送信してもよい。例えば、パーティションS1〜P1のデータレコード110Aが、記憶ノード702Aへと送信され、パーティションS2〜P3のデータレコード110Bが、記憶ノード702Bおよび702Cへと送信され、パーティションS3〜P7のデータレコード110Cが、記憶ノード702Dへと送信され、また、パーティションS4〜P5のデータレコード110Dが、最初に記憶ノード702Eへと送信される。図示する実施形態においては、異なるストリームのデータレコードに適用される永続性ポリシー750を実行し、必要に応じて記憶ノードを構成しかつ再構成し、記憶ノード状態を監視し、フェイルオーバーを管理し、記憶構成クエリまたは記憶ポリシークエリに応答し、また様々な他の管理タスクを行う役割を、記憶制御ノード780が担ってもよい。
永続性ポリシー750は、異なる実施形態において、様々な方法で互いに異なってもよい。例えば、ストリームSjに適用される永続性ポリシーP1は、(a)記憶される各データレコードのレプリカ数、(b)レプリカが記憶される記憶装置またはシステムのタイプ(例えば、揮発性メモリ、不揮発性キャッシュ、回転式ディスクベースの記憶装置、半導体ドライブ(SSD)、様々な種類の記憶装置、様々な種類のRAID(低価格ディスクの冗長アレイ)に、データベース管理システムに、プロバイダーネットワークによって実装される記憶サービスのノードなどにレプリカが記憶されるかどうか)、(c)レプリカの地理的分布(例えば、レプリカを異なるデータセンターに配置してストリームデータが大規模障害または特定のタイプの災害から回復できるようにするかどうか)、(d)書き込み応答プロトコル(例えばN個のレプリカが記憶される場合、応答が採集ノードに提供されなければならなくなる前に、N個のうちいくつのコピーが正常に書き込まれなければならないか)、及び/または(e)データレコードの複数のレプリカが記憶される場合に、レプリカが並列かまたは順次のいずれによって作成されるべきか、という点において、ストリームSkに適用されるポリシーP2と異なってもよい。データレコード110Dの場合のように、複数のレプリカが記憶される他の場合においては、所定の記憶ノードがデータレコードを別の記憶ノードに送信してもよい(例えば、記憶ノード702Eが、データレコード110Dをさらなる複製のために記憶ノード702Fに送信し、記憶ノード702Fが、それを記憶ノード702Gへと送信する)。2つのインメモリレプリカが記憶されるデータレコード110Bの場合のように、複数のレプリカ永続性ポリシーが利用される他の場合には、採集ノードは、複数の複製を並列に起動してもよい。少なくともいくつかの実施形態では、クライアントが選択する永続性ポリシーが、ストリームデータレコードのために利用される記憶位置のタイプを特定しない可能性があり、代わりにコスト、パフォーマンス、データソースへの近接性、持続性要件などの様々な基準に基づき、SMSが記憶技術及び/または位置の適切なタイプを選択してもよい。1つの実施形態において、クライアントまたはSMSのいずれかが所定のストリームの異なるパーティションのために、または異なるストリームのために異なる記憶技術または記憶位置タイプを利用することを決定してもよい。
図7における実施例においては、ストリームS1(または少なくともストリームS1のパーティションS1〜P1)に適用される永続性ポリシーは、単一のレプリカインメモリポリシーであり、一方ストリームS2については、2つの並行レプリカインメモリポリシーが適用される。従って、データレコード110Aのインメモリレプリカ704Aが、記憶ノード702Aにおいて作成され、一方データレコード110Bに対応する2つのインメモリレプリカ705Aおよび705Bが、記憶ノード702Bおよび702Cにおいて並列に作成される。ストリームS3のデータレコード110Cについては、単一のオンディスクレプリカ706Aが作成される。ストリームS4については、ディスク上の順次の3つのレプリカポリシーが適用可能であり、結果的にそれぞれのオンディスクレプリカ707A、707Bおよび707Cが、記憶ノード702E、702Fおよび702Gにおいて順次に作成される。様々な他のタイプの永続性ポリシーが、異なる実施形態においてデータストリームに適用されてもよい。データコンシューマによる様々な種類の検索APIの呼び出しに応じて、検索サブシステムのノードが、適切な記憶ノードからデータレコードを取得してもよい。
検索サブシステムおよび処理ステージ
図8は、少なくともいくつかの実施形態による、SMSの検索サブシステムの例示的な要素および検索サブシステムのSPSとの対話の実施例を説明する。図示のように、検索サブシステム206は、検索ノード802A、802Bおよび802Cなどの複数の検索ノード802を、検索制御ノード880群と同様に含んでもよい。各検索ノード802は、以下に述べるようにSPSのワーカーノード840などの様々なクライアントまたはデータコンシューマ130からのストリームデータ検索要求に応答するよう構成されてもよい。異なる実施形態において、上述の非順次および順次検索インターフェイスなどの多様なプログラム検索インターフェイス802は、検索ノードによって実装されてもよい。いくつかの実施形態では、HTTP GET要求などのウェブサービスAPIが、データレコード検索のために利用されてもよく、従って、検索ノード802は、GETサーバと称される場合がある。所定の検索ノード802は、例えば、検索制御ノード880によって、図示する実施形態における記憶ノード702Aおよび702Bなどの適切な記憶サブシステムノード702群から、1つ以上のストリームパーティションのデータレコードを取得するよう構成されてもよい。
図示する実施形態においては、検索ノード802が、1つ以上の記憶ノード702と対話し、また1つ以上のSPSワーカーノード840から受信された検索要求に応答してもよい。例えば、パーティションS4〜P5のデータレコード(例、データレコード110K)およびS5〜P8のデータレコード(例、データレコード110L)が、検索ノード802Aによって記憶ノード702Aから読みだされ、ワーカーノード840Aおよび840Kのそれぞれに提供される。110MなどのパーティションS6〜P7のデータレコードが、検索ノード802Bによって記憶ノード702Aから読み出され、ワーカーノード840Kに提供される。パーティションS4〜P7のデータレコードが、検索ノード802Cによって記憶ノード702Bから読み出され、ワーカーノード840Bおよび他のデータコンシューマ130(例、SPSを介してSMSと対話する代わりにSMS検索APIを直接呼び出すデータコンシューマ)に提供される。
少なくともいくつかの実施形態では、今後の検索要求を予期して様々なパーティションのデータレコードが一時的に保持されてもよい、それぞれのキャッシュ804(検索ノード802Aにおけるキャッシュ804A、検索ノード802Bにおけるキャッシュ804B、および検索ノード802Cにおけるキャッシュ804Cなど)を検索ノード802の一部または全部が実装してもよい。例えば、キャッシングポリシー(例えば、所定のパーティションのためにどのような大きさのキャッシュが構成されるべきか、どのような長さのデータレコードがキャッシュされるべきか)、記憶ノード選択ポリシー(例えば、データレコードの複数のレプリカが記憶されるシナリオにおいて、所定のデータレコードを取得するためにまずどの特定の記憶ノードが連絡されるべきか)などを含めて、いくつかの検索ポリシー882を実装する役割を、検索制御ノード880が担ってもよい。加えて、検索制御ノードが、検索ノード802をインスタンス化および監視し、どの検索ノードがどのパーティションのための役割を担うかに関するクエリに応答し、再分割操作を起動しそれに応答する、などの役割を担ってもよい。
説明する実施例においては、SPS290が、215Aおよび215Bの2つの処理ステージを含む。SPS制御ノード885は、様々な処理ステージ215において、パーティションS4〜P5のレコードを処理するためのワーカーノード840A、パーティションS4〜P7のレコードを処理するためのワーカーノード840B、およびパーティションS5〜P8およびS6〜P7のレコードを処理するためのワーカーノード840Kを含むワーカーノード804、をインスタンス化する役割を担ってもよい。SPS制御ノード885は、SPSクライアントによる処理ワークフローの設計を可能にするプログラムインターフェイス(図3および図4において説明されるプログラムインターフェイスなど)を実装してもよい。ワーカーノードがプログレスレコードを記憶するかどうか、またそれがいつかを示し、それらのそれぞれのパーティションをどの程度処理するかを示す、異なる処理ステージまたはワークフロー、プログレスレコードのために利用される記憶装置のタイプなどのために、様々なチェックポイントポリシー850が実装されてもよい。フェイルオーバー/回復ポリシー852は、ワーカーノードの異なるノードへの交換につながるトリガする条件または閾値を示し、また、所定の処理ステージのためにベストエフォート型回復が利用されるか、またはチェックポイントを用いた回復が利用かどうかを示してもよい。少なくともいくつかの実施形態では、例えば、所定のストリームのデータレコードが取得される検索ノードを識別するため、また特定の処理ワークフローのために要求されてもよい新しい一時または永続性ストリームを構築するなどのために、SPS制御ノード885は、様々な種類のSMS制御ノードと対話してもよい。少なくとも1つの実施形態において、ストリームをインスタンス化するために、クライアントは、SPS制御ノードと対話してもよい。例えば、SMS制御インターフェイスを利用する代わりに、いくつかのクライアントが、上位SPSインターフェイスのみの呼び出しを望む場合がある。図6、7および8において、SMS採集、記憶および検索サブシステムのために、またSPSステージのために、個別の制御ノード群が示されるが、少なくともいくつかの実施形態では、いくつかのサブシステム及び/またはSPSのために、所定の制御ノードが利用されてもよいことに留意されたい。
ノード冗長グループ
少なくともいくつかの実施形態では、ノードの冗長グループがSMSの1つ以上のサブシステムのために構成されてもよい。すなわち、例えば、ストリームパーティションSj〜Pkのためのデータレコードを検索するための1つの検索ノードを構成する代わりに、2つ以上のノードが、そのような検索のために構築され、所定の時点において1つのノードに「プライマリ」またはアクティブな役割が授けられ、一方他の1つ以上のノードが「非プライマリ」ノードとして指定されてもよい。現在のプライマリノードが、例えば、クライアントまたは他のサブシステムのノードのいずれかから受信される要求などの作業要求に応答する役割を担ってもよい。フェイルオーバーがトリガされるまで、例えば、障害、プライマリへの接続の喪失または他のトリガする条件のために、前のプライマリの役割を引き継ぐために、選択される非プライマリが制御ノードによって通知されてもよい時点まで、1つ以上の非プライマリノードが、休止状態のままであってもよい。従って、フェイルオーバー中に現在のプライマリノードからプライマリの役割が取り消されて、現在の非プライマリノードに授けられてもよい。いくつかの実施形態では、フェイルオーバーが発生することが決定される、例えば、明示的な通知が要求されない場合に、非プライマリノード自体がプライマリとして引き継いでもよい。様々な実施形態のSMSにおいて、採集、記憶、検索及び/または制御関数のためにノードのそのような冗長グループが設定されてもよく、また少なくともいくつかの実施形態のSPSにおいて、ワーカーノードのために同様の手法がとられてもよい。いくつかの実施形態では、所定の関数のために、少なくとも1つのプライマリノードおよび少なくとも1つの非プライマリノードを含むそのようなグループは、「冗長グループ」または「複製グループ」と称されることがある。記憶ノードの冗長グループが記憶させるデータレコードの物理コピーの数とは独立的に実装されてもよいことに留意されたい。例えば、記憶されるデータレコードのレプリカ数は、永続性ポリシーによって決定するされてもよく、一方、対応するパーティションのために構成される記憶ノード数は、冗長グループポリシーに基づいて決定されてもよい。
図9は、少なくともいくつかの実施形態による、SMSまたはSPSのノードのために設定されてもよい冗長グループの実施例を説明する。図示する実施形態においては、所定のストリームパーティションSj〜Pkのために、それぞれの冗長グループ(RG)905、915、925および935が、採集ノード、記憶ノード、検索ノードおよび制御ノードのために設定される。いくつかの実施形態では、採集制御ノード、記憶制御ノードまたは検索制御ノードのための個別のRGが実装されてもよいが、制御ノードのための共通のRG935が、説明する実施形態において実装される。各RGは、プライマリノード(例、プライマリ採集ノード910A、プライマリ記憶ノード920A、プライマリ検索ノード930Aおよびプライマリ制御ノード940A)および少なくとも1つの非プライマリノード(例、非プライマリ採集ノード910B、非プライマリ記憶ノード920B、非プライマリ検索ノード920Cおよび非プライマリ検索ノード920D)を含む。それぞれの(採集ノードのための)フェイルオーバーポリシー912、(記憶ノードのための)922、(検索ノードのための)932および(制御ノードのための)942に従って、プライマリの役割は取り消され、また現在の非プライマリに授けられてもよい。フェイルオーバーポリシーは、例えば、プライマリまたは非プライマリの健全性状態が監視されるかどうか、またその方法、所定の冗長グループにおいて構成される非プライマリの数などの、プライマリ状態の変更につながるトリガする条件を左右してもよい。少なくともいくつかの実施形態では、複数のパーティションのために単一のRGが構築されてもよい。例えば、RG905が、パーティションSj〜PkおよびSp〜Pqのレコードの採集を処理する役割を担ってもよい。いくつかの実装においては、あるパーティションのためにプライマリとして指定されるノードが、別のパーティションのための非プライマリとして同時に指定されてもよい。1つの実施形態において、所定のRG内で複数のノードが、プライマリノードとして同時に指定されてもよい。例えば、いずれかのプライマリの障害時に1つのノードが、プライマリ非プライマリとして指定され、所定のパーティションの採集関連の作業負荷が、2つのプライマリノードの間で分散されてもよい。所定のRGにおいてインスタンス化されるノード数が、対応する関数のために所望される可用性または回復力レベルに(例えば、いくつの同時並行的または重複する障害にグループが耐えられるように意図されているかに)依存してもよい。いくつかの実施形態では、SMSノードのための利用に加えて、またはその代わりに、冗長グループが、SPS処理ステージのワーカーノードのために設定されてもよい。図10で説明するように、所定のRGの構成要素が、時に、例えば、いくつかのデータセンターにまたがって地理的に分散されてもよい。いくつかの実施形態では、例えば、ハートビート機構または他の健全性モニタリング技術を利用して選択される制御ノードが、フェイルオーバーをトリガする条件を検知するよう構成されてもよく、適切な非プライマリノードを故障したプライマリの置換として選択し、選択された置換ノードを通知し/起動することなどによって、そのような制御ノードがフェイルオーバーを統合してもよい。
いくつかの実施形態では、プロバイダーネットワークが複数の地域に組織されてもよく、各地域には、本明細書内で「アベイラビリティゾーン」と称する場合がある1つ以上の可用性コンテナを含んでもよい。同様に、所定の可用性コンテナにおけるリソースが、他の可用性コンテナにおいては障害から隔離されるような(例えば、電源関連の機器、冷却機器、物理セキュリティコンポーネントなどの独立したインフラストラクチャコンポーネントを利用する)方法で操作される、1つ以上の別々の位置またはデータセンターを可用性コンテナが含んでもよい。ある可用性コンテナにおける障害は、他の任意の可用性コンテナにおける障害につながることを予期できない場合がある。従って、リソースインスタンスまたは制御サーバの可用性プロファイルは、異なる可用性コンテナにおけるリソースインスタンスまたは制御サーバの可用性プロファイルから独立するよう意図される。それぞれの可用性コンテナにおいて複数のアプリケーションインスタンスを起動するか、または(いくつかのSMSおよびSPSの場合において)所定の冗長グループのノードを複数の可用性コンテナに分散させることによって、様々な種類のアプリケーションが、単一の位置における障害から保護されてもよい。同時にいくつかの実装においては、同じ地域に存在するリソース(SMSおよびSPSノードのために利用されるホストまたは計算インスタンスなど)間で安価かつレイテンシの低いネットワーク接続性が提供されてもよく、また、同じ可用性コンテナのリソース間のネットワーク送信がより早い場合がある。例えば、地域レベル、可用性コンテナレベルまたはデータセンターレベルのいずれかで、それらのアプリケーションが実行される様々なコンポーネントの正確な位置の、所望される制御程度を維持するために、それらのストリーム管理またはストリーム処理リソースが確保され、及び/またはインスタンス化される位置の特定を、いくつかのクライアントが望む場合がある。リソースが、例えば、パフォーマンス、高可用性などのためのクライアント要件に適合する限り、リソースが確保され、またはインスタンス化される正確な位置に他のクライアントが、興味を示さない場合がある。いくつかの実施形態では、1つの可用性コンテナ(またはデータセンター)に位置する制御ノードが、他の可用性コンテナ(または他のデータセンター)において他のSMSまたはSPSノードを遠隔で構成することができる場合がある。すなわち、特定の可用性コンテナまたはデータセンターは、SMS/SPSノードを管理するローカル制御ノードを有する必要がない場合がある。
図10は、少なくともいくつかの実施形態による、所定の冗長グループのノードが複数のデータセンターの間で分散されてもよいプロバイダーネットワーク環境を説明する。図示する実施形態において、プロバイダーネットワーク1002は、コンテナ1003A、1003Bおよび1003Cの3つの可用性を含む。各可用性コンテナは、1つ以上のデータセンターの一部または全部を含む。例えば、可用性コンテナ1003Aはデータセンター1005Aおよび1005Bを含み、可用性コンテナ1003Bはデータセンター1005Cを含み、また可用性コンテナ1003Cはデータセンター1005Dを含む。SMS及び/またはSPSノードのいくつかの異なる冗長グループ1012が示される。いくつかのRG1012は、データセンター1005A内に位置するRG1012Aの場合のように、単一のデータセンター内で完全に実装されてもよい。可用性コンテナ1003Aのデータセンター1005Aおよび1005Bに及ぶRG1012Bなどの他のRGは、所定の可用性コンテナ内の複数のデータセンター内のリソースを利用してもよい。異なる可用性コンテナに広がるリソースを利用して、さらに別のRGが実装されてもよい。例えば、RG1012Cは、可用性コンテナ1003Aおよび1003Bのそれぞれのデータセンター1005Bおよび1005Cに位置するリソースを利用し、RG1012Dは、可用性コンテナ1003A、1003Bおよび1003Cそれぞれのデータセンター1005B、1005Cおよび1005Dにおけるリソースを利用する。1つの実施例の展開においては、RG1012が、1つのプライマリおよび2つの非プライマリノードを含む場合、3つのノードのそれぞれが異なる可用性コンテナに位置してもよく、それによって、2つの異なる可用性コンテナにおいて同時に大規模障害事象が発生したとしても少なくとも1つのノードが機能したままでいる可能性が高くなる。
図示する実施形態において、ストリーム関連の設定をプロバイダーネットワーク1002内で構成するために、SMSおよびSPSそれぞれに関連するコンソールサービス1078および1076が使いやすいウェブベースのインターフェイスを提供してもよい。そのうち少なくともいくつかが、SMS及び/またはSPSによって利用されてもよいいくつかの付加的なサービスが、1つ以上のデータセンターまたは1つ以上の可用性コンテナに広がるリソースを利用して、プロバイダーネットワーク1002において実装されてもよい。例えば、クライアントが様々な異なる能力レベルの計算インスタンスとして実装される、選択された度合いの計算能力を利用することを可能にする仮想計算サービス1072が実装されてもよく、そのような計算インスタンスが、SMS及び/またはSPSノードを実装するために利用されてもよい。クライアントが、例えば、ブロックデバイスボリュームインターフェイスまたはウェブサービスインターフェイスのいずれかを介して、所望のデータ持続性レベルでデータオブジェクトを記憶させ、それにアクセスすることを可能にする、1つ以上の記憶サービス1070が実装されてもよい。いくつかの実施形態では、記憶オブジェクトがサービス1072の計算インスタンスに取り付け可能であり、それからアクセス可能であってもよく、またSMS記憶サブシステムにおいて様々なストリーム永続性ポリシーを実装するために利用されてもよい。1つの実施形態において、高性能キー値データベース管理サービス1074または関係するデータベースサービスなどの1つ以上のデータベースサービスが、プロバイダーネットワーク1002において実装されてもよく、SMNS記憶サブシステムによってストリームデータレコードを記憶させるため、及び/または制御サブシステム、採集サブシステム、記憶サブシステム、検索サブシステムもしくは処理ステージのメタデータを記憶させるために、そのようなデータベースサービスが利用されてもよい。
ストリームセキュリティオプション
少なくともいくつかの実施形態では、SMS及び/またはSPSのユーザにデータストリームのためのいくつかのセキュリティ関連のオプションが提供され、クライアントが採集、記憶、検索、処理及び/または制御などの様々な機能カテゴリのために利用されるリソース(例、仮想または物理マシン)のセキュリティプロファイルを選択することを可能にしてもよい。そのようなオプションは、例えば、様々なノードのために利用されるリソースの物理的位置のタイプに関する選択(例えば、プロバイダーネットワーク設備が利用されるか、またはプロバイダーネットワーク設備とは異なるセキュリティ特徴を有してもよいクライアント所有の設備が利用されるかのどちらか)、ストリームデータの暗号化に関する選択、及び/またはストリーム処理インフラストラクチャの様々な部分におけるネットワーク隔離の選択を含んでもよい。例えば、侵入者または攻撃者が価値のある独自のビジネスロジックまたはアルゴリズムへのアクセスを取得する可能性に関して一部のクライアントが懸念を抱き、クライアント所有の敷地内の計算装置を利用するストリーム処理ワーカーノードの実装を望む可能性がある。SMS及び/またはSPSノード群を実装するために利用されるリソースのタイプは、本明細書内でこれらのノードのための「配置先タイプ」と称する場合がある。図11は、少なくともいくつかの実施形態による、SMSまたはSPSのノードのために選択されてもよい複数の配置先を説明する。
図示する実施形態においては、いくつかのタイプのSMS/SPS機能カテゴリ(例、採集、記憶、検索、制御または処理)のためのプロバイダーネットワーク1102内で、また他のタイプのSMS/SPS機能カテゴリのためのプロバイダーネットワーク1102外で、配置先が選択されてもよい。プロバイダーネットワーク1102内では、マルチテナント・インスタンスホスト1103を利用して、計算インスタンス、ストレージインスタンスまたはデータベースインスタンスなどのいくつかのリソースが実装されてもよい。そのそれぞれにおいて1つ以上のクライアントのためのSMSまたはSPSノードがインスタンス化されてもよい、そのようなマルチテナント・インスタンスホストは、配置先タイプの第1のカテゴリ「A」を形成してもよい。物理リソースを他のクライアントと共有する必要性を回避するため、それらのSMS/SPSノードが、単一のクライアントに制限されるインスタンスホストを利用して実装されることを、いくつかのクライアントが要求してもよい。そのようなシングルテナント・インスタンスホストは、配置カテゴリタイプ「B」を形成してもよい。シングルテナント・インスタンスホストは、いくつかの理由により一部のクライアントの観点から望ましい場合がある。マルチテナント・インスタンスホストが、他のクライアントに属する計算インスタンスを含んでもよいため、別のクライアントのインスタンスからのセキュリティ攻撃の可能性が、マルチテナント・インスタンスホストにおいては、シングルテナント・インスタンスホストよりも高い場合がある。加えてシングルテナント・インスタンスホストが利用される際には、マルチテナントホスト上で動作する、あるクライアントの計算インスタンスCI1が、その作業負荷の急増を経験してホストの計算サイクルまたは他のリソースの大半の消費を開始し、従って、異なる計算インスタンスCI2上で動作する別のクライアントのアプリケーションのパフォーマンスに潜在的に影響を与える「ノイジーネイバー」現象もまた回避されてもよい。
図示する実施形態においては、IVN1106Aおよび1106Bなどの隔離された仮想ネットワーク(IVN)1106は、配置先タイプの別のカテゴリ「C」を表してもよい。いくつかの実施形態では、IVN1106は、プロバイダーネットワーククライアントの要求において、プロバイダーネットワークリソースを利用するがクライアントによって大部分を制御されるネットワーク構成を有して構築されるプライベートネットワークの論理的等価物として作成されてもよい。例えば、クライアントは、IVNの外部ですでに利用されている場合があるIPアドレスの複製の可能性について懸念する必要なく、IVN1106内で利用されるIPアドレスを決定してもよい。図示する実施形態においては、1つ以上のIVNにおける様々な種類のSMSおよびSPSノードの実装により、クライアントのストリームデータの管理及び/または処理により高いレベルのネットワークセキュリティが追加されてもよい。場合によっては、SMS/SPSノードの1つの機能カテゴリを1つのIVN1106に、また異なる機能カテゴリを異なるIVNに配置することを所定のクライアントが望む場合がある。様々な実施形態において、所定のIVN1106は、シングルテナント・インスタンスホスト、マルチテナント・インスタンスホストのいずれか、または両方のタイプのインスタンスホストを含んでもよい。いくつかの実施形態では、図11に示されない、プロバイダーネットワークのリソースを利用した配置先タイプの別の一連の選択(またはセキュリティプロファイルの選択)が、少なくとも一部のクライアントにとって利用可能であってもよい。クライアントが、ストリーム関連の操作のためのプロバイダーネットワークの仮想化された計算サービスから計算インスタンスを取得し利用することができる実施形態においては、計算インスタンスが、1つまたは2つのモードで利用されてもよい。1つのモードでは、クライアントがSPSまたはSMSに、SPSワーカーノードとして(または採集、記憶もしくは検索ノードにおいて)構成される計算インスタンスにおいて実行される、1つ以上の実行可能プログラムまたはプログラムを提供してもよく、また、SMSまたはSPSにプログラムを実行させてノードを管理させてもよい。この第1のモードは、ストリーム操作のための計算インスタンスの利用の「ストリームサービス管理」モードと称されることがある。他のモードでは、クライアントが、SPSまたはSMSからのサポートを減らした実行可能プログラムの実行および計算インスタンスの管理を望む場合がある。この第2のモードは、ストリーム操作のための計算インスタンスの利用の「クライアント管理」モードと称することがある。従って、操作のこれらの2つのモードは、クライアントによる選択が可能な配置先タイプまたはセキュリティプロファイルに関連する付加的な選択を表してもよい。例えば、実行可能プログラムがクライアントの組織からの目的物の専門家によって最適に実行することができる(シングルステップを含む)デバッグを要求する可能性がある場合に、クライアントがクライアント管理モードを選んでもよい。一方で、ストリームサービス管理モードが、デバッグを要求する可能性があるより成熟したコードにとって合理的な選択であってもよい。いくつかの実施形態では、異なる価格ポリシーが、これら2つのモードに適用してもよい。
図11に示す実施形態においては、いくつかの配置オプションがプロバイダーネットワークの外部の設備においてサポートされてもよい。例えば、SMSライブラリ1171及び/またはSPSライブラリ1172がインストールされるホスト1160が、プロバイダーネットワークへの接続方法が異なる2つのタイプのクライアント設備であるクライアント設備(例、クライアント所有のデータセンターまたは敷地)1110Aまたは1110B内からのストリーム管理または処理のために利用されてもよい。クライアント設備1110Aは、少なくともいくつかの共有インターネットリンク1151を介してプロバイダーネットワーク1102にリンクされる(すなわち、クライアント設備1110Aとプロバイダーネットワーク1102との間のリンクの一部で他の法人のネットワークトラフィックも流れてもよい)。対照的にいくつかのクライアント設備(1110Bなど)は、(「直接接続」リンクと時に称される場合がある)特別な非共有の専用物理リンク1106を介してプロバイダーネットワークにリンクされてもよい。これら2つの異なるタイプのクライアントの敷地は、図11において利用される用語で、それぞれ配置先オプション「D」および「E」を含む。いくつかの実施形態では、SMS及び/またはSPSの一部もまた、サードパーティの設備(例えば、SMS/SPSのクライアントによって利用されるが所有も管理もされていないデータセンター)において実装可能であってもよく、またそのようなサードパーティの敷地が、配置先タイプ「F」として指定されてもよい。少なくともいくつかのクライアント及び/またはサードパーティの敷地において、SMS及び/またはSPSライブラリがプロバイダーネットワークから取得され、SMS/SPSノードのために利用されるホストにおいてインストールされなければならない可能性がある。少なくとも1つの実施形態においては、すべての異なる機能カテゴリのノードが、適切なライブラリを用いてプロバイダーネットワークの外部で実装されてもよい。
異なる配置先タイプについては、実装されるネットワーク隔離の特徴、サポートされる侵入検知機能、実装される物理セキュリティポリシー、サポートされる暗号化レベルなどの、異なる実施形態における様々なセキュリティ関連の態様が互いに異なってもよい。従って、様々な宛先タイプのそれぞれが、他の配置先のセキュリティプロファイルと1つ以上の方法で異なる可能性があるそれぞれのセキュリティプロファイルを有すると見なされてもよい。いくつかの実施形態では、図12aおよび12bにおいて説明するように、例えば、SMSまたはSPSの1つ以上の制御ノードに要求を送信することにより、SMS及び/またはSPSのクライアントが異なるサブシステムまたはノード群のための、それぞれの配置先タイプをプログラムで選択してもよい。いくつかの実施形態において、またストリームアプリケーションの特定のタイプのために、セキュリティ上の理由のみのためではなく、同様にパフォーマンス及び/または機能上の理由から、クライアントが配置先タイプの制御を望んでもよいことに留意されたい。例えば、専用のクライアント敷地のリソースまたはシングルテナント・インスタンスホストを利用することで、上述のノイジーネイバー現象が回避されてもよい。いくつかの実施形態では、SPSステージまたはSMSノードのために利用することをクライアントが望む、そのようなコンポーネントを利用することで達成可能な機能またはパフォーマンスレベルはプロバイダーネットワークにおいて容易に複製することができず、またはプロバイダーネットワークにおいて単純にサポートされない、専用または独自のハードウェア及び/またはソフトウェアをクライアントが有してもよい。クライアントは外部のデータセンターにおいて、例えば、プロバイダーネットワークリソースのみを利用した場合に可能であるよりもはるかに高い割合でSPS処理を実行することができる場合がある、スーパーコンピュータレベルの処理能力を用いたコンピュータサーバへのアクセスを有してもよい。クライアントによる様々なノードのための配置先の選択を可能にすることにより、そのような専用装置またはソフトウェアが利用できるようになる場合がある。
図12aおよび12bは、少なくともいくつかの実施形態による、SPSクライアントおよびSMSクライアントによってそれぞれ送信されてもよいセキュリティオプション要求の実施例を説明する。図12aは、クライアントが識別子1210を有する1つ以上の処理ステージのために、ステージ(要素1212)の制御ノードのために要求される配置先タイプ(PDT)およびワーカーノード(要素1214)のために要求されるPDTを示す、SPSセキュリティオプション要求1200を説明する。少なくとも1つの実施形態において、クライアントはまた、例えば、特定のアルゴリズムまたはプロトコルを利用した、様々なネットワークリンクでの送信前のデータレコードの暗号化または様々な制御または管理上の対話の暗号化を要求することによって、それらのストリームデータレコードまたはストリーム処理結果のための暗号化設定を構成するための要求を送信することが可能である場合がある。例えば、図12aにおいては、ステージのための暗号化設定が、ステージ処理操作結果及び/またはステージの制御ノードとステージのワーカーノードとの間の通信のために利用される暗号化に適用される暗号化技術を示してもよい。
同様に図12bにおいては、クライアントのSMSセキュリティオプション要求1250が、特定の識別子1252を有する1つ以上のストリームに対するクライアントのセキュリティの選好を示すいくつかの要素を含む。採集ノード、記憶ノードおよび検索ノードに対する配置先タイプの選好が、要素1254、1258および1262のそれぞれにおいて示されてもよい。採集制御ノード、記憶制御ノードおよび検索制御ノードに対するPDTの選好が、要素1256、1260および1264のそれぞれによって示されてもよい。例えば、データレコードがあるカテゴリのノードから別のカテゴリのノードに送信される際にデータレコードのために暗号化が実装されるかどうか、及び/またはその方法などの、データレコードに対する暗号化の選好が、要素1266を介して示されてもよい。図12aおよび12bに示されるようなセキュリティオプション要求を利用して、クライアントはそれらのストリーム管理および処理環境の異なる部分のための位置(例、プロバイダーネットワーク内、またはプロバイダーネットワークの外部)および様々な他のセキュリティプロファイルコンポーネントを選択することができる場合がある。
少なくともいくつかの実施形態では、セキュリティ以外の理由からノード配置先の選択が提供されてもよいことに留意されたい。例えば、(例えば、「ノイジーネイバー」問題を回避するためなどの、主にセキュリティ上の理由よりも早期に示されるパフォーマンス上の理由から、クライアントがシングルテナントホストにおいて実装されるいくつかのタイプのSMSまたはSPSノードを有することを望む場合がある。少なくともいくつかの実施形態では、ストリームの生存時間中に配置選択が変更されてもよい。例えば、クライアントが最初にマルチテナント・インスタンスホストにおけるSMSノードのインスタンス化を可能にしてもよいが、ノードの少なくともいくつかのサブセットのシングルテナント・インスタンスホストへの移動をその後に望んでもよい。少なくともいくつかの実施形態では、異なる価格ポリシーが異なるセキュリティ関連のオプションに適用されてもよい。例えば、IVNにおいて特定の機能カテゴリのSMSノードを実装する方がIVN外のマルチテナント・インスタンスホストにおいて実装するよりも費用がかかる場合があるか、またはシングルテナント・インスタンスホストにおいてSMSノードを実装する方が、マルチテナント・インスタンスホストにおいて実装するよりも費用がかかる場合がある。
(ストリームレコードの順次記憶および検索)
多くの種類のストリームアプリケーションのために、データレコードがSMSにおいて複数のデータプロデューサ120から非常に高い割合で受信されてもよく、データコンシューマは通常、レコードが生成された順序で記憶されたデータレコードにアクセスすることを望む可能性がある。上述のように、特に回転式磁気ディスクが、ストリームデータレコードのための記憶装置として利用される環境においては、(読み書き両方のための)順次I/Oアクセスパターンが、ランダムI/Oアクセスパターンに対して重大な性能優位性を有してもよい。いくつかの実施形態、ストリームに特有の、または、パーティションに特有のシーケンス番号が、SMSから受信されたようにデータレコードに割り当てられてもよく、シーケンス番号に基づく順次検索操作がサポートされてもよい。図13aは、少なくともいくつかの実施形態によるストリームデータプロデューサとSMSの採集ノードとの間の対話の実施例を説明する。ストリームデータプロデューサは、データレコード110を採集サブシステムへと送信してもよく、また図示する実施形態においては、採集サブシステムが送信されるレコードのために選択されたシーケンス番号102を用いて応答してもよい。少なくともいくつかの実施形態では、採集ノードがシーケンス番号の一部を記憶サブシステムから取得してもよい。例えば、そのような実施形態においては、受信されるデータレコードの記憶に続き、シーケンス番号102が適用可能な永続性ポリシーに従って決定されてもよく、記憶サブシステムがデータレコードのためのそれ自体の番号順のインジケータを生成し、採集ノードによってデータレコードに割り当てるさらに大きなシーケンス番号に含めるためにそのインジケータを提供してもよい。
様々な実施形態において、データレコードの安定した順序付け、一貫した順序付けを提供し、データコンシューマによるレコードの繰り返すことができる反復を可能にするために、シーケンス番号が実装されてもよい。少なくともいくつかの実装において、特定のパーティションのデータレコードに割り当てられるシーケンス番号は連続している必要はないが、時間と共に単調に増加してもよい。様々な実施形態において、シーケンス番号が以下の意味論の少なくともいくつかのサブセットと共に割り当てられてもよい。(a)シーケンス番号がストリーム内で固有である、すなわち、同じシーケンス番号が割り当てられる所定のストリームのデータレコードが2つあってはならない、(b)シーケンス番号がストリームのデータレコードへのインデックスとしての役割を果たしてもよく、データレコードを所定のストリームパーティション内で反復させるために利用されてもよい、(c)所与のデータプロデューサのために、データプロデューサがデータレコードを正常に送信した順序がデータレコードに割り当てられるシーケンス番号に反映される、また、(d)所定のパーティションキー値を用いたデータレコードのためのシーケンス番号付けが、動的再分割操作にまたがって単調増加する意味論を保持する。例えば、再分割後にデータレコードに割り当てられるパーティションキー値K1を用いたシーケンス番号はそれぞれ、動的再分割の前にそのパーティションキー値K1を用いてデータレコードに割り当てられた任意のシーケンス番号よりも大きくてもよい(動的再分割については図16を参照して以下に詳細に説明する)。
いくつかの実施形態では、データプロデューサが少なくともいくつかのデータレコードのために選択されるシーケンス番号102の選択に影響を与えることを望む場合がある。例えば、データプロデューサ120が、割り当てられるストリームのシーケンス番号内の境界またはセパレータの境を定め、ストリームの特定のサブセットにおいて目標とされる読み出し要求のそのストリームのデータコンシューマによる送信をより容易にすることを望む場合がある。いくつかの実装においては、データプロデューサ120が、レコードと共に最小のシーケンス番号の指示を送信してもよく、上述のシーケンス番号の意味論にも従い、要求される最小値に従ってSMSがシーケンス番号を選択してもよい。
図13bは、少なくともいくつかの実施形態による、採集されたデータレコードのためにSMSにおいて生成されてもよいシーケンス番号の例示的な要素を説明する。図示する実施形態においては、シーケンス番号が、n1ビットのSMSバージョン番号1302、n2ビットのタイムスタンプまたはエポック値1304、n3ビットのサブシーケンス番号1306およびn4ビットのパーティション番号1308の4つの要素を含んでもよい。いくつかの実装においては、128ビットのシーケンス番号が利用されてもよい。例えば、n1、n2、n3およびn4は、それぞれ4、44、64および16ビットであってもよい。バージョン番号1302は、単純にSMSソフトウェアバージョンの展開における混乱を回避し、例えば、シーケンス番号を生成するためにSMSソフトウェアのどのバージョンが利用されたかを明らかにできるようにするために利用されてもよい。少なくともいくつかの実装においては、バージョン番号1302が頻繁に変化することを予期されない場合がある。タイムスタンプ値1304は、例えば、ローカルクロックソースまたは世界中からアクセス可能なクロックソース(例えば、getCurrentEpochまたはgetCurrentTime APIを実装するプロバイダーネットワークの状態管理システム)から採集サブシステムノードによって取得されてもよい。少なくともいくつかの実装において、周知の時点からのオフセット(例えば、Unix(商標)を利用したオペレーティングシステムにおける様々な時間関連のシステムを呼び出すことで取得可能である、1970年1月1日00:00:00AM UTCから経過した秒数)が、タイムスタンプ値1304のために利用されてもよい。いくつかの実施形態では、サブシーケンス番号1036が記憶サブシステムによって生成されてもよく、また、特定のパーティションのデータレコードが記憶装置に書き込まれる順序を示してもよい。従って、多数のデータレコードが所定の秒内で受信され、タイムスタンプ値1304が約1秒の間隔で変化するのみである実装においては、サブシーケンス番号1306が、同じ秒内で到着したために同じタイムスタンプ値が割り当てられることになるデータレコードのためのレコードの到着(または記憶)順序のインジケータとしての役割を果たしてもよい。いくつかの実施形態では、パーティション番号1308が所定のストリーム内でパーティションを一意的に識別してもよい。シーケンス番号タイムスタンプが、対応するデータレコードが採集された(少なくともおおよその)時刻を示す、少なくともいくつかの実装においては、特定のタイプの時間に基づく検索要求のためのインデックス機構にシーケンス番号が利用されてもよい。例えば、クライアントが特定の日または特定の時間範囲において生成されるか、または採集されたストリームレコードを検索することを望む場合があり、シーケンス番号が適切なデータレコード群を検索するための暗黙の2次インデックスのキーとして利用されてもよい。従って、少なくともいくつかの実施形態では、順序付けられた記憶および検索のためのタイムスタンプを含むシーケンスの利用に、記憶されるデータレコード群に一時的なインデックスを提供するという付加的な利点があってもよい。
所定のパーティションのデータレコードはしばしばラージシーケンシャル書き込み操作を利用して、通常シーケンス番号順に(例えば、ディスクに)書き込まれてもよい。上述のように、いくつかの実施形態では、データコンシューマがシーケンス番号順にデータレコードを読み出すことができるよう、イテレータを用いたプログラムインターフェイスが実装されてもよい。図14は、少なくともいくつかの実施形態による、SMSにおけるストリームデータレコードの順序付けられた記憶および検索の実施例を説明する。パーティションSj〜Pk(ストリームSjのk番目のパーティション)6つのデータレコード110A〜110Fが記憶されるシーケンス番号順に示される。説明するように少なくともいくつかの実施形態では、例えば、値が上述のタイムスタンプ部1304またはサブシーケンス番号1306に割り当てられる方法が、これら要素のための連続した値に必ずしもつながらない可能性があるため、シーケンス番号は連続していない場合がある。
図14に示す実施例では、データコンシューマが作成されるイテレータを要求し、開始シーケンス番号「865」を特定する。要求に応じて、要求される開始シーケンス番号以上である最も近いシーケンス番号を有するデータレコードに位置するIterator1をSMSが初期化している。この場合コンシューマの要求において、次に近いシーケンス(データレコード110Bに割り当てられる860)が開始シーケンス番号より小さいため、シーケンス番号870を有するデータレコード110Cがイテレータの開始位置として選択されている。getIteratorインターフェイスは、パーティション内の要求位置でカーソルを設定するための要求の論理的等価物と見なされてもよく、例えば、ストリームに沿ってシーケンス番号順にカーソルを移動させるためのカーソル位置から開始されるデータレコードをその後読み出すために、getNextRecordsインターフェイスが利用されてもよい。説明する実施例においては、Iterator1に設定される「イテレータ」および3に設定される「maxNumRecords」(戻されるデータレコードの最大数)のパラメータを有するgetNextRecordsインターフェイスを、データコンシューマが呼び出している。従って、SMS検索サブシステムが、データレコード110C、110Dおよび110Eを、その順序でデータコンシューマに戻す。イテレータであるIterator1は、getNextRecordsの呼び出し後に、新しい位置に、例えば、データレコード110Fへと動かされてもよい。同じイテレータのための次に続くgetNextRecordsの呼び出しは、110Fから始まるデータレコードを返してもよい。いくつかの実施形態では、getIteratorの呼び出しの意味論が異なってもよい。いくつかの実施形態では、例えば、特定の順序付けられた数以上の最も近いシーケンス番号を有するデータレコードにおいて、イテレータを位置づける代わりに、要求されるシーケンス番号以下で最大のシーケンス番号を有する最も近いデータレコードにおいて、イテレータが位置付けられてもよい。別の実施形態において、クライアントは、getIteratorの呼び出しにおいて既存のシーケンス番号を特定しなければならない場合がある。例えば、要求されるシーケンス番号を有するレコードがストリームに存在しない場合に、エラーが戻されてもよい。
パーティションマッピング
上述のように様々な実施形態において、所定のストリームのレコードの採集、記憶、検索および処理に関連する作業負荷は、様々な分割および再分割ポリシーに従って、いくつかのノードの間でさらに分割され、分散させられてもよい。図15は、少なくともいくつかの実施形態による、ストリームのパーティションマッピング1501ならびに、SMSおよびSPSノードのために行われてもよい、対応する構成決定の実施例を説明する。例えば、createStreamAPIのクライアントによる呼び出しに応じて特定のデータストリームが作成されるか、または初期化されると、分割ポリシーが起動されてもよい。それによってストリームの所与のデータレコードが、その構成要素であると見なされるパーティションを決定するために利用されてもよい。採集サブシステム204、記憶サブシステム206、検索サブシステム208および所定のデータレコードのための操作を実行する関連する任意のSPSステージ215の特定のノードがレコードのパーティションに基づいて選択されてもよい。1つの実施形態において、少なくとも所定のデータレコードのために利用される制御ノードのサブセットが、同様にパーティションに基づいて選択されてもよい。少なくともいくつかの実施形態では、例えば、ポリシーにおいて示されるトリガする条件に応じて、または明示的な要求に応じて、データストリームの動的再分割が分割ポリシーの一部としてサポートされてもよい。
様々な実施形態において、データプロデューサによってその値が直接的に(例えば、書き込みまたはput要求のパラメータとして)、または間接的に(例えば、SMSがデータプロデューサクライアント、データプロデューサのIPアドレスまたはデータレコードの実際の内容の一部の識別子または名称などのメタデータをパーティションキーとして利用してもよい)供給されてもよいレコードのための分割キーに、所定のデータレコードのために選択されるパーティションが依存してもよい。図15に示される実施形態では、データレコードパーティション識別子1510を決定するために、1つ以上のマッピング関数1506がデータレコードパーティションキーまたは属性1502に適用されてもよい。1つの実装では、例えば、所定のパーティション識別子1510が、128ビットの整数値のスペースの連続した範囲を表してもよい。その範囲は、ストリームのすべてのパーティションのための範囲の集合が、128ビットの整数が仮定できるすべての潜在的な値を包括してもよいような範囲であり得る。そのような例示的なシナリオにおいては、1つの単純なマッピング関数1506が、データレコードの(1つ以上の)パーティションキー値または(1つ以上の)選択される属性値から128ビットのハッシュ値を生成してもよく、またハッシュ値が収まることになる特定の連続した範囲に基づいて、パーティション識別子が決定されてもよい。いくつかの実装においては、連続した範囲が少なくとも当初は等しい規模であってもよい。他の実装においては、異なるパーティションが互いに規模が異なる可能性のある連続した範囲に対応してもよい。再分割はまた、1つの実装において範囲境界を調整する結果となってもよい。他の分割関数106が異なる実装において利用されてもよい。
(以下に詳細に述べるように)データストリームが動的再分割を受ける場合、特定のキーを有するレコードがマッピングされるパーティションが変化してもよい。従って少なくともいくつかの実施形態では、SMS及び/またはSPS制御ノードが、ストリームの生存時間中にストリームに適用するいくつかの異なるマッピングを把握しなければならない場合がある。いくつかの実施形態では、タイムスタンプの有効性の範囲1511またはaシーケンス番号の有効性の範囲などのメタデータが、各パーティションマッピングのための制御ノードによって記憶されてもよい。タイムスタンプの有効性の範囲1511は例えば、ストリームの作成時から時間T1まで特定のマッピングM1が適用すること、T1からT2まで異なるマッピングM2が適用することなどを示してもよい。ストリームに向けられた読み出し要求への応答時には、(例えば読み出し要求において示されるシーケンス番号によって)どのマッピングが利用されるべきかを検索ノードがまず決定し、次いで適切な記憶ノードの識別のためにそのマッピングを利用しなければならない場合がある。
少なくともいくつかの実施形態では、パーティションをいくつかの異なるの粒度のリソースへとマッピングする役割をSMSおよびSPS制御ノードが担ってもよい。例えば、図15の実装例1599において示されるように、1つの実装において、各採集、記憶、検索または処理(ワーカー)ノードが、Java(商標)仮想マシン(JVM)または計算インスタンスなどのサーバ仮想マシン内の実行のそれぞれの処理またはそれぞれのスレッドとして実装されてもよい。各JVMまたは計算インスタンスは、特定の物理ホストにおいてインスタンス化されてもよい。いくつかの実施形態では、複数のJVMが単一の計算インスタンス内で起動され、リソースマッピングの決定に別の層を追加してもよい。従って、所定のパーティションのために、どの特定のリソースが、採集ノード1515、記憶ノード1520、検索ノード1525、または処理ステージワーカーノード1530(例えば、ステージPS1またはPS2のそれぞれのためのノード1530Aまたは1530B)として利用されるべきかを、1つ以上の制御ノードが選択してもよい。制御ノードはまた、これらのノードのサーバ(採集サーバ1535、記憶サーバ1540、検索サーバ1545、または処理サーバ1550など)へのマッピング、サーバとホスト(採集ホスト1555、記憶ホスト1560、検索ホスト1565またはSPSホスト1570A/1570Bなど)との間のマッピングを決定してもよい。いくつかの実装においては、パーティションマッピングが、説明される様々なそれぞれのリソースの粒度(例、ノード、サーバおよびホストの粒度)の識別情報(例、リソースの識別子)、1つ以上の関数1506へ入力および関数1506自体として利用されているデータレコード属性の指示、を含むよう見なされてもよい。制御サーバは、パーティションマッピングの表示をメタデータ記憶装置に記憶させてもよく、またいくつかの実施形態では、様々なAPI(getPartitionInfo APIなど)または他のプログラムインターフェイスが、マッピング情報をデータプロデューサ、データコンシューマへと、または、SMSサブシステムもしくはSPSのノードへと提供するために公開されてもよい。
いくつかの実施形態では、(a)所定のノード、サーバまたはホストがいくつかの実施形態において複数のパーティションの役割を担うよう指定されてもよいか、または(b)障害または他のトリガにより、新しいノード、サーバまたはホストが所定のパーティションまたはパーティション群に割り当てられてもよい、などの様々な要因のため、データレコードのパーティションへの、またパーティションからリソースへのマッピングが、さらに複雑である場合がある。加えて、上述のように、また以下に述べるように、所定のストリームのためのパーティションマッピングが、ストリームレコードがSMS及び/またはSPSノードによって継続して処理される間に、時間の経過と共に動的に修正されてもよい。結果的にいくつかの実施形態では、マッピングのメタデータのいくつかのバージョンが異なる時間にそれぞれ対応して、所定のストリームのために少なくとも一時的に保持されてもよい。
動的ストリーム再分割
図16は、少なくともいくつかの実施形態による、動的ストリーム再分割の実施例を説明する。図16において説明するタイムラインの時間T1において、ストリームS1が作成されるかまたは初期化される。パーティションマッピングPM1がストリームS1のために作成され、時間間隔T1からT2の間で有効であり続ける。T1とT2との間でSMSによって受信される3つのデータレコードが例として示される。データレコード110A(DR110A)がクライアント供給のパーティションキー値「Alice」を用いて送信され、DR110Bがクライアント供給のパーティションキー値「Bill」を用いて送信され、またDR110Cがクライアント供給のパーティションキー値「Charlie」を用いて送信される。初期のマッピングPM1では、3つのデータレコード110A、110Bおよび110Cのすべてが、パーティション識別子「P1」を有する同じパーティションへとマッピングされる。P1データレコードについては、単一のノードI1が採集を扱うよう構成され、単一のノードS1が記憶を扱うよう構成され、単一のノードR1が検索を扱うよう構成され、単一のワーカーノードW1がSPS処理を扱うよう構成される。マッピングPM1の有効性の範囲のための開始タイムスタンプがT1に設定される。
図16の例示的なタイムラインにおいて、ストリームS1が時間T2で動的に再分割される。図示する実施形態においては再分割がいつ行われるかに関わらず、データレコードが継続して到着し、SMSおよびSPSによって処理され、SMSあるいはSPSのいずれもオフラインにする必要がない。例えば、採集、記憶、検索または処理ノードにおける過負荷状態の検知に応じて、様々なサブシステムの異なるホストでの作業負荷レベル間のスキューまたは不均衡の検知に応じて、またはデータコンシューマまたはデータプロデューサクライアントからの要求に応じて、いくつかの要因のいずれかの結果として再分割が起動されてもよい。図示する実施形態においては、PM2のために示す有効性の範囲の開始タイムスタンプ設定によって示されるように、新しいマッピングPM2が時間T2(またはT2の少し後)で有効となる。少なくともいくつかの実装において、異なるデータレコード属性群が、再分割の前に利用されたよりも分割データレコードのために利用されてもよい。場合によっては、追加的な分割属性が(例えば、SMSの要求において)データプロデューサによって送信されてもよい。一方、他の場合では、付加的な属性がSMS採集ノードによって生成されてもよい。そのような付加的な属性は、「塩漬けにされた」属性と称することがあり、再分割のための付加的な属性を利用する技術は、「塩漬け」と称することがある。1つの実装例において、過負荷採集サーバはデータプロデューサに(例えば、データプロデューサによって実行されるSMSクライアントライブラリコードに)、再分割のために、前に利用されたパーティションキーに加えてランダムに選択される小さな整数値が提供されるよう示してもよい。採集作業負荷を異なる採集ノード群の間で分散させるために、当初のパーティションキーと塩漬けにされた付加的な整数の組み合わせが続いて利用されてもよい。いくつかの実施形態では、検索ノード及び/またはデータコンシューマが、再分割のために利用されている付加的な属性に関して知らされなければならない場合がある。少なくともいくつかの実装において、そのような付加的な属性が再分割のために利用されない場合がある。
図16に示される実施形態では、新しいパーティションマッピングが結果的に、T2の前に同じキーのために選択されるパーティションに対して、T2の後に受信される少なくともいくつかのデータレコードのために選択される異なるパーティションとなる。T2の後にパーティションキー値「Alice」を用いてDR110Pが送信され、T2の後にパーティションキー値「Bill」を用いてDR110Qが送信され、T2の後にパーティションキー値「Charlie」を用いてDR110Rが送信される。説明する例示的なシナリオにおいては、PM2マッピングを利用して、DR110Pがパーティション「P4」の構成要素に指定され、DR110Qがパーティション「P5」の構成要素に指定され、一方でDR110Rがパーティション「P6」の構成要素に指定される。図示する実施形態においては、T2の後に受信されるよう示されるデータレコードはいずれも前に利用されたパーティション「P1」の構成要素として指定されず、かわりに全く新しいパーティションが再分割後に利用されてもよい。いくつかの実施形態では、少なくともいくつかの前に利用されたパーティションが再分割後に継続して利用されてもよい。新しいパーティションP4、P5およびP6のそれぞれについて、採集、記憶、検索及び/または処理のために異なるノードが指定されてもよい。例えば、ノードI4、S4、R4およびW4がパーティションP4、ノードI5、S5、R5のために構成されてもよく、P5がパーティションP5のために構成されてもよく、またノードI6、S6、R6およびP6がパーティションP6のために構成されてもよい。いくつかの実施形態では、同じ記憶ノードが再分割後に特定のパーティションキーまたは属性を有するレコードのために、再分割前にそのようなレコードのために利用されたように利用されてもよいが、そのノード内の異なる記憶位置(例、異なるディスク、異なるディスクパーティション、異なるSSD)が再分割後に利用されてもよい。
T2での動的再分割後の少なくともしばらくの時間、再分割の前にSMS採集及び/または記憶サブシステムによって処理されたデータレコードのために検索要求が継続的に検索されてもよい。少なくともいくつかの場合においては、要求されたデータレコードを、データレコードが採集された時に有効であったPM1マッピングに基づいて検索しなければならない場合がある。従って、図16に示されるようにデータ検索の目的のために、PM1およびPM2の両方がT2の後のしばらくの間継続して利用されてもよい。少なくともいくつかの実装において、データレコードは古くなると最終的にストリームから削除されてもよく、例えば、対応するデータレコードのすべて自体が削除される際に、古くなったパーティションマッピングもまた、最終的に処分されてもよい。いくつかの実施形態では、削除される代わりに(またはその前に)、SMSによって利用されるパーティションマッピングがアーカイブ後にレコードを検索するために依然として利用可能であってもよいように、ストリームレコードが(例えば、クライアントに選択されたアーカイバルポリシーに基づいて)異なる記憶位置または装置のセットへとアーカイブされてもよい。そのような実施形態では、PM1およびPM2などのパーティションマッピングは、保存用記憶装置に向けられる検索要求をサポートする必要がある限り保持されてもよい。いくつかのアーカイブの実装においては、ストリームのパーティションマッピングが保持されることを要求しない(例えば、アーカイブされるデータレコードのために新しいインデックスが作成されてもよい)異なる検索手法が利用されてもよい。いくつかの実施形態では、P2などの再分割前に利用されていたが再分割後には書き込みが向けられる先にはならないパーティションがある時点で読み出しに対して「閉じられた」状態にあってもよい。例えば、「パーティションの終わりに達しました」とのエラーメッセージの等価物が検索要求に応じて提供されてもよい。
いくつかの実装においては、所定のデータストリームが多数の(例、数百または数千の)パーティションに分割されてもよい。ストリームS1が初めにP1、P2、・・・、P1000の1000のパーティションに分割される例示的な場合について考慮する。1つのパーティション、例えば、P7に対応する過負荷状態が検知される場合には、データレコードのP7への初期マッピングを変更する価値があるかもしれないが、他のパーティションのマッピングを変更する必要はない。1つの手法では、2つの新しいパーティションP1001およびP1002が再分割操作を介して作成されてもよい。再分割後に受信された、属性がもともとは(すなわち、もとのマッピングに基づいて)P7の構成要素となる結果になったレコードが再分割後にP1001またはP1002のいずれかへとマッピングされ、従ってP7の作業負荷を2つのパーティションの間で分散してもよい。例えば、P1〜P6およびP8〜P1000の残りのパーティションを修正する必要がない場合がある。パーティションの小さなサブセットのみがそのような再分割による影響を受けるとき、少なくともいくつかの実施形態では、パーティションエントリの有向非巡回グラフなどの組み合わせられたデータ構造(すなわちパーティションエントリのツリー)が生成され、記憶されてもよい。各エントリは、分割関数の出力範囲および有効時間範囲(エントリの分割情報が有効であると見なされる時限)を示してもよい。上記の実施例において、P7を含む再分割が時間T2において実行され、一方でストリームS1(およびその初期マッピング)が時間T1において作成されたと仮定する。そのようなシナリオにおいては、P7に関するエントリのための有効時限が「T1からT2」となり、P1001およびP1002のための有効時限が「T2以降」となり、残りのパーティションのための有効時間の時限が「T1以降」となる。少なくともいくつかの実装において、そのような組み合わせられたデータ構造の利用はパーティションマッピングメタデータのために利用されるメモリまたは記憶量の大幅な低減につながる可能性がある。上記の実施例においては、パーティションP7の2つの新しいパーティションへの分割が説明された。少なくともいくつかの実装において、複数のパーティションがまた、再分割の間に組み合わせられてもよい。例えば、受信された検索要求が比較的少数であったか、または送信されたレコードが比較的少数であった2つの隣接するパーティションが、単一のパーティションへと組み合わせられてもよい。所与の時点で、データレコードが属するパーティションが分割関数および有効時間範囲の情報を利用して明確に決定されてもよい。時間の経過と共により多くの分割及び/または組み合わせが実行されるにつれ、組み合わせられたデータ構造が発展してもよいが、メタデータの分割のために求められる全体のスペースが(もちろん分割の頻度および、分割により影響される平均的なパーティションの数によるが)劇的に増大しない場合がある。対照的に異なる実装においては、再分割のたびに毎回、ストリームのために変更されないメタデータ群の全体が複製され、再分割による影響を受けるパーティションのためのエントリと組み合わせられてもよい。特に上述のように再分割後、少なくともしばらくの間古くなったマッピングが保持されなければならない場合に、パーティションマッピングのメタデータのための記憶およびメモリ要件が後者の実装においてははるかに速い速度で増大してもよい。
タイムスタンプ値(図13bに示されるタイムスタンプ値1304など)を含むシーケンス番号が利用される少なくともいくつかの実施形態では、特別なタイプのシーケンス番号の推移が動的再分割のために実装されてもよい。例として図13bに示されるのと同様のタイムスタンプを用いたシーケンス番号スキームが、新しいタイムスタンプ値がシーケンス番号に含められるために毎秒生成されるストリームS1のために利用されていると仮定する。動的再分割がサポートされる少なくともいくつかの実装において、動的再分割後に割り当てられるシーケンス番号がすべて、動的再分割前に利用されるものとは異なる(再分割事象に対応する、選択された初期タイムスタンプ値から始まる)タイムスタンプ値のセットを利用してもよい。例えば、動的再分割が完遂される(すなわち実施される)時に利用されるタイムスタンプ値がTkである場合、完遂後に発行される新しいシーケンス番号はいずれも、タイムスタンプ値Tk+1以降の利用を要求されてもよい。図13bで利用されるスキームにおける、少なくともいくつかの上位ビットにおいて、シーケンス番号値がタイムスタンプ値をコード化するため、記載のようにタイムスタンプ境界に対応する再分割事象が次に検索要求に応じて利用されるマッピングの識別に関与する記憶処理を簡略化するように万全を期されてもよい。従って、そのような実装において、特定のシーケンス番号を特定する検索要求が受信される際に、タイムスタンプ値がそのシーケンス番号から抽出されてもよく、また、再分割後のマッピングが利用されるべきか、または再分割前のマッピングが利用されるべきかが容易に決定されてもよい。抽出されたタイムスタンプ値が再分割のために選択された初期タイムスタンプよりも小さい場合、再分割前のマッピングが利用されてもよく、抽出されたタイムスタンプ値が再分割のために選択された初期タイムスタンプ値以上である場合、再分割後のマッピングが利用されてもよい。
ストリーム管理および処理方法
図17は、少なくともいくつかの実施形態による、ストリームレコード採集およびストリームレコード検索のためのそれぞれのプログラムインターフェイス群をサポートするために実行されてもよい操作の態様を説明する流れ図である。要素1701に示されるように、データストリームを作成するかまたは初期化するための要求が、例えば、SMSクライアントまたはデータプロデューサクライアントから受信されてもよい。ストリームのために利用される初期パーティションマッピングが決定されてもよい(要素1704)。例えば、特定のデータレコードが属するパーティションを識別するために利用される(1つ以上の)関数および(1つ以上の)関数のために利用される入力パラメータが、分割ポリシーに基づいて識別されてもよい。上述のように様々な実施形態において、SMSの制御コンポーネントが、ストリーム作成要求を受信し、それに応答する役割を担ってもよい。ストリーム作成および初期化(および他の制御プレーン操作)が実装される方法が、実施形態によって異なってもよい。1つの実施形態において、例えば、制御サーバの冗長グループが構築されてもよく、永続性記憶位置における新しいストリーム(例、初期パーティションマッピング、採集、記憶および検索のノードの初期セットなど)のための適切なメタデータを生成し記憶させることによって、その冗長グループのプライマリ制御サーバが、ストリーム作成要求に応答してもよい。ストリーム(例、所定のパーティションのための役割を担うバックエンドノードに関するフロントエンド採集ノードからの要求)に関する次に続くクエリへの応答が、記憶されるメタデータを利用するプライマリ制御サーバによって生成されてもよい。SMS制御プレーン機能の別の実装においては、少なくともいくつかの採集、記憶、または検索サブシステムのノードによって、ストリーム構成メタデータが、直接アクセス可能であるデータベースに記憶されてもよい。ストリームが作成され、初期化された後、レコード送信、記憶および検索などのデータプレーン操作が開始されてもよく、通常、制御コンポーネントとの付加的な対話なしで対応するサブシステムのそれぞれのコンポーネントによって処理されてもよい。
いくつかの実施形態では、データプロデューサが書き込み要求を有する明示的なパーティションキーを送信するよう要求されてもよい。一方、他の実施形態では、データプロデューサ、データレコードがそこから受信されるIPアドレスの識別などの書き込み要求に関連するメタデータに基づいて、またはデータレコード自体の内容から、分割関数のために利用される入力が決定されてもよい。少なくとも1つの実装において、クライアントはデータレコード送信におけるパーティション識別子を任意に供給してもよく、追加的な分割関数がそのような実装においては要求されない場合がある。
ストリームのための採集、記憶および検索関数のためのノードの初期セットを決定するかまたは構成する際にいくつかの異なる要因が考慮されてもよい(要素1707)。例えば、(ストリームが分割されるパーティションの数およびパーティションの予想される相対的な大きさを決定してもよい)パーティションマッピング自体、もしも利用可能であれば、予想される採集率及び/または検索率に関する情報、ストリームデータレコードのための持続性/永続性要件、及び/または(図9および10において説明するものと同様の冗長グループを結果的に設定してもよい)様々なサブシステムのための高可用性要件が、異なるサブシステムのノードの数および配置に影響する場合がある。加えて、(図11、12aおよび12bで説明するように)クライアントがノードの様々なカテゴリのための配置先タイプの選好を示してもよい実施形態においては、そのような選好がまた、SMS及び/またはSPSノードのために利用されるリソースを決定する役割を果たしてもよい。少なくともいくつかの実施形態では、採集、記憶及び/または検索関数を実行することができるノードのそれぞれのプールが事前に設定されてもよく、制御コンポーネントがそのようなプールの選択される構成要素を、作成される新しいストリームそれぞれに割り当ててもよい。他の実施形態では、少なくともいくつかの場合に、ストリームが作成されるか、または初期化される際に、新しい採集、記憶または検索ノードをインスタンス化しなければならない場合がある。
図示する実施形態の採集ノードにおいて、例えば(データが送信要求に含まれる)インライン送信インターフェイスおよび(アドレスが送信要求において提供され、そこから例えばウェブサービス要求または他のインターフェイスを利用してSMS採集ノードまたはSMS記憶ノードがデータを検索することができる、)バイリファレンス送信インターフェイスを含む、データレコード送信のために実装される任意のプログラムインターフェイス群を介して、レコードが受信されてもよい(要素1710)。それぞれのレコードの送信方法のための異なる実施形態において、いくつかの異なるタイプのプログラムインターフェイスのいずれかが提供されてもよい。例えば、それぞれのアプリケーションプログラミングインターフェイス(API)がインライン対バイリファレンス送信のためにサポートされてもよく、ウェブページまたはウェブサイトが構築されてもよく、グラフィックユーザーインターフェイス実装されてもよく、またはコマンドラインツールが開発されてもよい。少なくともいくつかの実施形態では、SMSがシーケンス番号を採集されたレコードそれぞれに割り当てて、例えば、レコードが採集されるか、または記憶される順序を示してもよく、また、シーケンス番号がデータコンシューマによる検索要求のために利用可能であってもよい。検索サブシステムノードにおいて、実装される任意のプログラム検索インターフェイス群を介してレコード検索要求が受信されてもよく、それに応じて要求されるデータレコード内容が提供されてもよい(要素1713)。非順次アクセスのために、例えば、(getIteratorの呼び出しにおいて示されるシーケンス番号に基づいてパーティション内で選択される位置においてインスタンス化されるイテレータを要求する)getIteratorまたは(特定のシーケンス番号を有するデータレコードを取得する)getRecordWithシーケンスNumberを、インターフェイスが含んでもよい。順次アクセスのために、(イテレータの現在の位置から、または特定のシーケンス番号から始まる順序のいくつかのレコードを要求する)getNextRecordsなどのインターフェイスが実装されてもよい。少なくともいくつかの実施形態では、異なる検索インターフェイスが、それらに関連する異なる課金率を有してもよい。例えば、順次検索のためのレコードごとの課金率が、非順次検索のためのレコードごとの課金率よりも低く設定されてもよい。いくつかの実施形態では、異なる送信インターフェイスもまた、異なる課金率を有してもよい。例えば、バイリファレンス送信についてはインライン送信よりもレコードあたり高いコストがかかる場合がある。
時間の経過と共に、制御ノードまたはまたは特定の請求サーバが、ストリーム管理サービスの様々なサブシステムにおいて実装される異なるプログラムインターフェイスのための使用メトリクスを収集してもよい(要素1716)。例えば、異なるプログラムインターフェイスの起動カウント、(単一起動を利用する複数のレコードを検索するために利用することができるgetNextRecordsなどの少なくともいくつかのインターフェイスのための起動カウントとは異なってもよい)採集されるまたは検索されるレコードの総数、採集されるまたは検索されるデータの総量などをメトリクスがを含んでもよい。ストリームを所有するクライアント、またはストリームからデータを生成し、及び/または消費するクライアントに請求される課金額は、使用メトリクスおよびプログラムインターフェイスに関連するそれぞれの課金率に少なくとも部分的に基づいて任意に生成されてもよい(要素1719)。少なくともいくつかの実施形態では、課金アクティビティはストリーム採集/検索操作に対して非同期であってもよい。例えば、月間に収集されたメトリクスに基づいて、請求書が請求月末に生成されてもよい。
図18aは、少なくともいくつかの実施形態による、ストリーム処理(SPS)ステージを構成するために実行されてもよい操作の態様を説明する流れ図である。要素1801に示されるように、クライアントがストリームデータレコードのためのいくつかの処理ステージを構成することを可能にするプログラムインターフェイスが実装されてもよい。特定のステージを構成するために、例えば、ステージにおける分割されたストリームデータレコード上で実行される(1つ以上の)処理操作、処理操作の出力のための分散ポリシー、および、処理されるデータがそこから取得される入力ストリームの識別などの他のパラメータを、クライアントが示してもよい。いくつかの実施形態では、SPSステージにおける処理操作が冪等であるよう要求されてもよい。他の実施形態では、非冪等操作がまた、少なくともいくつかのステージのためにサポートされてもよい。所定のステージにおいて実行される処理が非冪等である場合、いくつかの実施形態において、いくつかの永続的な外部位置へと操作の出力を周期的にフラッシュするワーカーノードを構成し、レコード検索シーケンスに関してフラッシュ操作がいつ実行されたかを記録し、その後回復中にフラッシュ操作をリレーする置換ワーカーノードを構成することによって、クライアントが依然として冪等性による回復関連の利点を得ることができる場合がある。少なくともいくつかの実施形態では、ストリームデータに並列に、また他のステージのための入力ストリームとして利用されているいくつかのステージの結果に作用するいくつかの異なる状態を用いて、クライアントが有向非巡回グラフ(DAG)または処理ステージの他のグラフを構成することができる場合がある。いくつかの実施形態では、永続性ストリームではなく1つ以上の一時ストリームが異なるステージ間で作成されてもよい。例えば、1つのステージからのデータレコード出力は異なるステージへの入力として供給される前に必ずしも永続性記憶装置に記憶される必要はない。
いくつかの実施形態では、例えば、チェックポイントを用いた回復ポリシーまたはベストエフォート型回復ポリシーを含む任意のいくつかの異なる回復ポリシーがSPSステージのために実装されてもよい。1つの実施形態において、クライアントは異なるSPSステージのための回復ポリシーを選択するために、プログラムインターフェイスを利用してもよい。チェックポイントを用いた回復が利用されるステージにおいては、自身がストリームパーティションにおいてどこまで達したかを示す間隔を置いて、ワーカーノードがプログレスレコードまたはチェックポイントを記憶させるよう構成されてもよい(例えば、直近で処理されたレコードのシーケンス番号が進捗のインジケータとして記憶されてもよい)。その後プログレスレコードが障害後の回復操作の間に、図19を参照して以下に述べるように利用されてもよい。ベストエフォート型回復ポリシーにおいては、プログレスレコードが記憶される必要はなく、障害に応じて構成される置換ワーカーノードが、新しいデータレコードを受信されるままに単に処理してもよい。いくつかの実施形態では、所定のSPSステージグラフまたはワークフロー内において、異なる回復ポリシーが異なるステージに適用されてもよい。
SPS制御サーバは、例えば、要素1801に示されるプログラムインターフェイスの1つを介して、ストリームS1の特定のステージPS1において分割ポリシーPPol1に従って実行される冪等操作Op1の指示を出力分布記述子DDesc1に従って分散される処理結果と共に受信してもよい(要素1804)。例えば、pol1、冪等操作Op1の複雑性およびワーカーノードのために利用されるリソースの性能などの様々な要因に基づいて、状態PS1のために構成されるワーカーノード数およびノードのために必要とされる仮想または物理リソースが決定されてもよい(要素1807)。
ワーカーノードがその後、例えば、選択された仮想または物理マシンリソースの処理またはスレッドとしてインスタンス化され構成されてもよい(要素1810)。1つの単純な実装においては、例えば、S1の各パーティションのために1つのワーカーノードが初めに割り当てられてもよい。所定のワーカーノードは、(a)S1の検索ノードの適切なサブセットからデータレコードを受信し、(b)受信されたデータレコード上でOP1を実行し、(c)例えば、PS1のための回復ポリシーに基づいて、どのパーティションレコード群が処理されたかを示すプログレスレコード/チェックポイントを任意に記憶させ、(d)DDesc1によって示される宛先に(例えば、中間の永続性もしくは一時ストリームへの、または他の処理ステージもしくは記憶システムへの直接の入力として)出力を送信する、ように構成されてもよい。少なくともいくつかの実施形態では、SPS処理が他の場所に継続的に送信される必要がある出力を、必ずしも生成しない場合があることに留意されたい。例えば、いくつかのSPSアプリケーションが単にデータレコードの一時的なレポジトリとしての役割を果たしてもよく、及び/またはユーザによるデータレコードの閲覧を可能にするクエリインターフェイスを実装してもよい。そのようなアプリケーションがそれ自体の出力を管理してもよい。例えば、分散記述子に従ってではなく、受信されるクエリに応じて出力が生成されてもよい。ロギング関連のSPSアプリケーションは、大規模分散システムから収集された最終日のログレコードを保持し、例えば、デバッグまたは分析目的でのクライアントによるロギングデータの閲覧を可能にしてもよい。従って、いくつかの実施形態では、SPSの少なくともいくつかのステージのため、少なくともいくつかのストリームのため、または少なくともいくつかのパーティションのために、出力分布記述子を特定する必要がない。ワーカーノードはその後、それらのそれぞれの構成設定ごとのデータレコードの検索および処理を起動してもよい(要素1813)。少なくともいくつかの実施形態では、SPS制御ノードが(例えば、ハートビートプロトコルなどの応答性チェックを利用して)ワーカーノードの健全性状態およびワーカーノードのために利用されているリソースにおけるリソース利用レベルなどの様々な他のメトリクスを監視してもよい(要素1816)。例えば、ワーカーノードが置換され、回復ポリシーが以下に述べるように実装される場合、フェイルオーバーが要求されるかどうかを決定するために、ワーカーノードから収集された情報が利用されてもよい。
いくつかの実施形態では、クライアント所有の敷地において、及び/またはクライアント選択のプロバイダーネットワークのリソースにおいてSPSワーカーノードを実装することを望むこれらのクライアントに、インストール可能なSPSクライアントライブラリが提供されてもよい。クライアントライブラリはまた、健全性モニタリング関数、自動化された作業負荷の監視およびバランシング、セキュリティ管理、動的再分割などのSPS管理サービスの様々な制御プレーン特徴を利用することを自身が望む程度を、SPSクライアントが選択することを可能にしてもよい。図18bは、少なくともいくつかの実施形態による、ストリーム処理ワーカーノードの構成のためのクライアントライブラリのコンポーネントの呼び出しに応じて実行されてもよい操作の態様を説明する流れ図である。要素1851に示されるように、例えば、(図18aで説明する種類の操作を実行するよう構成可能なマルチテナントSPS管理サービスのウェブサイトからのダウンロードを介して)SPSクライアントライブラリが提供されてもよい。クライアントアプリケーションにリンクすることができるいくつかの実行可能コンポーネント、及び/またはコンポーネントをライブラリは含んでもよい。いくつかのライブラリコンポーネントは、クライアントがSPS管理サービスを選択し、それを用いて登録を行うか、または1つ以上のSPSステージのストリーム処理操作が実行される様々なワーカーノードの所望のプロパティを特定することを可能にしてもよい。例えば、あるクライアントがワーカーノードのためにプロバイダーネットワークの仮想計算サービスにおいて実装される自身の計算インスタンス群の利用を望み、一方で別のクライアントがストリームレコードの処理のためにクライアント自体のデータセンターに位置する計算装置(プロバイダーネットワークによってサポートされない専用装置など)の利用を望む場合がある。クライアントは必要に応じて所望の通り、自身の敷地においてワーカーノードをオンラインにするか、または仮想計算サービスの計算インスタンスを利用してもよい。ワーカーノードのそのような所望に応じたインスタンス化に加えてまたはその代わりに、いくつかの実施形態では、クライアントが必要な時に展開することができる潜在的に再利用可能なワーカーノードのプールを予め構成してもよい。いくつかの実装においては、クライアントがSPS管理サービスを用いて、クライアントによってインスタンス化された特定の処理またはスレッドを次に続く制御プレーン操作が、SPS管理サービスによってそのために処理されてもよい特定のステージのワーカーノードとして登録することを可能にするために、ライブラリコンポーネントが実行され、または呼び出されてもよい。1つの実施形態において、クライアントがまた、ワーカーノードのためにSPS管理サービスによって処理される異なるレベルの制御プレーンの役割から選択を行うことが可能であってもよい。例えば、あるクライアントがワーカーノードの健全性を監視するために自身の独自モジュールの利用を望み、一方で障害が検知される場合にワーカーノードの健全性を監視し適切なアクションを行うために、別のクライアントがSPS管理サービスの利用を望む場合がある。
SPS管理サービスは、特定のSPSステージPS1のワーカーノード及び/または制御プレーン操作を構成するためのクライアントライブラリの利用を特定のクライアントが望むことの指示を受信してもよい(要素1854)(ライブラリに含まれるプログラムインターフェイスを利用して、また図4で説明するウェブベースのインターフェイスと同様のSPS管理サービスによって公開されるプログラムインターフェイスを利用して、PS1自体が設計されてもよい)。クライアントはまた、PS1による入力としての利用のためにそのデータが検索されるストリームを示してもよい。少なくともいくつかの実施形態では、例えば、クライアントがノードのためのサービスの健全性モニタリング能力の利用を望むか、または独自健全性モニタリングツールの利用を望むかなどの、PS1のための制御プレーン設定をクライアントが任意に示してもよい。(要素1857)。クライアントによって示される選好により、クライアントによる利用のために構成されるSMS及び/またはSPSの1つ以上のノードが決定されてもよい。(要素1860)。ネットワーク接続性がクライアントのワーカーノード間でSMS/SPSノードへと構築されてもよく、及び/またはデータレコードの流れおよび処理結果を所望の通り可能にするように他の構成操作が実行されてもよい。受信検索要求の際にデータレコードがSP1ワーカーノードに提供されてもよく、また(クライアントに要求されるプレーン操作がある場合には)所望の制御プレーン操作が必要に応じて実行されてもよい。少なくともいくつかの実施形態では、SMS管理サービスの様々なサブシステムの制御プレーン機能の利用を望む程度をクライアントが制御することを可能にする同様の手法もまた、代わりに実装されてもよいことに留意されたい。
図19は、少なくともいくつかの実施形態による、ストリーム処理のための1つ以上の回復ポリシーを実装するために実行されてもよい操作の態様を説明する流れ図である。要素1901に示されるように、SPS制御ノードは、特定のワーカーノードの置換のためのトリガ基準が満たされたと判定してもよい。例えば、ワーカーノードが応答しないまたは不健全な状態になったか、現在のノードの作業負荷レベルがフェイルオーバーの閾値に達したか、ワーカーノードにおいて検知されたエラー数が閾値を超えたか、またはワーカーノードのいくつかの他の予期せぬ状態が識別される場合がある。置換ワーカーノードは識別されるか、またはインスタンス化されてもよい(要素1904)。いくつかの実施形態では、例えば、そこから1つが置換として選択されてもよいか、または新しいスレッドまたは処理が起動されてもよい、利用可能なワーカースレッドのプールが設定されてもよい。
特定のワーカーノードがアクティブであったSPSステージにおいてベストエフォート型回復ポリシーが利用される場合(要素1907において決定されるように)、付加的なデータレコードが利用可能になると、置換ワーカーノードが単に付加的なデータレコードの処理を開始してもよく(要素1916)、例えば、置換されたワーカーノードの進捗のレコードを調べる必要がない。チェックポイントを用いた回復ポリシーが利用される場合、置換ワーカーノードが置換されたワーカーノードによって記憶されるプログレスレコードにアクセスしてもよい位置(例えば、記憶装置アドレスまたはURL)の指示が提供されてもよい。(要素1910)。置換ワーカーノードが置換されたノードによって記憶される最新のプログレスレコードを検索してもよく、置換ワーカーノードがステージの冪等操作を実行するべきデータレコード群を決定するプログレスレコードを利用してもよい(要素1913)。そのようなチェックポイントを用いた回復ポリシーにおいては、最新のプログレスレコードと置換ワーカーノードがインスタンス化される時間との間の長さによって、また、置換されたワーカーノードが記憶されているプログレスレコードに続く付加的なレコードを処理した割合によって、いくつかのデータレコードが2回以上処理されてもよい。少なくともいくつかの実施形態では、実行中の操作が冪等である場合、そのような繰り返し操作には悪影響がない場合がある。少なくともいくつかの実施形態では、前に記憶されたプログレスレコードに基づいて置換ワーカーノードが繰り返し回復操作を実行した後、置換ワーカースレッドが、回復が完了したことを示すそれ自体のプログレスレコードを記憶させてもよく、また、新しく受信されるデータレコード上で通常のワーカースレッド操作を開始してもよい(要素1916)。
図20は、少なくともいくつかの実施形態による、データストリームのための複数のセキュリティオプションを実装するために実行されてもよい操作の態様を説明する流れ図である。要素2001に示されるように、例えば、異なる機能カテゴリのノード(例、採集、記憶、検索、処理または制御ノード)のための配置先タイプのオプションを含む、データストリーム管理および処理のための多様なセキュリティオプションからクライアントが選択を行うことを可能にする1つ以上のプログラムインターフェイスが実装されてもよい。配置先タイプは、セキュリティプロファイルの様々な態様において互いに異なってもよい。いくつかの実施形態において、SMSまたはSPSノードのために利用されるリソースの物理位置は、宛先タイプごとに互いに異なってもよい。例えば、プロバイダーネットワークデータセンターに位置するインスタンスホストなどのリソースがノードのために利用されてもよいか、またはクライアント所有の設備におけるリソースが利用されてもよいか、またはサードパーティのリソースが利用されてもよい。少なくともいくつかの実施形態では、ネットワーク隔離レベルまたは他のネットワーキングの特徴は、宛先タイプごとに互いに異なってもよい。例えば、隔離された仮想ネットワーク、または隔離された専用物理リンクによってプロバイダーネットワークに接続されたクライアント所有の設備内で、いくつかのSMSまたはSPSノードがインスタンス化されてもよい。1つの実施形態において、特定のタイプのSMSまたはSPSノードが同様に利用可能である場合があるマルチテナント・インスタンスホストの利用の代わりにプロバイダーネットワークのシングルテナント・インスタンスホストにおいて構築されることを、クライアントが示してもよい。少なくともいくつかの実施形態では、様々な種類の暗号化オプションもまた、セキュリティ関連のプログラムインターフェイスを介して選択可能である場合がある。
セキュリティ関連のプログラムインターフェイスを介して、ストリームS1のための1つ以上の機能カテゴリのノードに関するクライアントのセキュリティプロファイルの選択または嗜好が受信されてもよい。機能カテゴリFC1のノードのための1つのセキュリティプロファイル(例えば、クライアントがクライアント所有の敷地においてSPSワーカーノードを実装することを望む場合がある)および異なる機能カテゴリFC2のノードのための異なるセキュリティプロファイル(例えば、クライアントがSMS採集ノードまたは記憶ノードをプロバイダーネットワークデータセンターにおいて実装することを望む場合がある)を、例えば、クライアントが選択してもよい(要素2004)。場合によっては、クライアントが同じセキュリティプロファイルを有する異なる機能カテゴリすべてのノードを設定することを決定してもよい。いくつかの実施形態では、SMS及び/またはSPSは、様々な機能カテゴリのためのデフォルトの配置先タイプを定義してもよい。例えば、クライアントが別に示さない限り、機能カテゴリすべてのノードがプロバイダーネットワークの隔離された仮想ネットワーク内で設定されてもよい。
異なる機能カテゴリのノードがその後、セキュリティプロファイル及び/または位置に対するクライアントの選好に基づいて(またはクライアントが選好しない機能カテゴリのためのデフォルトの設定に基づいて)構成されてもよい(要素2007)。例えば、構成については、適切な物理ホストまたはマシンの選択ならびに異なる機能カテゴリのノードのための適切な計算インスタンス、仮想マシン、処理及び/またはスレッドのインスタンス化、ならびノード間の適切なネットワーク接続の構築を行うものであってもよい。いくつかの実施形態では、プロバイダーネットワークの外部のホストにおけるインストールのために、異なるストリーム管理および処理関数のための実行可能ライブラリコンポーネントが提供されてもよい。
少なくともいくつかの実施形態によって、例えば、クライアントが表明した暗号化の選好に従って、またはデフォルトの暗号化設定に基づいて、ノードの1つ以上のカテゴリにおいて暗号化モジュールが起動されてもよい。(要素2010)。その後、様々な機能カテゴリのノードが、クライアントの所望のように、ストリームデータが採集され、記憶され、検索され、及び/または処理されるように、起動されてもよい(要素2013)。
図21は、少なくともいくつかの実施形態による、データストリームのための分割ポリシーを実装するために実行されてもよい操作の態様を説明する流れ図である。要素2101に示されるように、分割ポリシーがデータストリームのために決定されてもよい。例えば、データプロデューサにより供給されたキーに基づいて、または送信されたデータレコードの様々な属性およびデータストリームの再分割のための1つ以上のトリガ基準に基づくデータレコードのパーティションへの初期マッピングを、ポリシーに含めてもよい。いくつかの実施形態では、例えば、ハッシュ関数がパーティションキーまたはキーに適用され、128ビットの整数のハッシュ値を供給してもよい。潜在的な128ビットの整数の範囲は、それぞれがストリームのN個のパーティションの1つを表すN個の連続したサブレンジに分割されてもよい。いくつかの実施形態では、パーティション数及び/またはサブレンジの相対的な大きさがストリームごとに互いに変化してもよい。少なくともいくつかの実施形態では、そのためにストリームが構成されるクライアントが、例えば、所望のパーティション数、または利用される分割関数の所望の特徴などの利用される分割スキームに関する入力を提供してもよい。少なくとも1つの実施形態において、クライアントがいくつかのサブセットまたは送信されたすべてのデータレコードのためのパーティション識別子または名称を提供してもよい。
ストリームのデータレコードが受信されると、供給されるキー及び/または他の属性に基づいてそれらのそれぞれのパーティションが決定されてもよく、また適切な採集、記憶および検索ノード群が識別されたパーティションのために選択されてもよい(要素2104)。少なくともいくつかの実施形態では、例えば、所定のパーティションのレコードが受信されたシーケンスを示すデータレコードのためにそれぞれのシーケンス番号が生成されてもよい(要素2107)。シーケンス番号は、いくつかの実装において、タイムスタンプ値(例えば、1970年1月1日00:00:00AM UTCなどの周知の日時から経過した秒数)、記憶サブシステムから取得されたサブシーケンス値、SMSソフトウェアのバージョン番号、及び/またはパーティション識別子などのいくつかの要素を含んでもよい。いくつかの実施形態では、例えば、送信されたデータレコードの成功した採集に応答するために、シーケンス番号がデータプロデューサに提供されてもよい。いくつかの実施形態では、シーケンス番号はまた、データコンシューマによって、ストリームまたはパーティションのデータレコードを採集順に検索するために利用されてもよい。
少なくともいくつかの実施形態では、データレコードはそれらが向けられる記憶ノードにおいて、分割ポリシーに基づきシーケンス番号順に記憶されてもよい(要素2110)。回転式磁気ディスク記憶装置が利用される実施形態においては、順次書き込みは通常、受信されたデータレコードをディスクに保存し、それによってディスクシークのレイテンシを回避するために利用されてもよい。少なくともいくつかの実装において、レコードをディスクへ記憶する前に不揮発性バッファが、例えば、ディスクシークの可能性をさらに削減するために書き込みキャッシュとして利用されてもよい。シーケンス番号によって順序付けられた複数のデータレコードの読み出しのための要求(例、getNextRecordsまたは同様のインターフェイスの呼び出し)に応じて、データレコードが後に記憶装置からの順次読み出しを利用して読み出されてもよい(要素2113)。
図22は、少なくともいくつかの実施形態による、データストリームの動的再分割を実装するために実行されてもよい操作の態様を説明する流れ図である。要素2201に示されるように、(例えば、SMSまたはSPSの制御コンポーネントにおいて)ストリームが動的に再分割されることが判定されてもよい。1つ以上の採集、記憶、検索、処理または制御ノードにおける過負荷の検知、または異なるノードの作業負荷レベルの不均衡の検知、またはクライアント(例、データプロデューサまたはデータコンシューマ)から受信されてもよい再分割要求などのいくつかの異なるトリガする条件が、ストリームを再分割するための決定につながってもよい。いくつかの実装において、クライアント再分割要求は、生成される修正されたマッピングの様々なパラメータなどの要求される再分割の特定の詳細(例、追加されるまたは取り除かれるパーティション数、どの特定のパーティションが組み合わせられるか、または分割されるかなど)を含んでもよい。1つの実装において、クライアント再分割要求は、クライアントが解決することを望む問題状態(負荷の不均衡など)を示してもよく、SMSまたはSPSが問題状態の記述の適切な再分割操作への翻訳の役割を担ってもよい。場合によっては、再分割の要求または問題状態の記述の代わりに、クライアントが再分割のために利用されるトリガ基準を特定してもよい。いくつかの実施形態では、データストリームのデータ持続性要件を変更する決定が再分割をトリガすることがある。それにより、例えば、結果的にストリームレコードのために異なる記憶装置群または異なる記憶技術が選択されてもよい。場合によっては、データストリームの利用パターンの変更(例えば、データレコードが生成されるまたは消費される割合)の検知もまた再分割につながってもよく、また利用パターンの変更のためにより適切な異なる記憶技術または異なる記憶装置群の利用につながってもよい。例えば、再分割の決定は、所定のパーティションまたはストリーム全体の予想される読み書きの割合のために、SSDが回転式磁気ディスクよりも適切な記憶技術であってもよいという決定に基づいてもよい。1つの実施形態においては、スケジュールされた、または差し迫ったソフトウェア及び/またはハードウェアバージョン変更が再分割をトリガしてもよい。場合によっては、異なる分割手法または異なる記憶手法を利用して、より効率的に満たすことができる予算の都合をクライアントが示す際に、価格または請求への懸念が再分割をトリガしてもよい。少なくともいくつかの実施形態では、変更された性能目標がまた、再分割をトリガしてもよい。図22に示される実施形態では、再分割後に割り当てられたシーケンス番号のために利用される初期タイムスタンプ値(1970年1月1日00:00:00AM UTCからの秒のオフセット、いくつかのオペレーティングシステムにおいてシステム呼び出しを介して通常利用可能であるエポック値など)が選択されてもよい(要素2204)。いくつかの実装においては、プロバイダーネットワークにおいて実装されるグローバル状態マネージャが、getEpochValue APIをサポートし、例えば、シーケンス番号生成のために利用される一貫したタイムスタンプ値をSMS及び/またはSPSの様々なコンポーネントが取得することを可能にしてもよい。他の実装においては、他の時刻源が利用されてもよい。例えば、SMSまたはSPS制御ノードが一貫して順序付けられたタイムスタンプ値を他のコンポーネントに提供するために指定されてもよいか、またはローカルシステムコール呼び出しが利用されてもよい。いくつかの実施形態では、タイムスタンプ値は必ずしもどのような特定のホストにおける壁時計時刻にも対応する必要はない。例えば、単調増加する整数のカウンタ値が単純に利用されてもよい。
再分割決定時に利用されるマッピングとは異なる修正されたパーティションマッピングがストリームのために生成されてもよい(要素2207)。少なくともいくつかの実施形態では、変更されたマッピングが、再分割前にマッピングされた同じキーを有するデータレコードではなく特定のパーティションキーを有するデータレコードを異なるパーティションへとマッピングしてもよい。再分割のためのトリガする条件によって、及び/または監視された作業負荷メトリクスによって、いくつかのパーティション(通常、多用されるパーティション)が分割されてもよく、一方で他の(通常、やや利用される)パーティションが組み合わせられてもよい。いくつかの実施形態では、再分割後に再分割前とは異なる分割関数が利用されてもよい。例えば、異なるハッシュ関数、またはハッシュ関数結果のパーティションへの再分割の異なる手法が利用されてもよい。例えば、パーティションが128ビットの整数の連続範囲に対応するいくつかの実装においては、再分割後に128ビットの整数空間が異なるサブレンジ群に分割されてもよい。少なくともいくつかの実施形態では、新しい採集、記憶、検索、処理または制御ノード群が新しく作成されたパーティションに割り当てられてもよい。いくつかの実装においては、初期マッピングおよび修正されたマッピングの両方を表すために空間効率よく組み合わせられたデータ構造が利用されてもよい(要素2208)。再分割の結果として修正されたパーティションに対応するレコードのみを変更すればよいように、例えば、分割関数の出力範囲(例えば、所定のパーティションに対応する分割ハッシュ関数の結果の範囲)および有効時間範囲の指示を各エントリが含む有向非巡回グラフまたはツリー構造が記憶されてもよい。再分割の間に変更されないままでいるパーティションのためのエントリは、データ構造において修正される必要がない場合がある。新しいノードは、修正されたパーティションマッピングを実装するよう構成されてもよい(要素2210)。少なくともいくつかの実施形態では、前のマッピングに基づいて記憶されるデータレコードのための検索要求が少なくともしばらくの間は受信され続けてもよいため、前のノードおよび前のマッピングがしばらくの間保持されてもよい。特定のシーケンス番号またはタイムスタンプを特定する読み出し要求が受信される際(要素2213)、(例えば、制御ノードにおいてか、または検索ノードにおいて)新しいパーティションマッピングまたは前のパーティションマッピングのどちらを利用して読み出し要求を満たすかに関する決定が行われてもよい。選択されたマッピングがその後、要求されるデータが取得された適切な記憶ノードを識別するために利用されてもよい。
図23は少なくともいくつかの実施形態による、データストリームレコードのための少なくとも1回のレコード採集ポリシーを実装するために実行されてもよい操作の態様を説明する流れ図である。要素2301に示されるように、例えば、(a)それに従って肯定応答が受信されるまでレコードサブミッタがレコードを1回以上送信する少なくとも1回のポリシー、または(b)それに従って少なくともいくつかのレコード送信のための応答が提供されないベストエフォート型採集ポリシー、を含めたいくつかの採集ポリシーオプションからクライアントがデータストリームのためのレコード採集ポリシーを選択することを可能にするために、1つ以上のプログラムインターフェイスが実装されてもよい。いくつかのデータを作成するクライアントは自身のレコードのごく一部を喪失する可能性に関して他のクライアントほどには懸念しない場合があり、従って、ベストエフォート型採集手法を選ぶことがある。いくつかの実装においては、ベストエフォート型採集のために構成されるストリームについても、SMSが依然としてデータレコードのいくつかのサブセットのための応答を提供してもよいか、またはベストエフォート型ポリシーがすべてのデータレコードのための応答を要求しなくても、すべてのデータレコードのための応答の提供を試みてもよい。
特定のストリームのために利用される特定の採集ポリシーを示すプログラムインターフェイスの1つを介して、要求が受信されてもよい(要素2304)。ストリームのために有効である分割ポリシーに従って、採集ノードがインスタンス化されてもよい(要素2307)。採集ノードにおいて同じデータレコードの1つ以上の送信が受信される際に(要素2310)、有効である採集ポリシーに依存して異なるアクションが行われてもよい。(要素2313において判定されるように)少なくとも1回の採集ポリシーが利用されている場合、1つ以上の送信のそれぞれのために応答がデータプロデューサにに送信されてもよいが、データレコードが記憶サブシステムにおいて1回だけ保存されてもよい(2316)。(場合によってはストリームのために有効である永続性ポリシーに従って、所定のレコードのN個のレプリカが記憶されてもよいが、所定のデータレコードがM回送信される場合、1回の送信のみのために複数のレプリカが生成されてもよく、すなわち記憶されるレコードレプリカの総数がN×M個ではなく依然としてN個であってもよいことに留意されたい)(要素2313で同様に検知されるように)ベストエフォート型採集ポリシーが有効であった場合に、データレコードが依然として記憶装置に1回保存されてもよいが、データプロデューサに応答が送信される必要はない(要素2319)。少なくともいくつかの実施形態では、クライアントの課金額が任意に決定されてもよい(要素2322)。上述のようにいくつかの実施形態では、少なくとも1回の採集ポリシーの2つのバージョンがサポートされてもよい。1つのバージョンでは、図23で説明するのと同様に、SMSがデータレコードの重複を排除する(すなわち、2つ以上の送信群の1つのみに応じて、データがSMS記憶サブシステムにおいて確実に記憶されるようにする)役割を担ってもよい。少なくとも1回の採集の異なるバージョンにおいては、データレコードのSMSによる重複が許可されてもよい。データレコードの重複の否定的な結果がほとんどあるいはまったくないストリームアプリケーションにとって、及び/または自身の重複削除を実行するストリームアプリケーションにとって、後者の手法が有用である場合がある。
図24は、少なくともいくつかの実施形態による、データストリームのための複数の永続性ポリシーを実装するために実行されてもよい操作の態様を説明する流れ図である。要素2401に示されるように、クライアントがストリームデータレコードのための永続性ポリシーを複数の永続性ポリシーから選択することを可能にする1つ以上のプログラムインターフェイスが実装されてもよい。様々な観点のいずれかにおいて、永続性ポリシーは互いに異なってもよい。例えば、(a)保存されるレプリカ数が異なってもよく(例、N個のレプリカ対2つのレプリカ対単一のレプリカのポリシーがサポートされてもよい)、(b)利用される記憶位置/装置タイプが異なってもよく、(例、回転式磁気ディスク対SSD対RAM対データベースサービスまたはマルチテナント記憶サービス)及び/または(c)大規模障害に対する障害回復力の予想される程度に関するポリシーが異なってもよい(例えば、複数のデータセンター対単一のデータセンターのポリシーがサポートされてもよい)。特定のストリームのための特定の永続性ポリシーのクライアントの選択を示す要求が受信されてもよい(要素2404)。いくつかの実施形態では、クライアントによって選択される永続性ポリシーが結果的に所定のストリームのそれぞれのパーティションのための異なる記憶位置タイプまたは装置タイプの利用につながってもよい。1つの実施形態において、クライアントではなくSMSが記憶位置タイプまたは装置タイプをストリームレベルでまたはパーティションレベルで選択してもよい。いくつかの実施形態では永続性ポリシーの選択時に、クライアントがデータの持続性目標及び/またはパフォーマンス目標(所望の読み出しもしくは書き込み処理能力またはレイテンシなど)をいくつかの実施形態では示してもよく、またこれらの目標は適切な記憶装置タイプまたは位置を選択するためにSMSによって利用されてもよい。例えば、低レイテンシが所望される場合、1つ以上のパーティションまたはストリームのデータレコードを記憶させるために回転式磁気ディスクの代わりにSSDが利用されてもよい。
採集ノード群が選択されたストリームのデータレコードをデータプロデューサから受信するように決定されるか、または構成されてもよく、記憶ノード群が選択された永続性ポリシーを実装するよう構成されてもよい(要素2407)。データレコードが採集ノードにおいて受信される際に(要素2410)、データレコードが属するパーティションの役割を担う記憶ノードによって選択された記憶装置において選択された永続性ポリシーに基づき、データレコードの1つ以上のコピーが記憶されてもよい(要素2413)。少なくともいくつかの実装においては、クライアントによって選択された特定の永続性ポリシーに基づいて、課金額が任意に(及び/または非同期に)決定されてもよい(要素2416)。
ストリーム処理のための分散作業負荷の管理
いくつかの実施形態では、例えば、様々な制御操作(パーティションのワーカーノードへの割り当て、動的再分割への応答、健全性モニタリング及び/またはロードバランシングなど)を調整する所定のSPSステージ内のワーカーノードによって、データベーステーブルなどの共有されたデータ構造を介して、SPSの制御プレーン機能の大部分またはすべてが分散的方法で実装されてもよい。例えば、ステージの入力ストリーム(もしあれば)のどのパーティションが現在処理されていないかを判定するために。所定のワーカーノードW1が共有されたデータ構造内のエントリを調べてもよい。そのようなパーティションP1が発見される場合、W1がP1のレコード上でステージの処理操作を実行することを示すためにW1が共有されたデータ構造内のエントリを更新してもよい。他のワーカーノードがP1レコードを処理するためにW1が割り当てられることを認識してもよく、またそれによって異なるパーティションを自身に割り当ててもよい。入力ストリームに有効である現在のパーティションマップを決定するためにワーカーノードが周期的にまたは時にクエリをSMS制御プレーンに送信してもよい。また、必要に応じてマップの変更を(例えば、再分割結果として)示すために共有されたデータ構造を更新してもよい。様々な実施形態において、以下に述べるようにロードバランシングおよび他の操作がまた、共有されたデータ構造を介して調整されてもよい。そのようないくつかの分散実装において、専用制御ノードがSPSのために要求されず、そのためにSPSワークフローを実装するために求められるオーバーヘッドが削減される場合がある。そのような分散SPS制御プレーンの実装が特に、例えば、顧客に割り当てられるプロバイダーネットワーク内の計算インスタンスにおける、またはプロバイダーネットワーク外の位置における、ストリーム処理の様々な態様を実装するためにSPSクライアントライブラリを利用する、予算を気にする顧客に人気が高い場合がある。例えば、SMSおよびSPSのために利用されるすべてのリソースがプロバイダーネットワーク内で構成される場合にクライアントライブラリが利用されない実施形態において、分散SPS制御プレーン技術がまた利用されてもよい。少なくともいくつかの処理ステージのためにワーカーノードがSPS制御プレーン関数の一部または全部を実装するSPSは、本明細書において「分散制御SPS」と称する場合がある。
図25は、少なくともいくつかの実施形態による、処理ステージのワーカーノードがデータベーステーブルを利用してそれらの作業負荷を調整するストリーム処理システムの実施例を説明する。分散制御SPS2590内で、2つのステージ215Aおよび215Bの各々が、それぞれのワーカーノード群と共に定義される。ステージ215Aはワーカーノード2540Aおよび2540Bを含み、一方でステージ415Bがワーカーノード2540Kおよび2540Lを含む。ステージ215Aおよび215Bのそれぞれのために、ステージ215AのためのPAテーブル2550Aおよびステージ215BのためのPAテーブル2550Bなどの対応するパーティション割り当て(PA)テーブル2550がデータベースサービス2520において作成される。いくつかの実施形態では、例えば、クライアントライブラリコンポーネントまたは関数の呼び出しに応じて、ステージの初期化中に所定のステージのためのPAテーブル2550が作成されてもよい。各PAテーブル2550はエントリの初期セットまたはステージの入力ストリームの割り当てられないパーティション(すなわち、ワーカーノードが現在割り当てられていないパーティション)を表す行を与えられてもよい。PAテーブルエントリの例示的な列または属性を図26に示し、以下に述べる。ステージのために起動されるワーカーノード2540(例、計算インスタンスまたは他のサーバにおいて起動される処理またはスレッド)は、ステージのPAテーブルへの読み書きアクセスを許可されてもよい。図25において、ワーカーノードからPAテーブルに向けられた読み書きが矢印2564A、2564B、2564Kおよび2564Lによって、ワーカーノード2540A、2540B、2540Kおよび2540Lのそれぞれのために表される。
PAテーブルにおいてエントリを検証することで、所定のワーカーノード2540がステージの処理操作を実行するための特定のパーティションを選択するよう構成されてもよい。1つの実装においては、ワーカーノード2540Aは、割り当てられないパーティションPkのエントリを発見するまでPAテーブル2550Aにおいて、エントリをスキャンしてもよく、例えば、ワーカーノードの識別子をエントリの列に1つに挿入することによってエントリを更新してパーティションPkのそれ自体への割り当てを試みてもよい。そのような挿入はワーカーノードによるパーティションのロックに類似していると見なされる場合がある。利用中のデータベースサービスのタイプによって、PAテーブルエントリへの同時並行的書き込みを潜在的に管理するための異なる手法が(例えば、割り当てられないパーティションをほぼ同時に識別することになる2つ以上のワーカーノードによって)利用されてもよい。
1つの実施形態において、関係するデータベースのトランザクション・セマンティクスを必ずしもサポートすることなく強い整合性および条件付き書き込み操作をサポートするプロバイダーネットワークの無関係なマルチテナントデータベースサービスが利用されてもよい。ワーカーノードによる更新のためのそのような場合には、条件付き書き込み操作が利用されてもよい。列「worker−node−ID」がPAテーブルにおいてパーティションに割り当てられる特定のワーカーノードの識別子を示すために利用され、ワーカーノードがパーティションに割り当てられない場合に列の値が「null」に設定される実施例について考慮する。そのようなシナリオにおいては、識別子WID1を有するワーカーノードが以下の論理的等価物を要求してもよい。「パーティションPkのためのエントリにおいて、worker−node−IDがnullである場合、その後そのエントリのためのworker−node−IDをWID1に設定する」そのような条件付き書き込み要求が成功する場合、パーティションPkがそれに割り当てられると識別子WID1を有するワーカーノードが仮定してもよい。ワーカーノードはその後、例えば、SMS検索サブシステム206のレコード検索インターフェイスを利用して、矢印2554(例えば、ワーカーノード2540A、2540B、2540Kおよび2540Lそれぞれのための矢印2554A、2554B、2554Kおよび2554L)によって示されるようにパーティションPkのデータレコードの検索および検索されるレコード上の処理操作の実行を開始してもよい。条件付き書き込みが失敗する場合には、ワーカーノードが異なる割り当てられないパーティションの検索を再開してもよい。他の実施形態では、例えば、パーティションをワーカーノードに割り当てる複数の同時並行的(または同時並行的に近い)試みの1つのみが成功し、そのような同時並行的試みに関与するワーカーノードがそれらの成功または障害について確実に知らされるように万全を期すために、トランザクションをサポートするデータベースサービス(関係するデータベースなど)が利用されてもよく、条件付き書き込み操作の等価物を実装するためにトランザクション機能が利用されてもよい。いくつかの実施形態では、条件付き書き込みにもトランザクションのサポートにも依拠しない同期技術が利用されてもよい。いくつかの実装において、PAテーブルに類似している永続性データ構造においてエントリの更新のための排他アクセスを取得するためにデータベースサービスが利用されず、代わりにロッキングサービスがワーカーノードによって利用されてもよい。
他のワーカーノード2540がPAテーブルにおいてエントリを調べて、どのパーティションが割り当てられないかを判定してもよく、また最終的に1つ以上のパーティションをそれらに割り当てることに成功してもよい。この方法で、ステージの入力ストリームまたはストリームのパーティションのための処理作業負荷がそれらの間でステージのワーカーノードによって最終的に分散させられてもよい。
所与のストリームの初期パーティションマッピングは、例えば、上述の動的再分割操作の結果として時間の経過と共に変化してもよい。従って図25に示す実施形態において、1つ以上のワーカーノード2540が時に(以下に述べるように、またはトリガする条件に応じて)要求を、現在のパーティションメタデータを取得するためにそれらのステージの(1つ以上の)入力ストリームのSMS制御サブシステム210へと送信してもよい。いくつかの実装においては、矢印2544A、2544B、2544Kおよび2544Lによって示されるgetStreamInfo APIの呼び出しなどのSMS制御プレーンAPIの呼び出しをそのような要求が含んでもよい。SMS制御サブシステムは、例えば、ストリームのパーティションの最新のリスト、及び/またはパーティションの有効時限などの他の詳細に応答してもよい。SMS制御サブシステム210によって提供されるパーティション情報がPAテーブルにおけるエントリと一致しない場合、例えば、1つ以上のパーティションのためのエントリを挿入するかまたは削除することでPAテーブルがワーカーノードによって修正されてもよい。少なくともいくつかの実施形態では、矢印2554Aのラベル「低頻度」によって示されるように、そのようなSMS制御サブシステムへの要求2554がレコード検索要求2554(及び/またはデータベースの読み出しもしくは書き込み操作2564)よりも通常はるかに頻繁である可能性がある。例えば、一度パーティションに割り当てられると、ワーカーノードは通常、パーティションデータが完全に消費されるまで(例えばストリームの所有者がストリームを閉じる場合、または動的再分割の結果としてパーティションが閉じられる場合)、または他のいくつかの可能性が低い状況に直面するまで(例えば、以下に述べるように、検知された負荷の不均衡のために異なるワーカーノードがパーティションの転送を要求する場合)、パーティションのデータレコードの検索および処理を継続してもよい。従って、様々な実施形態において、所与の呼び出しに応じて大量の情報が提供される場合であっても(数百または数千のパーティションがステージの入力ストリームのために定義される場合にありうるものとして)、getStreamInfoまたは同様のAPIの呼び出しに関連するオーバーヘッドは通常、極めて小さくてもよい。
従って、図25に示す実施形態において、分散制御SPS環境のいくつかのキー作業負荷の管理操作は、以下のように要約される。(a)ストリーム処理ステージの第1のワーカーノードによるデータベーステーブルへのアクセスに少なくとも部分的に基づく、そのステージのために定義される処理操作群を実装するためのストリーム処理ステージの入力データストリームの特定のパーティションの選択、(b)特定のパーティションの第1のワーカーノードへの割り当てのインジケータの、テーブルに記憶される特定のエントリへの書き込み、(c)マルチテナントストリーム管理サービスにおいて実装されるプログラムレコード検索インターフェイスを利用した、第1のワーカーノードによる特定のパーティションのレコードの検索、(d)第1のワーカーノードによる処理操作群の、特定のパーティションのレコード上での実装、(e)第2のワーカーノードによる、特定のデータベーステーブルにおける特定のエントリに少なくとも部分的に基づく、処理操作群の特定のパーティション上での実行のために第1のワーカーノードが割り当てられることの判定、および(f)第2のワーカーノードによる、処理操作群を実行するための異なるパーティションの選択。ワーカーノードが、それに割り当てられるパーティションにレコードがこれ以上とどまらないことをが判定する場合、ワーカーノードはSMS制御サブシステムの入力ストリーム上のメタデータを要求してもよく、またメタデータが矛盾を示す場合にはPAテーブルを更新してもよい。
図26は、少なくともいくつかの実施形態による、作業負荷調整のためにパーティション割り当てテーブル2550に記憶されてもよい例示的なエントリを説明する。図示のように、テーブル2550は、パーティション識別子列2614、割り当てられるワーカーノード識別子列2618、ワーカーノード健全性インジケータ列2620および作業負荷レベルインジケータ列2622の4つの列を含んでもよい。他の実装においては、他の列のセットが実装されてもよい。いくつかの実施形態では、例えば、パーティション作成時間または分割関数の出力値範囲を示す列が利用されてもよいか、または作業負荷レベルインジケータ列が利用されない場合がある。
いくつかの実施形態では、SMS制御サブシステムによって(例えば、上述のように、パーティションエントリツリー、グラフまたは他の組み合わせられたデータ構造の一部として)維持されるパーティションリスト2650が少なくともいくつかの時点において、PAテーブル2550に含まれるよりも多くのパーティションを含んでもよいことに留意されたい。示される実施例において、パーティションリスト2650はパーティションP1、P2、P3、P4およびP5を含み、P1およびP4は再分割の結果として閉じられた状態で示され、一方でP2、P3およびP5がアクティブ(すなわち、データレコードが現在検索され、処理されているパーティション)として示される。図示する実施形態においては、PAテーブル2650はアクティブなパーティションのためのエントリを含み、(例えば、再分割が行われた後getStreamInfoの呼び出しへの応答を取得した時にワーカーノードによって削除された可能性があってもよい)閉じられたパーティションのためのエントリを含まない。少なくともいくつかの実装においては、ストリームの現在開いているすべてのパーティションが所定の時点で必ずしもPAテーブルにおいてそれぞれのエントリを有さない場合があってもよく、代わりに、例えば、現在割り当てられるか、または処理されているこれらのパーティションのサブセットのみが表されてもよい。
図26で説明する例示的なシナリオにおいては、パーティションP1およびP2が識別子W7およびW3それぞれを有するワーカーノードに割り当てられ、一方でP5は現在割り当てられていない。健全性インジケータ列2620は、異なる実装において異なるタイプの値を記憶させてもよい。いくつかの実装においては、ワーカーノードがアクティブであり、それらの検索および処理操作を行えることを示すために、それらの割り当てられるパーティションのPAエントリにおける健全性インジケータ列の内容を周期的に(例えば、N秒ごとに、またはいくつかのヒューリスティック群に基づくスケジュールに応じて)更新する役割をワーカーノードが担ってもよい。図26において、そのエントリのためのワーカーノードが健全性インジケータ列(「last−modified−time」)を更新した最新時間の指示が記憶されてもよい。例えば、ワーカーW7が2013年12月1日の02:24:54.53秒においてエントリを修正したとしてが示される。いくつかの実施形態では、割り当てられるワーカーノードが健全かまたはそうでないかを判定するために他のワーカーノードが最新修正時間値を利用してもよい。例えば、X秒または分が経過した場合、ステージのためのフェイルオーバーポリシーにおいて定義されるように、割り当てられるワーカーノードが不健全またはアクセス不可能であると仮定される場合、パーティションが再度割り当てられてもよい。他の実装においては、カウンタが健全性インジケータとして利用されてもよいか(例えば、カウンタ値がY秒の間に変更されない場合、割り当てられるワーカーノードがフェイルオーバーの候補であると見なされてもよい)、または割り当てられたワーカーノードがエントリを最後にいつ読み出したかを示す「last−read−time」値が利用されてもよい。
少なくともいくつかの実施形態では、例えば、割り当てられたワーカーノードによって、いくつかの最新の時間間隔(例えば、最新修正時間の5分前に)の間に処理されるレコード数、CPU利用、メモリ利用、記憶利用などの最新のパフォーマンス関連のワーカーノードのメトリクスなどの作業負荷レベルインジケータ値2622がエントリにおいて記憶されてもよい。いくつかの実施形態では、図29を参照して以下に述べるように、負荷の不均衡が存在するかどうかを判定するために、また検知された不均衡に応じてアクションを取るために、そのような作業負荷レベルインジケータ値がワーカーノードによって利用されてもよい。例えば、ワーカーノードWkがその作業負荷レベルが平均的な作業負荷レベルを超えると判定してもよく、そのパーティションの1つに割り当てなくてもよく、または動的再分割を要求してもよい。また代替的に、ワーカーノードWkがその作業負荷が他のワーカーノードまたはパーティションの作業負荷に対して低すぎると判定してもよく、付加的なパーティションをそれ自体に割り当ててもよい。従って、図示する実施形態においては、図26で示されるPAテーブルの列を利用して、集中制御SPS実装における専用SPS制御ノードによって通常実行されてもよい、いくつかの同じタイプの制御プレーン関数をワーカーノードが実行してもよい。
図27は、少なくともいくつかの実施形態による、ストリーム処理ステージのワーカーノードによって、処理操作を実行するためのパーティションの選択のために実行されてもよい操作の態様を説明する。要素2701に示されるように、PAテーブルPAT1はデータベースサービスにおいて分散制御SPS処理ステージSP1のために初期化されてもよい。例えば、SPSクライアントライブラリコンポーネントが呼び出される際に、例えば、クライアント設備におけるホストから、またはプロバイダーネットワークデータセンターにおける計算インスタンスからテーブルが作成されてもよい。例えば、SPSステージにおいて実装される特定の処理操作のためのJAR(Java(商標)アーカイブ)ファイルなどの実行可能コンポーネントを提供し、ワーカーノードを識別するために利用してもよいラベル(プログラム名、処理名または計算インスタンス名など)を示し、ステージのための入力として利用されるストリームを示し、ステージの出力先(もしあれば)を示すなどの様々な目的のためにクライアントライブラリが利用されてもよい。いくつかの実施形態では、ステージの(1つ以上の)入力ストリームのために定義される、少なくともパーティションのサブセット{P1、P2、・・・}のためにPAT1が初めにエントリまたは行を与えられてもよい。いくつかの実装においては、テーブルが初めは空のままであってもよく、1つ以上のワーカーノードが割り当てられないパーティションのための行を、例えば、パーティションのメタデータのSMS制御サブシステムからの取得結果としてテーブルに与えてもよい。例えば、プロバイダーネットワーク内の様々な計算インスタンスにおいて、またはクライアント所有の計算装置において、ワーカーノードの初期セット{W1、W2、・・・}が起動されてもよい(要素2704)。図示する実施形態においては、ワーカーノードはPAT1への読み書きアクセスを許可されてもよい。
ワーカーノードがオンラインになると、割り当てられないパーティションを発見しようと試みるために、それらがそれぞれPAT1にアクセスしてもよい。例えば、ワーカーノードW1がPAT1を調べ、パーティションP1が割り当てられないことを発見してもよい(要素2707)。例えば、利用されるデータベースサービスのタイプにより、条件付き書き込み要求またはトランザクションの更新要求を利用してP1がW1に割り当てられることを示すために、W1がその後P1のエントリをPAT1において更新してもよい(要素2710)。テーブルが更新されると、SMS検索サブシステムインターフェイスを利用してW1がP1のデータレコードの検索を起動してもよく(要素2713)、検索されるレコード上でステージPS1の処理操作を実行してもよい。
一方で、いくつかの時点において、異なるワーカーノードW2が、割り当てられないパーティションを発見する自身の試みにおいてPAT1にアクセスしてもよい(要素2716)。W2はW1の前の更新に基づいて、P1がすでに割り当てられているが、異なるパーティションP2が割り当てられていないと判定してもよい。いくつかの実施形態では、W2による(例えば、P2のエントリ内の健全性インジケータ列に基づく)、P2の現在割り当てられているワーカーノードが不健全または非アクティブであることの判定がまた、W2にP2を選択させてもよい。従って、少なくともいくつかの実施形態では、割り当てられない状態または現在のワーカーノードの不健全な状態の判定が、再割り当て(または初期割り当て)のための所定のパーティションの選択のために利用されてもよい。W2がその後、P2をそれ自体に割り当てるためにPAT1の更新を試みてもよい(要素2719)。更新が成功する場合、W2がSMS検索インターフェイスを利用してP2のレコードの検索を開始し(要素2722)、ステージのために定義される適切な処理操作を実行してもよい。
上述のように、分散制御SPSにおけるワーカーノードは(通常、低頻度で)パーティションマッピング情報をSMSから取得し、必要であればPAテーブルを更新するためにそのような情報を利用してもよい。図28は、少なくともいくつかの実施形態による、ストリーム処理ステージのワーカーノードによって、ストリーム管理サービス制御サブシステムから取得した情報に基づいてパーティション割り当てテーブルを更新するために実行されてもよい操作の態様を説明する。要素2801に示されるように、ワーカーノードの初期化中に、またはそれに割り当てられるパーティションの1つの終了などのトリガする様々な条件に応じて、最新のまたは現在のパーティションリスト、またはアクティブパーティションリストを取得するために、ワーカーノードW1が要求をSMS制御サブシステムに送信してもよい。いくつかの実装においては、getStreamInfoまたは同様のAPIがこの目的のために呼び出されてもよい。いくつかの実施形態では、他のトリガする条件が利用されてもよい。例えば、ワーカーノードがそれぞれ、ランダムな時間の後に、または作業負荷レベルの予期せぬ下落もしくは上昇に応じて、新しいパーティションリストを取得するよう構成されてもよい。SMSによって戻されたパーティションリストは、パーティションのためのPAテーブルにおけるエントリと比較されてもよい(要素2807)。図示する実施形態においては、矛盾が発見される場合(例えば、新しく取得されたパーティションリストにPAテーブルにはないいくつかのパーティションがある場合、またはSMSのリストにはないエントリがPAテーブルにある場合)、矛盾を解決するためにワーカーノードがPAテーブルにおけるエントリを挿入するか、または削除してもよい(要素2810)。(いくつかの実装において、削除を目標としたエントリが割り当てられるワーカーノードを現在有している場合、付加的な調整が要求されてもよい。例えば、直接またはPAテーブル自体を介して、割り当てられるワーカーノードが通知されてもよい)。
矛盾が修正された後、または矛盾が検知されなかった場合、ワーカーノードW1がステージの処理操作を実行すべきパーティション群を選択してもよく(要素2813)、またそれに従ってPAテーブルを更新してもよい。場合によっては、検索されるパーティションリストにつながったトリガする条件によって、それに割り当てられる1つ以上のパーティションをW1がすでに有している可能性があり、その割り当てに変更を加えるか、またはPAテーブルを更新する必要がない場合がある。W1はその後、SMS制御サブシステムと対話するか、またはエントリ数をPAテーブルにおいて変更する必要なく、それに割り当てられる1つ以上のパーティションのデータレコードの検索およびレコードの処理に進んでもよい(要素2816)。最終的にトリガする条件が検知される際に(例えば、「パーティションの終わりに達しました」との応答の等価物が検索要求まで受信され、パーティションが閉じられたことを示す場合)、W1は新しいパーティション情報を求める要求を再度SMS制御サブシステムに送信してもよく、要素2801以降の操作が繰り返されてもよい。
図29は、少なくともいくつかの実施形態による、ストリーム処理ステージのワーカーノードによって実行されてもよいロードバランシング操作の態様を説明する。要素2901に示されるように、高いリソース利用レベルの検知などの多様なトリガする条件のいずれかの検知時に、または構成可能なスケジュールに基づいて、ロードバランシング分析がそのステージ上で実行されることをワーカーノードW1が判定してもよい。W1は、PAテーブルにおけるエントリを調べ(要素2904)、ステージのための様々な作業負荷メトリクスを決定してもよい。そのようなメトリクスは、ワーカーノードに割り当てられる平均的な数のパーティション、(作業負荷レベルインジケータがテーブルに保存される実施形態における)ワーカーノードの、または異なるパーティションの平均的な作業負荷レベル、ワーカーノードごとの作業負荷の範囲または分散などを含んでもよい。
W1はその後、(例えば、W1に割り当てられるパーティション数、及び/またはパーティションごとの作業負荷レベルインジケータに基づいて)それ自体の作業負荷をメトリクスの一部または全部と比較してもよい。一般に、W1が過負荷であるか、W1が低負荷であるか、またはW1の作業負荷が高すぎも低すぎもしないとの3つのタイプの結論のいずれかに達することができる。「高すぎる」または「低すぎる」作業負荷レベルは、いくつかの実施形態においては、そのためにステージが構成されるクライアントが選択するポリシーによって、または他の実施形態においては、いくつかのデフォルトのヒューリスティック群を利用して定義されてもよい。例えば、いくつかの最小付加閾値T1を下回るなど、W1がその作業負荷が低すぎることを判定する場合には(要素2907)、よりビジーなまたはより負荷が高いワーカーノードWkが識別されてもよい(要素2910)。W1はその後、例えば、PmのエントリをPAテーブルにおいて修正することを試みるか、そのような修正を要求するか(Wkのために生成されている通知につながる可能性がある)、またはWkを直接要求することによって、1つ以上のパーティションWkからPmのそれ自体への転送処理を起動してもよい(要素2913)。
例えば、最大閾値T2を上回るなど、作業負荷が高すぎることをW1が判定する場合(要素2916)、その割り当てられたパーティションのうち放棄する(すなわち、他のワーカーノードによる割り当てのために解放する)ための1つ以上のPnが識別されてもよい(要素2919)。W1はその後、例えば、その識別子をPnのためのエントリの割り当てられた列から取り除くことによって、PAテーブルにおいて適切なエントリを修正してもよい(要素2922)。W1の作業負荷が高すぎも低すぎもしなかった場合、またはW1がその作業負荷を増加させるかもしくは減少させるために上述の種類のアクションを取った後、それが割り当てられるパーティションのレコードの処理をW1が再開してもよい(要素2925)。他のロードバランシング分析をトリガする条件が満たされる場合に、要素2901以降に対応する操作が繰り返されてもよい。図29において説明する操作においては、W1がそれ自体の作業負荷に対する不均衡を検知する際にのみ、作業負荷の変更を起動するように示されることに留意されたい。他の実施形態では、W1がそれ以外のワーカーノード間で不均衡を検知する場合、例えば、W2がW3よりもはるかに低い作業負荷レベルを有すると判定する場合に、にリバランシングアクションを起動してもよい。いくつかの実装においては、W1が作業負荷の不均衡を検知する場合に、(例えば、図3で示すようなrepartitionStreamSMS API、またはその等価物を呼び出すことにより)動的再分割を要求するか、または起動してもよい。いくつかの実施形態では、図29において説明する種類の操作が新しく構成されたワーカーノードによって実行されてもよい。例えば、ステージがすでにしばらくの間作動した後に新しいノードがステージに追加される際に、負荷が重い既存のノードからのパーティションの再割り当てを要求することで、新しいノードがそれらの存在を既存のノードに間接的に通知してもよい。いくつかの実施形態では、SPSワーカーノードのための上述と同様の分散制御技術が同様に、または代わりに、1つ以上のSMSサブシステムにおいて利用されてもよい。例えば、採集、記憶または検索サブシステムのノードが、PAテーブルと同様の共有されたデータ構造を利用して、それらの作業負荷を調整してもよい。
様々な実施形態において、図17〜図24および図27〜29の流れ図において説明される以外の操作が、上述のストリーム管理サービス及び/またはストリーム処理機能を実装するたえに利用されてもよいことに留意されたい。、いくつかの実施形態では、図示される操作のいくつかが実装されなくてもよく、または異なる順序で、もしくは順次ではなく並列に実装されてもよい。様々な実施形態において、プログラムインターフェイスがサポートされるSMSおよびSPS関数のそれぞれに関して、インターフェイスを実装するために、ウェブページ、ウェブサイト、ウェブ-サービスAPI、他のAPI、コマンドラインツール、グラフィックユーザーインターフェイス、モバイルアプリケーション(app)、タブレットappなどの利用を含めた1つ以上の技術の任意の組み合わせが利用されてもよいことにも留意されたい。
利用例
スケーラブルな分割を利用した、ストリームデータレコードの収集、記憶、検索および段階的処理のための、動的に構成可能な管理されたマルチテナントサービスを構築する上述の技術が、いくつかのシナリオにおいて有用である場合がある。例えば、大規模なプロバイダーネットワークが、いくつかの異なるマルチテナントまたはシングルテナントサービスのサービスインスタンスを数万のクライアントのために同時に実装する数千のインスタンスホストを含んでもよい。様々なインスタンスおよびホスト上にインストールされた監視及び/または請求を行うエージェントは、正確な請求レコードを生成するために記憶され、分析されなければならない可能性がある数千のメトリックレコードを迅速に生成し、プロバイダーネットワークのデータセンターのための効果的な整備計画を決定し、ネットワーク攻撃を検知するなどしてもよい。監視レコードがスケーラブルな採集および記憶のためのSMSへの入力ストリームを形成してもよく、記載されるSPS技術が収集されたメトリクスの分析のために実装されてもよい。同様に、(例えば、分散したアプリケーションのノードからのアプリケーションログ、またはデータセンターにおけるホストもしくは計算インスタンスからのシステムログなどの)多数のログソースから多数のログレコードを収集し分析するためのアプリケーションは、また、SMSおよびSPS機能を利用することができる場合がある。少なくともいくつかの環境では、SPS処理操作が、リアルタイムETL(Extract−Transform−Load)処理操作(すなわち、受信されるデータレコードを宛先にロードするために、オフラインで変換を行う代わりにリアルタイムで変換する操作)、またはデータウェアハウスへの挿入のためのデータレコードの変換を含んでもよい。データをデータウェアハウスにリアルタイムでロードするためのSMS/SPSの組み合わせの利用により、分析のためにデータがウェアハウスに挿入することが可能である前に、1つ以上のデータソースからのデータをクリーンにし、監督するために通常必要とされる遅延が回避される場合がある。
いくつかの異なる「ビッグデータ」アプリケーションがまた、SMSおよびSPS技術を利用して構築されてもよい。例えば、様々な形式のソーシャルメディア対話において、トレンドの分析がストリームを利用して効率的に実行されてもよい。ユーザの位置情報などの、携帯電話またはタブレットコンピュータから収集されるデータがストリームレコードとして管理されてもよい。例えば、監視カメラ群から収集される聴覚または視覚情報は、スケーラブルに収集され、処理されることが可能であり、潜在的に様々な種類の攻撃を防止する助けとなるストリーミングデータ群の別のカテゴリを表してもよい。例えば、気象衛星、海に拠点を置くセンサー、森林に拠点を置くセンサー、天体望遠鏡などから収集される、増加する一方のデータ群の分析を要求する科学的手法が、また、本明細書に記載のストリーム管理および処理能力により利点を得る場合がある。柔軟なポリシーを用いた構成オプションおよび価格オプションが、異なるタイプのユーザがそれらの特定の予算およびデータ持続性/可用性要件に適合するように、ストリーミング機能をカスタマイズする上での助けとなってもよい。
本開示の実施形態については、以下の節の観点から記すことが可能である。
1.
(a)制御ノード、(b)レコード採集ノード、(c)レコード記憶ノード、(d)レコード検索ノードおよび(e)レコード処理ノード、を含む1つ以上の機能カテゴリのノードのための配置オプションを含む特定のストリームのデータレコードのための複数のセキュリティ関連のオプションからクライアントが選択を行うことを可能にするプログラムインターフェイス群を実装し、
前記プログラムインターフェイス群のプログラムインターフェイスを介して、特定のストリームのために選択された配置オプションであって、それに従って前記特定のストリームに関連する第1の機能カテゴリのノードがプロバイダーネットワークの1つ以上のデータセンターにおいて構成され、前記特定のストリームに関連する第2の機能カテゴリのノードが前記プロバイダーネットワークの外部設備において構成されるような前記配置オプションを含む1つ以上の要求を受信し、
前記プロバイダーネットワークの1つ以上のデータセンターにおいて前記第1の機能カテゴリの1つ以上のノードを構成し、
前記プロバイダーネットワークの前記外部設備において前記第2の機能カテゴリの1つ以上のノードの構成を起動し、また、
前記特定のストリームのデータレコードの収集を開始するために、前記データストリームに割り当てられた1つ以上のレコード採集ノードを起動する、
ように構成される1つ以上の計算装置、
を含むシステム。
2.
前記第1の機能カテゴリが、レコード記憶ノードを含み、前記第2の機能カテゴリが、レコード処理ノードを含む、節1に記載のシステム。
3.
前記複数のセキュリティ関連のオプションが、前記クライアントに関連し前記プロバイダーネットワークにおいて実装される隔離された仮想ネットワーク内に、特定の機能カテゴリの1つ以上のノードを構成するためのオプションを含む、節1に記載のシステム。
4.
前記プロバイダーネットワークが、複数のインスタンスホストを利用するマルチテナント計算サービスを実装し、
前記複数のインスタンスホストのうちの少なくともいくつかのインスタンスホストが、それぞれ、複数のクライアントの代わりに計算インスタンスをインスタンス化するように構成可能であり、
記複数のセキュリティ関連のオプションが、ノードの特定の機能カテゴリの1つ以上のノードを、1つ以下のクライアントをホスティングするインスタンスホスト上でインスタンス化するオプションを含む、節1に記載のシステム。
5.
前記複数のセキュリティ関連のオプションが、1つ以上の機能カテゴリのノードにおいて、データレコードのネットワークリンクを用いた送信の前に前記データレコードを暗号化するオプションを含む、節1に記載のシステム。
6.
1つ以上の計算装置による、データストリーム管理サービスのクライアントが特定のストリームのために、前記ストリーム管理サービスのノードの1つ以上の機能カテゴリのための配置オプションを選択することを可能にするプログラムインターフェイス群の実装であって、前記ストリーム管理サービスは、少なくとも(a)データ採集ノードおよび(b)データ処理ノードを含む複数の機能カテゴリのノードを利用して前記実装すること、
前記プログラムインターフェイス群のプログラムインターフェイスを介した、特定のストリームのために選択される配置オプションであって、それに従って第1の機能カテゴリのノードが第1のセキュリティプロファイルを有するリソースを利用して構成され、第2の機能カテゴリのノードは、異なるセキュリティプロファイルを有するリソースを利用して構成されるような前記配置オプションを含む要求を受信すること、
前記第1のセキュリティプロファイルを有する第1の選択されたリソースで、前記第1の機能カテゴリの1つ以上のノードの構成を起動すること、
前記異なるセキュリティプロファイルを有する第2の選択されたリソースで、前記第2の機能カテゴリの1つ以上のノードの構成を起動すること、を、
1つ以上の計算装置によって実行すること、
を含む方法。
7.
前記複数の機能カテゴリが、
(a)データ記憶ノード、(b)データ検索ノードおよび(c)制御ノード、
の1つまたは複数を含む、節6に記載の方法。
8.
前記要求に従って前記第1の選択されたリソースが、プロバイダーネットワークのデータセンターにおいて実装され、
第2の選択されたリソースが、前記プロバイダーネットワークの外部設備において実装される、節6に記載の方法。
9.
前記プロバイダーネットワークの前記外部設備が、前記プロバイダーネットワークに特定のクライアントによる利用専用の非共有物理リンクを介してリンクされる、節8に記載の方法。
10.
前記第1の機能カテゴリが、データ採集ノードを含み、ノードの前記第2の機能カテゴリが、データ処理ノードを含む、節8に記載の方法。
11.
前記第2の選択されたリソースが、(a)前記プロバイダーネットワークにおいてサポートされない能力を有するハードウェア装置または(b)前記プロバイダーネットワークにおいてサポートされない能力を有するソフトウェアモジュール、の1つまたは複数を含む、節6に記載の方法。
12.
前記第1の選択されたリソースが、前記要求に従って前記プロバイダーネットワークの仮想計算サービスの第1の計算インスタンスにおいて実装され、
第2の選択されたリソースが、前記仮想計算サービスの第2の計算インスタンスにおいて実装され、
前記第1の機能カテゴリが、クライアントの提供による実行可能なプログラムを利用して実行され、
前記第1の機能カテゴリの前記第1の計算インスタンスにおける実行が、前記ストリーム管理サービスによって管理され、
前記第2の機能カテゴリの操作が、前記クライアントによって管理される、節6に記載の方法。
13.
前記要求に従って、前記プロバイダーネットワークにおいて実装された前記クライアントの前記隔離された仮想ネットワーク内で、前記第1の選択されたリソースが実装される、節6に記載の方法。
14.
前記プロバイダーネットワークが複数のインスタンスホストを利用してマルチテナント計算サービスを実装し、
前記複数のインスタンスホストのうちの少なくともいくつかのインスタンスホストがそれぞれ、複数のクライアントの代わりに計算インスタンスをインスタンス化するように構成可能であり、
前記要求に従って、2つ以上のクライアントの代わりに計算インスタンスをインスタンス化するように構成可能であるインスタンスホストを前記第1の選択されたリソースが含む、節6に記載の方法。
15.
データレコードのネットワークを用いた送信前に、1つ以上の機能カテゴリのノードにおける前記データレコードの暗号化をクライアントが要求することを可能にするプログラムインターフェイスを実装すること、を、
前記1つ以上の計算装置が実行することをさらに含む、節6に記載の方法。
16.
前記複数の機能カテゴリの1つ以上の機能カテゴリのノードの機能のサブセットを少なくとも実装するための、前記プロバイダーネットワークの外部設備の1つ以上の計算装置においてインストール可能である、実行可能なモジュールのライブラリを提供すること、を、
前記1つ以上の計算装置が実行することをさらに含む、節6に記載の方法。
17.
前記第1の機能カテゴリの1つ以上のノードの前記構成の前記起動が、可用性要件にしたがった、複数のデータセンターのそれぞれにおける少なくとも1つのノードの前記構成の起動を含む、節6に記載の方法。
18.
1つ以上のプロセッサにおいて実行される際に、
複数の機能カテゴリのノードが構成される特定のデータストリームのために選択されたセキュリティオプションを含む構成要求であり、前記複数の機能カテゴリが少なくともデータ採集カテゴリおよびデータ検索カテゴリを含み、前記セキュリティオプションが少なくとも1つの機能カテゴリのノードのために利用されるリソースのセキュリティプロファイルを示す前記構成要求を受信し、
前記選択されたセキュリティオプションを含む前記要求に従って、第1のセキュリティプロファイルを有するリソースにおいて第1の機能カテゴリのノードを構成し、
第2の機能カテゴリのノードの、異なるセキュリティプロファイルを有する異なるリソースにおける構成を起動する、
プログラム命令を記憶させる持続性コンピュータアクセス可能媒体。
19.
前記複数の機能カテゴリが、
(a)データ記憶カテゴリ、(b)データ処理カテゴリまたは(c)制御カテゴリ、
の1つまたは複数を含む、節18に記載の持続性コンピュータアクセス可能媒体。
20.
前記第1の機能カテゴリに前記ノードのために利用される前記リソースが、プロバイダーネットワーク内に位置し、
前記第2の機能カテゴリのノードのために利用される前記リソースが、前記プロバイダーネットワーク外に位置する、節18に記載の持続性コンピュータアクセス可能媒体。
21.
前記第1の機能カテゴリの1つ以上のノードが、前記構成要求に従って、プロバイダーネットワークにおいて実装される隔離された仮想ネットワーク内の計算装置において構成される、節18に記載の持続性コンピュータアクセス可能媒体。
22.
前記第1の機能カテゴリの少なくとも1つのノードが、前記構成要求に従って、マルチテナント仮想計算サービスの特定のインスタンスホストにおいてインスタンス化され、
前記特定のインスタンスホストが、1つ以下のクライアントに代わって計算インスタンスを起動するように構成される、節18に記載の持続性コンピュータアクセス可能媒体。
説明するコンピュータシステム
少なくともいくつかの実施形態では、SMSサブシステムのコンポーネント(例、採集、記憶、検索および制御サブシステム)を実装する技術、ならびにSPSワーカーおよび制御ノードを含む、本明細書に記載の1つ以上の技術の一部または全部を実装するサーバが、1つ以上のコンピュータアクセス可能媒体を含むかまたはそれにアクセスするよう構成される汎用コンピュータシステムを含んでもよい。図30は、そのような汎用計算装置9000を説明する。説明する実施形態において、計算装置9000は、入力/出力(I/O)インターフェイス9030を介してシステムメモリ9020に連結される1つ以上のプロセッサ9010を含む。計算装置9000はさらに、I/Oインターフェイス9030に連結されるネットワークインターフェイス9040を含む。
様々な実施形態において、計算装置9000は1つのプロセッサ9010を含む単一プロセッサシステムであってもよいか、または、いくつかのプロセッサ9010(たとば、2、4、8、または他の好適な数)を含むマルチプロセッサシステムであってもよい。プロセッサ9010は、命令を実行することができる任意の好適なプロセッサであってもよい。例えば、様々な実施形態において、プロセッサ9010は、x86、PowerPC、SPARC、もしくはMIPSISA、または他の任意の好適なISAなどの多様な命令セットアーキテクチャ(ISA)を実装する、汎用または組み込み型プロセッサであってもよい。マルチプロセッサシステムにおいては、プロセッサ9010のそれぞれが共通して同じISAを実装してもよいが、必ずしもそうでなくてもよい。いくつかの実装においては、従来のプロセッサの代わりに、またはそれに加えてグラフィックスプロセッシングユニット(GPU)が利用されてもよい。
システムメモリ9020は、命令および(1つ以上の)プロセッサ9010によってアクセス可能なデータを記憶させるよう構成されてもよい。様々な実施形態において、システムメモリ9020が、スタティックランダムアクセスメモリ(SRAM)、同期型ダイナミックRAM(SDRAM)、不揮発性/フラッシュタイプメモリ、または任意の他のタイプのメモリなどの任意の好適なメモリ技術を利用して実装されてもよい。説明する実施形態においては、上述のこれらの方法、技術およびデータなどの1つ以上の所望の関数を実装するプログラム命令およびデータが、システムメモリ9020内でコード9025およびデータ9026として記憶されて示される。
1つの実施形態において、プロセッサ9010、システムメモリ9020、および、データオブジェクトパーティションの物理レプリカを記憶させるために利用される様々な種類の永続性及び/または揮発性記憶装置などのネットワークインターフェイス9040または他の周辺インターフェイスを含む任意の周辺装置の間のI/Oトラフィックを装置内で調整するようI/Oインターフェイス9030が構成されてもよい。いくつかの実施形態では、I/Oインターフェイス9030が、あるコンポーネント(例、システムメモリ9020)から別のコンポーネント(例、プロセッサ9010)による利用に好適なフォーマットにデータ信号を変換するために、任意の必要なプロトコル、タイミングまたは他のデータ変換を実行してもよい。いくつかの実施形態では、例えば、ペリフェラルコンポーネントインターコネクト(PCI)バス標準またはユニバーサルシリアルバス(USB)標準のバリアントなどの様々な種類の周辺バスを通じて取り付けられた装置のサポートを、I/Oインターフェイス9030が含んでもよい。いくつかの実施形態では、I/Oインターフェイス9030の関数が、例えば、ノースブリッジおよびサウスブリッジなどの2つ以上の個別のコンポーネントに分割されてもよい。またいくつかの実施形態では、システムメモリ9020へのインターフェイスなどのI/Oインターフェイス9030の一部または全部の機能が、プロセッサ9010に直接組み込まれてもよい。
例えば、図1から図29において説明するように、計算装置9000と、1つ以上のネットワーク9050に取り付けられる他のコンピュータシステムまたは装置などの他の装置9060との間でデータを交換することができるように、ネットワークインターフェイス9040が構成されてもよい。様々な実施形態において、ネットワークインターフェイス9040は、例えば、Ethernetネットワークなどのタイプの任意の好適な有線または無線の一般的なデータネットワークを介して通信をサポートしてもよい。さらに、ネットワークインターフェイス9040は、アナログ音声ネットワークもしくはデジタルファイバ通信ネットワークなどの遠距離通信/電話ネットワークを介して、Fibre ChannelSANなどの記憶領域ネットワークを介して、または他の任意の好適なタイプのネットワーク及び/またはプロトコルを介して、通信をサポートしてもよい。
いくつかの実施形態では、システムメモリ9020が、対応する方法および装置の実施形態を実装するための図1から図29に関する上述のプログラム命令およびデータを記憶させるように構成されるコンピュータアクセス可能媒体の1つの実施形態であってもよい。しかし他の実施形態では、プログラム命令及び/またはデータが異なるタイプのコンピュータアクセス可能媒体において受信され、送信されるか、または記憶されてもよい。コンピュータアクセス可能媒体は、一般的に、例えば、I/Oインターフェイス9030を介して計算装置9000に連結されるディスクまたはDVD/CDなどの磁気または光学媒体のような持続性記憶媒体またはメモリ媒体を含んでもよい。持続性コンピュータアクセス可能記憶媒体は、また、RAM(例えば、SDRAM、DDRSDRAM、RDRAM、SRAMなど)、ROMなどの、計算装置9000のいくつかの実施形態においてシステムメモリ9020または別のタイプのメモリとして含まれてもよい任意の揮発性または不揮発性メディアを含んでもよい。さらに、コンピュータアクセス可能媒体は、ネットワークインターフェイス9040を介して実装されてもよい、伝送媒体またはネットワーク及び/または無線リンクなどの通信媒体を介して伝達される電気、電磁波もしくはデジタル信号信号を含んでもよい。図30で説明するような複数の計算装置の一部または全部が、様々な実施形態において記載される機能を実装するために利用されてもよい。例えば、多様な異なる装置およびサーバにおいて作動するソフトウェアコンポーネントが、機能を提供するために協働してもよい。いくつかの実施形態では、記載された機能の一部または全部が、汎用コンピュータシステムを利用しての実装に加えて、またはその代わりに、記憶装置、ネットワーク装置または専用コンピュータシステムを利用して実装されてもよい。「計算装置」の用語は、本明細書内で使用されるように、少なくともこれらのタイプの装置すべてを表すが、これらのタイプの装置に限定されない。
結論
様々な実施形態は、コンピュータアクセス可能媒体に関する上述の説明に従って実装される、受信、送信または記憶命令及び/またはデータをさらに含んでもよい。コンピュータアクセス可能媒体は、一般的に、例えば、ディスクまたはDVD/CD-ROMなどの磁気または光学媒体、RAM(例えば、SDRAM、DDR、RDRAM、SRAMなど)、ROMなどの揮発性または不揮発性媒体、ならびに伝送媒体またはネットワーク及び/または無線リンクなどの通信媒体を介して伝達される電気、電磁波、またはデジタル信号などの信号などの記憶媒体またはメモリ媒体を含んでもよい。
図面で説明し、本明細書内に記載する様々な方法は、方法の例示的な実施形態を表す。方法がソフトウェア、ハードウェアまたはそれらの組み合わせにおいて実装されてもよい。方法の順序は変更されてもよく、様々な要素が追加され、再び順序付けられ、組み合わせられ、省略され、修正されるなどしてもよい。
本開示の利益を得る当業者にとって明白であるように、様々な修正および変更が行われてもよい。そのような修正および変更を包括することが意図され、従って、上記の説明は限定的意味ではなく説明的意味であると見なされるべきである。