7 Streamsアプリケーションのスケーリング
1つのストリーミング・サービスを複数のノードで実行するようにスケーリングして、大規模なOracle NoSQL Databaseストアからの大量のストリーム・イベントを処理できます。ストリーミング・サービスでは、複数のサブスクライバを使用してOracle NoSQL Databaseストアからのデータをストリームできます。
ストリーム処理アプリケーションがOracle NoSQL Databaseストアのトポロジを認識する必要はなく、独立したサブスクライバを必要に応じて単に追加または削除できます。ストリーム処理アプリケーションで指定する必要があるのは、サブスクライバの数とサブスクライバIDのみです。
次の図は、2つのクライアントを使用してOracle NoSQL Databaseストアの6つのシャードからのデータをストリームするために、ストリーム・アプリケーションをどのようにスケーリングできるかを示しています。
図multiple_subscribers.pngの説明
Oracle NoSQL Databaseストアは、サブスクライバ間でストリームを均等に分散しようとします。図に示されているように、6つのシャードと2つのサブスクライバがあります。この例では、それぞれのサブスクライバが3つのシャードからストリームを受け取ります。サブスクライバではストリームを受け取るシャードを選択しません。システムによって自動的に決定され、その決定はサブスクライバに対して透過的です。シャードが(この例のように)サブスクライバより多い場合、一部のサブスクライバは複数のシャードからストリームを受け取ることがあります。
ノート:
-
スケーラブルなサブスクライバの最大数がシャードの数を超えることはできません。たとえば、Oracle NoSQL Databaseに6つのシャードがある場合、6つを超えるクライアントにサブスクライバをスケーリングすることはできません。
-
新たに追加されたリソースを有効に活用するためにストリーム処理アプリケーションを異なるノードで実行することによってスケーリングするOracle NoSQL Database。
スケーラブルなサブスクライバを同じノード上の別個のJVM内に作成して実行することもできますが、このような構成には、スケーラブルなサブスクライバを使用せずに1つのサブスクライバを実行する構成を超える利点はありません。この例では、異なるJVM内(ただし同じノード内)で2つのスケーラブルなサブスクライバを実行して、それぞれ3つのシャードにわたってストリームしても、データ・ストア全体をサブスクライブする1つのサブスクライバを同じノードで実行する場合よりも大きいメリットはありません。
データ・ストアでのStreams APIへの弾力的な操作は、単一のサブスクライバまたは複数のシャード・サブスクライバがデプロイされている場合の両方でサポートされます。シャード・サブスクライバは、サブスクライバ・グループの一部です。複数のシャード・サブスクライバがデプロイされている場合、弾力的な操作の後、シャード・キーへの書込みは(NoSQLSubscriber#onNextの実装を介して)データ・ストアでの書込みと同じ順序で配信されます。
図subscribers_implementation_architecture.pngの説明
前述の図は、2つのシャード・サブスクライバが、移行中にパーティションP1の1つのキーにストリーム書込みを行う例を示しています。ソース・シャード1とターゲット・シャード2の2つのシャードがあります。移行パーティションP1への書込みは、一部はシャード1にあり、一部はシャード2にあります。パーティションP1は、移行の完了後にシャード1から削除されます。同様に、パーティションP1は、移行の完了後にシャード2で再構築されます。シャード1のパーティションP1への書込みはすべて、シャード1からシャード・サブスクライバ(IDが2_0)にストリームされます。同様に、シャード2のパーティションP1への書込みはすべて、シャード2からシャード・サブスクライバ(IDが2_1)にストリームされます。図から、シャード1への書込みがシャード2の書込みの前に行われることがわかります。配信時に、サブスクライバ2_0に配信されたすべての書込みが、サブスクライバ2_1に配信される前に配信されます。これにより、複数のシャード・サブスクライバの正しい配信順序が保証されます。