OceanBaseデータベースプロキシ(略称:ODP)は、OceanBaseデータベース専用のプロキシサーバーです。OceanBaseデータベースのユーザーデータは、複数のレプリカとして各OBServerノードに保存されています。ODPはユーザーから送信されたSQLリクエストを受信し、最適なターゲットOBServerに転送した後、実行結果をユーザーに返します。
なぜODPが必要なのか?
ODPはプロキシサーバーであり、データベースへのアクセス経路に1つのジャンプが増えることになります。では、なぜODPが必要なのでしょうか。以下の図を例に説明します。

図中のAPPは業務プログラムであり、その前には3台のODP(ODPのプロセス名はobproxy)が配置されています。実際のデプロイメントでは、ODPとAPPの間に通常はロードバランサー(例:F5)があり、リクエストを複数のODPに分散します。ODPの下にはOBServerノードがあり、図中には6台のOBServerノードが示されています。
ODPを使用する理由は以下の通りです:
接続管理:OceanBaseクラスタは規模が大きく、マシンやソフトウェアに問題が発生したり、運用マシンが追加または削除される可能性が高いため、直接OBServerノードに接続すると、上記のような状況が発生した場合にクライアント側で接続が切断されてしまいます。ODPはOBServerノード自体の分散的な複雑さを隠蔽し、クライアントがODPに接続することで、ODPは接続の安定性を保証し、OBServerノードの複雑な状態を処理します。
データルーティング:ODPはOBServerノード内のデータ分布情報を取得でき、ユーザーのSQLを効率的にデータが存在するマシンに転送することで、実行効率を向上させます。例えば、テーブルt1のデータは図中のP1に、テーブルt2のデータはP2に、テーブルt3のデータはP3に格納されています。insert into t1文に対して、ODPはSQLをZONE_2内のP1のリーダーレプリカを含むマシンに転送できます。update t2文に対して、ODPはSQLをZONE_1内のP2のリーダーレプリカを含むマシンに転送できます。
ODPは、単一のデータベースを使用するのと同じように、分散型データベースを利用できるようにします。
ODPの特徴
OceanBaseデータベースの重要なコンポーネントとして、ODPには以下の特徴があります:
高パフォーマンスな転送
ODPはMySQLプロトコルと完全に互換性があり、OceanBase独自のプロトコルもサポートしています。マルチスレッド非同期フレームワークと透過的ストリーミング転送設計を採用しており、データの高パフォーマンスな転送を保証すると同時に、マシンリソースへの最小限の消費を確保しています。
最適ルーティング
ODPは、ユーザーのリクエストに関連するレプリカの位置、ユーザーが設定した読み書き分離ルーティングポリシー、OceanBaseデータベースの複数地域展開における最適なリンク、およびOceanBaseデータベース各マシンの状態と負荷状況を十分に考慮し、ユーザーのリクエストを最適なOBServerノードにルーティングすることで、OceanBaseデータベース全体の高パフォーマンスな動作を最大限に保証します。
接続管理
あるクライアントの物理的接続に対して、ODPは自身からバックエンドの複数のOBServerノードへの接続を維持し、バージョン番号に基づく増分同期方式を採用して各OBServerノード接続のセッション状態を維持することで、クライアントが各OBServerノードに効率的にアクセスできるようにします。
専用プロトコル
ODPとOBServerノードは、デフォルトでOceanBase専用プロトコルを採用しています。例えば、パケットにCRCチェックを追加してOBServerノードとのリンクの正確性を保証したり、Oracle互換のデータ型やインタラクションモデルをサポートするために伝送プロトコルを強化したりします。
セキュリティと信頼性
ODPはSSLを使用したデータアクセスをサポートしており、MySQLプロトコルとの互換性も備えているため、顧客のセキュリティニーズを満たします。
保守性
ODPはステートレスで無制限の水平スケーリングをサポートし、複数のOceanBaseクラスタへの同時アクセスにも対応しています。豊富な内部コマンドを通じて自身の状態をリアルタイムで監視でき、非常に高い保守性を提供します。
ライセンス
ODP Community Editionは完全にオープンソースであり、MulanPubL-2.0ライセンスを使用しています。ソースコードを無料でコピーおよび使用できます。ソースコードを変更または配布する際は、Mulanプロトコルを遵守してください。