TiFlashの概要

TiFlashは、TiDB を本質的にハイブリッド トランザクション/分析処理 (HTAP) データベースにする重要なコンポーネントです。TiKV の列指向storage拡張機能として、 TiFlash は優れた分離レベルと強力な一貫性保証の両方を提供します。

TiFlashでは、列レプリカはRaft Learnerコンセンサス アルゴリズムに従って非同期的に複製されます。これらのレプリカが読み取られると、 Raftインデックスとマルチバージョン同時実行制御 (MVCC) を検証することで、スナップショット分離レベルの一貫性が実現されます。

TiDB Cloudを使用すると、HTAP ワークロードに応じて 1 つ以上のTiFlashノードを指定することで、HTAP クラスターを簡単に作成できます。クラスターの作成時にTiFlashノード数が指定されていない場合、またはTiFlashノードをさらに追加したい場合は、ノード数をクラスターのスケーリングずつ変更できます。

アーキテクチャ

TiFlash Architecture

上図は、 TiFlashノードを含む HTAP 形式の TiDB のアーキテクチャです。

TiFlash は、ClickHouse によって効率的に実装されたコプロセッサのレイヤーを備えたレイヤー指向storageを提供します。TiKV と同様に、 TiFlash にも Multi-Raft システムがあり、リージョン単位でのデータの複製と配布をサポートしています (詳細についてはデータストレージ参照)。

TiFlash は、 TiKV への書き込みをブロックしない低コストで、TiKV ノードのデータのリアルタイム レプリケーションを実行します。同時に、TiKV と同じ読み取り一貫性を提供し、最新のデータが読み取られることを保証しますTiFlashのリージョンレプリカは、TiKV のリージョン レプリカと論理的に同一であり、TiKV のLeaderレプリカと同時に分割および結合されます。

Linux AMD64アーキテクチャでTiFlash を展開するには、CPU が AVX2 命令セットをサポートしている必要があります。1 cat /proc/cpuinfo | grep avx2出力されていることを確認してください。Linux ARM64アーキテクチャでTiFlashを展開するには、CPU が ARMv8 命令セットアーキテクチャをサポートしている必要があります。3 cat /proc/cpuinfo | grep 'crc32' | grep 'asimd'出力されていることを確認してください。命令セット拡張を使用することで、TiFlash のベクトル化エンジンはより優れたパフォーマンスを発揮できます。

ワークロードの分離を確実にするために、 TiFlash をTiKV とは別のノードにデプロイすることをお勧めします。ビジネスの分離が不要な場合は、 TiFlashと TiKV を同じノードにデプロイすることもできます。

現在、データを直接TiFlashに書き込むことはできません。TiFlash はLearnerロールとして TiDB クラスターに接続するため、TiKV にデータを書き込んでからTiFlashに複製する必要があります。TiFlashはテーブル単位でのデータ複製をサポートしていますが、デプロイ後、デフォルトではデータは複製されません。指定したテーブルのデータを複製するには、 テーブルのTiFlashレプリカを作成する参照してください。

TiFlash には、列型storageモジュール、 tiflash proxyの 3 pd buddyのコンポーネントがあります。5 tiflash proxy Multi-Raft コンセンサス アルゴリズムを使用した通信を担当します。7 pd buddy PD と連携して、テーブル単位で TiKV からTiFlashにデータを複製します。

TiDBがTiFlashにレプリカを作成するためのDDLコマンドを受信すると、 pd buddyコンポーネントはTiDBのステータスポートを介して複製されるテーブルの情報を取得し、その情報をPDに送信します。次に、PDはpd buddyから提供された情報に従って対応するデータスケジューリングを実行します。

主な特徴

TiFlash には次の主な機能があります。

非同期レプリケーション

TiFlash内のレプリカは、特別なロールであるRaft Learnerとして非同期的に複製されます。つまり、 TiFlashノードがダウンしたり、ネットワークのレイテンシーが長くなった場合でも、TiKV 内のアプリケーションは正常に処理を続行できます。

このレプリケーション メカニズムは、自動負荷分散と高可用性という TiKV の 2 つの利点を継承しています。

  • TiFlash は追加のレプリケーション チャネルに依存せず、多対多の方法で TiKV からデータを直接受信します。
  • TiKV でデータが失われない限り、いつでもTiFlashでレプリカを復元できます。

一貫性

TiFlash は、TiKV と同じスナップショット分離レベルの一貫性を提供し、最新のデータが読み取られることを保証します。つまり、TiKV に以前書き込まれたデータを読み取ることができます。このような一貫性は、データ レプリケーションの進行状況を検証することによって実現されます。

TiFlash が読み取り要求を受信するたびに、リージョンレプリカは進行状況検証要求 (軽量 RPC 要求) をLeaderレプリカに送信します。TiFlashは、現在のレプリケーション進行状況に読み取り要求のタイムスタンプでカバーされるデータが含まれるようになった場合にのみ、読み取り操作を実行します。

賢い選択

TiDB は、 TiFlash (列単位) または TiKV (行単位) の使用を自動的に選択するか、1 つのクエリで両方を使用して最高のパフォーマンスを確保できます。

この選択メカニズムは、クエリを実行するために異なるインデックスを選択する TiDB のメカニズムに似ています。TiDB オプティマイザーは、読み取りコストの統計に基づいて適切な選択を行います。

コンピューティングの高速化

TiFlash は、次の 2 つの方法で TiDB のコンピューティングを高速化します。

  • 列型storageエンジンは読み取り操作の実行がより効率的です。
  • TiFlash はTiDB のコンピューティング ワークロードの一部を共有します。

TiFlash は、TiKVコプロセッサーと同じ方法でコンピューティング ワークロードを共有します。TiDB は、storageレイヤーで完了できるコンピューティングをプッシュダウンします。コンピューティングをプッシュダウンできるかどうかは、 TiFlashのサポートによって異なります。詳細については、 サポートされているプッシュダウン計算参照してください。

TiFlashを使用する

TiFlashを展開した後、データのレプリケーションは自動的に開始されません。レプリケートするテーブルを手動で指定する必要があります。

TiDB を使用して、分析処理のためにTiFlashレプリカを読み取ることができます。詳細については、次のセクションを参照してください。

参照

このページは役に立ちましたか?