OceanBaseデータベースはマルチテナントアーキテクチャを採用しています。マルチテナントアーキテクチャは、リソース統合(Resource Consolidation)やSaaSサービスなどのシナリオに適しており、運用保守の複雑さも低減します。
クラスタはデプロイメントレベルの物理的概念に傾き、ゾーンとノードの集合です。ゾーンとノードには、デプロイメント地域(リージョンと呼ばれる)などの属性があります。一方、テナントはリソースレベルの論理的概念に傾き、物理ノード上に分割されたリソースユニットであり、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を異なるゾーンに配置すること(テナントのLocality属性を変更すること)で、テナントのデプロイメントモードを調整し、「同一都市三センター」、「二地域三センター」、「三地域五センター」など、異なるディザスタリカバリレベルを実現できます。