重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

TiKVの概要

TiKVは、分散型のトランザクション型キーバリューデータベースであり、トランザクションAPIにACID準拠を提供します。 RocksDBに格納されているRaftコンセンサスアルゴリズムおよびコンセンサス状態の実装により、TiKVは複数のレプリカ間のデータの一貫性と高可用性を保証します。 TiKVは、TiDB分散データベースのストレージレイヤーとして、読み取りおよび書き込みサービスを提供し、アプリケーションからの書き込みデータを永続化します。また、TiDBクラスタの統計データも保存されます。

アーキテクチャの概要

TiKVは、GoogleSpannerの設計に基づいてマルチラフトグループレプリカメカニズムを実装します。リージョンは、Key-Valueデータ移動の基本単位であり、ストア内のデータ範囲を指します。各リージョンは複数のノードに複製されます。これらの複数のレプリカは、Raftグループを形成します。リージョンのレプリカはピアと呼ばれます。通常、リージョンには3つのピアがあります。そのうちの1つは、読み取りおよび書き込みサービスを提供するリーダーです。 PDコンポーネントは、すべてのリージョンのバランスを自動的に取り、TiKVクラスタのすべてのノード間で読み取りと書き込みのスループットのバランスが取れていることを保証します。 PDと慎重に設計されたRaftグループにより、TiKVは水平方向のスケーラビリティに優れており、100TBを超えるデータを格納するように簡単に拡張できます。

TiKV Architecture

リージョンとRocksDB

各ストア内にRocksDBデータベースがあり、ローカルディスクにデータを保存します。すべてのリージョンデータは、各ストアの同じRocksDBインスタンスに保存されます。 Raftコンセンサスアルゴリズムに使用されるすべてのログは、各ストアの別のRocksDBインスタンスに保存されます。これは、シーケンシャルI/OのパフォーマンスがランダムI/Oよりも優れているためです。いかだログとリージョンデータを格納するさまざまなRocksDBインスタンスを使用して、TiKVはいかだログとTiKVリージョンのすべてのデータ書き込み操作を1つのI / O操作に結合して、パフォーマンスを向上させます。

リージョンとRaftコンセンサスアルゴリズム

リージョンのレプリカ間のデータの一貫性は、 Raftによって保証されています。リージョンのリーダーのみが書き込みサービスを提供でき、データがリージョンのレプリカの大部分に書き込まれた場合にのみ、書き込み操作が成功します。

リージョンのサイズがしきい値(デフォルトでは144 MB)を超えると、TiKVはそれを2つ以上のリージョンに分割します。この操作により、クラスタのすべてのリージョンのサイズがほぼ同じになることが保証され、PDコンポーネントがTiKVクラスタのノード間でリージョンのバランスを取るのに役立ちます。リージョンのサイズがしきい値よりも小さい場合、TiKVは2つの小さい隣接するリージョンを1つのリージョンにマージします。

PDがレプリカをあるTiKVノードから別のノードに移動すると、最初にターゲットノードに学習者レプリカが追加されます。学習者レプリカのデータがリーダーレプリカのデータとほぼ同じになった後、PDはそれをフォロワーレプリカに変更して削除します。ソースノードのフォロワーレプリカ。

リーダーレプリカをあるノードから別のノードに移動する場合も、同様のメカニズムがあります。違いは、学習者のレプリカがフォロワーのレプリカになった後、フォロワーのレプリカがリーダーとして自分自身を選出するための選挙を積極的に提案する「リーダーの転送」操作があることです。最後に、新しいリーダーはソースノードの古いリーダーレプリカを削除します。

分散トランザクション

TiKVは分散トランザクションをサポートしています。ユーザー(またはTiDB)は、同じリージョンに属しているかどうかを気にすることなく、複数のキーと値のペアを書き込むことができます。 TiKVは、2フェーズコミットを使用してACID制約を実現します。詳細については、 TiDBオプティミスティックトランザクションモデルを参照してください。

TiKVコプロセッサー

TiDBは、一部のデータ計算ロジックをTiKVコプロセッサーにプッシュします。 TiKVコプロセッサーは、各リージョンの計算を処理します。 TiKVコプロセッサーに送信される各要求には、1つのリージョンのデータのみが含まれます。