TiDBアーキテクチャ - プロダクト構成を理解する

TiDBアーキテクチャ

従来の独立型データベースと比較して、TiDBは次のような利点を提供する。

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

TiDBは分散データベースとして、複数のコンポーネントで構成されるように設計されている。これらのコンポーネントは互いに通信し、完全なTiDBシステムを形成する。アーキテクチャは次のとおりである。

TiDB Architecture

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は主に分析処理を高速化するために、各列ごとにデータを保存する。

参考