OceanBaseデータベースはマルチテナントアーキテクチャを採用しています。マルチテナントアーキテクチャは、リソース統合(Resource Consolidation)やSaaSサービスなどのシナリオに適しており、運用保守の複雑さも低減します。
クラスタは、デプロイメントレベルの物理的概念であり、ゾーンとノードの集合です。ゾーンとノードには、デプロイメントリージョン(Regionと呼ばれる)などの属性があります。一方、テナントはリソースレベルの論理的概念であり、物理ノード上に割り当てられたリソースユニットであり、CPU、メモリ、ログディスク容量、IOPSなどのリソース仕様を指定できます。
テナントは従来のデータベースのデータベースインスタンスに似ており、リソースプールを通じてリソースと関連付けられ、一定のリソースクォータを専有し、リソースクォータを動的に調整できます。テナント内では、データベース、テーブル、ユーザーなどのデータベースオブジェクトを作成できます。
テナントの概念を明確に説明するためには、まずリソース仕様、リソースユニット(Unit)、リソースプールなどの前提概念を明確に説明する必要があります。リソース仕様に対応するビューはDBA_OB_Unit_CONFIGS、リソースプールに対応するビューはDBA_OB_RESOURCE_POOLS、リソースユニットに対応するビューはDBA_OB_UnitS、テナントに対応するビューはDBA_OB_TENANTSです。
リソース仕様
リソース仕様は、CPU、メモリ、ディスク容量、IOPSなどの一般的な物理リソース項目のサイズを定義します。リソースプールを作成する際にそのリソース仕様を指定し、定義に基づいてリソースユニットを作成します。
リソースユニット(Unit)
Unitはテナント管理において非常に重要な概念です。OceanBaseはUnitに基づいて物理リソースを管理し、CPU、メモリ、ストレージ容量、IOPSなどの物理リソースの集合です。Unitはまた、リソーススケジューリングの基本単位でもあり、ノード、ゾーン、リージョンなどの位置属性を持っています。ノードはサーバーの抽象化、ゾーンはデータセンターの抽象化、リージョンはリージョンの抽象化であり、Unitの位置属性を調整することでテナントのデプロイ方式を調整します。
リソースプール
各Unitは一つのリソースプールに属し、各リソースプールは複数のUnitで構成されています。リソースプールはリソース割り当ての基本単位であり、同一リソースプール内の各Unitは同一のリソース仕様を持ち、すなわちそのリソースプール内のUnitの物理リソースサイズはすべて同じです。

上図は、6つのUnitで構成されるリソースプールa_poolを示しており、このリソースプールには以下の重要な属性があります:
ZONE_LIST:このリソースプール内のUnitがどのゾーンに配置されているかを記述します。この例ではZONE_LIST='zone1,zone2,zone3'です。Unit_NUM:ZONE_LIST内の各ゾーンのUnit数を記述します。この例ではUnit_NUM=2です。Unit_CONFIG_ID:このリソースプールに関連付けられるリソース仕様を記述し、それによってこのリソースプール内の各Unitの物理リソースサイズを決定します。これにはCPU、メモリ、ログディスク容量、IOPSなどが含まれます。
Unitという概念を通じて、OceanBaseデータベースの物理的概念と論理的概念を関連付けました。各テナントは複数のUnitを持ち、複数のゾーンの複数のノードに分散しています。そして、各ノードには複数のUnitが配置されており、これらのUnitは異なるテナントに属しています。要約すると、クラスタはノードで構成され、ノードはUnitのコンテナです。テナントはUnitで構成され、Unitはデータベースオブジェクトのコンテナです。
テナントを作成する際にRESOURCE_POOL_LISTを設定することで、そのテナントが関連付けられるリソースプールを指定でき、その結果、そのテナントは指定されたリソースプールのUnitを所有します。例えば、テナントaのRESOURCE_POOL_LIST=('a_pool')と設定すると、そのデプロイ図は以下のようになります:

このテナントは3つのゾーンにデプロイされ、各ゾーンには2つのUnitがあります。a_poolのUnit_CONFIG_IDパラメータを調整することで、テナントの物理リソースを動的に調整できます。
また、同一ゾーン内の異なるノード間でUnitの配置を調整することで(これをUnit移行と呼びます)、ゾーン内の異なるノード間のロードバランシングを実現できます。ノード障害発生時には、その上のUnitを同一ゾーン内の他のノードに移行することで、自動ディザスタリカバリを実現します。Unitの異なるゾーン間の配置を調整することで(テナントのローカリティ属性を変更することで)、テナントのデプロイモードを調整できます。例えば、「同一都市3リージョン」、「2リージョン3データセンター」、「3リージョン5データセンター」など、異なるディザスタリカバリレベルを備えることができます。