レプリケーションテーブルは、OceanBaseデータベースにおける特殊なテーブルです。このテーブルでは、任意の「正常」なレプリカでデータの最新の変更を読み取ることができます。書き込み頻度が低く、読み取り操作の遅延やロードバランシングに対する要求が高いユーザーにとって、レプリケーションテーブルは理想的な選択肢です。
レプリケーションテーブルとは
レプリケーションテーブルと通常のテーブルの主な違いは、読み取りレプリカが最新データの読み取りをサポートするかどうかにあります。通常のテーブルのレプリカは弱い整合性の読み取りリクエストしか実行できず、古いバージョンのデータを読み取ります。一方、レプリケーションテーブルのレプリカは強い整合性の読み取りをサポートし、最新バージョンのデータを読み取ります。
ユーザーがレプリケーションテーブルを作成すると、現在のテナントのすべてのOBServerノードにそのレプリケーションテーブルのレプリカが作成されます。そのうち1つのレプリカがリーダーとして選出され、書き込みリクエストを受信します。残りのレプリカは読み取りリクエストのみを受信できます。
すべてのレプリカはリーダーに状態を報告する必要があり、主にデータ同期の進捗であるレプリケーションの再現進度を報告します。通常、フォロワーの再現進度はリーダーより若干遅れますが、その遅れが一定のしきい値を超えない限り、リーダーはレプリカが「正常」状態にあり、リーダー上の変更を迅速に再現できると判断します。リーダーが特定のレプリカが一定期間「正常」状態を維持していると判断すると、そのフォロワーに一定期間のリースを付与します。簡単に言えば、リーダーはその後の期間、フォロワーが「正常」状態を維持し、強い整合性の読み取りサービスを提供できると「信頼」しています。この「信頼」期間中、リーダーはレプリケーションテーブルのトランザクションをコミットするたびに、フォロワーの再現進度を確認します。フォロワーがそのトランザクションの変更を再現した後に、リーダーはユーザーにトランザクションのコミット成功を報告します。この場合、ユーザーは「正常」なフォロワー上で、ちょうどコミットされたトランザクションの変更を読み取ることができます。ただし、そのフォロワーの再現進度がトランザクションコミット時の状態に追いついている必要があります。
レプリケーションテーブルが必要な理由
「1書き込み・複数読み取り」はデータベースでよく見られるデプロイメント方式で、1つのノードがすべての書き込み操作を処理し、その後論理ログを他の読み取りノード(例:Amazon Aurora)へ非同期または同期します。このデプロイメント方式の利点は、読み取り負荷を複数のノードに分散し、災害復旧能力を向上させることができ、クライアントから物理的に近いノードほど読み取り遅延が低くなることです。
OceanBaseでは、通常、弱い整合性の読み取りと複数レプリカの方式を採用してこの要件を実現しています。そのうち1つのレプリカ(リーダー)が書き込みサービスと即時の強い整合性の読み取りを提供し、他のフォロワーは比較的古いコミット済みデータを読み取ることができます。弱い整合性の読み取りは、非同期レプリケーションのデータ同期方式で一般的な選択肢であり、リーダーは書き込み時にフォロワーのデータ再現進度を気にする必要がなく、フォロワーは一貫した古いバージョンのデータ読み取りを提供できます。
しかし、一部のシナリオでは、ユーザーの書き込み頻度は非常に低く、書き込み操作の遅延には敏感ではありません。相対的に、これらのユーザーは読み取り操作の遅延とロードバランシングにより関心があり、最新データをタイムリーに読み取りたいと考えています。レプリケーションテーブル機能は、このような要件を満たすために設計されており、わずかなトランザクションコミット性能を犠牲にすることで、任意の「正常」なフォロワー上で最新データを読み取ることができます。ここで言及されている「正常」とは、フォロワーとリーダー間のネットワークがスムーズで、再現進度の差が大きくないことを指します。
V3.x バージョンと V4.x バージョンにおけるレプリケーションテーブルの違い
レプリケーションテーブル機能は、OceanBaseデータベース V3.x バージョンには既に存在していました。しかし、V4.x バージョンでは、OceanBaseデータベースのアーキテクチャが大きく変更されたため、V4.x バージョンのレプリケーションテーブルは、単一マシンのログストリームの新しいアーキテクチャに適応し、パーティションに基づく読み取り可能バージョン番号の検証およびログストリームに基づくリース付与メカニズムを導入し、強い整合性の読み取りの正確性を保証しています。
さらに、V4.x バージョンのレプリケーションテーブル機能は、リーダー切り替え時にトランザクションを終了しない機能を改善しました。ユーザーまたはロードバランシングがリーダー切り替えを開始すると、未コミットのレプリケーションテーブルトランザクションは、V3.x バージョンのように継続できなくなることはなく、リーダー切り替え後に引き続き実行できます。V3.x バージョンと比較して、V4.x のレプリケーションテーブル機能は、書き込みトランザクションの性能と災害復旧能力の両方で向上しており、レプリカのダウンが読み取り操作に与える影響が低くなっています。