TiDBアーキテクチャ - プロダクト構成を理解する
TiDBアーキテクチャ
従来の独立型データベースと比較して、TiDBは次のような利点を提供する。
- 柔軟で弾力的な拡張性を備えた分散アーキテクチャを持つ。
- MySQL 5.7プロトコル、MySQLの一般的な機能および構文と完全に互換性がある。
- アプリケーションをTiDBへ移行するために、1行のコードも変更する必要がない。
- 少数のレプリカで障害が発生した場合、自動フェイルオーバーにより高可用性をサポートする。これはアプリケーションに対して透過的である。
- 銀行振込のような強い整合性が必要なシナリオに適したACIDトランザクションをサポートする。
- データ移行、レプリケーション、バックアップのためのさまざまなデータ移行ツールを提供する。
TiDBは分散データベースとして、複数のコンポーネントで構成されるように設計されている。これらのコンポーネントは互いに通信し、完全なTiDBシステムを形成する。アーキテクチャは次のとおりである。

TiDB Server - 外部公開サーバー
TiDB Serverは、MySQLプロトコルの接続エンドポイントを外部に公開するステートレスなSQLレイヤーである。
TiDB ServerはSQLリクエストを受け取り、SQL構文解析と最適化を実行し、最終的に分散実行計画を生成する。水平拡張が可能であり、LVS(Linux Virtual Server)、HAProxy、F5のようなロードバランシングコンポーネントを通じて外部に統合インターフェースを提供する。データは保存せず、コンピューティングとSQL解析だけを実行し、実際のデータ読み取りリクエストをTiKVノードまたはTiFlashノードへ送信する。
PD(Placement Driver)Server - クラスタ管理
PD(Placement Driver)Serverは、クラスタ全体のメタデータ管理コンポーネントである。
すべてのTiKVノードのリアルタイムデータ分布メタデータとTiDBクラスタ全体のトポロジ構造を保存し、TiDB Dashboard管理UIを提供し、分散トランザクションにトランザクションIDを割り当てる。PD Serverはクラスタメタデータを保存するだけでなく、TiKVノードからリアルタイムに報告されるデータ転送状態に基づいて、特定のTiKVノードへデータスケジューリング命令を送るため、TiDBクラスタ全体の「頭脳」または「司令塔」のような役割を果たす。また、PD Serverは少なくとも3ノードで構成され高可用性を提供するため、奇数個のPDノードをデプロイすることが推奨される。
Storage Server - ストレージクラスタ
ストレージには2種類のクラスタサーバーが存在する。
TiKV Server
TiKV Serverはデータ保存を担当する。TiKVは分散トランザクションKey-Valueストレージエンジンである。
Regionはデータを保存する基本単位である。各Regionは、StartKeyからEndKeyまでの左閉右開区間として表される特定のキー範囲のデータを保存する。
各TiKVノードには複数のRegionがある。TiKV APIはKey-Valueペアに対する分散トランザクションを基本的にサポートし、デフォルトでスナップショット分離レベルをサポートする。これがTiDBがSQLレベルで分散トランザクションをサポートする方法の中核である。SQL文を処理した後、TiDB ServerはSQL実行計画をTiKV APIへの実際の呼び出しに変換する。したがって、データはTiKVに保存される。TiKVのすべてのデータは複数のレプリカ、デフォルトでは3レプリカで自動的に維持されるため、TiKVは基本的な高可用性と自動フェイルオーバーをサポートする。
TiFlash Server
TiFlash Serverは特殊なタイプのストレージサーバーである。通常のTiKVノードとは異なり、TiFlashは主に分析処理を高速化するために、各列ごとにデータを保存する。