分散アーキテクチャに基づくOceanBaseデータベースは、柔軟なオンライン拡張性を提供します。クラスタの継続的な可用性を前提として、オンラインでのスケールアウトおよびスケールインをサポートします。
OceanBaseデータベースは通常、複数のゾーン(Zone)で構成され、各ゾーンには複数の物理サーバーが含まれます。OceanBaseデータベースの全体構造は以下の図のとおりです。
従来の単一マシンデータベースと比較して、分散アーキテクチャに基づくOceanBaseデータベースは、柔軟なオンライン拡張性を提供します。クラスタの継続的な可用性を前提として、オンラインでのスケールアウトおよびスケールインをサポートします。クラスタの災害復旧要件が変更された場合、ゾーンの数(ゾーンの追加/削除)を調整することで、クラスタの災害復旧能力を向上または低下させることができます。クラスタの外部負荷が変化した場合、ゾーン内の物理マシンの数(OBServerノードの追加/削除)を調整することで、クラスタの負荷能力を変更することができます。以下では、2つの側面からOceanBaseデータベースのスケーリング能力について詳しく説明します。
ゾーン(Zone)の動的調整
OceanBaseクラスタ内の各データには複数のレプリカが維持されており、一つのデータの複数のレプリカはPaxosプロトコルによって基本的な高可用性ユニットを形成します。通常、システムは各ゾーン内に最大1つのデータレプリカをデプロイします。少数のゾーンで障害が発生した場合でも、残りのゾーン内のレプリカはPaxosプロトコルを通じてデータの完全性を保証しつつ、サービスを継続提供できます。ユーザーはゾーンの数を増やすことでデータのレプリカ数を増やし、システムの可用性を向上させることができます。具体的な例は以下のとおりです。
あるOceanBaseクラスタがあり、合計3つのゾーン:Zone1、Zone2、Zone3を含んでいます。クラスタ内の各データには3つのレプリカが含まれ、それぞれ上記の3つのゾーンにデプロイされています。システムの可用性をさらに向上させるために、データレプリカ数を5つにアップグレードしたい場合、ゾーン数を拡張することでこの目標を達成できます。まず、クラスタに2つの新しいゾーン:Zone4とZone5を追加します。次に、新しいゾーン(Zone4とZone5)に物理マシンを追加します。その後、ユーザーの要件に応じて、Zone4とZone5に新しいデータレプリカをデプロイすることで、ゾーンレベルでの動的な拡張を完了します。
逆に、ゾーンの数を減らすことで、ゾーンレベルでの動的なスケールイン操作を実現することもできます。
物理マシンの動的調整
データベースサービス能力の線形拡張をサポートするため、OceanBaseデータベースはゾーン内の物理マシンの動的調整、すなわちゾーン内の物理マシンの数を調整してサービス能力を拡張することをサポートします。OceanBaseデータベースがサービス能力の線形拡張を実現する具体的な例は以下のとおりです。
あるOceanBaseクラスタがあり、合計3N個のOBServer(3つのゾーン:Zone1、Zone2、Zone3を含み、各ゾーンにN個のOBServerが含まれる)が読み書きサービスを提供しています。クラスタが提供するサービス能力が読み書きリクエストを完全に満たせない場合、OceanBaseクラスタを拡張してクラスタのサービス能力を向上させる必要があります。クラスタに3台の新しいOBServerノードを拡張し、各ゾーンに1台ずつ拡張します。拡張後、各ゾーンにはN+1台のOBServerが含まれます。動的拡張により、クラスタ内のOBServerノード数が相応に増加し、Root Serviceは内部のロードバランシングメカニズムに基づいて、クラスタ内の既存のデータと負荷を順次新しく拡張されたノードに均等に分散します。
逆に、クラスタ内のノードサービス能力が現在の負荷に対して余裕がある場合、ノードを削減してクラスタコストを削減することを検討できます。