元ドキュメント: 製品アーキテクチャ
製品アーキテクチャ
TDSQL Boundless のインスタンスには、クラスター版と基本版の2種類があります:
- クラスター版:複数のノードで構成され、マルチレプリカ Raft クラスターとして高パフォーマンスかつ高可用なデータベースサービスを提供します。エンタープライズの本番環境に適しています。
- 基本版:単一ノードで構成され、低コストで完全なデータベース機能を提供しますが、高可用性は含まれません。個人ユーザー向けです。
注意:基本版インスタンスはコンソールからクラスター版にアップグレードできますが、クラスター版を基本版にダウングレードすることはできません。
TDSQL Boundless インスタンス内のノードは、対等アーキテクチャと分離アーキテクチャの2種類に分かれます:
- 対等アーキテクチャ:コンピュートレイヤー SQLEngine とストレージレイヤー TDStore が同一物理ノードに統合されており、ハードウェアノード数とクロスノード通信を削減し、コスト低減とパフォーマンス向上を実現します。
- 分離アーキテクチャ:コンピュートレイヤー SQLEngine とストレージレイヤー TDStore がそれぞれ異なる物理ノードに配置されます。
TDStore テクニカルアーキテクチャ
集中型シングルノードデータベースでも分散データベースでも、機能モジュールは通常3つの主要コンポーネントに分けられます:
- コンピュートエンジン:SQL パース、オプティマイザ、エグゼキュータなど
- ストレージエンジン:トランザクション処理、データストレージなど
- メタデータサービス:グローバル論理クロック、グローバル ID ジェネレータ、メタデータストレージ、スケジューリングエンジン(データ/DR スケジューリング)、負荷収集など
TDSQL Boundless の全体アーキテクチャは下図の通りです:

コンピュートエンジン — SQLEngine
- カーネル:MySQL 8.0 をベースに実装されており、MySQL との互換性が高い
- アーキテクチャ:マルチマスター構成のステートレス設計で、各 SQLEngine ノードが読み書き可能
- 動作:管理ノードからグローバルトランザクションタイムスタンプとデータルーティング情報を取得し、ストレージノードとトランザクション処理を行い、結果をクライアントに返却

ストレージエンジン — TDStore
- アーキテクチャ:LSM-Tree と Multi-Raft をベースとした分散 KV ストレージエンジン
- データ:Raft ベースのマルチレプリカストレージ。データは Key レンジに基づき異なる Region に分散し、複数の Region が Replication Group を構成し、Raft コンセンサスプロトコルによりデータ複製と高可用フェイルオーバーを実現
- 動作:TDStore はコンピュートノードからのリクエストを受信・処理し結果を返却。各 Region のプライマリレプリカが読み書きリクエストの受信と処理を担当

メタデータサービス — TDMC
- アーキテクチャ:Raft ベースの1プライマリ2セカンダリのメタデータ管理クラスター。Leader がサービスを提供
- データ:
- グローバルユニークかつ単調増加するトランザクション ID の割り当て
- TDStore と SQLEngine のメタデータ管理
- Region データルーティング情報の管理
- グローバル MDL ロック管理
- 管理制御:
- Replication Group の分割、マージ、マイグレーション、リーダー切替のスケジューリング
- ストレージレイヤーのスケールアウト/スケールインのスケジューリング
- ストレージレイヤーのロードバランシング
- 各ディメンションの異常イベントアラート

ストレージモデル
TDSQL Boundless のストレージエンジンは、すべてのユーザーデータを(-∞, +∞)のリニアで順序付けられた無限の Key 空間にマッピングします。各行のデータが Key 空間の特定のポイントに対応します。
対等アーキテクチャノード
TDSQL Boundless のアーキテクチャ設計では、コンピュートをストレージ(キャッシュ/ストレージ)にできる限り近づけつつ、コンピュート・ストレージ分離による高い柔軟性も実現しています:
- 対等アーキテクチャ(HyperNode)設計を採用し、各対等ノード(プロセス)がコンピュート、ストレージ、ログの3つの機能エンジンを完全に内蔵
- コンピュートレイヤーとローカルストレージはローカルアクセスモードを使用し、リモートストレージへのアクセスはネットワーク RPC を使用
- ビジネスシナリオに応じて、メタデータおよびスケジューリングモジュールを通じてノードの役割を指定可能

注意:ノード役割指定機能は現在未公開です。