OBKV-Tableの高可用性を確保するには、OBServerだけでなく、通信経路上のプロキシとクライアントを含む全体の高可用性が必要です。OBKV-Tableはサーバー側でOceanBaseの高可用性機能を継承しており、直接接続モードとProxyモードの両方に対応しています。
OBServerの高可用性
OceanBaseデータベースは、クラスタ内のマルチレプリカによる災害復旧、アービトレーションに基づく災害復旧、およびクラスタ間のフィジカルスタンバイ・データベースによる災害復旧など、多様なサービス高可用性技術を備えています。
通信経路の高可用性
Proxyモードの高可用性
ODP(OceanBase Database Proxy)は、OceanBaseデータベース専用のプロキシサーバーです。 ODPの高可用性機能には2つの側面があります:
- ODPサービスの高可用性機能の実装 障害発生後、ODPサービスを迅速に復旧します。
- OceanBaseデータベースの高可用性の保証
例えば、OceanBaseデータベースのノード障害を検出すると、そのノードをルーティング先から除外し、適切なノードにリクエストを転送してアプリケーションへの影響を抑えます。復旧したOBServerノードは速やかにルーティング先に戻し、各ノードのリソースを有効に利用します。
直接接続モードの高可用性
直接接続モードでは、クライアントが対象のOBServerノードに直接リクエストを送信するため、ODPによる転送は不要です。分散システムで正しい処理ノードにメッセージを届けるには、送信先を特定する必要があります。一般的には、ルーティングテーブルをキャッシュし、送信前に参照して送信先を決定します。
ODPモードでは、ODPを独立したコンポーネントとしてデプロイします。クライアントはルーティングについて意識する必要がなく、一定のロードバランシングアルゴリズムまたはコンポーネントに従ってODPにメッセージを配信し、ODPがルーティングに基づいてアドレッシングを行います。利点はクライアントへの依存度が低く、メッセージプロトコルに準拠していればODPはアドレッシングできる点です。欠点は、ODPを別途デプロイする必要があるため、通常はクライアントやデータベースサーバーとは異なる物理ノード上に配置され、メッセージ転送によるネットワークオーバヘッドが生じることです。
直接接続モードでは、ルーティング機能をクライアントに組み込みます。クライアントプロセス内で送信先を決定し、対象のデータベースノードに直接メッセージを送信するため、プロキシによる転送とネットワークのオーバーヘッドを回避できます。ただし、ルーティングをクライアント内で実装するため、クライアントへの依存度が高くなります。
OBKV-Tableのクライアントにも、ODPと同様の高可用性機能があります:
- OBKV-Tableクライアントはルーティング情報をキャッシュします。OBServerのスケールアウト・スケールイン、障害、再配置などによってルーティングが変わった場合は、ルーティングテーブルの更新とメッセージの再試行により、アプリケーション側で変更を意識せずに処理を継続できるようにします。
- OBKV-TableのクライアントはConfigServerのURLを設定しており、OBKV-TableはConfigServerからRslistを取得してキャッシュし、その後Rslistのノードからルーティング情報を取得します。Rslistが変更された場合、OBServerは対応するRslistをConfigServerにプッシュします。