OceanBase Database Proxy(略称:ODP)は、OceanBaseデータベース専用のプロキシサーバーです。OceanBaseデータベースのユーザーデータは、複数のレプリカとして各OBServerノードに保存されます。ODPはユーザーから送信されたSQLリクエストを受信し、最適なターゲットとなるOBServerにSQLリクエストを転送し、実行結果をユーザーに返します。
ODPの概要
OceanBaseデータベースは従来の単一マシンデータベースとは異なり、分散型データベースです。各テーブル、あるいは同一テーブル内の異なるパーティションが異なるマシンに保存されている可能性があります。テーブルへの読み書きを行うには、まずデータが属するテーブルまたはパーティションのリーダーレプリカの場所を特定し、その後に対応するSQL文を実行する必要があります。これはアプリケーション側からでは事実上不可能です。ODPはOceanBaseデータベース専用のリバースプロキシソフトウェアであり、その中核機能はルーティングです。クライアントから発信されたデータアクセスリクエストを正しいOBServerノードに転送し、OBServerノードからの応答結果をクライアントに転送します。
クライアントがODPを介してOceanBaseデータベースのデータにアクセスするデータリンクは以下の図のとおりです。

ユーザーは任意のClientドライバーを通じてリクエストを発信し、そのリクエストはロードバランシングコンポーネントを経由して任意のステートレスなODPにアクセスします。その後、ODPはユーザーのリクエストをバックエンドのOceanBaseクラスタ内で最適なOBServerノードに転送して実行します。
説明
ここでいうロードバランシングコンポーネントは、市販の一般的な製品(例:SLBやF5など)を指します。
ODPはデータベースやテーブルのシャーディングを担当せず、SQLエンジンとして実行計画の生成やスケジューリングにも参加しません。純粋なリバースプロキシ転送のみを担当します。
各OBServerノードには完全なSQLエンジンとストレージエンジンが含まれており、ユーザーのSQLを解析して物理実行計画を生成し、実行する役割を担います。分散型のOBServerノード間ではPaxosプロトコルにより高可用性が保証されます。このアーキテクチャ設計では、ODPは基本的なルーティングと災害復旧機能のみを担い、データベースの機能はすべてOBServerノードが実装します。このように、よりシンプルかつ明確に分担することで、各コンポーネントの性能を極限まで引き出すことができ、OceanBaseデータベース全体としては、単一マシンデータベースに近い性能を実現できます。
ODPはリクエストを正しいリーダーレプリカに送信することをサポートしており、特定の設定によっては読み書き分離やスタンバイ優先読み取りなどのシナリオもサポートします。さらに、OBServerノードがダウンしたり、アップグレードやメジャーコンパクションなどの状態変化が発生した場合でも、ブラックリストメカニズムにより、ユーザーのリクエストが正常な状態のOBServerノードにルーティングされることが保証されます。
ODPの管理
OCPはODPに対して以下の管理機能を提供します。
操作 |
説明 |
|---|---|
| OBProxyクラスタの作成 | この操作を実行すると、OBProxyクラスタを作成できます。 |
| OBProxyパラメータの説明 | この操作を実行すると、OBProxyクラスタのパラメータを管理できます。 |
| OBProxyクラスタの削除 | この操作を実行すると、OBProxyクラスタを削除できます。 |
| OBProxyクラスタ内のすべてのOBProxyのアップグレード | この操作を実行すると、OBProxyクラスタ内のすべてのOBProxyをアップグレードできます。 |
| OBProxyクラスタ内のすべてのOBProxyの再起動 | この操作を実行すると、OBProxyクラスタ内のすべてのOBProxyを再起動できます。 |
| OBProxyが接続するOceanBaseクラスタの管理 | OCPを使用して、OBProxyに接続可能なOBクラスタを追加したり、既に接続されているOBクラスタを削除したりできます。 |
| OBProxyクラスタのパフォーマンス監視 | OCP上で、サービス監視情報およびシステム監視情報を含むOBProxyクラスタのパフォーマンス監視情報を確認できます。 |
| OBProxyの追加 | この操作を実行すると、OBProxyクラスタにOBProxyを追加できます。 |
| OBProxyの起動 | この操作を実行すると、OBProxyを起動できます。 |
| OBProxy設定のリフレッシュ | この操作を実行すると、OBProxyの設定をリフレッシュできます。 |
| OBProxyの停止 | この操作を実行すると、OBProxyを停止できます。 |
| OBProxyの削除 | この操作を実行すると、クラスタ内のOBProxyを削除できます。 |
| OBProxyの再起動 | この操作を実行すると、クラスタ内のOBProxyを再起動できます。 |
| OBProxyのアップグレード | この操作を実行すると、クラスタ内のOBProxyをアップグレードできます。 |