これは、なにをしたくて書いたもの?
TiDBのアーキテクチャーをざっくりと把握しようという、このあたりの続きです。
※最初のエントリーがこのシリーズのインデックスページにもなっています
TiDBのアーキテクチャーをざっくりと眺めてみる(全体概要、ストレージ概要まで) - CLOVER🍀
TiDBのアーキテクチャーをざっくりと眺めてみる(コンピューティング概要) - CLOVER🍀
TiDBのアーキテクチャーをざっくりと眺めてみる(ストレージエンジン概要:TiKV編) - CLOVER🍀
今回扱うのは、ストレージエンジンのひとつであるTiFlashです。
TiFlash
TiFlashについて書かれたページはこちら。
TiFlashはTiDBを本質的にトランザクション処理/分析処理ができるハイブリッドなデータベース(HTAP)にしている重要なコンポーネントです。
TiFlashはTiKVの列指向のストレージ拡張機能として提供されていて、優れた分離レベルと強い一貫性保証の両方を提供します。
TiFlash is the key component that makes TiDB essentially an Hybrid Transactional/Analytical Processing (HTAP) database. As a columnar storage extension of TiKV, TiFlash provides both good isolation level and strong consistency guarantee.
また、TiFlashでは列のレプリカはRaft Learnerコンセンサスアルゴリズムによって非同期に複製されます。
これらのレプリカが読み取られた時には、RaftインデックスとMVCCを検証することでスナップショット分離レベルの一貫性を実現します。
In TiFlash, the columnar replicas are asynchronously replicated according to the Raft Learner consensus algorithm. When these replicas are read, the Snapshot Isolation level of consistency is achieved by validating Raft index and multi-version concurrency control (MVCC).
アーキテクチャー
TiFlashのアーキテクチャーです。
TiFlash Overview / Architecture
全体像はこちら。
まとめると、こんな感じのようです。
- ClickHouseによって効率的に実装されたコプロセッサーのレイヤーを備えた列指向のストレージを提供
- TiKVと同様にMulti-Raftシステムを備え、リージョン単位でのデータのレプリケーションと分散をサポート
- TiKVへの書き込みをブロックしない低コストな方法で、TiKVノードのデータのリアルタイムレプリケーションを実行
- TiKVと同じ読み取り一貫性を提供し、最新のデータが読み取られることを保証
- TiFlashのリージョンレプリカはTiKVのリージョンレプリカと本質的に同じで、TiKVのリーダーレプリカと同時に分割および結合が行われる
- ワークロードが異なるため、TiFlashとTiKVは別のノードにデプロイすることを推奨
- 同一ノードにデプロイすることも可能
- TiFlashに直接データを書き込むことはできず、TiKVにデータを書き込んだ後にTiFlashにレプリケーションすることになる
- 列指向のストレージ、tiflash proxy、pd buddyの3つのコンポーネントで構成される
- tiflash proxyはMulti-Raftコンセンサスアルゴリズムを使用した通信を担当
- pd buddyはPDと連携してテーブル単位でTiKVからデータを複製する
- レプリケーション開始の流れ
主な特徴
TiFlashの主な特徴についてです。
TiFlash Overview / Key features
- 非同期レプリケーション
- TiFlash内のレプリカは、特殊なロールであるRaft Learnerとして非同期に複製される
- たとえばTiFlashノードがダウンする、ネットワークが遅延するなどがあっても、TiKV内のアプリケーションは正常に処理を継続できる
- TiFlash Overview / Key features / Asynchronous replication
- 一貫性
- 賢い選択
- TiDBはあるクエリーでTiFlash(列指向)、TiKV(行指向)あるいは両方を自動的に選択して、最高のパフォーマンスを確保する
- このメカニズムはクエリーの実行で異なるインデックスを選択するTiDBのメカニズムによく似ており、TiDBのオプティマイザーは読み取りコストの統計情報にもとづいて適切な選択を行う
- TiFlash Overview / Key features / Intelligent choice
- コンピューティングの高速化
- TiFlashは、列指向ストレージエンジンの特徴である読み取りの効率化と、TiDBのコンピューティングワークロードの一部を共有することでコンピューティングを高速化する
- TiFlash Overview / Key features / Computing acceleration
非同期レプリケーションについて少し補足すると、この仕組みのおかげでTiKVにデータが残っている限りいつでもTiFlashレプリカを復元できる
ことになります。
また、コンピューティングの高速化においては、TiKVでも行っていたコプロセッサーを使う方法でコンピューティングワークロードを共有すると
されています。コンピューティングをプッシュダウンできるかどうかは、TiFlashのサポート内容によって異なるようです。
TiFlashを使用する
TiFlashは、デプロイしてもデータのレプリケーションを自動で開始しません。レプリケーションするテーブルを手動で指定する必要があります。
TiFlash Overview / Use TiFlash
TiFlashのデータを読み取るには、中規模の分析処理であればTiDBを使ってもよいですし、大規模な分析を行いたい場合はTiSparkを使うのも
よいとされています。MPPモードを使用することもできます。
おわりに
TiDBのアーキテクチャーのうち、TiFlashストレージエンジンを見てみました。
最初に使った時にある程度雰囲気はわかっていましたが、あらためて仕組み(といっても概要ですが)を見てみた感じです。
TiDBにおけるHTAPというものはこういうものなんだな、というのが少し学べた気がします。