アーキテクチャ

レプリケーション・ノードとシャード
レプリケーション係数
パーティション
ゾーン
トポロジ

KVStoreは、レプリケーション・ノードのセットをホストするストレージ・ノードの集まりです。データは、レプリケーション・ノード間に分散されます。従来の3層Webアーキテクチャを例にすると、KVStoreはバックエンド・データベースにかわるものか、バックエンド・データベースと併用されるものです。

ストアには、複数のストレージ・ノードが含まれます。ストレージ・ノードは、ローカル・ストレージを持った物理(あるいは、仮想)マシンです。マシンにはコモディティ・ハードウェアが想定されています。ストア内のその他のすべてのストレージ・ノードと同一である方が望ましいですが、そうである必要はありません。

次の図に、Oracle NoSQL Databaseを利用するアプリケーションで使用される代表的なアーキテクチャを示します。

NoSQLデータベース・ストア・アーキテクチャ

各ストレージ・ノードは、1つ以上のレプリケーション・ノードを容量によって決定されたとおりにホストします。ストレージ・ノードの容量は、関連するハードウェア・リソースの大まかな基準として役立ちます。ストアは、様々な容量のストレージ・ノードで構成可能です。Oracle NoSQL Databaseでは、ストレージ・ノードに、その容量に応じたロードが割り当てられるということが保証されます。さらに、レプリケーション・ノードには少なくとも1つ、通常は多くのパーティションが含まれます。各ストレージ・ノードには、ホストするレプリケーション・ノードが稼働していることや問題がないことを確認する監視ソフトウェアも含まれています。

容量をストレージ・ノードに関連付け、ストレージ・ノードとレプリケーション・ノードの数のバランスをとる最適な方法を調べる方法の詳細は、『Oracle NoSQL Database管理者ガイド』を参照してください。

レプリケーション・ノードとシャード

大まかに言うと、レプリケーション・ノードは、キーと値のペアを含む1つのデータベースとみなすことができます。

レプリケーション・ノードはシャードに編成されます。シャードには、マスター・ノードと呼ばれるデータベース書込みの実行を担う1つのレプリケーション・ノードと、1つ以上の読取り専用のレプリカが含まれます。マスター・ノードのすべての書込みはレプリカにコピーされます。これらのレプリカは、読取り専用操作のサービスに使用されます。ある時点で存在できるマスター・ノードは1つのみですが、シャードのメンバーはいずれも(次に述べるセカンダリ・ゾーン内のノードを除いて)マスター・ノードになることができます。つまり、各シャードでは、単一マスター/複数レプリカ・ストラテジを使用して、読取りのスループットと可用性を向上させます。

次の図に、KVStoreがシャードに分かれている状態を示します。

NoSQL Databaseのシャード

マスターをホストするマシンに何らかの障害が発生すると、シャード内の別のいずれかのノードにマスターが自動的にフェイルオーバーすることに注意してください。つまり、レプリカ・ノードの1つが自動的にマスターに昇格されます。

本番KVStoreには複数のシャードが含まれます。インストール時、ストアに含まれるシャードの数をOracle NoSQL Databaseで自動的に決定できるようにするための情報を指定します。ストアに含まれるシャードが多いほど、書込みリクエストをサービスするノードがストアに多く含まれるため、書込みのパフォーマンスが向上します。

レプリケーション係数

シャードに属するノードの数は、レプリケーション係数と呼ばれます。シャードのレプリケーション係数が大きいほど、読取りのスループットは向上します(読取りリクエストをサービスするマシンが増えるため)が、書込みのパフォーマンスは低下します(書込みのコピー先のマシンが増えるため)。

ストア内の各ゾーンのレプリケーション係数を設定すると、Oracle NoSQL Databaseは、ストアを構成する各ゾーンに存在する各シャードに対して適切な数のレプリケーション・ノードが作成されるようにします。ゾーンで保持されるコピー、つまりレプリカの数は、ゾーン・レプリケーション係数と呼ばれます。すべてのプライマリ・ゾーンにおける合計レプリカ数はプライマリ・レプリケーション係数と呼ばれ、すべてのセカンダリ・ゾーンにおける合計数はセカンダリ・レプリケーション係数と呼ばれます。ストア内のすべてのゾーンに関して、ストア全体の合計レプリカ数はストア・レプリケーション係数と呼ばれます。

プライマリ・レプリケーション係数とその関連性を特定する方法の詳細や、複数のゾーンとレプリケーション係数の詳細は、『Oracle NoSQL Database管理者ガイド』を参照してください。

パーティション

各シャードには、1つ以上のパーティションが含まれます。ストア内の表の行(またはキーと値のペア)には、データのキーを使用してアクセスします。さらに、キーにはパーティションが割り当てられます。キーは、パーティションへの配置後は別のパーティションに移動できません。Oracle NoSQL Databaseでは、各レコードのキーをハッシュすることによって、すべての使用可能なパーティション間でレコードが均等に割り当てられます。

計画の一環として、ストアに含めるパーティションの数を決める必要があります。これは、ストアのインストール後は構成できないことに注意してください。

ストアで使用するストレージ・ノードの数は拡張して変更することが可能です。この操作が行われる場合、新規シャードの追加によって、新規リソースを利用するようにストアを再構成できます。この操作が行われる場合、あるシャードから別のシャードにパーティションを再配布することで、新規シャードと既存シャードの間でパーティションが均衡化されます。このため、ストアをきめ細かに再構成できるように十分な数のパーティションを含めることが推奨されます。多数のパーティションを含めることには最小限のパフォーマンス・コストが伴うことに注意してください。おおよその目安として、シャードごとに少なくとも10~20のパーティションがあり、パーティションの数がシャードの数で割り切れることが必要です。パーティション数は初期のデプロイ後に変更できないため、パーティション数の指定時には予想される最大サイズのストアを想定する必要があります。

ゾーン

ゾーンは、その内部にデプロイされているストレージ・ノード間の良好なネットワーク接続性をサポートする物理的なロケーションであり、他のゾーンとは一定のレベルで物理的に分離されています。ゾーンは通常、冗長またはバックアップ電源供給、冗長データ通信接続、環境制御(たとえば、エアコン、消火)およびセキュリティ・デバイスを含みます。ゾーンは、個々のデプロイメントによって、実際の物理的なデータ・センターを表すこともあれば、フロア、部屋、ポッドまたはラックを表すこともあります。大規模な停電やネットワーク障害のような、物理的な場所全体に影響するシステム障害から保護するために、Oracleは複数のゾーンでストアをインストールおよび構成することをお薦めします。

ゾーンが複数あると、障害を分離できるため、1つのゾーンに障害が起こった場合でもデータの可用性が高まります。

ゾーンには2つのタイプがあります。プライマリ・ゾーンには、マスターまたはレプリカとしてサービスできるノードが含まれます。ゾーンは、デフォルトではプライマリ・ゾーンとして作成されます。セカンダリ・ゾーンには、レプリカとしてのみサービスできるノードが含まれています。セカンダリ・ゾーンは、離れた場所にデータのコピーを作成したり、データの追加のコピーを保持して冗長性または読取り容量を増やしたりするために使用できます。

コマンドライン・インタフェースを使用して、1つ以上のゾーンを作成してデプロイできます。各ゾーンは、デプロイされたストレージ・ノードをホストします。ゾーンとその作成方法の詳細は、『Oracle NoSQL Database管理者ガイド』を参照してください。

トポロジ

トポロジは、NoSQL DBストアを構成するゾーン、ストレージ・ノード、レプリケーション・ノードおよび管理サービスの集合体です。デプロイされた各ストアには、ある時点の状態を示すトポロジが1つあります。

初期のデプロイ後、特定のシャードで単一障害点が発生する可能性が最小限になるようにトポロジが配置されます。つまり、ストレージ・ノードは複数のレプリケーション・ノードをホストする可能性がありますが、そのレプリケーション・ノードが同じシャードに属することはありません。これにより、ホスト・マシンが停止するようなハードウェア障害に直面したとしても、シャードの読取りおよび書込みを継続できる可能性が高まります。

トポロジは、様々なパフォーマンス特性を実現する場合や、ストレージ・ノードの数または特性の変更に対応する場合に変更できます。トポロジの変更およびデプロイは反復的なプロセスです。コマンドライン・インタフェースを使用してトポロジを作成、変換、表示、検証およびプレビューする方法の詳細は、『Oracle NoSQL Database管理者ガイド』を参照してください。